@@ -23,6 +23,7 @@ func TestAnalyzeSquashJoinsExchange(t *testing.T) {
23
23
WithParallelism (2 ).
24
24
AddPostAnalyzeRule (SquashJoinsRule , SquashJoins ).
25
25
Build ()
26
+ a .Batches = a .Batches [:len (a .Batches )- 1 ] // remove the track_process rule
26
27
a .CurrentDatabase = "foo"
27
28
ctx := sql .NewEmptyContext ()
28
29
@@ -39,7 +40,10 @@ func TestAnalyzeSquashJoinsExchange(t *testing.T) {
39
40
require .True (ok )
40
41
require .Equal (2 , exchange .Parallelism )
41
42
42
- _ , ok = exchange .Child .(* gitbase.SquashedTable )
43
+ rt , ok := exchange .Child .(* plan.ResolvedTable )
44
+ require .True (ok )
45
+
46
+ _ , ok = rt .Table .(* gitbase.SquashedTable )
43
47
require .True (ok )
44
48
}
45
49
@@ -54,16 +58,13 @@ func TestSquashJoins(t *testing.T) {
54
58
lit (2 ),
55
59
plan .NewInnerJoin (
56
60
plan .NewResolvedTable (
57
- gitbase .CommitsTableName ,
58
61
tables [gitbase .CommitsTableName ],
59
62
),
60
63
plan .NewInnerJoin (
61
64
plan .NewResolvedTable (
62
- gitbase .RepositoriesTableName ,
63
65
tables [gitbase .RepositoriesTableName ],
64
66
),
65
67
plan .NewResolvedTable (
66
- gitbase .ReferencesTableName ,
67
68
tables [gitbase .ReferencesTableName ],
68
69
),
69
70
and (
@@ -89,49 +90,51 @@ func TestSquashJoins(t *testing.T) {
89
90
[]sql.Expression {lit (1 )},
90
91
plan .NewFilter (
91
92
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
+ ),
99
102
),
103
+ nil ,
104
+ false ,
100
105
),
101
106
nil ,
102
107
false ,
103
108
),
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
+ },
104
122
nil ,
105
- false ,
123
+ gitbase .RepositoriesTableName ,
124
+ gitbase .ReferencesTableName ,
125
+ gitbase .CommitsTableName ,
106
126
),
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 ,
124
127
),
125
128
),
126
129
)
127
130
128
131
result , err := SquashJoins (sql .NewEmptyContext (), analyzer .NewDefault (nil ), node )
129
132
require .NoError (err )
130
133
expected , err = expected .TransformUp (func (n sql.Node ) (sql.Node , error ) {
131
- t , ok := n .(* gitbase. SquashedTable )
134
+ t , ok := n .(* plan. ResolvedTable )
132
135
if ok {
133
136
// precompute schema
134
- _ = t .Schema ()
137
+ _ = t .Table . Schema ()
135
138
return t , nil
136
139
}
137
140
@@ -152,11 +155,9 @@ func TestSquashJoinsIndexes(t *testing.T) {
152
155
[]sql.Expression {lit (1 )},
153
156
plan .NewInnerJoin (
154
157
plan .NewResolvedTable (
155
- gitbase .CommitsTableName ,
156
158
tables [gitbase .CommitsTableName ].(sql.IndexableTable ).WithIndexLookup (idx1 ),
157
159
),
158
160
plan .NewResolvedTable (
159
- gitbase .CommitTreesTableName ,
160
161
tables [gitbase .CommitTreesTableName ].(sql.IndexableTable ).WithIndexLookup (idx2 ),
161
162
),
162
163
eq (
@@ -168,22 +169,24 @@ func TestSquashJoinsIndexes(t *testing.T) {
168
169
169
170
expected := plan .NewProject (
170
171
[]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
+ ),
174
179
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 ,
176
189
),
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 ,
187
190
),
188
191
)
189
192
@@ -201,11 +204,9 @@ func TestSquashJoinsUnsquashable(t *testing.T) {
201
204
[]sql.Expression {lit (1 )},
202
205
plan .NewInnerJoin (
203
206
plan .NewResolvedTable (
204
- gitbase .RepositoriesTableName ,
205
207
tables [gitbase .RepositoriesTableName ],
206
208
),
207
209
plan .NewLimit (1 , plan .NewResolvedTable (
208
- gitbase .ReferencesTableName ,
209
210
tables [gitbase .ReferencesTableName ],
210
211
)),
211
212
lit (4 ),
@@ -226,16 +227,13 @@ func TestSquashJoinsPartial(t *testing.T) {
226
227
[]sql.Expression {lit (1 )},
227
228
plan .NewInnerJoin (
228
229
plan .NewLimit (1 , plan .NewResolvedTable (
229
- gitbase .CommitsTableName ,
230
230
tables [gitbase .CommitsTableName ],
231
231
)),
232
232
plan .NewInnerJoin (
233
233
plan .NewResolvedTable (
234
- gitbase .RepositoriesTableName ,
235
234
tables [gitbase .RepositoriesTableName ],
236
235
),
237
236
plan .NewResolvedTable (
238
- gitbase .ReferencesTableName ,
239
237
tables [gitbase .ReferencesTableName ],
240
238
),
241
239
and (
@@ -254,26 +252,27 @@ func TestSquashJoinsPartial(t *testing.T) {
254
252
[]sql.Expression {lit (1 )},
255
253
plan .NewInnerJoin (
256
254
plan .NewLimit (1 , plan .NewResolvedTable (
257
- gitbase .CommitsTableName ,
258
255
tables [gitbase .CommitsTableName ],
259
256
)),
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
+ ),
263
264
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 ,
265
275
),
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 ,
277
276
),
278
277
lit (3 ),
279
278
),
@@ -291,16 +290,13 @@ func TestSquashJoinsSchema(t *testing.T) {
291
290
292
291
node := plan .NewInnerJoin (
293
292
plan .NewResolvedTable (
294
- gitbase .CommitsTableName ,
295
293
tables [gitbase .CommitsTableName ],
296
294
),
297
295
plan .NewInnerJoin (
298
296
plan .NewResolvedTable (
299
- gitbase .RepositoriesTableName ,
300
297
tables [gitbase .RepositoriesTableName ],
301
298
),
302
299
plan .NewResolvedTable (
303
- gitbase .ReferencesTableName ,
304
300
tables [gitbase .ReferencesTableName ],
305
301
),
306
302
and (
@@ -682,7 +678,7 @@ func TestBuildSquashedTable(t *testing.T) {
682
678
columns []string
683
679
indexes map [string ]sql.IndexLookup
684
680
err * errors.Kind
685
- expected sql. Node
681
+ expected * gitbase. SquashedTable
686
682
}{
687
683
{
688
684
"repos with remotes" ,
@@ -1916,7 +1912,7 @@ func TestBuildSquashedTable(t *testing.T) {
1916
1912
require .True (tt .err .Is (err ))
1917
1913
} else {
1918
1914
require .NoError (err )
1919
- require .Equal (tt .expected , result )
1915
+ require .Equal (plan . NewResolvedTable ( tt .expected ) , result )
1920
1916
}
1921
1917
})
1922
1918
}
@@ -1931,11 +1927,9 @@ func fixIdx(t *testing.T, e sql.Expression, schema sql.Schema) sql.Expression {
1931
1927
func TestIsJoinLeafSquashable (t * testing.T ) {
1932
1928
tables := gitbase .NewDatabase ("" ).Tables ()
1933
1929
t1 := plan .NewResolvedTable (
1934
- gitbase .RepositoriesTableName ,
1935
1930
tables [gitbase .RepositoriesTableName ],
1936
1931
)
1937
1932
t2 := plan .NewResolvedTable (
1938
- gitbase .ReferencesTableName ,
1939
1933
tables [gitbase .ReferencesTableName ],
1940
1934
)
1941
1935
@@ -2181,15 +2175,12 @@ func TestIsJoinCondSquashable(t *testing.T) {
2181
2175
require := require .New (t )
2182
2176
tables := gitbase .NewDatabase ("" ).Tables ()
2183
2177
repos := plan .NewResolvedTable (
2184
- gitbase .ReferencesTableName ,
2185
2178
tables [gitbase .ReferencesTableName ],
2186
2179
)
2187
2180
refs := plan .NewResolvedTable (
2188
- gitbase .ReferencesTableName ,
2189
2181
tables [gitbase .ReferencesTableName ],
2190
2182
)
2191
2183
commits := plan .NewResolvedTable (
2192
- gitbase .CommitsTableName ,
2193
2184
tables [gitbase .CommitsTableName ],
2194
2185
)
2195
2186
0 commit comments