Skip to content
This repository was archived by the owner on Jan 28, 2021. It is now read-only.

Commit 7b6a0f6

Browse files
authored
Merge pull request #661 from erizocosmico/fix/allow-fqn-sohw-create-table
sql/parse: allow qualified table names on SHOW CREATE TABLE
2 parents 53adb3b + adfc5d5 commit 7b6a0f6

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

sql/parse/parse_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,9 @@ var fixtures = map[string]sql.Node{
10071007
),
10081008
plan.NewShowCollation(),
10091009
),
1010-
`ROLLBACK`: plan.NewRollback(),
1010+
`ROLLBACK`: plan.NewRollback(),
1011+
"SHOW CREATE TABLE `mytable`": plan.NewShowCreateTable("", nil, "mytable"),
1012+
"SHOW CREATE TABLE `mydb`.`mytable`": plan.NewShowCreateTable("mydb", nil, "mytable"),
10111013
}
10121014

10131015
func TestParse(t *testing.T) {

sql/parse/show_create.go

+20-7
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ package parse
22

33
import (
44
"bufio"
5+
"io"
56
"strings"
6-
)
77

8-
import (
98
"gopkg.in/src-d/go-errors.v1"
109
"gopkg.in/src-d/go-mysql-server.v0/sql"
1110
"gopkg.in/src-d/go-mysql-server.v0/sql/plan"
@@ -31,10 +30,24 @@ func parseShowCreate(s string) (sql.Node, error) {
3130

3231
switch strings.ToLower(thingToShow) {
3332
case "table":
34-
var name string
33+
var db, table string
34+
35+
if err := readQuotableIdent(&table)(r); err != nil {
36+
return nil, err
37+
}
38+
39+
ru, _, err := r.ReadRune()
40+
if err != nil && err != io.EOF {
41+
return nil, err
42+
} else if err == nil && ru == '.' {
43+
db = table
44+
45+
if err := readQuotableIdent(&table)(r); err != nil {
46+
return nil, err
47+
}
48+
}
3549

36-
err := parseFuncs{
37-
readQuotableIdent(&name),
50+
err = parseFuncs{
3851
skipSpaces,
3952
checkEOF,
4053
}.exec(r)
@@ -43,9 +56,9 @@ func parseShowCreate(s string) (sql.Node, error) {
4356
}
4457

4558
return plan.NewShowCreateTable(
46-
sql.UnresolvedDatabase("").Name(),
59+
db,
4760
nil,
48-
name), nil
61+
table), nil
4962
case "database", "schema":
5063
var ifNotExists bool
5164
var next string

sql/parse/show_create_test.go

+21-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,27 @@ func TestParseShowCreateTableQuery(t *testing.T) {
3232
},
3333
{
3434
"SHOW CREATE TABLE mytable",
35-
plan.NewShowCreateTable(sql.UnresolvedDatabase("").Name(),
36-
nil,
37-
"mytable"),
35+
plan.NewShowCreateTable("", nil, "mytable"),
36+
nil,
37+
},
38+
{
39+
"SHOW CREATE TABLE `mytable`",
40+
plan.NewShowCreateTable("", nil, "mytable"),
41+
nil,
42+
},
43+
{
44+
"SHOW CREATE TABLE mydb.`mytable`",
45+
plan.NewShowCreateTable("mydb", nil, "mytable"),
46+
nil,
47+
},
48+
{
49+
"SHOW CREATE TABLE `mydb`.mytable",
50+
plan.NewShowCreateTable("mydb", nil, "mytable"),
51+
nil,
52+
},
53+
{
54+
"SHOW CREATE TABLE `mydb`.`mytable`",
55+
plan.NewShowCreateTable("mydb", nil, "mytable"),
3856
nil,
3957
},
4058
}

0 commit comments

Comments
 (0)