Skip to content

Commit 2bbb3b7

Browse files
authored
Merge pull request #2225 from actiontech/fix-issue2208
check single index
2 parents bd0b6e8 + f7982ba commit 2bbb3b7

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

sqle/driver/mysql/audit_test.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7198,7 +7198,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
71987198
{
71997199
Name: "select-without-equal",
72007200
Sql: `select * from exist_tb_9 where v3 > 1`,
7201-
TriggerRule: true,
7201+
TriggerRule: false,
72027202
},
72037203
{
72047204
Name: "select-without-equal",
@@ -7213,7 +7213,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
72137213
{
72147214
Name: "select-without-equal",
72157215
Sql: `select * from exist_tb_9 where v3 in(1,2)`,
7216-
TriggerRule: true,
7216+
TriggerRule: false,
72177217
},
72187218
{
72197219
Name: "select-subquery",
@@ -7274,7 +7274,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
72747274
{
72757275
Name: "update-without-equal",
72767276
Sql: `update exist_tb_9 set v4 = 1 where v3 > 1`,
7277-
TriggerRule: true,
7277+
TriggerRule: false,
72787278
},
72797279
{
72807280
Name: "update-without-equal",
@@ -7289,7 +7289,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
72897289
{
72907290
Name: "update-without-equal",
72917291
Sql: `update exist_tb_9 set v4 = 1 where v3 in(1,2)`,
7292-
TriggerRule: true,
7292+
TriggerRule: false,
72937293
},
72947294
// delete
72957295
{
@@ -7330,7 +7330,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
73307330
{
73317331
Name: "delete-without-equal",
73327332
Sql: `delete from exist_tb_9 where v3 > 1`,
7333-
TriggerRule: true,
7333+
TriggerRule: false,
73347334
},
73357335
{
73367336
Name: "delete-without-equal",
@@ -7350,7 +7350,7 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
73507350
{
73517351
Name: "delete-without-equal",
73527352
Sql: `delete from exist_tb_9 where v3 in(1,2)`,
7353-
TriggerRule: true,
7353+
TriggerRule: false,
73547354
},
73557355
// select union
73567356
{
@@ -7382,13 +7382,23 @@ func TestMustUseLeftMostPrefix(t *testing.T) {
73827382
{
73837383
Name: "select-subquery",
73847384
Sql: `select * from (select * from exist_tb_8) t left join exist_tb_9 t1 on t.id=t1.id where t1.v3=1`,
7385-
TriggerRule: true,
7385+
TriggerRule: false,
73867386
},
73877387
{
73887388
Name: "select-subquery",
73897389
Sql: `select * from (select * from exist_tb_9) t left join exist_tb_8 t1 on t.id=t1.id where t.v3=1`,
73907390
TriggerRule: false,
73917391
},
7392+
{
7393+
Name: "select use single index",
7394+
Sql: `select * from exist_tb_9 where v3=100`,
7395+
TriggerRule: false,
7396+
},
7397+
{
7398+
Name: "select use single index",
7399+
Sql: `select * from exist_tb_9 where v3 > 100`,
7400+
TriggerRule: false,
7401+
},
73927402
}
73937403

73947404
rule := rulepkg.RuleHandlerMap[rulepkg.DMLMustUseLeftMostPrefix].Rule

sqle/driver/mysql/rule/rule.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5390,10 +5390,23 @@ func isColumnMatchedALeftMostPrefix(allCols []string, colsWithEQ, colsWithOr []s
53905390
return true
53915391
}
53925392

5393+
func checkSingleIndex(allCols []string, constraint *ast.Constraint) bool {
5394+
singleIndexColumn := constraint.Keys[0].Column.Name.L
5395+
for _, col := range allCols {
5396+
if col == singleIndexColumn {
5397+
return true
5398+
}
5399+
}
5400+
return false
5401+
}
5402+
53935403
func isColumnUseLeftMostPrefix(allCols []string, constraints []*ast.Constraint) bool {
53945404
multiConstraints := make([]*ast.Constraint, 0)
53955405
for _, constraint := range constraints {
53965406
if len(constraint.Keys) == 1 {
5407+
if checkSingleIndex(allCols, constraint) {
5408+
return true
5409+
}
53975410
continue
53985411
}
53995412
multiConstraints = append(multiConstraints, constraint)

0 commit comments

Comments
 (0)