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

Side by Side Diff: service/datastore/index.go

Issue 1359963003: Fix minor bug in ParseIndexColumn (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "fmt" 9 "fmt"
10 "strings" 10 "strings"
11 ) 11 )
12 12
13 // IndexColumn represents a sort order for a single entity field. 13 // IndexColumn represents a sort order for a single entity field.
14 type IndexColumn struct { 14 type IndexColumn struct {
15 Property string 15 Property string
16 Descending bool 16 Descending bool
17 } 17 }
18 18
19 // ParseIndexColumn takes a spec in the form of /\s*-?\s*.+\s*/, and 19 // ParseIndexColumn takes a spec in the form of /\s*-?\s*.+\s*/, and
20 // returns an IndexColumn. Examples are: 20 // returns an IndexColumn. Examples are:
21 // `- Field `: IndexColumn{Property: "Field", Descending: true} 21 // `- Field `: IndexColumn{Property: "Field", Descending: true}
22 // `Something`: IndexColumn{Property: "Something", Descending: false} 22 // `Something`: IndexColumn{Property: "Something", Descending: false}
23 // 23 //
24 // `+Field` is invalid. `` is invalid. 24 // `+Field` is invalid. `` is invalid.
25 func ParseIndexColumn(spec string) (IndexColumn, error) { 25 func ParseIndexColumn(spec string) (IndexColumn, error) {
26 col := IndexColumn{} 26 col := IndexColumn{}
27 spec = strings.TrimSpace(spec)
27 if strings.HasPrefix(spec, "-") { 28 if strings.HasPrefix(spec, "-") {
28 col.Descending = true 29 col.Descending = true
29 col.Property = strings.TrimSpace(spec[1:]) 30 col.Property = strings.TrimSpace(spec[1:])
30 } else if strings.HasPrefix(spec, "+") { 31 } else if strings.HasPrefix(spec, "+") {
31 return col, fmt.Errorf("datastore: invalid order: %q", spec) 32 return col, fmt.Errorf("datastore: invalid order: %q", spec)
32 } else { 33 } else {
33 col.Property = strings.TrimSpace(spec) 34 col.Property = strings.TrimSpace(spec)
34 } 35 }
35 if col.Property == "" { 36 if col.Property == "" {
36 » » return col, fmt.Errorf("datastore: empty order") 37 » » return col, fmt.Errorf("datastore: empty order: %q", spec)
37 } 38 }
38 return col, nil 39 return col, nil
39 } 40 }
40 41
41 func (i IndexColumn) cmp(o IndexColumn) int { 42 func (i IndexColumn) cmp(o IndexColumn) int {
42 // sort ascending first 43 // sort ascending first
43 if !i.Descending && o.Descending { 44 if !i.Descending && o.Descending {
44 return -1 45 return -1
45 } else if i.Descending && !o.Descending { 46 } else if i.Descending && !o.Descending {
46 return 1 47 return 1
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 } 256 }
256 for _, sb := range id.SortBy { 257 for _, sb := range id.SortBy {
257 wr('/') 258 wr('/')
258 if sb.Descending { 259 if sb.Descending {
259 wr('-') 260 wr('-')
260 } 261 }
261 ws(sb.Property) 262 ws(sb.Property)
262 } 263 }
263 return ret.String() 264 return ret.String()
264 } 265 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698