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

Commit 5b17ae1

Browse files
author
kuba--
committed
inspect all aliases
Signed-off-by: kuba-- <[email protected]>
1 parent f4a1ef5 commit 5b17ae1

File tree

2 files changed

+65
-13
lines changed

2 files changed

+65
-13
lines changed

engine_test.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,22 +1638,32 @@ func TestIndexes(t *testing.T) {
16381638

16391639
_, _, err = e.Query(
16401640
newCtx(),
1641-
"CREATE INDEX myidx ON mytable USING pilosa (i) WITH (async = false)",
1641+
"CREATE INDEX idx_i ON mytable USING pilosa (i) WITH (async = false)",
16421642
)
16431643
require.NoError(t, err)
16441644

16451645
_, _, err = e.Query(
16461646
newCtx(),
1647-
"CREATE INDEX myidx_multi ON mytable USING pilosa (i, s) WITH (async = false)",
1647+
"CREATE INDEX idx_s ON mytable USING pilosa (s) WITH (async = false)",
1648+
)
1649+
require.NoError(t, err)
1650+
1651+
_, _, err = e.Query(
1652+
newCtx(),
1653+
"CREATE INDEX idx_is ON mytable USING pilosa (i, s) WITH (async = false)",
16481654
)
16491655
require.NoError(t, err)
16501656

16511657
defer func() {
1652-
done, err := e.Catalog.DeleteIndex("mydb", "myidx", true)
1658+
done, err := e.Catalog.DeleteIndex("mydb", "idx_i", true)
16531659
require.NoError(t, err)
16541660
<-done
16551661

1656-
done, err = e.Catalog.DeleteIndex("foo", "myidx_multi", true)
1662+
done, err = e.Catalog.DeleteIndex("mydb", "idx_s", true)
1663+
require.NoError(t, err)
1664+
<-done
1665+
1666+
done, err = e.Catalog.DeleteIndex("foo", "idx_is", true)
16571667
require.NoError(t, err)
16581668
<-done
16591669
}()
@@ -1743,6 +1753,25 @@ func TestIndexes(t *testing.T) {
17431753
{int64(2), "second row"},
17441754
},
17451755
},
1756+
{
1757+
"SELECT s, SUBSTRING(s, 1, 1) AS sub_s FROM mytable WHERE sub_s = 's'",
1758+
[]sql.Row{
1759+
{"second row", "s"},
1760+
},
1761+
},
1762+
{
1763+
"SELECT count(i) AS mytable_i, SUBSTR(s, -3) AS mytable_s FROM mytable WHERE i > 0 AND mytable_s='row' GROUP BY mytable_s",
1764+
[]sql.Row{
1765+
{int32(3), "row"},
1766+
},
1767+
},
1768+
{
1769+
"SELECT mytable_i FROM (SELECT i AS mytable_i FROM mytable) as t WHERE mytable_i > 1",
1770+
[]sql.Row{
1771+
{int64(2)},
1772+
{int64(3)},
1773+
},
1774+
},
17461775
}
17471776

17481777
for _, tt := range testCases {

sql/analyzer/assign_indexes.go

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,40 @@ func assignIndexes(a *Analyzer, node sql.Node) (map[string]*indexLookup, error)
3535
}
3636
}()
3737

38-
var err error
39-
plan.Inspect(node, func(node sql.Node) bool {
40-
filter, ok := node.(*plan.Filter)
41-
if !ok {
38+
aliases := make(map[string]sql.Expression)
39+
var (
40+
err error
41+
fn func(node sql.Node) bool
42+
)
43+
fn = func(n sql.Node) bool {
44+
if n == nil {
4245
return true
4346
}
4447

45-
aliases := make(map[string]sql.Expression)
46-
if prj, ok := filter.Child.(*plan.Project); ok {
48+
if prj, ok := n.(*plan.Project); ok {
4749
for _, ex := range prj.Expressions() {
4850
if alias, ok := ex.(*expression.Alias); ok {
49-
aliases[alias.Name()] = alias.Child
51+
if _, ok := aliases[alias.Name()]; !ok {
52+
aliases[alias.Name()] = alias.Child
53+
}
5054
}
5155
}
56+
} else {
57+
for _, ch := range n.Children() {
58+
plan.Inspect(ch, fn)
59+
}
5260
}
5361

62+
return true
63+
}
64+
65+
plan.Inspect(node, func(node sql.Node) bool {
66+
filter, ok := node.(*plan.Filter)
67+
if !ok {
68+
return true
69+
}
70+
fn(filter.Child)
71+
5472
var result map[string]*indexLookup
5573
result, err = getIndexes(filter.Expression, aliases, a)
5674
if err != nil {
@@ -276,8 +294,13 @@ func unifyExpressions(aliases map[string]sql.Expression, expr ...sql.Expression)
276294

277295
for i, e := range expr {
278296
uex := e
279-
if aliases != nil {
280-
if alias, ok := aliases[e.String()]; ok {
297+
name := e.String()
298+
if n, ok := e.(sql.Nameable); ok {
299+
name = n.Name()
300+
}
301+
302+
if aliases != nil && len(aliases) > 0 {
303+
if alias, ok := aliases[name]; ok {
281304
uex = alias
282305
}
283306
}

0 commit comments

Comments
 (0)