Skip to content

Commit

Permalink
Cherry-pick 92c25af with conflicts
Browse files Browse the repository at this point in the history
Signed-off-by: Dirkjan Bussink <d.bussink@gmail.com>
  • Loading branch information
vitess-bot[bot] authored and dbussink committed Jan 31, 2025
1 parent f4563b3 commit 52ff8dd
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
4 changes: 2 additions & 2 deletions go/vt/vtgate/schema/tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ func (t *Tracker) updatedTableSchema(th *discovery.TabletHealth) bool {

func (t *Tracker) updateTables(keyspace string, res map[string]string) {
for tableName, tableDef := range res {
stmt, err := t.parser.Parse(tableDef)
stmt, err := t.parser.ParseStrictDDL(tableDef)
if err != nil {
log.Warningf("error parsing table definition for %s: %v", tableName, err)
continue
Expand Down Expand Up @@ -475,7 +475,7 @@ func (vm *viewMap) set(ks, tbl, sql string) {
m = make(map[tableNameStr]sqlparser.SelectStatement)
vm.m[ks] = m
}
stmt, err := vm.parser.Parse(sql)
stmt, err := vm.parser.ParseStrictDDL(sql)
if err != nil {
log.Warningf("ignoring view '%s', parsing error in view definition: '%s'", tbl, sql)
return
Expand Down
21 changes: 21 additions & 0 deletions go/vt/vtgate/schema/tracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ func TestTableTracking(t *testing.T) {
"t3": "create table t3(id datetime primary key)",
}, {
"t4": "create table t4(name varchar(50) primary key)",
}, {
"t5": "create table t5(name varchar(50) primary key with broken syntax)",
}}

testcases := []testCases{{
Expand Down Expand Up @@ -212,6 +214,15 @@ func TestTableTracking(t *testing.T) {
"t3": {{Name: sqlparser.NewIdentifierCI("id"), Type: querypb.Type_DATETIME, CollationName: "binary", Size: 0, Nullable: true}},
"t4": {{Name: sqlparser.NewIdentifierCI("name"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: true}},
},
}, {
testName: "new broken table",
updTbl: []string{"t5"},
expTbl: map[string][]vindexes.Column{
"t1": {{Name: sqlparser.NewIdentifierCI("id"), Type: querypb.Type_INT64, CollationName: "binary", Nullable: true}, {Name: sqlparser.NewIdentifierCI("name"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: true}, {Name: sqlparser.NewIdentifierCI("email"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: false, Default: &sqlparser.Literal{Val: "a@b.com"}}},
"T1": {{Name: sqlparser.NewIdentifierCI("id"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: true}, {Name: sqlparser.NewIdentifierCI("name"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: true}},
"t3": {{Name: sqlparser.NewIdentifierCI("id"), Type: querypb.Type_DATETIME, CollationName: "binary", Size: 0, Nullable: true}},
"t4": {{Name: sqlparser.NewIdentifierCI("name"), Type: querypb.Type_VARCHAR, Size: 50, Nullable: true}},
},
}}

testTracker(t, schemaDefResult, testcases)
Expand All @@ -231,6 +242,8 @@ func TestViewsTracking(t *testing.T) {
"t3": "create view t3 as select 1 from tbl3",
}, {
"t4": "create view t4 as select 1 from tbl4",
}, {
"t4": "create view t5 as select 1 from tbl4 with broken syntax",
}}

testcases := []testCases{{
Expand Down Expand Up @@ -259,6 +272,14 @@ func TestViewsTracking(t *testing.T) {
"V1": "select 1, 2 from tbl2",
"t3": "select 1 from tbl3",
"t4": "select 1 from tbl4"},
}, {
testName: "new broken t5",
updView: []string{"t5"},
expView: map[string]string{
"t1": "select 1 from tbl1",
"V1": "select 1, 2 from tbl2",
"t3": "select 1 from tbl3",
"t4": "select 1 from tbl4"},
}}

testTracker(t, schemaDefResult, testcases)
Expand Down
2 changes: 1 addition & 1 deletion go/vt/wrangler/vdiff.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,7 @@ func findPKs(env *vtenv.Environment, table *tabletmanagerdatapb.TableDefinition,
// column in the table definition leveraging MySQL's collation inheritance
// rules.
func getColumnCollations(venv *vtenv.Environment, table *tabletmanagerdatapb.TableDefinition) (map[string]collations.ID, error) {
createstmt, err := venv.Parser().Parse(table.Schema)
createstmt, err := venv.Parser().ParseStrictDDL(table.Schema)
if err != nil {
return nil, err
}
Expand Down
7 changes: 7 additions & 0 deletions go/vt/wrangler/vdiff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1277,6 +1277,13 @@ func TestGetColumnCollations(t *testing.T) {
"name": collationEnv.LookupByName("utf16_icelandic_ci"),
},
},
{
name: "invalid schema",
table: &tabletmanagerdatapb.TableDefinition{
Schema: "create table t1 (c1 varchar(10), size set('small', 'medium', 'large'), primary key(c1) with syntax error)",
},
wantErr: true,
},
}
env := vtenv.NewTestEnv()
for _, tt := range tests {
Expand Down

0 comments on commit 52ff8dd

Please sign in to comment.