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