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

Commit c5a2c61

Browse files
authored
Merge pull request #531 from erizocosmico/fix/show-table-status
sql/(plan,parse): fix show table status behaviour
2 parents 6775578 + 4d90a00 commit c5a2c61

File tree

5 files changed

+27
-6
lines changed

5 files changed

+27
-6
lines changed

engine_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,6 @@ var queries = []struct {
415415
[]sql.Row{
416416
{"mytable", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
417417
{"othertable", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
418-
{"other_table", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
419418
},
420419
},
421420
{
@@ -586,6 +585,14 @@ var queries = []struct {
586585
`SET SESSION NET_READ_TIMEOUT= 700, SESSION NET_WRITE_TIMEOUT= 700`,
587586
[]sql.Row{},
588587
},
588+
{
589+
`SHOW TABLE STATUS`,
590+
[]sql.Row{
591+
{"mytable", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
592+
{"othertable", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
593+
{"tabletest", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
594+
},
595+
},
589596
}
590597

591598
func TestQueries(t *testing.T) {

sql/parse/parse.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,10 @@ func parseShowTableStatus(query string) (sql.Node, error) {
10701070
return nil, err
10711071
}
10721072

1073+
if _, err = buf.Peek(1); err == io.EOF {
1074+
return plan.NewShowTableStatus(), nil
1075+
}
1076+
10731077
var clause string
10741078
if err := readIdent(&clause)(buf); err != nil {
10751079
return nil, err

sql/parse/parse_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,7 @@ var fixtures = map[string]sql.Node{
797797
),
798798
`SHOW TABLE STATUS FROM foo`: plan.NewShowTableStatus("foo"),
799799
`SHOW TABLE STATUS IN foo`: plan.NewShowTableStatus("foo"),
800+
`SHOW TABLE STATUS`: plan.NewShowTableStatus(),
800801
`SHOW TABLE STATUS WHERE Name = 'foo'`: plan.NewFilter(
801802
expression.NewEquals(
802803
expression.NewUnresolvedColumn("Name"),

sql/plan/showtablestatus.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,20 @@ func (s *ShowTableStatus) Schema() sql.Schema { return showTableStatusSchema }
5353
func (s *ShowTableStatus) RowIter(ctx *sql.Context) (sql.RowIter, error) {
5454
var rows []sql.Row
5555
var tables []string
56-
for _, db := range s.Catalog.AllDatabases() {
57-
if len(s.Databases) > 0 && !stringContains(s.Databases, db.Name()) {
58-
continue
56+
if len(s.Databases) > 0 {
57+
for _, db := range s.Catalog.AllDatabases() {
58+
if !stringContains(s.Databases, db.Name()) {
59+
continue
60+
}
61+
62+
for t := range db.Tables() {
63+
tables = append(tables, t)
64+
}
65+
}
66+
} else {
67+
db, err := s.Catalog.Database(s.Catalog.CurrentDatabase())
68+
if err != nil {
69+
return nil, err
5970
}
6071

6172
for t := range db.Tables() {

sql/plan/showtablestatus_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ func TestShowTableStatus(t *testing.T) {
3535
expected := []sql.Row{
3636
{"t1", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
3737
{"t2", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
38-
{"t3", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
39-
{"t4", "InnoDB", "10", "Fixed", int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), int64(0), nil, nil, nil, "utf8_bin", nil, nil},
4038
}
4139

4240
require.Equal(expected, rows)

0 commit comments

Comments
 (0)