Skip to content

Commit 2108ce2

Browse files
committed
*: make SquashedTable not implement sql.Node
Signed-off-by: Miguel Molina <[email protected]>
1 parent 1bb9a66 commit 2108ce2

File tree

6 files changed

+94
-101
lines changed

6 files changed

+94
-101
lines changed

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
}

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: 70 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

@@ -33,13 +34,17 @@ func TestAnalyzeSquashJoinsExchange(t *testing.T) {
3334
require.NoError(err)
3435

3536
project, ok := result.(*plan.Project)
37+
fmt.Printf("%T", result)
3638
require.True(ok)
3739

3840
exchange, ok := project.Child.(*plan.Exchange)
3941
require.True(ok)
4042
require.Equal(2, exchange.Parallelism)
4143

42-
_, ok = exchange.Child.(*gitbase.SquashedTable)
44+
rt, ok := exchange.Child.(*plan.ResolvedTable)
45+
require.True(ok)
46+
47+
_, ok = rt.Table.(*gitbase.SquashedTable)
4348
require.True(ok)
4449
}
4550

@@ -54,16 +59,13 @@ func TestSquashJoins(t *testing.T) {
5459
lit(2),
5560
plan.NewInnerJoin(
5661
plan.NewResolvedTable(
57-
gitbase.CommitsTableName,
5862
tables[gitbase.CommitsTableName],
5963
),
6064
plan.NewInnerJoin(
6165
plan.NewResolvedTable(
62-
gitbase.RepositoriesTableName,
6366
tables[gitbase.RepositoriesTableName],
6467
),
6568
plan.NewResolvedTable(
66-
gitbase.ReferencesTableName,
6769
tables[gitbase.ReferencesTableName],
6870
),
6971
and(
@@ -89,49 +91,51 @@ func TestSquashJoins(t *testing.T) {
8991
[]sql.Expression{lit(1)},
9092
plan.NewFilter(
9193
lit(2),
92-
gitbase.NewSquashedTable(
93-
gitbase.NewRefHEADCommitsIter(
94-
gitbase.NewRepoRefsIter(
95-
gitbase.NewAllReposIter(
96-
and(
97-
lit(3),
98-
lit(4),
94+
plan.NewResolvedTable(
95+
gitbase.NewSquashedTable(
96+
gitbase.NewRefHEADCommitsIter(
97+
gitbase.NewRepoRefsIter(
98+
gitbase.NewAllReposIter(
99+
and(
100+
lit(3),
101+
lit(4),
102+
),
99103
),
104+
nil,
105+
false,
100106
),
101107
nil,
102108
false,
103109
),
110+
[]int{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3},
111+
[]sql.Expression{
112+
eq(
113+
col(0, gitbase.ReferencesTableName, "commit_hash"),
114+
col(0, gitbase.CommitsTableName, "commit_hash"),
115+
),
116+
lit(3),
117+
eq(
118+
col(0, gitbase.RepositoriesTableName, "repository_id"),
119+
col(0, gitbase.ReferencesTableName, "repository_id"),
120+
),
121+
lit(4),
122+
},
104123
nil,
105-
false,
124+
gitbase.RepositoriesTableName,
125+
gitbase.ReferencesTableName,
126+
gitbase.CommitsTableName,
106127
),
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,
124128
),
125129
),
126130
)
127131

128132
result, err := SquashJoins(sql.NewEmptyContext(), analyzer.NewDefault(nil), node)
129133
require.NoError(err)
130134
expected, err = expected.TransformUp(func(n sql.Node) (sql.Node, error) {
131-
t, ok := n.(*gitbase.SquashedTable)
135+
t, ok := n.(*plan.ResolvedTable)
132136
if ok {
133137
// precompute schema
134-
_ = t.Schema()
138+
_ = t.Table.Schema()
135139
return t, nil
136140
}
137141

@@ -152,11 +156,9 @@ func TestSquashJoinsIndexes(t *testing.T) {
152156
[]sql.Expression{lit(1)},
153157
plan.NewInnerJoin(
154158
plan.NewResolvedTable(
155-
gitbase.CommitsTableName,
156159
tables[gitbase.CommitsTableName].(sql.IndexableTable).WithIndexLookup(idx1),
157160
),
158161
plan.NewResolvedTable(
159-
gitbase.CommitTreesTableName,
160162
tables[gitbase.CommitTreesTableName].(sql.IndexableTable).WithIndexLookup(idx2),
161163
),
162164
eq(
@@ -168,22 +170,24 @@ func TestSquashJoinsIndexes(t *testing.T) {
168170

169171
expected := plan.NewProject(
170172
[]sql.Expression{lit(1)},
171-
gitbase.NewSquashedTable(
172-
gitbase.NewCommitTreesIter(
173-
gitbase.NewIndexCommitsIter(idx1, nil),
173+
plan.NewResolvedTable(
174+
gitbase.NewSquashedTable(
175+
gitbase.NewCommitTreesIter(
176+
gitbase.NewIndexCommitsIter(idx1, nil),
177+
nil,
178+
false,
179+
),
174180
nil,
175-
false,
181+
[]sql.Expression{
182+
eq(
183+
col(0, gitbase.CommitsTableName, "commit_hash"),
184+
col(0, gitbase.CommitTreesTableName, "commit_hash"),
185+
),
186+
},
187+
[]string{gitbase.CommitsTableName},
188+
gitbase.CommitsTableName,
189+
gitbase.CommitTreesTableName,
176190
),
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,
187191
),
188192
)
189193

@@ -201,11 +205,9 @@ func TestSquashJoinsUnsquashable(t *testing.T) {
201205
[]sql.Expression{lit(1)},
202206
plan.NewInnerJoin(
203207
plan.NewResolvedTable(
204-
gitbase.RepositoriesTableName,
205208
tables[gitbase.RepositoriesTableName],
206209
),
207210
plan.NewLimit(1, plan.NewResolvedTable(
208-
gitbase.ReferencesTableName,
209211
tables[gitbase.ReferencesTableName],
210212
)),
211213
lit(4),
@@ -226,16 +228,13 @@ func TestSquashJoinsPartial(t *testing.T) {
226228
[]sql.Expression{lit(1)},
227229
plan.NewInnerJoin(
228230
plan.NewLimit(1, plan.NewResolvedTable(
229-
gitbase.CommitsTableName,
230231
tables[gitbase.CommitsTableName],
231232
)),
232233
plan.NewInnerJoin(
233234
plan.NewResolvedTable(
234-
gitbase.RepositoriesTableName,
235235
tables[gitbase.RepositoriesTableName],
236236
),
237237
plan.NewResolvedTable(
238-
gitbase.ReferencesTableName,
239238
tables[gitbase.ReferencesTableName],
240239
),
241240
and(
@@ -254,26 +253,27 @@ func TestSquashJoinsPartial(t *testing.T) {
254253
[]sql.Expression{lit(1)},
255254
plan.NewInnerJoin(
256255
plan.NewLimit(1, plan.NewResolvedTable(
257-
gitbase.CommitsTableName,
258256
tables[gitbase.CommitsTableName],
259257
)),
260-
gitbase.NewSquashedTable(
261-
gitbase.NewRepoRefsIter(
262-
gitbase.NewAllReposIter(lit(4)),
258+
plan.NewResolvedTable(
259+
gitbase.NewSquashedTable(
260+
gitbase.NewRepoRefsIter(
261+
gitbase.NewAllReposIter(lit(4)),
262+
nil,
263+
false,
264+
),
263265
nil,
264-
false,
266+
[]sql.Expression{
267+
eq(
268+
col(0, gitbase.RepositoriesTableName, "repository_id"),
269+
col(0, gitbase.ReferencesTableName, "repository_id"),
270+
),
271+
lit(4),
272+
},
273+
nil,
274+
gitbase.RepositoriesTableName,
275+
gitbase.ReferencesTableName,
265276
),
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,
277277
),
278278
lit(3),
279279
),
@@ -291,16 +291,13 @@ func TestSquashJoinsSchema(t *testing.T) {
291291

292292
node := plan.NewInnerJoin(
293293
plan.NewResolvedTable(
294-
gitbase.CommitsTableName,
295294
tables[gitbase.CommitsTableName],
296295
),
297296
plan.NewInnerJoin(
298297
plan.NewResolvedTable(
299-
gitbase.RepositoriesTableName,
300298
tables[gitbase.RepositoriesTableName],
301299
),
302300
plan.NewResolvedTable(
303-
gitbase.ReferencesTableName,
304301
tables[gitbase.ReferencesTableName],
305302
),
306303
and(
@@ -682,7 +679,7 @@ func TestBuildSquashedTable(t *testing.T) {
682679
columns []string
683680
indexes map[string]sql.IndexLookup
684681
err *errors.Kind
685-
expected sql.Node
682+
expected *gitbase.SquashedTable
686683
}{
687684
{
688685
"repos with remotes",
@@ -1916,7 +1913,7 @@ func TestBuildSquashedTable(t *testing.T) {
19161913
require.True(tt.err.Is(err))
19171914
} else {
19181915
require.NoError(err)
1919-
require.Equal(tt.expected, result)
1916+
require.Equal(plan.NewResolvedTable(tt.expected), result)
19201917
}
19211918
})
19221919
}
@@ -1931,11 +1928,9 @@ func fixIdx(t *testing.T, e sql.Expression, schema sql.Schema) sql.Expression {
19311928
func TestIsJoinLeafSquashable(t *testing.T) {
19321929
tables := gitbase.NewDatabase("").Tables()
19331930
t1 := plan.NewResolvedTable(
1934-
gitbase.RepositoriesTableName,
19351931
tables[gitbase.RepositoriesTableName],
19361932
)
19371933
t2 := plan.NewResolvedTable(
1938-
gitbase.ReferencesTableName,
19391934
tables[gitbase.ReferencesTableName],
19401935
)
19411936

@@ -2181,15 +2176,12 @@ func TestIsJoinCondSquashable(t *testing.T) {
21812176
require := require.New(t)
21822177
tables := gitbase.NewDatabase("").Tables()
21832178
repos := plan.NewResolvedTable(
2184-
gitbase.ReferencesTableName,
21852179
tables[gitbase.ReferencesTableName],
21862180
)
21872181
refs := plan.NewResolvedTable(
2188-
gitbase.ReferencesTableName,
21892182
tables[gitbase.ReferencesTableName],
21902183
)
21912184
commits := plan.NewResolvedTable(
2192-
gitbase.CommitsTableName,
21932185
tables[gitbase.CommitsTableName],
21942186
)
21952187

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)