BEGIN
DECLARE Done INT DEFAULT 0;
DECLARE v_tablename VARCHAR(50);
DECLARE rs CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'wd' AND TABLE_NAME REGEXP '^(page_).*_.*';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done=1;
OPEN rs;
FETCH NEXT FROM rs INTO v_tablename;
REPEAT
IF NOT Done THEN
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " ADD `creatTime` varchar (30) GENERATED ALWAYS AS (replace(json_extract(info, '$.creatTime' ),'\"','' ) ) VIRTUAL");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " ADD `lastScanTime` varchar (30) GENERATED ALWAYS AS (replace(json_extract(info, '$.lastScanTime' ),'\"','') ) VIRTUAL");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " ADD `statusCode` INT(6) GENERATED ALWAYS AS (json_extract(info, '$.statusCode' )) VIRTUAL");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " ADD `pageType` varchar(15) GENERATED ALWAYS AS (replace(json_extract(info, '$.pageType' ),'\"','') ) VIRTUAL");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("CREATE INDEX idx_createTime ON " , v_tablename , "(creatTime)");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("CREATE INDEX idx_lastScanTime ON ",v_tablename,"(lastScanTime)");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("CREATE INDEX idx_statusCode ON " , v_tablename , "(statusCode)");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
set @sqllang = CONCAT("CREATE INDEX idx_pageType ON " , v_tablename , "(pageType)");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
END IF;
FETCH NEXT FROM rs INTO v_tablename;
UNTIL Done END REPEAT;
CLOSE rs;
end
CREATE DEFINER = 'root'@'%'
PROCEDURE wd.dropColumnAndIndex()
BEGIN
DECLARE Done INT DEFAULT 0;
DECLARE v_tablename VARCHAR(50);
DECLARE v_row int DEFAULT 0;
DECLARE rs CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'wd' AND TABLE_NAME REGEXP '^(page_).*_.*';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done=1;
OPEN rs;
FETCH NEXT FROM rs INTO v_tablename;
REPEAT
IF NOT Done THEN
set @sqllang = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_createTime'");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " DROP INDEX `idx_createTime` ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_lastScanTime'");
PREPARE stmt FROM @sqlexist;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " DROP INDEX `idx_lastScanTime` ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_statusCode'");
PREPARE stmt FROM @sqlexist;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " DROP INDEX `idx_statusCode` ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'creatTime'");
PREPARE stmt FROM @sqlexist;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " drop column creatTime ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'lastScanTime'");
PREPARE stmt FROM @sqlexist;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " DROP COLUMN lastScanTime ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'statusCode'");
PREPARE stmt FROM @sqlexist;
EXECUTE stmt;
if (@row > 0) then
set @sqllang = CONCAT("ALTER TABLE " , v_tablename , " DROP COLUMN statusCode ");
PREPARE stmt FROM @sqllang;
EXECUTE stmt;
end if;
END IF;
FETCH NEXT FROM rs INTO v_tablename;
UNTIL Done END REPEAT;
CLOSE rs;
end