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

Commit 522dadf

Browse files
Add views to SHOW TABLES
Signed-off-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
1 parent 9b8ecfa commit 522dadf

File tree

4 files changed

+68
-23
lines changed

4 files changed

+68
-23
lines changed

sql/analyzer/assign_catalog.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ func assignCatalog(ctx *sql.Context, a *Analyzer, n sql.Node) (sql.Node, error)
6868
nc := *node
6969
nc.Catalog = a.Catalog
7070
return &nc, nil
71+
case *plan.ShowTables:
72+
nc := *node
73+
nc.Catalog = a.Catalog
74+
return &nc, nil
7175
default:
7276
return n, nil
7377
}

sql/analyzer/assign_catalog_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,10 @@ func TestAssignCatalog(t *testing.T) {
8787
dv, ok := node.(*plan.DropView)
8888
require.True(ok)
8989
require.Equal(c, dv.Catalog)
90+
91+
node, err = f.Apply(sql.NewEmptyContext(), a, plan.NewShowTables(db, false))
92+
require.NoError(err)
93+
st, ok := node.(*plan.ShowTables)
94+
require.True(ok)
95+
require.Equal(c, st.Catalog)
9096
}

sql/plan/show_tables.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package plan
22

33
import (
4-
"sort"
5-
64
"github.com/src-d/go-mysql-server/sql"
75
)
86

97
// ShowTables is a node that shows the database tables.
108
type ShowTables struct {
11-
db sql.Database
12-
Full bool
9+
db sql.Database
10+
Full bool
11+
Catalog *sql.Catalog
1312
}
1413

1514
var showTablesSchema = sql.Schema{
@@ -24,8 +23,9 @@ var showTablesFullSchema = sql.Schema{
2423
// NewShowTables creates a new show tables node given a database.
2524
func NewShowTables(database sql.Database, full bool) *ShowTables {
2625
return &ShowTables{
27-
db: database,
28-
Full: full,
26+
db: database,
27+
Full: full,
28+
Catalog: nil,
2929
}
3030
}
3131

@@ -70,16 +70,29 @@ func (p *ShowTables) RowIter(ctx *sql.Context) (sql.RowIter, error) {
7070
tableNames = append(tableNames, key)
7171
}
7272

73-
sort.Strings(tableNames)
73+
views := p.Catalog.ViewRegistry.ViewsInDatabase(p.db.Name())
74+
numViews := len(views)
75+
viewNames := make([]string, numViews)
76+
for i, view := range views {
77+
viewNames[i] = view.Name()
78+
}
7479

75-
var rows = make([]sql.Row, len(tableNames))
80+
numTables := len(tableNames)
81+
var rows = make([]sql.Row, numTables+numViews)
7682
for i, n := range tableNames {
7783
row := sql.Row{n}
7884
if p.Full {
7985
row = append(row, "BASE TABLE")
8086
}
8187
rows[i] = row
8288
}
89+
for i, n := range viewNames {
90+
row := sql.Row{n}
91+
if p.Full {
92+
row = append(row, "VIEW")
93+
}
94+
rows[numTables+i] = row
95+
}
8396

8497
return sql.RowsToRowIter(rows...), nil
8598
}

sql/plan/show_tables_test.go

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package plan
22

33
import (
4-
"io"
4+
"sort"
55
"testing"
66

77
"github.com/src-d/go-mysql-server/memory"
@@ -13,35 +13,57 @@ func TestShowTables(t *testing.T) {
1313
require := require.New(t)
1414
ctx := sql.NewEmptyContext()
1515

16+
catalog := sql.NewCatalog()
17+
1618
unresolvedShowTables := NewShowTables(sql.UnresolvedDatabase(""), false)
19+
unresolvedShowTables.Catalog = catalog
1720

1821
require.False(unresolvedShowTables.Resolved())
1922
require.Nil(unresolvedShowTables.Children())
2023

24+
tables := []string{"test1", "test2", "test3"}
25+
views := []string{"view1", "view2"}
26+
2127
db := memory.NewDatabase("test")
22-
db.AddTable("test1", memory.NewTable("test1", nil))
23-
db.AddTable("test2", memory.NewTable("test2", nil))
24-
db.AddTable("test3", memory.NewTable("test3", nil))
28+
for _, table := range tables {
29+
db.AddTable(table, memory.NewTable(table, nil))
30+
}
31+
for _, view := range views {
32+
catalog.ViewRegistry.Register(db.Name(), sql.NewView(view, nil))
33+
}
34+
35+
resolvedShowTables := NewShowTables(db, true)
36+
resolvedShowTables.Catalog = catalog
2537

26-
resolvedShowTables := NewShowTables(db, false)
2738
require.True(resolvedShowTables.Resolved())
2839
require.Nil(resolvedShowTables.Children())
2940

3041
iter, err := resolvedShowTables.RowIter(ctx)
3142
require.NoError(err)
3243

33-
res, err := iter.Next()
44+
rows, err := sql.RowIterToRows(iter)
3445
require.NoError(err)
35-
require.Equal("test1", res[0])
3646

37-
res, err = iter.Next()
38-
require.NoError(err)
39-
require.Equal("test2", res[0])
47+
var actualTables []string
48+
var actualViews []string
49+
for _, row := range rows {
50+
name, ok := row[0].(string)
51+
require.True(ok)
52+
switch row[1] {
53+
case "BASE TABLE":
54+
actualTables = append(actualTables, name)
55+
case "VIEW":
56+
actualViews = append(actualViews, name)
57+
default:
58+
require.FailNow("only values 'BASE TABLE' and 'VIEW' are expected")
59+
}
60+
}
4061

41-
res, err = iter.Next()
42-
require.NoError(err)
43-
require.Equal("test3", res[0])
62+
sort.Strings(tables)
63+
sort.Strings(actualTables)
64+
require.Equal(tables, actualTables)
4465

45-
_, err = iter.Next()
46-
require.Equal(io.EOF, err)
66+
sort.Strings(views)
67+
sort.Strings(actualViews)
68+
require.Equal(views, actualViews)
4769
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy