XiaoMi / soar

SQL Optimizer And Rewriter
Apache License 2.0
8.67k stars 1.32k forks source link

heuristic rules that ref blingbling #127

Closed martianzhang closed 5 years ago

martianzhang commented 5 years ago

Feature Description

Reference blingbling, SOAR should add these heuristic rules.

Use Case(s)

--rule-allow-delete-has-join            是否允许DELETE语句中使用JOIN. 默认: false
--rule-allow-delete-has-sub-clause      是否允许DELETE语句中使用子查询. 默认: false
--rule-allow-delete-many-table          是否允许同时删除多个表数据. 默认: false
--rule-allow-full-text                  是否允许使用全文索引. 默认: false
--rule-allow-update-has-join            是否允许UPDATE语句中使用JOIN. 默认: false
--rule-allow-update-has-sub-clause      是否允许UPDATE语句中使用子查询. 默认: false
--rule-collate string                   通用允许的collate, 默认(多个用逗号隔开) (default "utf8_general_ci,utf8mb4_general_ci")
--rule-insert-rows int                  每批允许 insert 的行数 (default 1000)
--rule-text-type-column-count int       允许使用text/blob字段个数. 如果在rule-not-allow-column-type相关text字段.该参数将不其作用 (default 2)
--rule-not-allow-column-type string     不允许的字段类型, 至此的类型: decimal, tinyint, smallint, int, float, double, timestamp, bigint, mediumint, date, time, datetime, year, newdate, varchar, bit, json, newdecimal, enum, set, tinyblob, mediumblob, longblob, blob, tinytext, mediumtext, longtext, text, geometry (default "tinytext,mediumtext,logtext,tinyblob,mediumblob,longblob")

Thanks to @daiguadaidai

daiguadaidai commented 5 years ago

not thanks me, we should thanks PingCap。ha~~~

martianzhang commented 5 years ago

6f6f804bcf5179ad16f949dbb7cc295f7d324ffe support --rule-insert-rows

martianzhang commented 5 years ago

JOI.007 should be

--rule-allow-delete-many-table          是否允许同时删除多个表数据. 默认: false
martianzhang commented 5 years ago

5eb250bb8d8b8e94d63d74b3f00457cd2b4b5e8a

--rule-collate string                   通用允许的collate, 默认(多个用逗号隔开) (default "utf8_general_ci,utf8mb4_general_ci")
martianzhang commented 5 years ago

a90d20648804b8d4540d72f7eb1a8f932daa3b48

--rule-text-type-column-count int       允许使用text/blob字段个数. 如果在rule-not-allow-column-type相关text字段.该参数将不其作用 (default 2)
martianzhang commented 5 years ago

COL.018 建表语句中使用了不推荐的字段类型

--rule-not-allow-column-type string     不允许的字段类型, 至此的类型: decimal, tinyint, smallint, int, float, double, timestamp, bigint, mediumint, date, time, datetime, year, newdate, varchar, bit, json, newdecimal, enum, set, tinyblob, mediumblob, longblob, blob, tinytext, mediumtext, longtext, text, geometry (default "tinytext,mediumtext,logtext,tinyblob,mediumblob,longblob")
martianzhang commented 5 years ago

如下启发式建议没有很好的理论支持或业内公识,暂不会在SOAR中合并。

--rule-allow-after-clause               是否允许after子句. 默认: true (default true)
--rule-allow-change-column              是否允许Alter Change子句. 默认: true (default true)
--rule-allow-insert-ignore              是否允许 INSERT IGNORE 语句. 默认: true (default true)
--rule-allow-insert-replace             是否允许 INSERT REPLACE 语句. 默认: true (default true)
--rule-allow-insert-select              是否允许 INSERT SELECT 语句. 默认: true (default true)
--rule-allow-rename-index               是否允许重命名索引. 默认: true (default true)
--rule-allow-rename-table               是否允许重命名表, 默认: true (default true)
--rule-have-column-name string          必须要的字段, 默认(多个用逗号隔开)
--rule-need-default-value-name string   必须要有默认值的字段名, 默认(多个用逗号隔开) (default "created_at,updated_at,create_time,update_time,create_at,update_at,created_time,updated_time")
--rule-need-index-column-name string    必须要有索引的字段名, 默认(多个用逗号隔开) (default "created_at,updated_at,create_time,update_time,create_at,update_at,created_time,updated_time")
--rule-not-null-column-name string      必须为not null 的索引名, 默认(多个用逗号隔开) (default "created_at,updated_at,create_time,update_time,create_at,update_at,created_time,updated_time")
--rule-not-null-column-type string      必须为not null的字段类型, 默认(多个用逗号隔开). 可填写的类型有: decimal, tinyint, smallint, int, float, double, timestamp, bigint, mediumint, date, time, datetime, year, newdate, varchar, bit, json, newdecimal, enum, set, tinyblob, mediumblob, longblob, blob, tinytext, mediumtext, longtext, text, geometry (default "varchar")