| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be 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 "sort" | 10 "sort" |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 } | 305 } |
| 306 | 306 |
| 307 return ret.String() | 307 return ret.String() |
| 308 } | 308 } |
| 309 | 309 |
| 310 func (q *FinalizedQuery) String() string { | 310 func (q *FinalizedQuery) String() string { |
| 311 // TODO(riannucci): make a more compact go-like representation here. | 311 // TODO(riannucci): make a more compact go-like representation here. |
| 312 return q.GQL() | 312 return q.GQL() |
| 313 } | 313 } |
| 314 | 314 |
| 315 // Valid returns true iff this FinalizedQuery is valid in the provided appID and | 315 // Valid returns true iff this FinalizedQuery is valid in the provided |
| 316 // namespace. | 316 // KeyContext's App ID and Namespace. |
| 317 // | 317 // |
| 318 // This checks the ancestor filter (if any), as well as the inequality filters | 318 // This checks the ancestor filter (if any), as well as the inequality filters |
| 319 // if they filter on '__key__'. | 319 // if they filter on '__key__'. |
| 320 // | 320 // |
| 321 // In particular, it does NOT validate equality filters which happen to have | 321 // In particular, it does NOT validate equality filters which happen to have |
| 322 // values of type PTKey, nor does it validate inequality filters that happen to | 322 // values of type PTKey, nor does it validate inequality filters that happen to |
| 323 // have values of type PTKey (but don't filter on the magic '__key__' field). | 323 // have values of type PTKey (but don't filter on the magic '__key__' field). |
| 324 func (q *FinalizedQuery) Valid(aid, ns string) error { | 324 func (q *FinalizedQuery) Valid(kc KeyContext) error { |
| 325 anc := q.Ancestor() | 325 anc := q.Ancestor() |
| 326 » if anc != nil && (!anc.Valid(false, aid, ns) || anc.IsIncomplete()) { | 326 » if anc != nil && (!anc.Valid(false, kc) || anc.IsIncomplete()) { |
| 327 return ErrInvalidKey | 327 return ErrInvalidKey |
| 328 } | 328 } |
| 329 | 329 |
| 330 if q.ineqFiltProp == "__key__" { | 330 if q.ineqFiltProp == "__key__" { |
| 331 » » if q.ineqFiltLowSet && !q.ineqFiltLow.Value().(*Key).Valid(false
, aid, ns) { | 331 » » if q.ineqFiltLowSet && !q.ineqFiltLow.Value().(*Key).Valid(false
, kc) { |
| 332 return ErrInvalidKey | 332 return ErrInvalidKey |
| 333 } | 333 } |
| 334 » » if q.ineqFiltHighSet && !q.ineqFiltHigh.Value().(*Key).Valid(fal
se, aid, ns) { | 334 » » if q.ineqFiltHighSet && !q.ineqFiltHigh.Value().(*Key).Valid(fal
se, kc) { |
| 335 return ErrInvalidKey | 335 return ErrInvalidKey |
| 336 } | 336 } |
| 337 } | 337 } |
| 338 return nil | 338 return nil |
| 339 } | 339 } |
| OLD | NEW |