Skip to content

Commit c38b4bb

Browse files
smolaajnavarro
authored andcommitted
sql/analyzer: fix analysis of expressions. (#37)
Expressions for children nodes were never resolved.
1 parent 315bc2b commit c38b4bb

File tree

3 files changed

+63
-17
lines changed

3 files changed

+63
-17
lines changed

engine_test.go

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,30 @@ import (
1111
"github.com/stretchr/testify/require"
1212
)
1313

14+
1415
func TestEngine_Query(t *testing.T) {
15-
assert := require.New(t)
16+
e := newEngine(t)
17+
testQuery(t, e,
18+
"SELECT i FROM mytable;",
19+
[]sql.Row{
20+
sql.NewMemoryRow(int64(1)),
21+
sql.NewMemoryRow(int64(2)),
22+
sql.NewMemoryRow(int64(3)),
23+
},
24+
)
1625

17-
table := mem.NewTable("mytable", sql.Schema{{"i", sql.Integer}})
18-
assert.Nil(table.Insert(int32(1)))
19-
assert.Nil(table.Insert(int32(2)))
20-
assert.Nil(table.Insert(int32(3)))
26+
testQuery(t, e,
27+
"SELECT i FROM mytable WHERE i = 2;",
28+
[]sql.Row{
29+
sql.NewMemoryRow(int64(2)),
30+
},
31+
)
32+
}
2133

22-
db := mem.NewDatabase("mydb")
23-
db.AddTable("mytable", table)
2434

25-
e := gitql.New()
26-
e.AddDatabase(db)
35+
func testQuery(t *testing.T, e *gitql.Engine, q string, r []sql.Row) {
36+
assert := require.New(t)
2737

28-
q := "SELECT i FROM mytable;"
2938
schema, iter, err := e.Query(q)
3039
assert.Nil(err)
3140
assert.NotNil(iter)
@@ -42,8 +51,24 @@ func TestEngine_Query(t *testing.T) {
4251
}
4352
results = append(results, el)
4453
}
45-
assert.Len(results, 3)
46-
assert.Equal(sql.NewMemoryRow(int32(1)), results[0])
47-
assert.Equal(sql.NewMemoryRow(int32(2)), results[1])
48-
assert.Equal(sql.NewMemoryRow(int32(3)), results[2])
54+
55+
assert.Len(results, len(r))
56+
assert.Equal(results, r)
57+
}
58+
59+
func newEngine(t *testing.T) *gitql.Engine {
60+
assert := require.New(t)
61+
62+
table := mem.NewTable("mytable", sql.Schema{{"i", sql.BigInteger}})
63+
assert.Nil(table.Insert(int64(1)))
64+
assert.Nil(table.Insert(int64(2)))
65+
assert.Nil(table.Insert(int64(3)))
66+
67+
db := mem.NewDatabase("mydb")
68+
db.AddTable("mytable", table)
69+
70+
e := gitql.New()
71+
e.AddDatabase(db)
72+
73+
return e
4974
}

sql/analyzer/analyzer_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,30 @@ func TestAnalyzer_Analyze(t *testing.T) {
4949
)
5050
assert.Nil(err)
5151
assert.Equal(expected, analyzed)
52+
53+
notAnalyzed = plan.NewProject(
54+
[]sql.Expression{expression.NewUnresolvedColumn("i")},
55+
plan.NewFilter(
56+
expression.NewEquals(
57+
expression.NewUnresolvedColumn("i"),
58+
expression.NewLiteral(int32(1), sql.Integer),
59+
),
60+
plan.NewUnresolvedRelation("mytable"),
61+
),
62+
)
63+
analyzed, err = a.Analyze(notAnalyzed)
64+
expected = plan.NewProject(
65+
[]sql.Expression{expression.NewGetField(0, sql.Integer, "i")},
66+
plan.NewFilter(
67+
expression.NewEquals(
68+
expression.NewGetField(0, sql.Integer, "i"),
69+
expression.NewLiteral(int32(1), sql.Integer),
70+
),
71+
table,
72+
),
73+
)
74+
assert.Nil(err)
75+
assert.Equal(expected, analyzed)
5276
}
5377

5478
func TestAnalyzer_Analyze_MaxIterations(t *testing.T) {

sql/analyzer/rules.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ func resolveColumns(a *Analyzer, n sql.Node) sql.Node {
3838
}
3939

4040
child := n.Children()[0]
41-
if !child.Resolved() {
42-
return n
43-
}
4441

4542
colMap := map[string]*expression.GetField{}
4643
for idx, child := range child.Schema() {

0 commit comments

Comments
 (0)