Skip to content

Commit 9163d88

Browse files
authored
Merge pull request #469 from erizocosmico/feature/squash-nonode
*: make SquashedTable not implement sql.Node
2 parents 434f6ef + 9cfe020 commit 9163d88

File tree

89 files changed

+1925
-742
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+1925
-742
lines changed

Gopkg.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[[constraint]]
22
name = "gopkg.in/src-d/go-mysql-server.v0"
3-
revision = "bafb29ae6359a6ad757b64751f3f8a5c807adc70"
3+
revision = "28b0ab840c6aeb47b77598496ee4fc4aadec7feb"
44

55
[[constraint]]
66
name = "github.com/jessevdk/go-flags"

common_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,5 @@ func buildSession(t *testing.T, repos fixtures.Fixtures,
6363
}
6464

6565
func tableToRows(ctx *sql.Context, t sql.Table) ([]sql.Row, error) {
66-
return sql.NodeToRows(ctx, plan.NewResolvedTable("", t))
66+
return sql.NodeToRows(ctx, plan.NewResolvedTable(t))
6767
}

docs/using-gitbase/functions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ To make some common tasks easier for the user, there are some functions to inter
1717

1818
## Standard functions
1919

20-
You can check standard functions in [`go-mysql-server` documentation](https://github.com/src-d/go-mysql-server/tree/be1c47e16d43092379bb5ffe9c06ec5afcd58d4e#custom-functions).
20+
You can check standard functions in [`go-mysql-server` documentation](https://github.com/src-d/go-mysql-server/tree/28b0ab840c6aeb47b77598496ee4fc4aadec7feb#custom-functions).

docs/using-gitbase/indexes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ Note that you can create an index either **on one or more columns** or **on a si
1010

1111
You can find some more examples in the [examples](./examples.md#create-an-index-for-columns-on-a-table) section.
1212

13-
See [go-mysql-server](https://github.com/src-d/go-mysql-server/tree/be1c47e16d43092379bb5ffe9c06ec5afcd58d4e#indexes) documentation for more details
13+
See [go-mysql-server](https://github.com/src-d/go-mysql-server/tree/28b0ab840c6aeb47b77598496ee4fc4aadec7feb#indexes) documentation for more details
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
## Supported syntax
22

3-
To see the SQL subset currently supported take a look at [this list](https://github.com/src-d/go-mysql-server/blob/be1c47e16d43092379bb5ffe9c06ec5afcd58d4e/SUPPORTED.md) from [src-d/go-mysql-server](https://github.com/src-d/go-mysql-server).
3+
To see the SQL subset currently supported take a look at [this list](https://github.com/src-d/go-mysql-server/blob/28b0ab840c6aeb47b77598496ee4fc4aadec7feb/SUPPORTED.md) from [src-d/go-mysql-server](https://github.com/src-d/go-mysql-server).

internal/rule/squashjoins.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -771,13 +771,14 @@ func buildSquashedTable(
771771
indexedTables = []string{firstTable}
772772
}
773773

774-
var node sql.Node = gitbase.NewSquashedTable(
774+
table := gitbase.NewSquashedTable(
775775
iter,
776776
mapping,
777777
allFilters,
778778
indexedTables,
779779
tableNames...,
780780
)
781+
var node sql.Node = plan.NewResolvedTable(table)
781782

782783
if len(filters) > 0 {
783784
f, err := fixFieldIndexes(expression.JoinAnd(filters...), iter.Schema())

internal/rule/squashjoins_test.go

Lines changed: 69 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestAnalyzeSquashJoinsExchange(t *testing.T) {
2323
WithParallelism(2).
2424
AddPostAnalyzeRule(SquashJoinsRule, SquashJoins).
2525
Build()
26+
a.Batches = a.Batches[:len(a.Batches)-1] // remove the track_process rule
2627
a.CurrentDatabase = "foo"
2728
ctx := sql.NewEmptyContext()
2829

@@ -39,7 +40,10 @@ func TestAnalyzeSquashJoinsExchange(t *testing.T) {
3940
require.True(ok)
4041
require.Equal(2, exchange.Parallelism)
4142

42-
_, ok = exchange.Child.(*gitbase.SquashedTable)
43+
rt, ok := exchange.Child.(*plan.ResolvedTable)
44+
require.True(ok)
45+
46+
_, ok = rt.Table.(*gitbase.SquashedTable)
4347
require.True(ok)
4448
}
4549

@@ -54,16 +58,13 @@ func TestSquashJoins(t *testing.T) {
5458
lit(2),
5559
plan.NewInnerJoin(
5660
plan.NewResolvedTable(
57-
gitbase.CommitsTableName,
5861
tables[gitbase.CommitsTableName],
5962
),
6063
plan.NewInnerJoin(
6164
plan.NewResolvedTable(
62-
gitbase.RepositoriesTableName,
6365
tables[gitbase.RepositoriesTableName],
6466
),
6567
plan.NewResolvedTable(
66-
gitbase.ReferencesTableName,
6768
tables[gitbase.ReferencesTableName],
6869
),
6970
and(
@@ -89,49 +90,51 @@ func TestSquashJoins(t *testing.T) {
8990
[]sql.Expression{lit(1)},
9091
plan.NewFilter(
9192
lit(2),
92-
gitbase.NewSquashedTable(
93-
gitbase.NewRefHEADCommitsIter(
94-
gitbase.NewRepoRefsIter(
95-
gitbase.NewAllReposIter(
96-
and(
97-
lit(3),
98-
lit(4),
93+
plan.NewResolvedTable(
94+
gitbase.NewSquashedTable(
95+
gitbase.NewRefHEADCommitsIter(
96+
gitbase.NewRepoRefsIter(
97+
gitbase.NewAllReposIter(
98+
and(
99+
lit(3),
100+
lit(4),
101+
),
99102
),
103+
nil,
104+
false,
100105
),
101106
nil,
102107
false,
103108
),
109+
[]int{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3},
110+
[]sql.Expression{
111+
eq(
112+
col(0, gitbase.ReferencesTableName, "commit_hash"),
113+
col(0, gitbase.CommitsTableName, "commit_hash"),
114+
),
115+
lit(3),
116+
eq(
117+
col(0, gitbase.RepositoriesTableName, "repository_id"),
118+
col(0, gitbase.ReferencesTableName, "repository_id"),
119+
),
120+
lit(4),
121+
},
104122
nil,
105-
false,
123+
gitbase.RepositoriesTableName,
124+
gitbase.ReferencesTableName,
125+
gitbase.CommitsTableName,
106126
),
107-
[]int{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3},
108-
[]sql.Expression{
109-
eq(
110-
col(0, gitbase.ReferencesTableName, "commit_hash"),
111-
col(0, gitbase.CommitsTableName, "commit_hash"),
112-
),
113-
lit(3),
114-
eq(
115-
col(0, gitbase.RepositoriesTableName, "repository_id"),
116-
col(0, gitbase.ReferencesTableName, "repository_id"),
117-
),
118-
lit(4),
119-
},
120-
nil,
121-
gitbase.RepositoriesTableName,
122-
gitbase.ReferencesTableName,
123-
gitbase.CommitsTableName,
124127
),
125128
),
126129
)
127130

128131
result, err := SquashJoins(sql.NewEmptyContext(), analyzer.NewDefault(nil), node)
129132
require.NoError(err)
130133
expected, err = expected.TransformUp(func(n sql.Node) (sql.Node, error) {
131-
t, ok := n.(*gitbase.SquashedTable)
134+
t, ok := n.(*plan.ResolvedTable)
132135
if ok {
133136
// precompute schema
134-
_ = t.Schema()
137+
_ = t.Table.Schema()
135138
return t, nil
136139
}
137140

@@ -152,11 +155,9 @@ func TestSquashJoinsIndexes(t *testing.T) {
152155
[]sql.Expression{lit(1)},
153156
plan.NewInnerJoin(
154157
plan.NewResolvedTable(
155-
gitbase.CommitsTableName,
156158
tables[gitbase.CommitsTableName].(sql.IndexableTable).WithIndexLookup(idx1),
157159
),
158160
plan.NewResolvedTable(
159-
gitbase.CommitTreesTableName,
160161
tables[gitbase.CommitTreesTableName].(sql.IndexableTable).WithIndexLookup(idx2),
161162
),
162163
eq(
@@ -168,22 +169,24 @@ func TestSquashJoinsIndexes(t *testing.T) {
168169

169170
expected := plan.NewProject(
170171
[]sql.Expression{lit(1)},
171-
gitbase.NewSquashedTable(
172-
gitbase.NewCommitTreesIter(
173-
gitbase.NewIndexCommitsIter(idx1, nil),
172+
plan.NewResolvedTable(
173+
gitbase.NewSquashedTable(
174+
gitbase.NewCommitTreesIter(
175+
gitbase.NewIndexCommitsIter(idx1, nil),
176+
nil,
177+
false,
178+
),
174179
nil,
175-
false,
180+
[]sql.Expression{
181+
eq(
182+
col(0, gitbase.CommitsTableName, "commit_hash"),
183+
col(0, gitbase.CommitTreesTableName, "commit_hash"),
184+
),
185+
},
186+
[]string{gitbase.CommitsTableName},
187+
gitbase.CommitsTableName,
188+
gitbase.CommitTreesTableName,
176189
),
177-
nil,
178-
[]sql.Expression{
179-
eq(
180-
col(0, gitbase.CommitsTableName, "commit_hash"),
181-
col(0, gitbase.CommitTreesTableName, "commit_hash"),
182-
),
183-
},
184-
[]string{gitbase.CommitsTableName},
185-
gitbase.CommitsTableName,
186-
gitbase.CommitTreesTableName,
187190
),
188191
)
189192

@@ -201,11 +204,9 @@ func TestSquashJoinsUnsquashable(t *testing.T) {
201204
[]sql.Expression{lit(1)},
202205
plan.NewInnerJoin(
203206
plan.NewResolvedTable(
204-
gitbase.RepositoriesTableName,
205207
tables[gitbase.RepositoriesTableName],
206208
),
207209
plan.NewLimit(1, plan.NewResolvedTable(
208-
gitbase.ReferencesTableName,
209210
tables[gitbase.ReferencesTableName],
210211
)),
211212
lit(4),
@@ -226,16 +227,13 @@ func TestSquashJoinsPartial(t *testing.T) {
226227
[]sql.Expression{lit(1)},
227228
plan.NewInnerJoin(
228229
plan.NewLimit(1, plan.NewResolvedTable(
229-
gitbase.CommitsTableName,
230230
tables[gitbase.CommitsTableName],
231231
)),
232232
plan.NewInnerJoin(
233233
plan.NewResolvedTable(
234-
gitbase.RepositoriesTableName,
235234
tables[gitbase.RepositoriesTableName],
236235
),
237236
plan.NewResolvedTable(
238-
gitbase.ReferencesTableName,
239237
tables[gitbase.ReferencesTableName],
240238
),
241239
and(
@@ -254,26 +252,27 @@ func TestSquashJoinsPartial(t *testing.T) {
254252
[]sql.Expression{lit(1)},
255253
plan.NewInnerJoin(
256254
plan.NewLimit(1, plan.NewResolvedTable(
257-
gitbase.CommitsTableName,
258255
tables[gitbase.CommitsTableName],
259256
)),
260-
gitbase.NewSquashedTable(
261-
gitbase.NewRepoRefsIter(
262-
gitbase.NewAllReposIter(lit(4)),
257+
plan.NewResolvedTable(
258+
gitbase.NewSquashedTable(
259+
gitbase.NewRepoRefsIter(
260+
gitbase.NewAllReposIter(lit(4)),
261+
nil,
262+
false,
263+
),
263264
nil,
264-
false,
265+
[]sql.Expression{
266+
eq(
267+
col(0, gitbase.RepositoriesTableName, "repository_id"),
268+
col(0, gitbase.ReferencesTableName, "repository_id"),
269+
),
270+
lit(4),
271+
},
272+
nil,
273+
gitbase.RepositoriesTableName,
274+
gitbase.ReferencesTableName,
265275
),
266-
nil,
267-
[]sql.Expression{
268-
eq(
269-
col(0, gitbase.RepositoriesTableName, "repository_id"),
270-
col(0, gitbase.ReferencesTableName, "repository_id"),
271-
),
272-
lit(4),
273-
},
274-
nil,
275-
gitbase.RepositoriesTableName,
276-
gitbase.ReferencesTableName,
277276
),
278277
lit(3),
279278
),
@@ -291,16 +290,13 @@ func TestSquashJoinsSchema(t *testing.T) {
291290

292291
node := plan.NewInnerJoin(
293292
plan.NewResolvedTable(
294-
gitbase.CommitsTableName,
295293
tables[gitbase.CommitsTableName],
296294
),
297295
plan.NewInnerJoin(
298296
plan.NewResolvedTable(
299-
gitbase.RepositoriesTableName,
300297
tables[gitbase.RepositoriesTableName],
301298
),
302299
plan.NewResolvedTable(
303-
gitbase.ReferencesTableName,
304300
tables[gitbase.ReferencesTableName],
305301
),
306302
and(
@@ -682,7 +678,7 @@ func TestBuildSquashedTable(t *testing.T) {
682678
columns []string
683679
indexes map[string]sql.IndexLookup
684680
err *errors.Kind
685-
expected sql.Node
681+
expected *gitbase.SquashedTable
686682
}{
687683
{
688684
"repos with remotes",
@@ -1916,7 +1912,7 @@ func TestBuildSquashedTable(t *testing.T) {
19161912
require.True(tt.err.Is(err))
19171913
} else {
19181914
require.NoError(err)
1919-
require.Equal(tt.expected, result)
1915+
require.Equal(plan.NewResolvedTable(tt.expected), result)
19201916
}
19211917
})
19221918
}
@@ -1931,11 +1927,9 @@ func fixIdx(t *testing.T, e sql.Expression, schema sql.Schema) sql.Expression {
19311927
func TestIsJoinLeafSquashable(t *testing.T) {
19321928
tables := gitbase.NewDatabase("").Tables()
19331929
t1 := plan.NewResolvedTable(
1934-
gitbase.RepositoriesTableName,
19351930
tables[gitbase.RepositoriesTableName],
19361931
)
19371932
t2 := plan.NewResolvedTable(
1938-
gitbase.ReferencesTableName,
19391933
tables[gitbase.ReferencesTableName],
19401934
)
19411935

@@ -2181,15 +2175,12 @@ func TestIsJoinCondSquashable(t *testing.T) {
21812175
require := require.New(t)
21822176
tables := gitbase.NewDatabase("").Tables()
21832177
repos := plan.NewResolvedTable(
2184-
gitbase.ReferencesTableName,
21852178
tables[gitbase.ReferencesTableName],
21862179
)
21872180
refs := plan.NewResolvedTable(
2188-
gitbase.ReferencesTableName,
21892181
tables[gitbase.ReferencesTableName],
21902182
)
21912183
commits := plan.NewResolvedTable(
2192-
gitbase.CommitsTableName,
21932184
tables[gitbase.CommitsTableName],
21942185
)
21952186

session.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ func WithOldUASTSerialization(enabled bool) SessionOption {
7373
}
7474
}
7575

76+
// WithBaseSession sets the given session as the base session.
77+
func WithBaseSession(sess sql.Session) SessionOption {
78+
return func(s *Session) {
79+
s.Session = sess
80+
}
81+
}
82+
7683
// NewSession creates a new Session. It requires a repository pool and any
7784
// number of session options can be passed to configure the session.
7885
func NewSession(pool *RepositoryPool, opts ...SessionOption) *Session {
@@ -233,7 +240,8 @@ func connectToBblfsh(endpoint string) (*bblfsh.Client, error) {
233240

234241
// NewSessionBuilder creates a SessionBuilder with the given Repository Pool.
235242
func NewSessionBuilder(pool *RepositoryPool, opts ...SessionOption) server.SessionBuilder {
236-
return func(*mysql.Conn) sql.Session {
243+
return func(c *mysql.Conn, host string) sql.Session {
244+
opts = append(opts, WithBaseSession(sql.NewSession(host, c.User)))
237245
return NewSession(pool, opts...)
238246
}
239247
}

0 commit comments

Comments
 (0)