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

Commit d71a9a5

Browse files
Test new changes from VIEW implementation
Signed-off-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
1 parent 0fd0480 commit d71a9a5

File tree

4 files changed

+159
-1
lines changed

4 files changed

+159
-1
lines changed

sql/analyzer/assign_catalog_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,12 @@ func TestAssignCatalog(t *testing.T) {
7373
ut, ok := node.(*plan.UnlockTables)
7474
require.True(ok)
7575
require.Equal(c, ut.Catalog)
76+
77+
mockSubquery := plan.NewSubqueryAlias("mock", plan.NewResolvedTable(tbl))
78+
mockView := plan.NewCreateView(db, "", nil, mockSubquery, false)
79+
node, err = f.Apply(sql.NewEmptyContext(), a, mockView)
80+
require.NoError(err)
81+
cv, ok := node.(*plan.CreateView)
82+
require.True(ok)
83+
require.Equal(c, cv.Catalog)
7684
}

sql/analyzer/resolve_tables_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,44 @@ func TestResolveTablesNested(t *testing.T) {
9191
)
9292
require.Equal(expected, analyzed)
9393
}
94+
95+
func TestResolveViews(t *testing.T) {
96+
require := require.New(t)
97+
98+
f := getRule("resolve_tables")
99+
100+
table := memory.NewTable("mytable", sql.Schema{{Name: "i", Type: sql.Int32}})
101+
db := memory.NewDatabase("mydb")
102+
db.AddTable("mytable", table)
103+
104+
// Resolved plan that corresponds to query "SELECT i FROM mytable"
105+
subquery := plan.NewProject(
106+
[]sql.Expression{
107+
expression.NewGetFieldWithTable(
108+
1, sql.Int32, table.Name(), "i", true),
109+
},
110+
plan.NewResolvedTable(table),
111+
)
112+
subqueryAlias := plan.NewSubqueryAlias("myview", subquery)
113+
view := sql.View{"myview", subqueryAlias}
114+
115+
catalog := sql.NewCatalog()
116+
catalog.AddDatabase(db)
117+
catalog.ViewRegistry.Register(db.Name(), view)
118+
119+
a := NewBuilder(catalog).AddPostAnalyzeRule(f.Name, f.Apply).Build()
120+
121+
var notAnalyzed sql.Node = plan.NewUnresolvedTable("myview", "")
122+
analyzed, err := f.Apply(sql.NewEmptyContext(), a, notAnalyzed)
123+
require.NoError(err)
124+
require.Equal(subqueryAlias, analyzed)
125+
126+
notAnalyzed = plan.NewUnresolvedTable("MyVieW", "")
127+
analyzed, err = f.Apply(sql.NewEmptyContext(), a, notAnalyzed)
128+
require.NoError(err)
129+
require.Equal(subqueryAlias, analyzed)
130+
131+
analyzed, err = f.Apply(sql.NewEmptyContext(), a, subqueryAlias)
132+
require.NoError(err)
133+
require.Equal(subqueryAlias, analyzed)
134+
}

sql/parse/parse_test.go

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package parse
22

33
import (
4-
"math"
54
"testing"
5+
"math"
66

77
"github.com/src-d/go-mysql-server/sql/expression"
88
"github.com/src-d/go-mysql-server/sql/expression/function/aggregation"
@@ -1263,6 +1263,42 @@ var fixtures = map[string]sql.Node{
12631263
},
12641264
plan.NewUnresolvedTable("dual", ""),
12651265
),
1266+
`CREATE VIEW myview AS SELECT 1`: plan.NewCreateView(
1267+
sql.UnresolvedDatabase(""),
1268+
"myview",
1269+
nil,
1270+
plan.NewSubqueryAlias("myview",
1271+
plan.NewProject(
1272+
[]sql.Expression{expression.NewLiteral(int8(1), sql.Int8)},
1273+
plan.NewUnresolvedTable("dual", ""),
1274+
),
1275+
),
1276+
false,
1277+
),
1278+
`CREATE VIEW mydb.myview AS SELECT 1`: plan.NewCreateView(
1279+
sql.UnresolvedDatabase("mydb"),
1280+
"myview",
1281+
nil,
1282+
plan.NewSubqueryAlias("myview",
1283+
plan.NewProject(
1284+
[]sql.Expression{expression.NewLiteral(int8(1), sql.Int8)},
1285+
plan.NewUnresolvedTable("dual", ""),
1286+
),
1287+
),
1288+
false,
1289+
),
1290+
`CREATE OR REPLACE VIEW mydb.myview AS SELECT 1`: plan.NewCreateView(
1291+
sql.UnresolvedDatabase("mydb"),
1292+
"myview",
1293+
nil,
1294+
plan.NewSubqueryAlias( "myview",
1295+
plan.NewProject(
1296+
[]sql.Expression{expression.NewLiteral(int8(1), sql.Int8)},
1297+
plan.NewUnresolvedTable("dual", ""),
1298+
),
1299+
),
1300+
true,
1301+
),
12661302
}
12671303

12681304
func TestParse(t *testing.T) {
@@ -1296,6 +1332,7 @@ var fixturesErrors = map[string]*errors.Kind{
12961332
`SELECT INTERVAL 1 DAY + INTERVAL 1 DAY`: ErrUnsupportedSyntax,
12971333
`SELECT '2018-05-01' + (INTERVAL 1 DAY + INTERVAL 1 DAY)`: ErrUnsupportedSyntax,
12981334
`SELECT AVG(DISTINCT foo) FROM b`: ErrUnsupportedSyntax,
1335+
`CREATE VIEW myview (col1) AS SELECT 1`: ErrUnsupportedSyntax,
12991336
}
13001337

13011338
func TestParseErrors(t *testing.T) {

sql/parse/util_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package parse
2+
3+
import (
4+
"bufio"
5+
"strings"
6+
"testing"
7+
"bytes"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestReadLetterOrPoint(t *testing.T) {
13+
testFixtures := []struct {
14+
string string
15+
expectedBuffer string
16+
expectedRemaining string
17+
}{
18+
{ "asd.ASD.ñu",
19+
"asd.ASD.ñu",
20+
"",
21+
},
22+
{ "5anytext",
23+
"",
24+
"5anytext",
25+
},
26+
{ "",
27+
"",
28+
"",
29+
},
30+
{ "as df",
31+
"as",
32+
" df",
33+
},
34+
{ "a.s df",
35+
"a.s",
36+
" df",
37+
},
38+
{ "a.s-",
39+
"a.s",
40+
"-",
41+
},
42+
}
43+
44+
for _, fixture := range testFixtures {
45+
reader := bufio.NewReader(strings.NewReader(fixture.string))
46+
var buffer bytes.Buffer
47+
48+
for i := 0; i < len(fixture.string); i++ {
49+
readLetterOrPoint(reader, &buffer)
50+
}
51+
52+
remaining, _ := reader.ReadString('\n')
53+
require.Equal(t, remaining, fixture.expectedRemaining)
54+
55+
require.Equal(t, buffer.String(), fixture.expectedBuffer)
56+
}
57+
}
58+
59+
func TestReadValidScopedIdentRune(t *testing.T) {
60+
}
61+
62+
func TestReadScopedIdent(t *testing.T) {
63+
}
64+
65+
func TestMaybe(t *testing.T) {
66+
}
67+
68+
func TestMultiMaybe(t *testing.T) {
69+
}
70+
71+
func TestMaybeList(t *testing.T) {
72+
}

0 commit comments

Comments
 (0)