diff --git a/sql/parse/parse_test.go b/sql/parse/parse_test.go index 5fa1e32f3..08c35a429 100644 --- a/sql/parse/parse_test.go +++ b/sql/parse/parse_test.go @@ -1007,7 +1007,9 @@ var fixtures = map[string]sql.Node{ ), plan.NewShowCollation(), ), - `ROLLBACK`: plan.NewRollback(), + `ROLLBACK`: plan.NewRollback(), + "SHOW CREATE TABLE `mytable`": plan.NewShowCreateTable("", nil, "mytable"), + "SHOW CREATE TABLE `mydb`.`mytable`": plan.NewShowCreateTable("mydb", nil, "mytable"), } func TestParse(t *testing.T) { diff --git a/sql/parse/show_create.go b/sql/parse/show_create.go index 68ea2ee7b..2ef5989b5 100644 --- a/sql/parse/show_create.go +++ b/sql/parse/show_create.go @@ -2,10 +2,9 @@ package parse import ( "bufio" + "io" "strings" -) -import ( "gopkg.in/src-d/go-errors.v1" "gopkg.in/src-d/go-mysql-server.v0/sql" "gopkg.in/src-d/go-mysql-server.v0/sql/plan" @@ -31,10 +30,24 @@ func parseShowCreate(s string) (sql.Node, error) { switch strings.ToLower(thingToShow) { case "table": - var name string + var db, table string + + if err := readQuotableIdent(&table)(r); err != nil { + return nil, err + } + + ru, _, err := r.ReadRune() + if err != nil && err != io.EOF { + return nil, err + } else if err == nil && ru == '.' { + db = table + + if err := readQuotableIdent(&table)(r); err != nil { + return nil, err + } + } - err := parseFuncs{ - readQuotableIdent(&name), + err = parseFuncs{ skipSpaces, checkEOF, }.exec(r) @@ -43,9 +56,9 @@ func parseShowCreate(s string) (sql.Node, error) { } return plan.NewShowCreateTable( - sql.UnresolvedDatabase("").Name(), + db, nil, - name), nil + table), nil case "database", "schema": var ifNotExists bool var next string diff --git a/sql/parse/show_create_test.go b/sql/parse/show_create_test.go index 032d655c6..3b26f2b36 100644 --- a/sql/parse/show_create_test.go +++ b/sql/parse/show_create_test.go @@ -32,9 +32,27 @@ func TestParseShowCreateTableQuery(t *testing.T) { }, { "SHOW CREATE TABLE mytable", - plan.NewShowCreateTable(sql.UnresolvedDatabase("").Name(), - nil, - "mytable"), + plan.NewShowCreateTable("", nil, "mytable"), + nil, + }, + { + "SHOW CREATE TABLE `mytable`", + plan.NewShowCreateTable("", nil, "mytable"), + nil, + }, + { + "SHOW CREATE TABLE mydb.`mytable`", + plan.NewShowCreateTable("mydb", nil, "mytable"), + nil, + }, + { + "SHOW CREATE TABLE `mydb`.mytable", + plan.NewShowCreateTable("mydb", nil, "mytable"), + nil, + }, + { + "SHOW CREATE TABLE `mydb`.`mytable`", + plan.NewShowCreateTable("mydb", nil, "mytable"), nil, }, }