Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Unified Diff: impl/memory/datastore_index_selection.go

Issue 1355783002: Refactor keys and queries in datastore service and implementation. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: appease errcheck Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « impl/memory/datastore_index.go ('k') | impl/memory/datastore_index_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: impl/memory/datastore_index_selection.go
diff --git a/impl/memory/datastore_index_selection.go b/impl/memory/datastore_index_selection.go
index 2e465692c087a2fdd56114b6272b4fa3707ec06d..d7dfb6f690deb7d6b6bb4cc7b15cd6371ff60e33 100644
--- a/impl/memory/datastore_index_selection.go
+++ b/impl/memory/datastore_index_selection.go
@@ -48,7 +48,7 @@ type reducedQuery struct {
numCols int
}
-type IndexDefinitionSortable struct {
+type indexDefinitionSortable struct {
// eqFilts is the list of ACTUAL prefix columns. Note that it may contain
// redundant columns! (e.g. (tag, tag) is a perfectly valid prefix, becuase
// (tag=1, tag=2) is a perfectly valid query).
@@ -56,11 +56,11 @@ type IndexDefinitionSortable struct {
coll *memCollection
}
-func (i *IndexDefinitionSortable) hasAncestor() bool {
+func (i *indexDefinitionSortable) hasAncestor() bool {
return len(i.eqFilts) > 0 && i.eqFilts[0].Property == "__ancestor__"
}
-func (i *IndexDefinitionSortable) numEqHits(c *constraints) int {
+func (i *indexDefinitionSortable) numEqHits(c *constraints) int {
ret := 0
for _, filt := range i.eqFilts {
if _, ok := c.constraints[filt.Property]; ok {
@@ -70,12 +70,12 @@ func (i *IndexDefinitionSortable) numEqHits(c *constraints) int {
return ret
}
-type IndexDefinitionSortableSlice []IndexDefinitionSortable
+type indexDefinitionSortableSlice []indexDefinitionSortable
-func (s IndexDefinitionSortableSlice) Len() int { return len(s) }
-func (s IndexDefinitionSortableSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s IndexDefinitionSortableSlice) Less(i, j int) bool {
- a, b := s[i], s[j]
+func (idxs indexDefinitionSortableSlice) Len() int { return len(idxs) }
+func (idxs indexDefinitionSortableSlice) Swap(i, j int) { idxs[i], idxs[j] = idxs[j], idxs[i] }
+func (idxs indexDefinitionSortableSlice) Less(i, j int) bool {
+ a, b := idxs[i], idxs[j]
if a.coll == nil && b.coll != nil {
return true
} else if a.coll != nil && b.coll == nil {
@@ -90,9 +90,9 @@ func (s IndexDefinitionSortableSlice) Less(i, j int) bool {
}
for k, col := range a.eqFilts {
ocol := b.eqFilts[k]
- if col.Direction == ds.ASCENDING && ocol.Direction == ds.DESCENDING {
+ if !col.Descending && ocol.Descending {
return true
- } else if col.Direction == ds.DESCENDING && ocol.Direction == ds.ASCENDING {
+ } else if col.Descending && !ocol.Descending {
return false
}
if col.Property < ocol.Property {
@@ -104,7 +104,7 @@ func (s IndexDefinitionSortableSlice) Less(i, j int) bool {
return false
}
-// maybeAddDefinition possibly adds a new IndexDefinitionSortable to this slice.
+// maybeAddDefinition possibly adds a new indexDefinitionSortable to this slice.
// It's only added if it could be useful in servicing q, otherwise this function
// is a noop.
//
@@ -114,7 +114,7 @@ func (s IndexDefinitionSortableSlice) Less(i, j int) bool {
// If the proposed index is PERFECT (e.g. contains enough columns to cover all
// equality filters, and also has the correct suffix), idxs will be replaced
// with JUST that index, and this will return true.
-func (idxs *IndexDefinitionSortableSlice) maybeAddDefinition(q *reducedQuery, s *memStore, missingTerms stringset.Set, id *ds.IndexDefinition) bool {
+func (idxs *indexDefinitionSortableSlice) maybeAddDefinition(q *reducedQuery, s *memStore, missingTerms stringset.Set, id *ds.IndexDefinition) bool {
// Kindless queries are handled elsewhere.
if id.Kind != q.kind {
impossible(
@@ -183,7 +183,7 @@ func (idxs *IndexDefinitionSortableSlice) maybeAddDefinition(q *reducedQuery, s
//
// A perfect match contains ALL the equality filter columns (or more, since
// we can use residuals to fill in the extras).
- toAdd := IndexDefinitionSortable{coll: coll}
+ toAdd := indexDefinitionSortable{coll: coll}
toAdd.eqFilts = eqFilts
for _, sb := range toAdd.eqFilts {
missingTerms.Del(sb.Property)
@@ -200,7 +200,7 @@ func (idxs *IndexDefinitionSortableSlice) maybeAddDefinition(q *reducedQuery, s
}
}
if perfect {
- *idxs = IndexDefinitionSortableSlice{toAdd}
+ *idxs = indexDefinitionSortableSlice{toAdd}
} else {
*idxs = append(*idxs, toAdd)
}
@@ -210,7 +210,7 @@ func (idxs *IndexDefinitionSortableSlice) maybeAddDefinition(q *reducedQuery, s
// getRelevantIndexes retrieves the relevant indexes which could be used to
// service q. It returns nil if it's not possible to service q with the current
// indexes.
-func getRelevantIndexes(q *reducedQuery, s *memStore) (IndexDefinitionSortableSlice, error) {
+func getRelevantIndexes(q *reducedQuery, s *memStore) (indexDefinitionSortableSlice, error) {
missingTerms := stringset.New(len(q.eqFilters))
for k := range q.eqFilters {
if k == "__ancestor__" {
@@ -221,7 +221,7 @@ func getRelevantIndexes(q *reducedQuery, s *memStore) (IndexDefinitionSortableSl
}
missingTerms.Add(k)
}
- idxs := IndexDefinitionSortableSlice{}
+ idxs := indexDefinitionSortableSlice{}
// First we add builtins
// add
@@ -257,7 +257,7 @@ func getRelevantIndexes(q *reducedQuery, s *memStore) (IndexDefinitionSortableSl
if idxs.maybeAddDefinition(q, s, missingTerms, &ds.IndexDefinition{
Kind: q.kind,
SortBy: []ds.IndexColumn{
- {Property: prop, Direction: ds.DESCENDING},
+ {Property: prop, Descending: true},
},
}) {
return idxs, nil
@@ -291,7 +291,7 @@ func getRelevantIndexes(q *reducedQuery, s *memStore) (IndexDefinitionSortableSl
}
remains.SortBy = append(remains.SortBy, q.suffixFormat...)
last := remains.SortBy[len(remains.SortBy)-1]
- if last.Direction == ds.ASCENDING {
+ if !last.Descending {
// this removes the __key__ column, since it's implicit.
remains.SortBy = remains.SortBy[:len(remains.SortBy)-1]
}
@@ -307,7 +307,7 @@ func getRelevantIndexes(q *reducedQuery, s *memStore) (IndexDefinitionSortableSl
}
// generate generates a single iterDefinition for the given index.
-func generate(q *reducedQuery, idx *IndexDefinitionSortable, c *constraints) *iterDefinition {
+func generate(q *reducedQuery, idx *indexDefinitionSortable, c *constraints) *iterDefinition {
def := &iterDefinition{
c: idx.coll,
start: q.start,
@@ -316,7 +316,7 @@ func generate(q *reducedQuery, idx *IndexDefinitionSortable, c *constraints) *it
toJoin := make([][]byte, len(idx.eqFilts))
for _, sb := range idx.eqFilts {
val := c.peel(sb.Property)
- if sb.Direction == ds.DESCENDING {
+ if sb.Descending {
val = invert(val)
}
toJoin = append(toJoin, val)
@@ -353,7 +353,7 @@ func generate(q *reducedQuery, idx *IndexDefinitionSortable, c *constraints) *it
// from the key (the terminating null) allows this trick to work. Otherwise
// it would be a closed range of EXACTLY this key.
chopped := []byte(anc[:len(anc)-1])
- if q.suffixFormat[0].Direction == ds.DESCENDING {
+ if q.suffixFormat[0].Descending {
chopped = invert(chopped)
}
def.prefix = bjoin(def.prefix, chopped)
@@ -458,10 +458,10 @@ func calculateConstraints(q *reducedQuery) *constraints {
// getIndexes returns a set of iterator definitions. Iterating over these
// will result in matching suffixes.
func getIndexes(q *reducedQuery, s *memStore) ([]*iterDefinition, error) {
- relevantIdxs := IndexDefinitionSortableSlice(nil)
+ relevantIdxs := indexDefinitionSortableSlice(nil)
if q.kind == "" {
if coll := s.GetCollection("ents:" + q.ns); coll != nil {
- relevantIdxs = IndexDefinitionSortableSlice{{coll: coll}}
+ relevantIdxs = indexDefinitionSortableSlice{{coll: coll}}
}
} else {
err := error(nil)
@@ -471,7 +471,7 @@ func getIndexes(q *reducedQuery, s *memStore) ([]*iterDefinition, error) {
}
}
if len(relevantIdxs) == 0 {
- return nil, errQueryDone
+ return nil, ds.ErrNullQuery
}
// This sorts it so that relevantIdxs goes less filters -> more filters. We
@@ -483,7 +483,7 @@ func getIndexes(q *reducedQuery, s *memStore) ([]*iterDefinition, error) {
ret := []*iterDefinition{}
for !constraints.empty() || len(ret) == 0 {
- bestIdx := (*IndexDefinitionSortable)(nil)
+ bestIdx := (*indexDefinitionSortable)(nil)
if len(ret) == 0 {
// if ret is empty, take the biggest relevantIdx. It's guaranteed to have
// the greatest number of equality filters of any index in the list, and
@@ -495,7 +495,7 @@ func getIndexes(q *reducedQuery, s *memStore) ([]*iterDefinition, error) {
// :)
bestIdx = &relevantIdxs[len(relevantIdxs)-1]
if bestIdx.coll == nil {
- return nil, errQueryDone
+ return nil, ds.ErrNullQuery
}
} else {
// If ret's not empty, then we need to find the best index we can. The
« no previous file with comments | « impl/memory/datastore_index.go ('k') | impl/memory/datastore_index_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698