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

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

Issue 1355783002: Refactor keys and queries in datastore service and implementation. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: 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 unified diff | Download patch
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 // HEAVILY adapted from github.com/golang/appengine/datastore 5 // HEAVILY adapted from github.com/golang/appengine/datastore
6 6
7 package datastore 7 package datastore
8 8
9 import ( 9 import (
10 "fmt" 10 "fmt"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } else if requireSlice { 135 } else if requireSlice {
136 return "multiple-valued property requires a slice field type" 136 return "multiple-valued property requires a slice field type"
137 } 137 }
138 138
139 if ret, ok := doConversion(v); ok { 139 if ret, ok := doConversion(v); ok {
140 if ret != "" { 140 if ret != "" {
141 return ret 141 return ret
142 } 142 }
143 } else { 143 } else {
144 knd := v.Kind() 144 knd := v.Kind()
145 if v.Type().Implements(typeOfKey) {
146 knd = reflect.Interface
147 }
148 145
149 project := PTNull 146 project := PTNull
150 overflow := (func(interface{}) bool)(nil) 147 overflow := (func(interface{}) bool)(nil)
151 set := (func(interface{}))(nil) 148 set := (func(interface{}))(nil)
152 149
153 switch knd { 150 switch knd {
154 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, re flect.Int64: 151 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, re flect.Int64:
155 project = PTInt 152 project = PTInt
156 overflow = func(x interface{}) bool { return v.OverflowI nt(x.(int64)) } 153 overflow = func(x interface{}) bool { return v.OverflowI nt(x.(int64)) }
157 set = func(x interface{}) { v.SetInt(x.(int64)) } 154 set = func(x interface{}) { v.SetInt(x.(int64)) }
158 case reflect.Bool: 155 case reflect.Bool:
159 project = PTBool 156 project = PTBool
160 set = func(x interface{}) { v.SetBool(x.(bool)) } 157 set = func(x interface{}) { v.SetBool(x.(bool)) }
161 case reflect.String: 158 case reflect.String:
162 project = PTString 159 project = PTString
163 set = func(x interface{}) { v.SetString(x.(string)) } 160 set = func(x interface{}) { v.SetString(x.(string)) }
164 case reflect.Float32, reflect.Float64: 161 case reflect.Float32, reflect.Float64:
165 project = PTFloat 162 project = PTFloat
166 overflow = func(x interface{}) bool { return v.OverflowF loat(x.(float64)) } 163 overflow = func(x interface{}) bool { return v.OverflowF loat(x.(float64)) }
167 set = func(x interface{}) { v.SetFloat(x.(float64)) } 164 set = func(x interface{}) { v.SetFloat(x.(float64)) }
168 » » case reflect.Interface: 165 » » case reflect.Ptr:
169 project = PTKey 166 project = PTKey
170 set = func(x interface{}) { 167 set = func(x interface{}) {
171 » » » » if k, ok := x.(Key); ok { 168 » » » » if k, ok := x.(*Key); ok {
172 v.Set(reflect.ValueOf(k)) 169 v.Set(reflect.ValueOf(k))
173 } 170 }
174 } 171 }
175 case reflect.Struct: 172 case reflect.Struct:
176 switch v.Type() { 173 switch v.Type() {
177 case typeOfTime: 174 case typeOfTime:
178 project = PTTime 175 project = PTTime
179 set = func(x interface{}) { v.Set(reflect.ValueO f(x)) } 176 set = func(x interface{}) { v.Set(reflect.ValueO f(x)) }
180 case typeOfGeoPoint: 177 case typeOfGeoPoint:
181 project = PTGeoPoint 178 project = PTGeoPoint
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 } 478 }
482 case reflect.Slice: 479 case reflect.Slice:
483 if reflect.PtrTo(ft.Elem()).Implements(typeOfPro pertyConverter) { 480 if reflect.PtrTo(ft.Elem()).Implements(typeOfPro pertyConverter) {
484 st.convert = true 481 st.convert = true
485 } else if ft.Elem().Kind() == reflect.Struct { 482 } else if ft.Elem().Kind() == reflect.Struct {
486 substructType = ft.Elem() 483 substructType = ft.Elem()
487 } 484 }
488 st.isSlice = ft.Elem().Kind() != reflect.Uint8 485 st.isSlice = ft.Elem().Kind() != reflect.Uint8
489 c.hasSlice = c.hasSlice || st.isSlice 486 c.hasSlice = c.hasSlice || st.isSlice
490 case reflect.Interface: 487 case reflect.Interface:
491 » » » » if ft != typeOfKey { 488 » » » » c.problem = me("field %q has non-concrete interf ace type %s",
492 » » » » » c.problem = me("field %q has non-concret e interface type %s", 489 » » » » » f.Name, f.Type)
493 » » » » » » f.Name, f.Type) 490 » » » » return
494 » » » » » return
495 » » » » }
496 } 491 }
497 } 492 }
498 493
499 if substructType != nil { 494 if substructType != nil {
500 sub := getStructCodecLocked(substructType) 495 sub := getStructCodecLocked(substructType)
501 if sub.problem != nil { 496 if sub.problem != nil {
502 if sub.problem == errRecursiveStruct { 497 if sub.problem == errRecursiveStruct {
503 c.problem = me("field %q is recursively defined", f.Name) 498 c.problem = me("field %q is recursively defined", f.Name)
504 } else { 499 } else {
505 c.problem = me("field %q has problem: %s ", f.Name, sub.problem) 500 c.problem = me("field %q has problem: %s ", f.Name, sub.problem)
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 switch val { 568 switch val {
574 case "on", "On", "true": 569 case "on", "On", "true":
575 return true, nil 570 return true, nil
576 case "off", "Off", "false": 571 case "off", "Off", "false":
577 return false, nil 572 return false, nil
578 } 573 }
579 return nil, fmt.Errorf("Toggle field has bad/missing default, go t %q", val) 574 return nil, fmt.Errorf("Toggle field has bad/missing default, go t %q", val)
580 } 575 }
581 return nil, fmt.Errorf("helper: meta field with bad type/value %s/%q", t , val) 576 return nil, fmt.Errorf("helper: meta field with bad type/value %s/%q", t , val)
582 } 577 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698