Skip to content

Commit e9221dd

Browse files
committed
*: add tests for table indexes and fixes
Signed-off-by: Miguel Molina <[email protected]>
1 parent 0f6fc7c commit e9221dd

25 files changed

+1942
-259
lines changed

blobs.go

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ func newBlobsTable() Indexable {
4444
}
4545

4646
var _ Table = (*blobsTable)(nil)
47+
var _ Squashable = (*blobsTable)(nil)
4748

49+
func (blobsTable) isSquashable() {}
4850
func (blobsTable) isGitbaseTable() {}
4951

5052
func (blobsTable) String() string {
@@ -334,12 +336,6 @@ func shouldReadContent(columns []sql.Expression) bool {
334336
return false
335337
}
336338

337-
type blobIndexKey struct {
338-
repository string
339-
packfile string
340-
offset int64
341-
}
342-
343339
type blobsKeyValueIter struct {
344340
iter *objectIter
345341
columns []string
@@ -358,10 +354,10 @@ func (i *blobsKeyValueIter) Next() ([]interface{}, []byte, error) {
358354
return nil, nil, err
359355
}
360356

361-
key, err := encodeIndexKey(blobIndexKey{
362-
repository: obj.RepositoryID,
363-
packfile: obj.Packfile.String(),
364-
offset: int64(obj.Offset),
357+
key, err := encodeIndexKey(packOffsetIndexKey{
358+
Repository: obj.RepositoryID,
359+
Packfile: obj.Packfile.String(),
360+
Offset: int64(obj.Offset),
365361
})
366362
if err != nil {
367363
return nil, nil, err
@@ -372,7 +368,7 @@ func (i *blobsKeyValueIter) Next() ([]interface{}, []byte, error) {
372368
ErrInvalidObjectType.New(obj.Object, "*object.Blob")
373369
}
374370

375-
row, err := blobToRow(obj.RepositoryID, blob, stringContains(i.columns, "content"))
371+
row, err := blobToRow(obj.RepositoryID, blob, stringContains(i.columns, "blob_content"))
376372
if err != nil {
377373
return nil, nil, err
378374
}
@@ -400,26 +396,26 @@ func (i *blobsIndexIter) Next() (sql.Row, error) {
400396
return nil, err
401397
}
402398

403-
var key blobIndexKey
399+
var key packOffsetIndexKey
404400
if err := decodeIndexKey(data, &key); err != nil {
405401
return nil, err
406402
}
407403

408-
packfile := plumbing.NewHash(key.packfile)
409-
if i.decoder == nil || !i.decoder.equals(key.repository, packfile) {
404+
packfile := plumbing.NewHash(key.Packfile)
405+
if i.decoder == nil || !i.decoder.equals(key.Repository, packfile) {
410406
if i.decoder != nil {
411-
if err := i.decoder.close(); err != nil {
407+
if err := i.decoder.Close(); err != nil {
412408
return nil, err
413409
}
414410
}
415411

416-
i.decoder, err = newObjectDecoder(i.pool.repositories[key.repository], packfile)
412+
i.decoder, err = newObjectDecoder(i.pool.repositories[key.Repository], packfile)
417413
if err != nil {
418414
return nil, err
419415
}
420416
}
421417

422-
obj, err := i.decoder.get(key.offset)
418+
obj, err := i.decoder.get(key.Offset)
423419
if err != nil {
424420
return nil, err
425421
}
@@ -429,12 +425,12 @@ func (i *blobsIndexIter) Next() (sql.Row, error) {
429425
return nil, ErrInvalidObjectType.New(obj, "*object.Blob")
430426
}
431427

432-
return blobToRow(key.repository, blob, i.readContent)
428+
return blobToRow(key.Repository, blob, i.readContent)
433429
}
434430

435431
func (i *blobsIndexIter) Close() error {
436432
if i.decoder != nil {
437-
if err := i.decoder.close(); err != nil {
433+
if err := i.decoder.Close(); err != nil {
438434
_ = i.index.Close()
439435
return err
440436
}

blobs_test.go

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,139 @@ func TestBlobsPushdown(t *testing.T) {
135135
require.NoError(err)
136136
require.Len(rows, 0)
137137
}
138+
139+
func TestBlobsIndexKeyValueIter(t *testing.T) {
140+
require := require.New(t)
141+
ctx, path, cleanup := setup(t)
142+
defer cleanup()
143+
144+
table := new(blobsTable)
145+
iter, err := table.IndexKeyValueIter(ctx, []string{"blob_hash", "blob_size"})
146+
require.NoError(err)
147+
148+
var expected = []keyValue{
149+
{
150+
assertEncodeKey(t, packOffsetIndexKey{
151+
Repository: path,
152+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
153+
Offset: 1591,
154+
}),
155+
[]interface{}{
156+
"32858aad3c383ed1ff0a0f9bdf231d54a00c9e88",
157+
int64(189),
158+
},
159+
},
160+
{
161+
assertEncodeKey(t, packOffsetIndexKey{
162+
Repository: path,
163+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
164+
Offset: 79864,
165+
}),
166+
[]interface{}{
167+
"49c6bb89b17060d7b4deacb7b338fcc6ea2352a9",
168+
int64(217848),
169+
},
170+
},
171+
{
172+
assertEncodeKey(t, packOffsetIndexKey{
173+
Repository: path,
174+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
175+
Offset: 2418,
176+
}),
177+
[]interface{}{
178+
"7e59600739c96546163833214c36459e324bad0a",
179+
int64(9),
180+
},
181+
},
182+
{
183+
assertEncodeKey(t, packOffsetIndexKey{
184+
Repository: path,
185+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
186+
Offset: 78932,
187+
}),
188+
[]interface{}{
189+
"880cd14280f4b9b6ed3986d6671f907d7cc2a198",
190+
int64(2780),
191+
},
192+
},
193+
{
194+
assertEncodeKey(t, packOffsetIndexKey{
195+
Repository: path,
196+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
197+
Offset: 82000,
198+
}),
199+
[]interface{}{
200+
"9a48f23120e880dfbe41f7c9b7b708e9ee62a492",
201+
int64(11488),
202+
},
203+
},
204+
{
205+
assertEncodeKey(t, packOffsetIndexKey{
206+
Repository: path,
207+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
208+
Offset: 85438,
209+
}),
210+
[]interface{}{
211+
"9dea2395f5403188298c1dabe8bdafe562c491e3",
212+
int64(78),
213+
},
214+
},
215+
{
216+
assertEncodeKey(t, packOffsetIndexKey{
217+
Repository: path,
218+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
219+
Offset: 1780,
220+
}),
221+
[]interface{}{
222+
"c192bd6a24ea1ab01d78686e417c8bdc7c3d197f",
223+
int64(1072),
224+
},
225+
},
226+
{
227+
assertEncodeKey(t, packOffsetIndexKey{
228+
Repository: path,
229+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
230+
Offset: 81707,
231+
}),
232+
[]interface{}{
233+
"c8f1d8c61f9da76f4cb49fd86322b6e685dba956",
234+
int64(706),
235+
},
236+
},
237+
{
238+
assertEncodeKey(t, packOffsetIndexKey{
239+
Repository: path,
240+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
241+
Offset: 1752,
242+
}),
243+
[]interface{}{
244+
"d3ff53e0564a9f87d8e84b6e28e5060e517008aa",
245+
int64(18),
246+
},
247+
},
248+
{
249+
assertEncodeKey(t, packOffsetIndexKey{
250+
Repository: path,
251+
Packfile: "323a4b6b5de684f9966953a043bc800154e5dbfa",
252+
Offset: 2436,
253+
}),
254+
[]interface{}{
255+
"d5c0f4ab811897cadf03aec358ae60d21f91c50d",
256+
int64(76110),
257+
},
258+
},
259+
}
260+
261+
assertIndexKeyValueIter(t, iter, expected)
262+
}
263+
264+
func TestBlobsIndex(t *testing.T) {
265+
testTableIndex(
266+
t,
267+
new(blobsTable),
268+
[]sql.Expression{expression.NewEquals(
269+
expression.NewGetField(1, sql.Text, "commit_hash", false),
270+
expression.NewLiteral("af2d6a6954d532f8ffb47615169c8fdf9d383a1a", sql.Text),
271+
)},
272+
)
273+
}

commit_blobs_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,39 @@ func TestCommitBlobsTablePushdown(t *testing.T) {
163163
})
164164
}
165165
}
166+
167+
func TestCommitBlobsIndexKeyValueIter(t *testing.T) {
168+
require := require.New(t)
169+
ctx, _, cleanup := setup(t)
170+
defer cleanup()
171+
172+
table := new(commitBlobsTable)
173+
iter, err := table.IndexKeyValueIter(ctx, []string{"blob_hash", "commit_hash"})
174+
require.NoError(err)
175+
176+
i, err := table.RowIter(ctx)
177+
require.NoError(err)
178+
rows, err := sql.RowIterToRows(i)
179+
require.NoError(err)
180+
181+
var expected []keyValue
182+
for _, row := range rows {
183+
var kv keyValue
184+
kv.key = assertEncodeKey(t, row)
185+
kv.values = append(kv.values, row[2], row[1])
186+
expected = append(expected, kv)
187+
}
188+
189+
assertIndexKeyValueIter(t, iter, expected)
190+
}
191+
192+
func TestCommitBlobsIndex(t *testing.T) {
193+
testTableIndex(
194+
t,
195+
new(commitBlobsTable),
196+
[]sql.Expression{expression.NewEquals(
197+
expression.NewGetField(1, sql.Text, "commit_hash", false),
198+
expression.NewLiteral("af2d6a6954d532f8ffb47615169c8fdf9d383a1a", sql.Text),
199+
)},
200+
)
201+
}

commit_trees.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ func newCommitTreesTable() Indexable {
2727
return new(commitTreesTable)
2828
}
2929

30+
var _ Squashable = (*commitTreesTable)(nil)
31+
32+
func (commitTreesTable) isSquashable() {}
3033
func (commitTreesTable) isGitbaseTable() {}
3134

3235
func (commitTreesTable) String() string {
@@ -96,7 +99,7 @@ func (*commitTreesTable) IndexKeyValueIter(
9699
return nil, ErrInvalidGitbaseSession.New(ctx.Session)
97100
}
98101

99-
iter, err := NewRowRepoIter(ctx, new(commitTreesIter))
102+
iter, err := NewRowRepoIter(ctx, &commitTreesIter{ctx: ctx})
100103
if err != nil {
101104
return nil, err
102105
}

commit_trees_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,39 @@ func TestCommitTreesPushdown(t *testing.T) {
117117
})
118118
}
119119
}
120+
121+
func TestCommitTreesIndexKeyValueIter(t *testing.T) {
122+
require := require.New(t)
123+
ctx, _, cleanup := setup(t)
124+
defer cleanup()
125+
126+
table := new(commitTreesTable)
127+
iter, err := table.IndexKeyValueIter(ctx, []string{"tree_hash", "commit_hash"})
128+
require.NoError(err)
129+
130+
i, err := table.RowIter(ctx)
131+
require.NoError(err)
132+
rows, err := sql.RowIterToRows(i)
133+
require.NoError(err)
134+
135+
var expected []keyValue
136+
for _, row := range rows {
137+
var kv keyValue
138+
kv.key = assertEncodeKey(t, row)
139+
kv.values = append(kv.values, row[2], row[1])
140+
expected = append(expected, kv)
141+
}
142+
143+
assertIndexKeyValueIter(t, iter, expected)
144+
}
145+
146+
func TestCommitTreesIndex(t *testing.T) {
147+
testTableIndex(
148+
t,
149+
new(commitTreesTable),
150+
[]sql.Expression{expression.NewEquals(
151+
expression.NewGetField(1, sql.Text, "commit_hash", false),
152+
expression.NewLiteral("af2d6a6954d532f8ffb47615169c8fdf9d383a1a", sql.Text),
153+
)},
154+
)
155+
}

0 commit comments

Comments
 (0)