Skip to content

Commit b390029

Browse files
authored
add support for createIndexStmt and dropIndexStmt (#844)
* add support for createIndexStmt and dropIndexStmt * add TestCreateIndexExp and TestDropIndexExp * align test case styles
1 parent e817d98 commit b390029

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

canal/canal_test.go

+82
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,85 @@ func TestWithoutSchemeExp(t *testing.T) {
323323
}
324324
}
325325
}
326+
327+
func TestCreateIndexExp(t *testing.T) {
328+
cases := []string{
329+
"create index test0 on test.test (id)",
330+
"create index test0 ON test.test (id)",
331+
"CREATE INDEX test0 on `test`.test (id)",
332+
"CREATE INDEX test0 ON test.test (id)",
333+
"CREATE index test0 on `test`.test (id)",
334+
"CREATE index test0 ON test.test (id)",
335+
"create INDEX test0 on `test`.test (id)",
336+
"create INDEX test0 ON test.test (id)",
337+
"CREATE INDEX `test0` ON `test`.`test` (`id`) /* generated by server */",
338+
"CREATE /*generated by server */ INDEX `test0` ON `test`.`test` (`id`)",
339+
"CREATE INDEX `test0` ON `test`.test (id)",
340+
"CREATE INDEX `test0` ON test.`test` (id)",
341+
"CREATE INDEX `test0` ON test.test (`id`)",
342+
"CREATE INDEX test0 ON `test`.`test` (`id`)",
343+
"CREATE INDEX test0 ON `test`.`test` (id)",
344+
"CREATE INDEX test0 ON test.test (`id`)",
345+
}
346+
347+
baseTable := "test"
348+
db := "test"
349+
pr := parser.New()
350+
for _, s := range cases {
351+
stmts, _, err := pr.Parse(s, "", "")
352+
require.NoError(t, err)
353+
for _, st := range stmts {
354+
nodes := parseStmt(st)
355+
require.NotZero(t, nodes)
356+
for _, node := range nodes {
357+
rdb := node.db
358+
rtable := node.table
359+
require.Equal(t, db, rdb)
360+
require.Equal(t, baseTable, rtable)
361+
}
362+
}
363+
}
364+
}
365+
366+
func TestDropIndexExp(t *testing.T) {
367+
cases := []string{
368+
"drop index test0 on test.test",
369+
"DROP INDEX test0 ON test.test",
370+
"drop INDEX test0 on test.test",
371+
"DROP index test0 ON test.test",
372+
"drop INDEX `test0` on `test`.`test`",
373+
"drop INDEX test0 ON `test`.`test`",
374+
"drop INDEX test0 on `test`.test",
375+
"drop INDEX test0 on test.`test`",
376+
"DROP index `test0` on `test`.`test`",
377+
"DROP index test0 ON `test`.`test`",
378+
"DROP index test0 on `test`.test",
379+
"DROP index test0 on test.`test`",
380+
"DROP INDEX `test0` ON `test`.`test` /* generated by server */",
381+
"DROP /*generated by server */ INDEX `test0` ON `test`.`test`",
382+
"DROP INDEX `test0` ON `test`.test",
383+
"DROP INDEX `test0` ON test.`test`",
384+
"DROP INDEX `test0` ON test.test",
385+
"DROP INDEX test0 ON `test`.`test`",
386+
"DROP INDEX test0 ON `test`.`test`",
387+
"DROP INDEX test0 ON test.test",
388+
}
389+
390+
baseTable := "test"
391+
db := "test"
392+
pr := parser.New()
393+
for _, s := range cases {
394+
stmts, _, err := pr.Parse(s, "", "")
395+
require.NoError(t, err)
396+
for _, st := range stmts {
397+
nodes := parseStmt(st)
398+
require.NotZero(t, nodes)
399+
for _, node := range nodes {
400+
rdb := node.db
401+
rtable := node.table
402+
require.Equal(t, db, rdb)
403+
require.Equal(t, baseTable, rtable)
404+
}
405+
}
406+
}
407+
}

canal/sync.go

+12
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,18 @@ func parseStmt(stmt ast.StmtNode) (ns []*node) {
216216
table: t.Table.Name.String(),
217217
}
218218
ns = []*node{n}
219+
case *ast.CreateIndexStmt:
220+
n := &node{
221+
db: t.Table.Schema.String(),
222+
table: t.Table.Name.String(),
223+
}
224+
ns = []*node{n}
225+
case *ast.DropIndexStmt:
226+
n := &node{
227+
db: t.Table.Schema.String(),
228+
table: t.Table.Name.String(),
229+
}
230+
ns = []*node{n}
219231
}
220232
return ns
221233
}

0 commit comments

Comments
 (0)