Skip to content

Commit a841169

Browse files
committed
schemachanger: use newer generic btree
Informs: #144504 Release note: None
1 parent 4d33777 commit a841169

File tree

5 files changed

+26
-28
lines changed

5 files changed

+26
-28
lines changed

pkg/sql/schemachanger/rel/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ go_library(
4141
"//pkg/util/timeutil",
4242
"//pkg/util/uuid",
4343
"@com_github_cockroachdb_errors//:errors",
44-
"@com_github_raduberinde_btree//:btree",
44+
"@com_github_google_btree//:btree",
4545
"@in_gopkg_yaml_v2//:yaml_v2",
4646
"@in_gopkg_yaml_v3//:yaml_v3",
4747
],

pkg/sql/schemachanger/rel/database.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ package rel
88
import (
99
"reflect"
1010

11-
"github.com/RaduBerinde/btree" // TODO(#144504): switch to the newer btree
1211
"github.com/cockroachdb/cockroach/pkg/util/iterutil"
1312
"github.com/cockroachdb/errors"
13+
"github.com/google/btree"
1414
)
1515

1616
// Database is a data structure for indexing entities.
@@ -148,7 +148,7 @@ func NewDatabase(sc *Schema, indexes ...Index) (*Database, error) {
148148
}
149149
t.indexes[i] = index{
150150
indexSpec: spec,
151-
tree: btree.New(32),
151+
tree: btree.NewG[*valuesItem](32, (*valuesItem).less),
152152
}
153153
}
154154
return t, nil
@@ -275,7 +275,7 @@ func (t *Database) Insert(v interface{}) error {
275275

276276
type index struct {
277277
indexSpec
278-
tree *btree.BTree
278+
tree *btree.BTreeG[*valuesItem]
279279
}
280280

281281
type indexSpec struct {
@@ -302,8 +302,7 @@ func (t *Database) iterate(where values, hasAttrs ordinalSet, f entityIterator)
302302
}
303303
from, to := getValuesItems(&idx.indexSpec, where)
304304
defer putValuesItems(from, to)
305-
idx.tree.AscendRange(from, to, func(i btree.Item) bool {
306-
cv := i.(*valuesItem)
305+
idx.tree.AscendRange(from, to, func(cv *valuesItem) bool {
307306
// We want to skip items which do not have values set for
308307
// all members of the where clause.
309308
if where.attrs.without(cv.attrs) != 0 {

pkg/sql/schemachanger/rel/database_items.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55

66
package rel
77

8-
import (
9-
"sync"
10-
11-
"github.com/RaduBerinde/btree" // TODO(#144504): switch to the newer btree
12-
)
8+
import "sync"
139

1410
// valuesItem is used to construct query bounds from the tree.
1511
type valuesItem struct {
@@ -19,8 +15,8 @@ type valuesItem struct {
1915
idx *indexSpec
2016
}
2117

22-
func (v *valuesItem) Less(than btree.Item) bool {
23-
return v.idx.compareItems(v, than.(*valuesItem)) < 0
18+
func (v *valuesItem) less(than *valuesItem) bool {
19+
return v.idx.compareItems(v, than) < 0
2420
}
2521

2622
func (index *indexSpec) compareItems(a, b *valuesItem) (ret int) {

pkg/sql/schemachanger/scplan/internal/scgraph/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ go_library(
2121
"//pkg/util/iterutil",
2222
"@com_github_cockroachdb_errors//:errors",
2323
"@com_github_cockroachdb_redact//:redact",
24-
"@com_github_raduberinde_btree//:btree",
24+
"@com_github_google_btree//:btree",
2525
],
2626
)
2727

pkg/sql/schemachanger/scplan/internal/scgraph/dep_edge_tree.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ package scgraph
88
import (
99
"sync"
1010

11-
"github.com/RaduBerinde/btree" // TODO(#144504): switch to the newer btree
1211
"github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb"
1312
"github.com/cockroachdb/cockroach/pkg/sql/schemachanger/screl"
1413
"github.com/cockroachdb/cockroach/pkg/util/iterutil"
1514
"github.com/cockroachdb/errors"
15+
"github.com/google/btree"
1616
)
1717

1818
// edgeTreeOrder order in which the edge tree is sorted,
@@ -30,8 +30,8 @@ type getTargetIdxFunc = func(n *screl.Node) targetIdx
3030
// depEdges is a data structure to store the set of depEdges. It offers
3131
// in-order traversal of edges from or to any node in the graph.
3232
type depEdges struct {
33-
fromTo *btree.BTree
34-
toFrom *btree.BTree
33+
fromTo *btree.BTreeG[*depEdgeTreeEntry]
34+
toFrom *btree.BTreeG[*depEdgeTreeEntry]
3535

3636
getTargetIdx getTargetIdxFunc
3737
edgeAlloc depEdgeAlloc
@@ -42,8 +42,8 @@ type depEdges struct {
4242
func makeDepEdges(getTargetIdx getTargetIdxFunc) depEdges {
4343
const degree = 32 // arbitrary
4444
return depEdges{
45-
fromTo: btree.New(degree),
46-
toFrom: btree.New(degree),
45+
fromTo: btree.NewG[*depEdgeTreeEntry](degree, (*depEdgeTreeEntry).less),
46+
toFrom: btree.NewG[*depEdgeTreeEntry](degree, (*depEdgeTreeEntry).less),
4747
getTargetIdx: getTargetIdx,
4848
}
4949
}
@@ -109,7 +109,11 @@ func (et *depEdges) iterateToNode(n *screl.Node, it DepEdgeIterator) (err error)
109109
// (target, status) node will be visited, and if the order is toFrom, then all
110110
// edges to that (target, status) node will be visited.
111111
func iterateDepEdges(
112-
order edgeTreeOrder, t *btree.BTree, target targetIdx, status scpb.Status, it DepEdgeIterator,
112+
order edgeTreeOrder,
113+
t *btree.BTreeG[*depEdgeTreeEntry],
114+
target targetIdx,
115+
status scpb.Status,
116+
it DepEdgeIterator,
113117
) (err error) {
114118
var idx int
115119
if order == toFrom {
@@ -123,17 +127,17 @@ func iterateDepEdges(
123127
defer putDepEdgeTreeEntry(k2)
124128
*k1 = depEdgeTreeEntry{edgeKey: qk, order: order, kind: queryStart}
125129
*k2 = depEdgeTreeEntry{edgeKey: qk, order: order, kind: queryEnd}
126-
t.AscendRange(k1, k2, func(i btree.Item) (wantMore bool) {
127-
err = it(i.(*depEdgeTreeEntry).edge)
130+
t.AscendRange(k1, k2, func(i *depEdgeTreeEntry) (wantMore bool) {
131+
err = it(i.edge)
128132
return err == nil
129133
})
130134
return iterutil.Map(err)
131135
}
132136

133137
// iterates iterates all edges.
134138
func (et *depEdges) iterate(it DepEdgeIterator) (err error) {
135-
et.fromTo.Ascend(func(i btree.Item) bool {
136-
err = it(i.(*depEdgeTreeEntry).edge)
139+
et.fromTo.Ascend(func(i *depEdgeTreeEntry) bool {
140+
err = it(i.edge)
137141
return err == nil
138142
})
139143
return iterutil.Map(err)
@@ -144,8 +148,8 @@ func (et *depEdges) get(k edgeKey) (*DepEdge, bool) {
144148
qk := getDepEdgeTreeEntry()
145149
defer putDepEdgeTreeEntry(qk)
146150
*qk = depEdgeTreeEntry{edgeKey: k, order: fromTo}
147-
if got := et.fromTo.Get(qk); got != nil {
148-
return got.(*depEdgeTreeEntry).edge, true
151+
if got, _ := et.fromTo.Get(qk); got != nil {
152+
return got.edge, true
149153
}
150154
return nil, false
151155
}
@@ -205,8 +209,7 @@ const (
205209
queryEnd
206210
)
207211

208-
func (ek *depEdgeTreeEntry) Less(other btree.Item) bool {
209-
o := other.(*depEdgeTreeEntry)
212+
func (ek *depEdgeTreeEntry) less(o *depEdgeTreeEntry) bool {
210213
less, eq := cmpEdgeTreeEntry(ek, o, true /* first */)
211214
if eq {
212215
less, _ = cmpEdgeTreeEntry(ek, o, false /* first */)

0 commit comments

Comments
 (0)