From 98002db46651485e62c839b458cb0f8281869043 Mon Sep 17 00:00:00 2001 From: foreyes Date: Wed, 18 Sep 2019 11:27:41 +0800 Subject: [PATCH 1/2] improve code --- executor/executor.go | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/executor/executor.go b/executor/executor.go index 992d2dae7a20e..4a6bf0c7e4b44 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -1385,52 +1385,56 @@ func extractStmtHintsFromStmtNode(stmtNode ast.StmtNode) []*ast.TableOptimizerHi } func handleStmtHints(hints []*ast.TableOptimizerHint) (stmtHints stmtctx.StmtHints, warns []error) { - var memoryQuotaHintList, noIndexMergeHintList, useToJAHintList, readReplicaHintList []*ast.TableOptimizerHint + if hints == nil { + return + } + var memoryQuotaHint, useToJAHint *ast.TableOptimizerHint + var memoryQuotaHintCnt, useToJAHintCnt, noIndexMergeHintCnt, readReplicaHintCnt int for _, hint := range hints { switch hint.HintName.L { case "memory_quota": - memoryQuotaHintList = append(memoryQuotaHintList, hint) - case "no_index_merge": - noIndexMergeHintList = append(noIndexMergeHintList, hint) + memoryQuotaHint = hint + memoryQuotaHintCnt++ case "use_toja": - useToJAHintList = append(useToJAHintList, hint) + useToJAHint = hint + useToJAHintCnt++ + case "no_index_merge": + noIndexMergeHintCnt++ case "read_consistent_replica": - readReplicaHintList = append(readReplicaHintList, hint) + readReplicaHintCnt++ } } // Handle MEMORY_QUOTA - if len(memoryQuotaHintList) != 0 { - if len(memoryQuotaHintList) > 1 { + if memoryQuotaHintCnt != 0 { + if memoryQuotaHintCnt > 1 { warn := errors.New("There are multiple MEMORY_QUOTA hints, only the last one will take effect") warns = append(warns, warn) } - hint := memoryQuotaHintList[len(memoryQuotaHintList)-1] // Executor use MemoryQuota <= 0 to indicate no memory limit, here use < 0 to handle hint syntax error. - if hint.MemoryQuota < 0 { + if memoryQuotaHint.MemoryQuota < 0 { warn := errors.New("The use of MEMORY_QUOTA hint is invalid, valid usage: MEMORY_QUOTA(10 MB) or MEMORY_QUOTA(10 GB)") warns = append(warns, warn) } else { stmtHints.HasMemQuotaHint = true - stmtHints.MemQuotaQuery = hint.MemoryQuota - if hint.MemoryQuota == 0 { + stmtHints.MemQuotaQuery = memoryQuotaHint.MemoryQuota + if memoryQuotaHint.MemoryQuota == 0 { warn := errors.New("Setting the MEMORY_QUOTA to 0 means no memory limit") warns = append(warns, warn) } } } // Handle USE_TOJA - if len(useToJAHintList) != 0 { - if len(useToJAHintList) > 1 { + if useToJAHintCnt != 0 { + if useToJAHintCnt > 1 { warn := errors.New("There are multiple USE_TOJA hints, only the last one will take effect") warns = append(warns, warn) } - hint := useToJAHintList[len(useToJAHintList)-1] stmtHints.HasAllowInSubqToJoinAndAggHint = true - stmtHints.AllowInSubqToJoinAndAgg = hint.HintFlag + stmtHints.AllowInSubqToJoinAndAgg = useToJAHint.HintFlag } // Handle NO_INDEX_MERGE - if len(noIndexMergeHintList) != 0 { - if len(noIndexMergeHintList) > 1 { + if noIndexMergeHintCnt != 0 { + if noIndexMergeHintCnt > 1 { warn := errors.New("There are multiple NO_INDEX_MERGE hints, only the last one will take effect") warns = append(warns, warn) } @@ -1438,8 +1442,8 @@ func handleStmtHints(hints []*ast.TableOptimizerHint) (stmtHints stmtctx.StmtHin stmtHints.EnableIndexMerge = false } // Handle READ_CONSISTENT_REPLICA - if len(readReplicaHintList) != 0 { - if len(readReplicaHintList) > 1 { + if readReplicaHintCnt != 0 { + if readReplicaHintCnt > 1 { warn := errors.New("There are multiple READ_CONSISTENT_REPLICA hints, only the last one will take effect") warns = append(warns, warn) } From a27600a4f824b8155533a0def8af1d6d79e2113b Mon Sep 17 00:00:00 2001 From: foreyes Date: Wed, 18 Sep 2019 22:22:43 +0800 Subject: [PATCH 2/2] improve code --- executor/executor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/executor/executor.go b/executor/executor.go index 4a6bf0c7e4b44..7aa3037300f6a 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -1385,7 +1385,7 @@ func extractStmtHintsFromStmtNode(stmtNode ast.StmtNode) []*ast.TableOptimizerHi } func handleStmtHints(hints []*ast.TableOptimizerHint) (stmtHints stmtctx.StmtHints, warns []error) { - if hints == nil { + if len(hints) == 0 { return } var memoryQuotaHint, useToJAHint *ast.TableOptimizerHint