Documentation ¶
Overview ¶
Package advisor contain heuristic rules, index rules and explain translator.
Index ¶
- Constants
- Variables
- func CompleteColumnsInfo(stmt sqlparser.Statement, cols []*common.Column, env *env.VirtualEnv) []*common.Column
- func DigestExplainText(text string)
- func DuplicateKeyChecker(conn *database.Connector, databases ...string) map[string]Rule
- func ExplainAdvisor(exp *database.ExplainInfo) map[string]Rule
- func FormatSuggest(sql string, currentDB string, format string, suggests ...map[string]Rule) (map[string]Rule, string)
- func InBlackList(sql string) bool
- func IsIgnoreRule(item string) bool
- func ListHeuristicRules(rules ...map[string]Rule)
- func ListTestSQLs()
- func MergeConflictHeuristicRules(rules map[string]Rule) map[string]Rule
- type IndexAdvises
- type IndexAdvisor
- func (idxAdv *IndexAdvisor) HeuristicCheck(q Query4Audit) map[string]Rule
- func (idxAdv *IndexAdvisor) IndexAdvise() IndexAdvises
- func (idxAdv *IndexAdvisor) RuleGroupByConst() Rule
- func (idxAdv *IndexAdvisor) RuleImplicitConversion() Rule
- func (idxAdv *IndexAdvisor) RuleImpossibleOuterJoin() Rule
- func (idxAdv *IndexAdvisor) RuleMaxTextColsCount() Rule
- func (idxAdv *IndexAdvisor) RuleOrderByConst() Rule
- func (idxAdv *IndexAdvisor) RuleUpdateOnUpdate() Rule
- func (idxAdv *IndexAdvisor) RuleUpdatePrimaryKey() Rule
- type IndexInfo
- type JSONSuggest
- type Query4Audit
- func (q *Query4Audit) RuleAddDefaultValue() Rule
- func (q *Query4Audit) RuleAddDelimiter() Rule
- func (q *Query4Audit) RuleAllowEngine() Rule
- func (q *Query4Audit) RuleAlterCharset() Rule
- func (q *Query4Audit) RuleAlterDropColumn() Rule
- func (q *Query4Audit) RuleAlterDropKey() Rule
- func (q *Query4Audit) RuleAutoIncUnsigned() Rule
- func (q *Query4Audit) RuleAutoIncrementInitNotZero() Rule
- func (q *Query4Audit) RuleBLOBNotNull() Rule
- func (q *Query4Audit) RuleBlobDefaultValue() Rule
- func (q *Query4Audit) RuleColCommentCheck() Rule
- func (q *Query4Audit) RuleColumnNotAllowType() Rule
- func (q *Query4Audit) RuleColumnWithCharset() Rule
- func (q *Query4Audit) RuleCommaAnsiJoin() Rule
- func (q *Query4Audit) RuleCompareWithFunction() Rule
- func (q *Query4Audit) RuleCountConst() Rule
- func (q *Query4Audit) RuleCountDistinctMultiCol() Rule
- func (q *Query4Audit) RuleCountStar() Rule
- func (q *Query4Audit) RuleCreateDualTable() Rule
- func (q *Query4Audit) RuleCreateOnUpdate() Rule
- func (q *Query4Audit) RuleDataDrop() Rule
- func (q *Query4Audit) RuleDataNotQuote() Rule
- func (q *Query4Audit) RuleDiffGroupByOrderBy() Rule
- func (q *Query4Audit) RuleDistinctJoinUsage() Rule
- func (q *Query4Audit) RuleDistinctStar() Rule
- func (q *Query4Audit) RuleDistinctUsage() Rule
- func (q *Query4Audit) RuleDupJoin() Rule
- func (q *Query4Audit) RuleEqualLike() Rule
- func (q *Query4Audit) RuleExplicitOrderBy() Rule
- func (q *Query4Audit) RuleForbiddenFunction() Rule
- func (q *Query4Audit) RuleForbiddenProcedure() Rule
- func (q *Query4Audit) RuleForbiddenTempTable() Rule
- func (q *Query4Audit) RuleForbiddenTrigger() Rule
- func (q *Query4Audit) RuleForbiddenView() Rule
- func (q *Query4Audit) RuleFullWidthQuote() Rule
- func (q *Query4Audit) RuleFulltextIndex() Rule
- func (q *Query4Audit) RuleGroupByConst() Rule
- func (q *Query4Audit) RuleGroupByExpr() Rule
- func (q *Query4Audit) RuleHavingClause() Rule
- func (q *Query4Audit) RuleHint() Rule
- func (q *Query4Audit) RuleIPString() Rule
- func (q *Query4Audit) RuleIdxPrefix() Rule
- func (q *Query4Audit) RuleImplicitAlias() Rule
- func (q *Query4Audit) RuleImpossibleWhere() Rule
- func (q *Query4Audit) RuleImpreciseDataType() Rule
- func (q *Query4Audit) RuleIn() Rule
- func (q *Query4Audit) RuleInSubquery() Rule
- func (q *Query4Audit) RuleIndexAttributeOrder() Rule
- func (q *Query4Audit) RuleInjection() Rule
- func (q *Query4Audit) RuleInsertColDef() Rule
- func (q *Query4Audit) RuleInsertOnDup() Rule
- func (q *Query4Audit) RuleInsertSelect() Rule
- func (q *Query4Audit) RuleInsertValues() Rule
- func (q *Query4Audit) RuleIntPrecision() Rule
- func (q *Query4Audit) RuleInvisibleUnicode() Rule
- func (q *Query4Audit) RuleIsNullIsNotNull() Rule
- func (q *Query4Audit) RuleLoadFile() Rule
- func (q *Query4Audit) RuleMaxTextColsCount() Rule
- func (q *Query4Audit) RuleMeaninglessWhere() Rule
- func (q *Query4Audit) RuleMixOrderBy() Rule
- func (q *Query4Audit) RuleMultiBytesWord() Rule
- func (q *Query4Audit) RuleMultiCompare() Rule
- func (q *Query4Audit) RuleMultiDBJoin() Rule
- func (q *Query4Audit) RuleMultiDeleteUpdate() Rule
- func (q *Query4Audit) RuleMultiValueAttribute() Rule
- func (q *Query4Audit) RuleNestedSubQueries() Rule
- func (q *Query4Audit) RuleNoDeterministicGroupby() Rule
- func (q *Query4Audit) RuleNoDeterministicLimit() Rule
- func (q *Query4Audit) RuleNoOSCKey() Rule
- func (q *Query4Audit) RuleNoWhere() Rule
- func (q *Query4Audit) RuleNot() Rule
- func (q *Query4Audit) RuleNullUsage() Rule
- func (q *Query4Audit) RuleOK() Rule
- func (q *Query4Audit) RuleORUsage() Rule
- func (q *Query4Audit) RuleOffsetLimit() Rule
- func (q *Query4Audit) RuleOrderByConst() Rule
- func (q *Query4Audit) RuleOrderByExpr() Rule
- func (q *Query4Audit) RuleOrderByMultiDirection() Rule
- func (q *Query4Audit) RuleOrderByRand() Rule
- func (q *Query4Audit) RulePKNotInt() Rule
- func (q *Query4Audit) RulePartitionNotAllowed() Rule
- func (q *Query4Audit) RulePatternMatchingUsage() Rule
- func (q *Query4Audit) RulePluralWord() Rule
- func (q *Query4Audit) RulePrefixLike() Rule
- func (q *Query4Audit) RuleReadablePasswords() Rule
- func (q *Query4Audit) RuleRecursiveDependency() Rule
- func (q *Query4Audit) RuleReduceNumberOfJoin() Rule
- func (q *Query4Audit) RuleSQLCalcFoundRows() Rule
- func (q *Query4Audit) RuleSameAlias() Rule
- func (q *Query4Audit) RuleSelectStar() Rule
- func (q *Query4Audit) RuleSpaceAfterDot() Rule
- func (q *Query4Audit) RuleSpaceWithQuote() Rule
- func (q *Query4Audit) RuleSpaghettiQueryAlert() Rule
- func (q *Query4Audit) RuleStandardINEQ() Rule
- func (q *Query4Audit) RuleStandardName() Rule
- func (q *Query4Audit) RuleStarAlias() Rule
- func (q *Query4Audit) RuleStringConcatenation() Rule
- func (q *Query4Audit) RuleSubQueryFunctions() Rule
- func (q *Query4Audit) RuleSubQueryLimit() Rule
- func (q *Query4Audit) RuleSubqueryDepth() Rule
- func (q *Query4Audit) RuleSumNPE() Rule
- func (q *Query4Audit) RuleSysdate() Rule
- func (q *Query4Audit) RuleTableCharsetCheck() Rule
- func (q *Query4Audit) RuleTableCollateCheck() Rule
- func (q *Query4Audit) RuleTblCommentCheck() Rule
- func (q *Query4Audit) RuleTimePrecision() Rule
- func (q *Query4Audit) RuleTimestampDefault() Rule
- func (q *Query4Audit) RuleTooManyFields() Rule
- func (q *Query4Audit) RuleTooManyKeyParts() Rule
- func (q *Query4Audit) RuleTooManyKeys() Rule
- func (q *Query4Audit) RuleTruncateTable() Rule
- func (q *Query4Audit) RuleUNIONLimit() Rule
- func (q *Query4Audit) RuleUNIONUsage() Rule
- func (q *Query4Audit) RuleUniqueKeyDup() Rule
- func (q *Query4Audit) RuleUpdateDeleteWithLimit() Rule
- func (q *Query4Audit) RuleUpdateDeleteWithOrderby() Rule
- func (q *Query4Audit) RuleUpdateSetAnd() Rule
- func (q *Query4Audit) RuleUseKeyWord() Rule
- func (q *Query4Audit) RuleValuesInDefinition() Rule
- func (q *Query4Audit) RuleVarcharLength() Rule
- func (q *Query4Audit) RuleVarcharVSChar() Rule
- type Rule
Constants ¶
const (
// IndexNameMaxLength Ref. https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
IndexNameMaxLength = 64
)
Variables ¶
var HeuristicRules map[string]Rule
HeuristicRules 启发式规则列表
Functions ¶
func CompleteColumnsInfo ¶
func CompleteColumnsInfo(stmt sqlparser.Statement, cols []*common.Column, env *env.VirtualEnv) []*common.Column
CompleteColumnsInfo 补全索引可能会用到列的所属库名、表名等信息
func DuplicateKeyChecker ¶
DuplicateKeyChecker 对所有用到的库表检查是否存在重复索引
func ExplainAdvisor ¶
func ExplainAdvisor(exp *database.ExplainInfo) map[string]Rule
ExplainAdvisor 基于explain信息给出建议
func FormatSuggest ¶
func FormatSuggest(sql string, currentDB string, format string, suggests ...map[string]Rule) (map[string]Rule, string)
FormatSuggest 格式化输出优化建议
func InBlackList ¶
InBlackList 判断一条请求是否在黑名单列表中 如果在返回true,表示不需要评审 注意这里没有做指纹判断,是否用指纹在这个函数的外面处理
func IsIgnoreRule ¶
IsIgnoreRule 判断是否是过滤规则 支持XXX*前缀匹配,OK规则不可设置过滤
func ListHeuristicRules ¶
ListHeuristicRules 打印支持的启发式规则,对应命令行参数-list-heuristic-rules
Types ¶
type IndexAdvises ¶
type IndexAdvises []IndexInfo
IndexAdvises IndexAdvises列表
func (IndexAdvises) Format ¶
func (idxAdvs IndexAdvises) Format() map[string]Rule
Format 用于格式化输出索引建议
type IndexAdvisor ¶
type IndexAdvisor struct { Ast sqlparser.Statement // Vitess Parser生成的抽象语法树 IndexMeta map[string]map[string]*database.TableIndexInfo // contains filtered or unexported fields }
IndexAdvisor 索引建议需要使用到的所有信息
func NewAdvisor ¶
func NewAdvisor(env *env.VirtualEnv, rEnv database.Connector, q Query4Audit) (*IndexAdvisor, error)
NewAdvisor 构造一个 IndexAdvisor 的时候就会对其本身结构初始化 获取 condition 中的等值条件、非等值条件,以及group by 、 order by信息
func (*IndexAdvisor) HeuristicCheck ¶
func (idxAdv *IndexAdvisor) HeuristicCheck(q Query4Audit) map[string]Rule
HeuristicCheck 依赖数据字典的启发式检查 IndexAdvisor会构建测试环境和数据字典,所以放在这里实现
func (*IndexAdvisor) IndexAdvise ¶
func (idxAdv *IndexAdvisor) IndexAdvise() IndexAdvises
IndexAdvise 索引优化建议算法入口主函数 TODO 索引顺序该如何确定
func (*IndexAdvisor) RuleGroupByConst ¶
func (idxAdv *IndexAdvisor) RuleGroupByConst() Rule
RuleGroupByConst GRP.001
func (*IndexAdvisor) RuleImplicitConversion ¶
func (idxAdv *IndexAdvisor) RuleImplicitConversion() Rule
RuleImplicitConversion ARG.003 隐式类型转换检查:该项检查一定是在开启测试环境或线上环境情境下下进行的
func (*IndexAdvisor) RuleImpossibleOuterJoin ¶
func (idxAdv *IndexAdvisor) RuleImpossibleOuterJoin() Rule
RuleImpossibleOuterJoin JOI.003 TODO: 未实现完
func (*IndexAdvisor) RuleMaxTextColsCount ¶
func (idxAdv *IndexAdvisor) RuleMaxTextColsCount() Rule
RuleMaxTextColsCount COL.007 checking for existed table
func (*IndexAdvisor) RuleOrderByConst ¶
func (idxAdv *IndexAdvisor) RuleOrderByConst() Rule
RuleOrderByConst CLA.005 TODO: SELECT col FROM tbl WHERE col IN('NEWS') ORDER BY col;
func (*IndexAdvisor) RuleUpdateOnUpdate ¶
func (idxAdv *IndexAdvisor) RuleUpdateOnUpdate() Rule
RuleUpdateOnUpdate RES.011
func (*IndexAdvisor) RuleUpdatePrimaryKey ¶
func (idxAdv *IndexAdvisor) RuleUpdatePrimaryKey() Rule
RuleUpdatePrimaryKey CLA.016
type IndexInfo ¶
type IndexInfo struct { Name string `json:"name"` // 索引名称 Database string `json:"database"` // 数据库名 Table string `json:"table"` // 表名 DDL string `json:"ddl"` // ALTER, CREATE 等类型的 DDL 语句 ColumnDetails []*common.Column `json:"column_details"` // 列详情 }
IndexInfo 创建一条索引需要的信息
type JSONSuggest ¶
type JSONSuggest struct { ID string `json:"ID"` Fingerprint string `json:"Fingerprint"` Score int `json:"Score"` Sample string `json:"Sample"` Explain []Rule `json:"Explain"` HeuristicRules []Rule `json:"HeuristicRules"` IndexRules []Rule `json:"IndexRules"` Tables []string `json:"Tables"` }
JSONSuggest json format suggestion
type Query4Audit ¶
type Query4Audit struct { Query string // 查询语句 Stmt sqlparser.Statement // 通过Vitess解析出的抽象语法树 TiStmt []tidb.StmtNode // 通过TiDB解析出的抽象语法树 }
Query4Audit 待评审的SQL结构体,由原SQL和其对应的抽象语法树组成
func NewQuery4Audit ¶
func NewQuery4Audit(sql string, options ...string) (*Query4Audit, error)
NewQuery4Audit return a struct for Query4Audit
func (*Query4Audit) RuleAddDefaultValue ¶
func (q *Query4Audit) RuleAddDefaultValue() Rule
RuleAddDefaultValue COL.004
func (*Query4Audit) RuleAddDelimiter ¶
func (q *Query4Audit) RuleAddDelimiter() Rule
RuleAddDelimiter LIT.004
func (*Query4Audit) RuleAllowEngine ¶
func (q *Query4Audit) RuleAllowEngine() Rule
RuleAllowEngine TBL.002
func (*Query4Audit) RuleAlterCharset ¶
func (q *Query4Audit) RuleAlterCharset() Rule
RuleAlterCharset ALT.001
func (*Query4Audit) RuleAlterDropColumn ¶
func (q *Query4Audit) RuleAlterDropColumn() Rule
RuleAlterDropColumn ALT.003
func (*Query4Audit) RuleAlterDropKey ¶
func (q *Query4Audit) RuleAlterDropKey() Rule
RuleAlterDropKey ALT.004
func (*Query4Audit) RuleAutoIncUnsigned ¶
func (q *Query4Audit) RuleAutoIncUnsigned() Rule
RuleAutoIncUnsigned COL.003:
func (*Query4Audit) RuleAutoIncrementInitNotZero ¶
func (q *Query4Audit) RuleAutoIncrementInitNotZero() Rule
RuleAutoIncrementInitNotZero TBL.004
func (*Query4Audit) RuleBLOBNotNull ¶
func (q *Query4Audit) RuleBLOBNotNull() Rule
RuleBLOBNotNull COL.012
func (*Query4Audit) RuleBlobDefaultValue ¶
func (q *Query4Audit) RuleBlobDefaultValue() Rule
RuleBlobDefaultValue COL.015
func (*Query4Audit) RuleColCommentCheck ¶
func (q *Query4Audit) RuleColCommentCheck() Rule
RuleColCommentCheck COL.005
func (*Query4Audit) RuleColumnNotAllowType ¶
func (q *Query4Audit) RuleColumnNotAllowType() Rule
RuleColumnNotAllowType COL.018
func (*Query4Audit) RuleColumnWithCharset ¶
func (q *Query4Audit) RuleColumnWithCharset() Rule
RuleColumnWithCharset COL.014
func (*Query4Audit) RuleCommaAnsiJoin ¶
func (q *Query4Audit) RuleCommaAnsiJoin() Rule
RuleCommaAnsiJoin JOI.001
func (*Query4Audit) RuleCompareWithFunction ¶
func (q *Query4Audit) RuleCompareWithFunction() Rule
RuleCompareWithFunction FUN.001
func (*Query4Audit) RuleCountConst ¶
func (q *Query4Audit) RuleCountConst() Rule
RuleCountConst FUN.005
func (*Query4Audit) RuleCountDistinctMultiCol ¶
func (q *Query4Audit) RuleCountDistinctMultiCol() Rule
RuleCountDistinctMultiCol DIS.002
func (*Query4Audit) RuleCountStar ¶
func (q *Query4Audit) RuleCountStar() Rule
RuleCountStar FUN.002
func (*Query4Audit) RuleCreateDualTable ¶
func (q *Query4Audit) RuleCreateDualTable() Rule
RuleCreateDualTable TBL.003
func (*Query4Audit) RuleCreateOnUpdate ¶
func (q *Query4Audit) RuleCreateOnUpdate() Rule
RuleCreateOnUpdate RES.010
func (*Query4Audit) RuleDataNotQuote ¶
func (q *Query4Audit) RuleDataNotQuote() Rule
RuleDataNotQuote LIT.002
func (*Query4Audit) RuleDiffGroupByOrderBy ¶
func (q *Query4Audit) RuleDiffGroupByOrderBy() Rule
RuleDiffGroupByOrderBy CLA.006
func (*Query4Audit) RuleDistinctJoinUsage ¶
func (q *Query4Audit) RuleDistinctJoinUsage() Rule
RuleDistinctJoinUsage SUB.003
func (*Query4Audit) RuleDistinctStar ¶
func (q *Query4Audit) RuleDistinctStar() Rule
RuleDistinctStar DIS.003
func (*Query4Audit) RuleDistinctUsage ¶
func (q *Query4Audit) RuleDistinctUsage() Rule
RuleDistinctUsage DIS.001
func (*Query4Audit) RuleEqualLike ¶
func (q *Query4Audit) RuleEqualLike() Rule
RuleEqualLike ARG.002
func (*Query4Audit) RuleExplicitOrderBy ¶
func (q *Query4Audit) RuleExplicitOrderBy() Rule
RuleExplicitOrderBy CLA.008
func (*Query4Audit) RuleForbiddenFunction ¶
func (q *Query4Audit) RuleForbiddenFunction() Rule
RuleForbiddenFunction FUN.009
func (*Query4Audit) RuleForbiddenProcedure ¶
func (q *Query4Audit) RuleForbiddenProcedure() Rule
RuleForbiddenProcedure FUN.008
func (*Query4Audit) RuleForbiddenTempTable ¶
func (q *Query4Audit) RuleForbiddenTempTable() Rule
RuleForbiddenTempTable TBL.007
func (*Query4Audit) RuleForbiddenTrigger ¶
func (q *Query4Audit) RuleForbiddenTrigger() Rule
RuleForbiddenTrigger FUN.007
func (*Query4Audit) RuleForbiddenView ¶
func (q *Query4Audit) RuleForbiddenView() Rule
RuleForbiddenView TBL.006
func (*Query4Audit) RuleFullWidthQuote ¶
func (q *Query4Audit) RuleFullWidthQuote() Rule
RuleFullWidthQuote ARG.013
func (*Query4Audit) RuleFulltextIndex ¶
func (q *Query4Audit) RuleFulltextIndex() Rule
RuleFulltextIndex KEY.010
func (*Query4Audit) RuleGroupByConst ¶
func (q *Query4Audit) RuleGroupByConst() Rule
RuleGroupByConst CLA.004
func (*Query4Audit) RuleGroupByExpr ¶
func (q *Query4Audit) RuleGroupByExpr() Rule
RuleGroupByExpr CLA.010
func (*Query4Audit) RuleHavingClause ¶
func (q *Query4Audit) RuleHavingClause() Rule
RuleHavingClause CLA.013
func (*Query4Audit) RuleHint ¶
func (q *Query4Audit) RuleHint() Rule
RuleHint ARG.010 TODO: sql_no_cache, straight join
func (*Query4Audit) RuleIdxPrefix ¶
func (q *Query4Audit) RuleIdxPrefix() Rule
RuleIdxPrefix STA.003
func (*Query4Audit) RuleImplicitAlias ¶
func (q *Query4Audit) RuleImplicitAlias() Rule
RuleImplicitAlias ALI.001
func (*Query4Audit) RuleImpossibleWhere ¶
func (q *Query4Audit) RuleImpossibleWhere() Rule
RuleImpossibleWhere RES.006
func (*Query4Audit) RuleImpreciseDataType ¶
func (q *Query4Audit) RuleImpreciseDataType() Rule
RuleImpreciseDataType COL.009
func (*Query4Audit) RuleInSubquery ¶
func (q *Query4Audit) RuleInSubquery() Rule
RuleInSubquery SUB.001
func (*Query4Audit) RuleIndexAttributeOrder ¶
func (q *Query4Audit) RuleIndexAttributeOrder() Rule
RuleIndexAttributeOrder KEY.004
func (*Query4Audit) RuleInjection ¶
func (q *Query4Audit) RuleInjection() Rule
RuleInjection SEC.004
func (*Query4Audit) RuleInsertColDef ¶
func (q *Query4Audit) RuleInsertColDef() Rule
RuleInsertColDef COL.002
func (*Query4Audit) RuleInsertOnDup ¶
func (q *Query4Audit) RuleInsertOnDup() Rule
RuleInsertOnDup LCK.002
func (*Query4Audit) RuleInsertSelect ¶
func (q *Query4Audit) RuleInsertSelect() Rule
RuleInsertSelect LCK.001
func (*Query4Audit) RuleInsertValues ¶
func (q *Query4Audit) RuleInsertValues() Rule
RuleInsertValues ARG.012
func (*Query4Audit) RuleIntPrecision ¶
func (q *Query4Audit) RuleIntPrecision() Rule
RuleIntPrecision COL.016
func (*Query4Audit) RuleInvisibleUnicode ¶
func (q *Query4Audit) RuleInvisibleUnicode() Rule
RuleInvisibleUnicode KWR.005
func (*Query4Audit) RuleIsNullIsNotNull ¶
func (q *Query4Audit) RuleIsNullIsNotNull() Rule
RuleIsNullIsNotNull ARG.006
func (*Query4Audit) RuleMaxTextColsCount ¶
func (q *Query4Audit) RuleMaxTextColsCount() Rule
RuleMaxTextColsCount COL.007
func (*Query4Audit) RuleMeaninglessWhere ¶
func (q *Query4Audit) RuleMeaninglessWhere() Rule
RuleMeaninglessWhere RES.007
func (*Query4Audit) RuleMixOrderBy ¶
func (q *Query4Audit) RuleMixOrderBy() Rule
RuleMixOrderBy CLA.007
func (*Query4Audit) RuleMultiBytesWord ¶
func (q *Query4Audit) RuleMultiBytesWord() Rule
RuleMultiBytesWord KWR.004
func (*Query4Audit) RuleMultiCompare ¶
func (q *Query4Audit) RuleMultiCompare() Rule
RuleMultiCompare RES.009
func (*Query4Audit) RuleMultiDBJoin ¶
func (q *Query4Audit) RuleMultiDBJoin() Rule
RuleMultiDBJoin JOI.008
func (*Query4Audit) RuleMultiDeleteUpdate ¶
func (q *Query4Audit) RuleMultiDeleteUpdate() Rule
RuleMultiDeleteUpdate JOI.007
func (*Query4Audit) RuleMultiValueAttribute ¶
func (q *Query4Audit) RuleMultiValueAttribute() Rule
RuleMultiValueAttribute LIT.003
func (*Query4Audit) RuleNestedSubQueries ¶
func (q *Query4Audit) RuleNestedSubQueries() Rule
RuleNestedSubQueries JOI.006
func (*Query4Audit) RuleNoDeterministicGroupby ¶
func (q *Query4Audit) RuleNoDeterministicGroupby() Rule
RuleNoDeterministicGroupby RES.001
func (*Query4Audit) RuleNoDeterministicLimit ¶
func (q *Query4Audit) RuleNoDeterministicLimit() Rule
RuleNoDeterministicLimit RES.002
func (*Query4Audit) RuleNoWhere ¶
func (q *Query4Audit) RuleNoWhere() Rule
RuleNoWhere CLA.001 & CLA.014 & CLA.015
func (*Query4Audit) RuleNullUsage ¶
func (q *Query4Audit) RuleNullUsage() Rule
RuleNullUsage COL.011
func (*Query4Audit) RuleOffsetLimit ¶
func (q *Query4Audit) RuleOffsetLimit() Rule
RuleOffsetLimit CLA.003
func (*Query4Audit) RuleOrderByConst ¶
func (q *Query4Audit) RuleOrderByConst() Rule
RuleOrderByConst CLA.005
func (*Query4Audit) RuleOrderByExpr ¶
func (q *Query4Audit) RuleOrderByExpr() Rule
RuleOrderByExpr CLA.009
func (*Query4Audit) RuleOrderByMultiDirection ¶
func (q *Query4Audit) RuleOrderByMultiDirection() Rule
RuleOrderByMultiDirection KEY.008
func (*Query4Audit) RuleOrderByRand ¶
func (q *Query4Audit) RuleOrderByRand() Rule
RuleOrderByRand CLA.002
func (*Query4Audit) RulePKNotInt ¶
func (q *Query4Audit) RulePKNotInt() Rule
RulePKNotInt KEY.007 && KEY.001
func (*Query4Audit) RulePartitionNotAllowed ¶
func (q *Query4Audit) RulePartitionNotAllowed() Rule
RulePartitionNotAllowed TBL.001
func (*Query4Audit) RulePatternMatchingUsage ¶
func (q *Query4Audit) RulePatternMatchingUsage() Rule
RulePatternMatchingUsage ARG.007
func (*Query4Audit) RulePluralWord ¶
func (q *Query4Audit) RulePluralWord() Rule
RulePluralWord KWR.003 Reference: https://en.wikipedia.org/wiki/English_plurals
func (*Query4Audit) RulePrefixLike ¶
func (q *Query4Audit) RulePrefixLike() Rule
RulePrefixLike ARG.001
func (*Query4Audit) RuleReadablePasswords ¶
func (q *Query4Audit) RuleReadablePasswords() Rule
RuleReadablePasswords SEC.002
func (*Query4Audit) RuleRecursiveDependency ¶
func (q *Query4Audit) RuleRecursiveDependency() Rule
RuleRecursiveDependency KEY.003
func (*Query4Audit) RuleReduceNumberOfJoin ¶
func (q *Query4Audit) RuleReduceNumberOfJoin() Rule
RuleReduceNumberOfJoin JOI.005
func (*Query4Audit) RuleSQLCalcFoundRows ¶
func (q *Query4Audit) RuleSQLCalcFoundRows() Rule
RuleSQLCalcFoundRows KWR.001
func (*Query4Audit) RuleSameAlias ¶
func (q *Query4Audit) RuleSameAlias() Rule
RuleSameAlias ALI.003
func (*Query4Audit) RuleSelectStar ¶
func (q *Query4Audit) RuleSelectStar() Rule
RuleSelectStar COL.001
func (*Query4Audit) RuleSpaceAfterDot ¶
func (q *Query4Audit) RuleSpaceAfterDot() Rule
RuleSpaceAfterDot STA.002
func (*Query4Audit) RuleSpaceWithQuote ¶
func (q *Query4Audit) RuleSpaceWithQuote() Rule
RuleSpaceWithQuote ARG.009
func (*Query4Audit) RuleSpaghettiQueryAlert ¶
func (q *Query4Audit) RuleSpaghettiQueryAlert() Rule
RuleSpaghettiQueryAlert CLA.012
func (*Query4Audit) RuleStandardINEQ ¶
func (q *Query4Audit) RuleStandardINEQ() Rule
RuleStandardINEQ STA.001
func (*Query4Audit) RuleStandardName ¶
func (q *Query4Audit) RuleStandardName() Rule
RuleStandardName STA.004
func (*Query4Audit) RuleStarAlias ¶
func (q *Query4Audit) RuleStarAlias() Rule
RuleStarAlias ALI.002
func (*Query4Audit) RuleStringConcatenation ¶
func (q *Query4Audit) RuleStringConcatenation() Rule
RuleStringConcatenation FUN.003
func (*Query4Audit) RuleSubQueryFunctions ¶
func (q *Query4Audit) RuleSubQueryFunctions() Rule
RuleSubQueryFunctions SUB.006
func (*Query4Audit) RuleSubQueryLimit ¶
func (q *Query4Audit) RuleSubQueryLimit() Rule
RuleSubQueryLimit SUB.005 只有 IN 的 SUBQUERY 限制了 LIMIT, FROM 子句中的 SUBQUERY 并未限制 LIMIT
func (*Query4Audit) RuleSubqueryDepth ¶
func (q *Query4Audit) RuleSubqueryDepth() Rule
RuleSubqueryDepth SUB.004
func (*Query4Audit) RuleTableCharsetCheck ¶
func (q *Query4Audit) RuleTableCharsetCheck() Rule
RuleTableCharsetCheck TBL.005
func (*Query4Audit) RuleTableCollateCheck ¶
func (q *Query4Audit) RuleTableCollateCheck() Rule
RuleTableCollateCheck TBL.008
func (*Query4Audit) RuleTblCommentCheck ¶
func (q *Query4Audit) RuleTblCommentCheck() Rule
RuleTblCommentCheck CLA.011
func (*Query4Audit) RuleTimePrecision ¶
func (q *Query4Audit) RuleTimePrecision() Rule
RuleTimePrecision COL.019
func (*Query4Audit) RuleTimestampDefault ¶
func (q *Query4Audit) RuleTimestampDefault() Rule
RuleTimestampDefault COL.013
func (*Query4Audit) RuleTooManyFields ¶
func (q *Query4Audit) RuleTooManyFields() Rule
RuleTooManyFields COL.006
func (*Query4Audit) RuleTooManyKeyParts ¶
func (q *Query4Audit) RuleTooManyKeyParts() Rule
RuleTooManyKeyParts KEY.006
func (*Query4Audit) RuleTooManyKeys ¶
func (q *Query4Audit) RuleTooManyKeys() Rule
RuleTooManyKeys KEY.005
func (*Query4Audit) RuleTruncateTable ¶
func (q *Query4Audit) RuleTruncateTable() Rule
RuleTruncateTable SEC.001
func (*Query4Audit) RuleUNIONLimit ¶
func (q *Query4Audit) RuleUNIONLimit() Rule
RuleUNIONLimit SUB.007
func (*Query4Audit) RuleUNIONUsage ¶
func (q *Query4Audit) RuleUNIONUsage() Rule
RuleUNIONUsage SUB.002
func (*Query4Audit) RuleUniqueKeyDup ¶
func (q *Query4Audit) RuleUniqueKeyDup() Rule
RuleUniqueKeyDup KEY.009 TODO: 目前只是给建议,期望能够实现自动检查
func (*Query4Audit) RuleUpdateDeleteWithLimit ¶
func (q *Query4Audit) RuleUpdateDeleteWithLimit() Rule
RuleUpdateDeleteWithLimit RES.003
func (*Query4Audit) RuleUpdateDeleteWithOrderby ¶
func (q *Query4Audit) RuleUpdateDeleteWithOrderby() Rule
RuleUpdateDeleteWithOrderby RES.004
func (*Query4Audit) RuleUpdateSetAnd ¶
func (q *Query4Audit) RuleUpdateSetAnd() Rule
RuleUpdateSetAnd RES.005
func (*Query4Audit) RuleUseKeyWord ¶
func (q *Query4Audit) RuleUseKeyWord() Rule
RuleUseKeyWord KWR.002
func (*Query4Audit) RuleValuesInDefinition ¶
func (q *Query4Audit) RuleValuesInDefinition() Rule
RuleValuesInDefinition COL.010
func (*Query4Audit) RuleVarcharLength ¶
func (q *Query4Audit) RuleVarcharLength() Rule
RuleVarcharLength COL.017
func (*Query4Audit) RuleVarcharVSChar ¶
func (q *Query4Audit) RuleVarcharVSChar() Rule
RuleVarcharVSChar COL.008
type Rule ¶
type Rule struct { Item string `json:"Item"` // 规则代号 Severity string `json:"Severity"` // 危险等级:L[0-8], 数字越大表示级别越高 Summary string `json:"Summary"` // 规则摘要 Content string `json:"Content"` // 规则解释 Case string `json:"Case"` // SQL示例 Position int `json:"Position"` // 建议所处SQL字符位置,默认0表示全局建议 Func func(*Query4Audit) Rule `json:"-"` // 函数名 }
Rule 评审规则元数据结构