Skip to content

Commit 8aa220a

Browse files
authored
Merge pull request #429 from erizocosmico/fix/siva-use-index
internal/rule,gitbase: use refs indexes in squash table
2 parents a61496a + 083e46c commit 8aa220a

File tree

4 files changed

+223
-4
lines changed

4 files changed

+223
-4
lines changed

internal/rule/squashjoins.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,12 @@ func buildSquashedTable(
311311
if err != nil {
312312
return nil, err
313313
}
314-
iter = gitbase.NewAllRefsIter(f, false)
314+
315+
if index == nil {
316+
iter = gitbase.NewAllRefsIter(f, false)
317+
} else {
318+
iter = gitbase.NewIndexRefsIter(f, index)
319+
}
315320
default:
316321
return nil, errInvalidIteratorChain.New("refs", iter)
317322
}
@@ -768,7 +773,18 @@ func buildSquashedTable(
768773

769774
mapping := buildSchemaMapping(originalSchema, iter.Schema())
770775

771-
var node sql.Node = newSquashedTable(iter, mapping, allFilters, tableNames...)
776+
var indexedTables []string
777+
if index != nil {
778+
indexedTables = []string{firstTable}
779+
}
780+
781+
var node sql.Node = newSquashedTable(
782+
iter,
783+
mapping,
784+
allFilters,
785+
indexedTables,
786+
tableNames...,
787+
)
772788

773789
if len(filters) > 0 {
774790
f, err := fixFieldIndexes(expression.JoinAnd(filters...), iter.Schema())
@@ -988,16 +1004,18 @@ type squashedTable struct {
9881004
tables []string
9891005
schemaMappings []int
9901006
filters []sql.Expression
1007+
indexedTables []string
9911008
schema sql.Schema
9921009
}
9931010

9941011
func newSquashedTable(
9951012
iter gitbase.ChainableIter,
9961013
mapping []int,
9971014
filters []sql.Expression,
1015+
indexedTables []string,
9981016
tables ...string,
9991017
) *squashedTable {
1000-
return &squashedTable{iter, tables, mapping, filters, nil}
1018+
return &squashedTable{iter, tables, mapping, filters, indexedTables, nil}
10011019
}
10021020

10031021
var _ sql.Node = (*squashedTable)(nil)
@@ -1058,9 +1076,18 @@ func (t *squashedTable) String() string {
10581076
}
10591077
_ = fp.WriteChildren(filters...)
10601078

1079+
children := []string{cp.String(), fp.String()}
1080+
1081+
if len(t.indexedTables) > 0 {
1082+
ip := sql.NewTreePrinter()
1083+
_ = ip.WriteNode("IndexedTables")
1084+
_ = ip.WriteChildren(t.indexedTables...)
1085+
children = append(children, ip.String())
1086+
}
1087+
10611088
p := sql.NewTreePrinter()
10621089
_ = p.WriteNode("SquashedTable(%s)", strings.Join(t.tables, ", "))
1063-
_ = p.WriteChildren(cp.String(), fp.String())
1090+
_ = p.WriteChildren(children...)
10641091
return p.String()
10651092
}
10661093
func (t *squashedTable) TransformExpressionsUp(sql.TransformExprFunc) (sql.Node, error) {

internal/rule/squashjoins_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ func TestSquashJoins(t *testing.T) {
8787
),
8888
lit(4),
8989
},
90+
nil,
9091
gitbase.RepositoriesTableName,
9192
gitbase.ReferencesTableName,
9293
gitbase.CommitsTableName,
@@ -149,6 +150,7 @@ func TestSquashJoinsIndexes(t *testing.T) {
149150
col(0, gitbase.CommitTreesTableName, "commit_hash"),
150151
),
151152
},
153+
[]string{gitbase.CommitsTableName},
152154
gitbase.CommitsTableName,
153155
gitbase.CommitTreesTableName,
154156
),
@@ -238,6 +240,7 @@ func TestSquashJoinsPartial(t *testing.T) {
238240
),
239241
lit(4),
240242
},
243+
nil,
241244
gitbase.RepositoriesTableName,
242245
gitbase.ReferencesTableName,
243246
),
@@ -674,6 +677,7 @@ func TestBuildSquashedTable(t *testing.T) {
674677
repoRemotesFilter,
675678
remotesFilter,
676679
},
680+
nil,
677681
gitbase.RepositoriesTableName,
678682
gitbase.RemotesTableName,
679683
),
@@ -707,6 +711,7 @@ func TestBuildSquashedTable(t *testing.T) {
707711
remoteRefsFilter,
708712
refFilter,
709713
},
714+
nil,
710715
gitbase.RemotesTableName,
711716
gitbase.ReferencesTableName,
712717
),
@@ -739,6 +744,7 @@ func TestBuildSquashedTable(t *testing.T) {
739744
repoRefsFilter,
740745
repoRefsRedundantFilter,
741746
},
747+
nil,
742748
gitbase.RepositoriesTableName,
743749
gitbase.ReferencesTableName,
744750
),
@@ -774,6 +780,7 @@ func TestBuildSquashedTable(t *testing.T) {
774780
refsCommitsFilter,
775781
refCommitsRedundantFilter,
776782
},
783+
nil,
777784
gitbase.ReferencesTableName,
778785
gitbase.CommitsTableName,
779786
),
@@ -822,6 +829,7 @@ func TestBuildSquashedTable(t *testing.T) {
822829
commitTreeEntriesFilter,
823830
commitTreeEntriesRedundantFilter,
824831
},
832+
nil,
825833
gitbase.CommitsTableName,
826834
gitbase.TreeEntriesTableName,
827835
),
@@ -861,6 +869,7 @@ func TestBuildSquashedTable(t *testing.T) {
861869
refCommitTreesFilter,
862870
refCommitTreesRedundantFilter,
863871
},
872+
nil,
864873
gitbase.ReferencesTableName,
865874
gitbase.CommitTreesTableName,
866875
),
@@ -904,6 +913,7 @@ func TestBuildSquashedTable(t *testing.T) {
904913
treeEntryBlobsRedundantFilter,
905914
treeEntryBlobsFilter,
906915
},
916+
nil,
907917
gitbase.TreeEntriesTableName,
908918
gitbase.BlobsTableName,
909919
),
@@ -962,6 +972,7 @@ func TestBuildSquashedTable(t *testing.T) {
962972
repoCommitsFilter,
963973
repoCommitsRedundantFilter,
964974
},
975+
nil,
965976
gitbase.RepositoriesTableName,
966977
gitbase.CommitsTableName,
967978
),
@@ -996,6 +1007,7 @@ func TestBuildSquashedTable(t *testing.T) {
9961007
refsRefCommitsFilter,
9971008
refsRefCommitsRedundantFilter,
9981009
},
1010+
nil,
9991011
gitbase.ReferencesTableName,
10001012
gitbase.RefCommitsTableName,
10011013
),
@@ -1030,6 +1042,7 @@ func TestBuildSquashedTable(t *testing.T) {
10301042
refsRefCommitsFilter,
10311043
refsRefCommitsHeadRedundantFilter,
10321044
},
1045+
nil,
10331046
gitbase.ReferencesTableName,
10341047
gitbase.RefCommitsTableName,
10351048
),
@@ -1064,6 +1077,7 @@ func TestBuildSquashedTable(t *testing.T) {
10641077
refCommitsCommitsFilter,
10651078
refCommitsCommitsRedundantFilter,
10661079
},
1080+
nil,
10671081
gitbase.RefCommitsTableName,
10681082
gitbase.CommitsTableName,
10691083
),
@@ -1095,6 +1109,7 @@ func TestBuildSquashedTable(t *testing.T) {
10951109
repoTreeEntriesFilter,
10961110
repoTreeEntriesRedundantFilter,
10971111
},
1112+
nil,
10981113
gitbase.RepositoriesTableName,
10991114
gitbase.TreeEntriesTableName,
11001115
),
@@ -1131,6 +1146,7 @@ func TestBuildSquashedTable(t *testing.T) {
11311146
repoRefCommitsFilter,
11321147
repoRefCommitsRedundantFilter,
11331148
},
1149+
nil,
11341150
gitbase.RepositoriesTableName,
11351151
gitbase.RefCommitsTableName,
11361152
),
@@ -1165,6 +1181,7 @@ func TestBuildSquashedTable(t *testing.T) {
11651181
repoBlobsFilter,
11661182
repoBlobsRedundantFilter,
11671183
},
1184+
nil,
11681185
gitbase.RepositoriesTableName,
11691186
gitbase.BlobsTableName,
11701187
),
@@ -1211,6 +1228,7 @@ func TestBuildSquashedTable(t *testing.T) {
12111228
refCommitsCommitsFilter,
12121229
refCommitsCommitsRedundantFilter,
12131230
},
1231+
nil,
12141232
gitbase.ReferencesTableName,
12151233
gitbase.RefCommitsTableName,
12161234
gitbase.CommitsTableName,
@@ -1258,6 +1276,7 @@ func TestBuildSquashedTable(t *testing.T) {
12581276
refCommitsCommitsFilter,
12591277
refCommitsCommitsRedundantFilter,
12601278
},
1279+
nil,
12611280
gitbase.ReferencesTableName,
12621281
gitbase.RefCommitsTableName,
12631282
gitbase.CommitsTableName,
@@ -1293,6 +1312,7 @@ func TestBuildSquashedTable(t *testing.T) {
12931312
commitTreeTreeEntriesFilter,
12941313
commitTreeTreeEntriesRedundantFilter,
12951314
},
1315+
nil,
12961316
gitbase.CommitTreesTableName,
12971317
gitbase.TreeEntriesTableName,
12981318
),
@@ -1328,6 +1348,7 @@ func TestBuildSquashedTable(t *testing.T) {
13281348
commitCommitTreesFilter,
13291349
commitCommitTreesRedundantFilter,
13301350
},
1351+
nil,
13311352
gitbase.CommitsTableName,
13321353
gitbase.CommitTreesTableName,
13331354
),
@@ -1363,6 +1384,7 @@ func TestBuildSquashedTable(t *testing.T) {
13631384
commitCommitTreesFilter,
13641385
commitCommitTreesByTreeRedundantFilter,
13651386
},
1387+
nil,
13661388
gitbase.CommitsTableName,
13671389
gitbase.CommitTreesTableName,
13681390
),
@@ -1397,6 +1419,7 @@ func TestBuildSquashedTable(t *testing.T) {
13971419
refCommitCommitTreesFilter,
13981420
refCommitCommitTreesRedundantFilter,
13991421
},
1422+
nil,
14001423
gitbase.RefCommitsTableName,
14011424
gitbase.CommitTreesTableName,
14021425
),
@@ -1435,6 +1458,7 @@ func TestBuildSquashedTable(t *testing.T) {
14351458
refCommitBlobsFilter,
14361459
refCommitBlobsRedundantFilter,
14371460
},
1461+
nil,
14381462
gitbase.ReferencesTableName,
14391463
gitbase.CommitBlobsTableName,
14401464
),
@@ -1468,6 +1492,7 @@ func TestBuildSquashedTable(t *testing.T) {
14681492
refCommitCommitBlobsFilter,
14691493
refCommitCommitBlobsRedundantFilter,
14701494
},
1495+
nil,
14711496
gitbase.RefCommitsTableName,
14721497
gitbase.CommitBlobsTableName,
14731498
),
@@ -1502,6 +1527,7 @@ func TestBuildSquashedTable(t *testing.T) {
15021527
commitCommitBlobsFilter,
15031528
commitCommitBlobsRedundantFilter,
15041529
},
1530+
nil,
15051531
gitbase.CommitsTableName,
15061532
gitbase.CommitBlobsTableName,
15071533
),
@@ -1536,10 +1562,37 @@ func TestBuildSquashedTable(t *testing.T) {
15361562
commitBlobBlobsFilter,
15371563
commitBlobBlobsRedundantFilter,
15381564
},
1565+
nil,
15391566
gitbase.CommitBlobsTableName,
15401567
gitbase.BlobsTableName,
15411568
),
15421569
},
1570+
{
1571+
"refs with indexes",
1572+
[]sql.Table{refs, refCommits},
1573+
[]sql.Expression{
1574+
refsRefCommitsRedundantFilter,
1575+
},
1576+
nil,
1577+
map[string]sql.IndexLookup{
1578+
gitbase.ReferencesTableName: idx1,
1579+
gitbase.RefCommitsTableName: idx2,
1580+
},
1581+
nil,
1582+
newSquashedTable(
1583+
gitbase.NewRefRefCommitsIter(
1584+
gitbase.NewIndexRefsIter(nil, idx1),
1585+
nil,
1586+
),
1587+
nil,
1588+
[]sql.Expression{
1589+
refsRefCommitsRedundantFilter,
1590+
},
1591+
[]string{gitbase.ReferencesTableName},
1592+
gitbase.ReferencesTableName,
1593+
gitbase.RefCommitsTableName,
1594+
),
1595+
},
15431596
{
15441597
"ref commits with indexes",
15451598
[]sql.Table{refCommits, commits},
@@ -1561,6 +1614,7 @@ func TestBuildSquashedTable(t *testing.T) {
15611614
[]sql.Expression{
15621615
refCommitsCommitsRedundantFilter,
15631616
},
1617+
[]string{gitbase.RefCommitsTableName},
15641618
gitbase.RefCommitsTableName,
15651619
gitbase.CommitsTableName,
15661620
),
@@ -1587,6 +1641,7 @@ func TestBuildSquashedTable(t *testing.T) {
15871641
[]sql.Expression{
15881642
commitCommitTreesRedundantFilter,
15891643
},
1644+
[]string{gitbase.CommitsTableName},
15901645
gitbase.CommitsTableName,
15911646
gitbase.CommitTreesTableName,
15921647
),
@@ -1613,6 +1668,7 @@ func TestBuildSquashedTable(t *testing.T) {
16131668
[]sql.Expression{
16141669
commitTreeTreeEntriesRedundantFilter,
16151670
},
1671+
[]string{gitbase.CommitTreesTableName},
16161672
gitbase.CommitTreesTableName,
16171673
gitbase.TreeEntriesTableName,
16181674
),
@@ -1639,6 +1695,7 @@ func TestBuildSquashedTable(t *testing.T) {
16391695
[]sql.Expression{
16401696
commitBlobBlobsRedundantFilter,
16411697
},
1698+
[]string{gitbase.CommitBlobsTableName},
16421699
gitbase.CommitBlobsTableName,
16431700
gitbase.BlobsTableName,
16441701
),
@@ -1665,6 +1722,7 @@ func TestBuildSquashedTable(t *testing.T) {
16651722
[]sql.Expression{
16661723
treeEntryBlobsRedundantFilter,
16671724
},
1725+
[]string{gitbase.TreeEntriesTableName},
16681726
gitbase.TreeEntriesTableName,
16691727
gitbase.BlobsTableName,
16701728
),
@@ -1699,6 +1757,7 @@ func TestBuildSquashedTable(t *testing.T) {
16991757
refsCommitFilesFilter,
17001758
refsCommitFilesRedundantFilter,
17011759
},
1760+
nil,
17021761
gitbase.ReferencesTableName,
17031762
gitbase.CommitFilesTableName,
17041763
),
@@ -1733,6 +1792,7 @@ func TestBuildSquashedTable(t *testing.T) {
17331792
commitsCommitFilesFilter,
17341793
commitsCommitFilesRedundantFilter,
17351794
},
1795+
nil,
17361796
gitbase.CommitsTableName,
17371797
gitbase.CommitFilesTableName,
17381798
),
@@ -1771,6 +1831,7 @@ func TestBuildSquashedTable(t *testing.T) {
17711831
commitFilesFilesTreeHashRedundantFilter,
17721832
commitFilesFilesBlobHashRedundantFilter,
17731833
},
1834+
nil,
17741835
gitbase.CommitFilesTableName,
17751836
gitbase.FilesTableName,
17761837
),
@@ -1801,6 +1862,7 @@ func TestBuildSquashedTable(t *testing.T) {
18011862
commitFilesFilesTreeHashRedundantFilter,
18021863
commitFilesFilesFilePathRedundantFilter,
18031864
},
1865+
[]string{gitbase.CommitFilesTableName},
18041866
gitbase.CommitFilesTableName,
18051867
gitbase.FilesTableName,
18061868
),

0 commit comments

Comments
 (0)