vitess.io/vitess@v0.16.2/go/vt/sqlparser/keywords_test.go (about) 1 package sqlparser 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 "path" 8 "strings" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestKeywordTable(t *testing.T) { 15 for _, kw := range keywords { 16 lookup, ok := keywordLookupTable.LookupString(kw.name) 17 require.Truef(t, ok, "keyword %q failed to match", kw.name) 18 require.Equalf(t, lookup, kw.id, "keyword %q matched to %d (expected %d)", kw.name, lookup, kw.id) 19 } 20 } 21 22 var vitessReserved = map[string]bool{ 23 "ESCAPE": true, 24 "NEXT": true, 25 "OFF": true, 26 "SAVEPOINT": true, 27 "SQL_NO_CACHE": true, 28 "TIMESTAMPADD": true, 29 "TIMESTAMPDIFF": true, 30 } 31 32 func TestCompatibility(t *testing.T) { 33 file, err := os.Open(path.Join("testdata", "mysql_keywords.txt")) 34 require.NoError(t, err) 35 defer file.Close() 36 37 scanner := bufio.NewScanner(file) 38 skipStep := 4 39 for scanner.Scan() { 40 if skipStep != 0 { 41 skipStep-- 42 continue 43 } 44 45 afterSplit := strings.SplitN(scanner.Text(), "\t", 2) 46 word, reserved := afterSplit[0], afterSplit[1] == "1" 47 if reserved || vitessReserved[word] { 48 word = "`" + word + "`" 49 } 50 sql := fmt.Sprintf("create table %s(c1 int)", word) 51 _, err := ParseStrictDDL(sql) 52 if err != nil { 53 t.Errorf("%s is not compatible with mysql", word) 54 } 55 } 56 }