diff --git a/dm/pkg/parser/common_test.go b/dm/pkg/parser/common_test.go index 69e0359a7c..44482af144 100644 --- a/dm/pkg/parser/common_test.go +++ b/dm/pkg/parser/common_test.go @@ -380,6 +380,38 @@ func TestParser(t *testing.T) { } } +func TestParserSpecificCreateTableOptions(t *testing.T) { + t.Parallel() + + cases := []string{ + "create table t2 (id int primary key, c1 varchar(255)) transactional=0", + "CREATE TABLE `help_topic` (`help_topic_id` int unsigned NOT NULL) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=0 COMMENT='help topics'", + "create table t_auto (id int primary key) AUTOEXTEND_SIZE=4M", + } + for _, sql := range cases { + t.Run(sql, func(t *testing.T) { + t.Parallel() + p := parser.New() + + stmts, err := Parse(p, sql, "", "") + require.NoError(t, err) + require.Len(t, stmts, 1) + + splitDDLs, err := SplitDDL(stmts[0], "test") + require.NoError(t, err) + require.Len(t, splitDDLs, 1) + + stmts, err = Parse(p, splitDDLs[0], "", "") + require.NoError(t, err) + require.Len(t, stmts, 1) + + tableNames, err := FetchDDLTables("test", stmts[0], conn.LCTableNamesSensitive) + require.NoError(t, err) + require.Len(t, tableNames, 1) + }) + } +} + func TestError(t *testing.T) { t.Parallel() p := parser.New() diff --git a/dm/pkg/schema/tracker_test.go b/dm/pkg/schema/tracker_test.go index d1dae3883f..55136f76b8 100644 --- a/dm/pkg/schema/tracker_test.go +++ b/dm/pkg/schema/tracker_test.go @@ -167,6 +167,51 @@ func TestDDL(t *testing.T) { require.NoError(t, err) } +func TestDDLWithSpecificCreateTableOptions(t *testing.T) { + t.Parallel() + + ctx := context.Background() + p := parser.New() + + tracker, err := NewTestTracker(ctx, "test-tracker", nil, dlog.L()) + require.NoError(t, err) + defer tracker.Close() + + err = tracker.Exec(ctx, "", parseSQL(t, p, "create database testdb;")) + require.NoError(t, err) + + cases := []struct { + sql string + table string + expectedColumns int + }{ + { + sql: "create table t2 (id int primary key, c1 varchar(255)) transactional=0", + table: "t2", + expectedColumns: 2, + }, + { + sql: "CREATE TABLE `help_topic` (`help_topic_id` int unsigned NOT NULL) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=0 COMMENT='help topics'", + table: "help_topic", + expectedColumns: 1, + }, + { + sql: "create table t_auto (id int primary key) AUTOEXTEND_SIZE=4M", + table: "t_auto", + expectedColumns: 1, + }, + } + for _, tc := range cases { + stmt := parseSQL(t, p, tc.sql) + err = tracker.Exec(ctx, "testdb", stmt) + require.NoError(t, err) + + ti, err := tracker.GetTableInfo(&filter.Table{Schema: "testdb", Name: tc.table}) + require.NoError(t, err) + require.Len(t, ti.Columns, tc.expectedColumns) + } +} + func TestGetSingleColumnIndices(t *testing.T) { ctx := context.Background() p := parser.New()