Skip to content
This repository was archived by the owner on Jan 28, 2021. It is now read-only.

Commit 71a114a

Browse files
committed
sql/index/pilosa: store index names in lookups as maps
Signed-off-by: Miguel Molina <miguel@erizocosmi.co>
1 parent 357c23a commit 71a114a

File tree

3 files changed

+94
-31
lines changed

3 files changed

+94
-31
lines changed

sql/index/pilosa/index.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ func (idx *pilosaIndex) Get(keys ...interface{}) (sql.IndexLookup, error) {
108108
mapping: idx.mapping,
109109
keys: keys,
110110
expressions: idx.expressions,
111+
indexes: map[string]struct{}{
112+
idx.ID(): struct{}{},
113+
},
111114
}, nil
112115
}
113116

@@ -165,6 +168,9 @@ func (idx *pilosaIndex) AscendGreaterOrEqual(keys ...interface{}) (sql.IndexLook
165168
mapping: idx.mapping,
166169
keys: keys,
167170
expressions: idx.expressions,
171+
indexes: map[string]struct{}{
172+
idx.ID(): struct{}{},
173+
},
168174
}, keys, nil), nil
169175
}
170176

@@ -179,6 +185,9 @@ func (idx *pilosaIndex) AscendLessThan(keys ...interface{}) (sql.IndexLookup, er
179185
mapping: idx.mapping,
180186
keys: keys,
181187
expressions: idx.expressions,
188+
indexes: map[string]struct{}{
189+
idx.ID(): struct{}{},
190+
},
182191
}, nil, keys), nil
183192
}
184193

@@ -196,6 +205,9 @@ func (idx *pilosaIndex) AscendRange(greaterOrEqual, lessThan []interface{}) (sql
196205
index: idx.index,
197206
mapping: idx.mapping,
198207
expressions: idx.expressions,
208+
indexes: map[string]struct{}{
209+
idx.ID(): struct{}{},
210+
},
199211
}, greaterOrEqual, lessThan), nil
200212
}
201213

@@ -211,6 +223,9 @@ func (idx *pilosaIndex) DescendGreater(keys ...interface{}) (sql.IndexLookup, er
211223
keys: keys,
212224
expressions: idx.expressions,
213225
reverse: true,
226+
indexes: map[string]struct{}{
227+
idx.ID(): struct{}{},
228+
},
214229
}, keys, nil), nil
215230
}
216231

@@ -226,6 +241,9 @@ func (idx *pilosaIndex) DescendLessOrEqual(keys ...interface{}) (sql.IndexLookup
226241
keys: keys,
227242
expressions: idx.expressions,
228243
reverse: true,
244+
indexes: map[string]struct{}{
245+
idx.ID(): struct{}{},
246+
},
229247
}, nil, keys), nil
230248
}
231249

@@ -244,6 +262,9 @@ func (idx *pilosaIndex) DescendRange(lessOrEqual, greaterThan []interface{}) (sq
244262
mapping: idx.mapping,
245263
expressions: idx.expressions,
246264
reverse: true,
265+
indexes: map[string]struct{}{
266+
idx.ID(): struct{}{},
267+
},
247268
}, greaterThan, lessOrEqual), nil
248269
}
249270

@@ -258,6 +279,9 @@ func (idx *pilosaIndex) Not(keys ...interface{}) (sql.IndexLookup, error) {
258279
mapping: idx.mapping,
259280
keys: keys,
260281
expressions: idx.expressions,
282+
indexes: map[string]struct{}{
283+
idx.ID(): struct{}{},
284+
},
261285
}, nil
262286
}
263287

sql/index/pilosa/lookup.go

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ type (
6464
keys []interface{}
6565
expressions []string
6666
operations []*lookupOperation
67-
indexes []string
67+
indexes map[string]struct{}
6868
}
6969

7070
lookupOperation struct {
@@ -167,7 +167,7 @@ func (l *indexLookup) Values(p sql.Partition) (sql.IndexValueIter, error) {
167167
}
168168

169169
func (l *indexLookup) Indexes() []string {
170-
return uniqueIndexes(append(l.indexes[:], l.id))
170+
return sortedIndexes(l.indexes)
171171
}
172172

173173
// IsMergeable implements sql.Mergeable interface.
@@ -183,7 +183,9 @@ func (l *indexLookup) IsMergeable(lookup sql.IndexLookup) bool {
183183
func (l *indexLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLookup {
184184
lookup := *l
185185
for _, li := range lookups {
186-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
186+
for _, idx := range li.Indexes() {
187+
lookup.indexes[idx] = struct{}{}
188+
}
187189
lookup.operations = append(lookup.operations, &lookupOperation{li, intersect})
188190
}
189191

@@ -194,7 +196,9 @@ func (l *indexLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLookup {
194196
func (l *indexLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
195197
lookup := *l
196198
for _, li := range lookups {
197-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
199+
for _, idx := range li.Indexes() {
200+
lookup.indexes[idx] = struct{}{}
201+
}
198202
lookup.operations = append(lookup.operations, &lookupOperation{li, union})
199203
}
200204

@@ -205,7 +209,9 @@ func (l *indexLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
205209
func (l *indexLookup) Difference(lookups ...sql.IndexLookup) sql.IndexLookup {
206210
lookup := *l
207211
for _, li := range lookups {
208-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
212+
for _, idx := range li.Indexes() {
213+
lookup.indexes[idx] = struct{}{}
214+
}
209215
lookup.operations = append(lookup.operations, &lookupOperation{li, difference})
210216
}
211217

@@ -219,7 +225,7 @@ type filteredLookup struct {
219225
keys []interface{}
220226
expressions []string
221227
operations []*lookupOperation
222-
indexes []string
228+
indexes map[string]struct{}
223229

224230
reverse bool
225231
filter func(int, []byte) (bool, error)
@@ -326,7 +332,7 @@ func (l *filteredLookup) Values(p sql.Partition) (sql.IndexValueIter, error) {
326332
}
327333

328334
func (l *filteredLookup) Indexes() []string {
329-
return uniqueIndexes(append(l.indexes[:], l.id))
335+
return sortedIndexes(l.indexes)
330336
}
331337

332338
// IsMergeable implements sql.Mergeable interface.
@@ -341,7 +347,9 @@ func (l *filteredLookup) IsMergeable(lookup sql.IndexLookup) bool {
341347
func (l *filteredLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLookup {
342348
lookup := *l
343349
for _, li := range lookups {
344-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
350+
for _, idx := range li.Indexes() {
351+
lookup.indexes[idx] = struct{}{}
352+
}
345353
lookup.operations = append(lookup.operations, &lookupOperation{li, intersect})
346354
}
347355

@@ -352,7 +360,9 @@ func (l *filteredLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLooku
352360
func (l *filteredLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
353361
lookup := *l
354362
for _, li := range lookups {
355-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
363+
for _, idx := range li.Indexes() {
364+
lookup.indexes[idx] = struct{}{}
365+
}
356366
lookup.operations = append(lookup.operations, &lookupOperation{li, union})
357367
}
358368

@@ -363,7 +373,9 @@ func (l *filteredLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
363373
func (l *filteredLookup) Difference(lookups ...sql.IndexLookup) sql.IndexLookup {
364374
lookup := *l
365375
for _, li := range lookups {
366-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
376+
for _, idx := range li.Indexes() {
377+
lookup.indexes[idx] = struct{}{}
378+
}
367379
lookup.operations = append(lookup.operations, &lookupOperation{li, difference})
368380
}
369381

@@ -388,7 +400,7 @@ type negateLookup struct {
388400
mapping *mapping
389401
keys []interface{}
390402
expressions []string
391-
indexes []string
403+
indexes map[string]struct{}
392404
operations []*lookupOperation
393405
}
394406

@@ -501,7 +513,7 @@ func (l *negateLookup) Values(p sql.Partition) (sql.IndexValueIter, error) {
501513
}
502514

503515
func (l *negateLookup) Indexes() []string {
504-
return uniqueIndexes(append(l.indexes[:], l.id))
516+
return sortedIndexes(l.indexes)
505517
}
506518

507519
// IsMergeable implements sql.Mergeable interface.
@@ -517,7 +529,9 @@ func (l *negateLookup) IsMergeable(lookup sql.IndexLookup) bool {
517529
func (l *negateLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLookup {
518530
lookup := *l
519531
for _, li := range lookups {
520-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
532+
for _, idx := range li.Indexes() {
533+
lookup.indexes[idx] = struct{}{}
534+
}
521535
lookup.operations = append(lookup.operations, &lookupOperation{li, intersect})
522536
}
523537

@@ -528,7 +542,9 @@ func (l *negateLookup) Intersection(lookups ...sql.IndexLookup) sql.IndexLookup
528542
func (l *negateLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
529543
lookup := *l
530544
for _, li := range lookups {
531-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
545+
for _, idx := range li.Indexes() {
546+
lookup.indexes[idx] = struct{}{}
547+
}
532548
lookup.operations = append(lookup.operations, &lookupOperation{li, union})
533549
}
534550

@@ -539,7 +555,9 @@ func (l *negateLookup) Union(lookups ...sql.IndexLookup) sql.IndexLookup {
539555
func (l *negateLookup) Difference(lookups ...sql.IndexLookup) sql.IndexLookup {
540556
lookup := *l
541557
for _, li := range lookups {
542-
lookup.indexes = append(lookup.indexes, li.Indexes()...)
558+
for _, idx := range li.Indexes() {
559+
lookup.indexes[idx] = struct{}{}
560+
}
543561
lookup.operations = append(lookup.operations, &lookupOperation{li, difference})
544562
}
545563

@@ -748,13 +766,9 @@ func compare(a, b interface{}) (int, error) {
748766
}
749767
}
750768

751-
func uniqueIndexes(indexes []string) []string {
752-
var m = make(map[string]struct{})
753-
for _, idx := range indexes {
754-
m[idx] = struct{}{}
755-
}
756-
var result = make([]string, 0, len(m))
757-
for idx := range m {
769+
func sortedIndexes(indexes map[string]struct{}) []string {
770+
var result = make([]string, 0, len(indexes))
771+
for idx := range indexes {
758772
result = append(result, idx)
759773
}
760774

sql/index/pilosa/lookup_test.go

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,20 @@ func TestMergeable(t *testing.T) {
204204

205205
func TestIndexes(t *testing.T) {
206206
testCases := []sql.IndexLookup{
207-
&indexLookup{id: "foo"},
208-
&negateLookup{id: "foo"},
209-
&ascendLookup{filteredLookup: &filteredLookup{id: "foo"}},
210-
&descendLookup{filteredLookup: &filteredLookup{id: "foo"}},
207+
&indexLookup{id: "foo", indexes: map[string]struct{}{"foo": struct{}{}}},
208+
&negateLookup{id: "foo", indexes: map[string]struct{}{"foo": struct{}{}}},
209+
&ascendLookup{
210+
filteredLookup: &filteredLookup{
211+
id: "foo",
212+
indexes: map[string]struct{}{"foo": struct{}{}},
213+
},
214+
},
215+
&descendLookup{
216+
filteredLookup: &filteredLookup{
217+
id: "foo",
218+
indexes: map[string]struct{}{"foo": struct{}{}},
219+
},
220+
},
211221
}
212222

213223
for _, tt := range testCases {
@@ -221,11 +231,26 @@ func TestLookupIndexes(t *testing.T) {
221231
require := require.New(t)
222232

223233
lookups := []sql.IndexLookup{
224-
&indexLookup{id: "1"},
225-
&negateLookup{id: "2"},
226-
&ascendLookup{filteredLookup: &filteredLookup{id: "3"}},
227-
&descendLookup{filteredLookup: &filteredLookup{id: "4"}},
228-
&filteredLookup{id: "5"},
234+
&indexLookup{
235+
id: "1",
236+
indexes: map[string]struct{}{"1": struct{}{}},
237+
},
238+
&negateLookup{
239+
id: "2",
240+
indexes: map[string]struct{}{"2": struct{}{}},
241+
},
242+
&ascendLookup{filteredLookup: &filteredLookup{
243+
id: "3",
244+
indexes: map[string]struct{}{"3": struct{}{}},
245+
}},
246+
&descendLookup{filteredLookup: &filteredLookup{
247+
id: "4",
248+
indexes: map[string]struct{}{"4": struct{}{}},
249+
}},
250+
&filteredLookup{
251+
id: "5",
252+
indexes: map[string]struct{}{"5": struct{}{}},
253+
},
229254
}
230255

231256
expected := []string{"1", "2", "3", "4", "5"}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy