OLD | NEW |
---|---|
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 "encoding/base64" | 9 "encoding/base64" |
10 "encoding/json" | 10 "encoding/json" |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
352 a, b := k.toks[i], other.toks[i] | 352 a, b := k.toks[i], other.toks[i] |
353 if a.Less(b) { | 353 if a.Less(b) { |
354 return true | 354 return true |
355 } else if b.Less(a) { | 355 } else if b.Less(a) { |
356 return false | 356 return false |
357 } | 357 } |
358 } | 358 } |
359 return len(k.toks) < len(other.toks) | 359 return len(k.toks) < len(other.toks) |
360 } | 360 } |
361 | 361 |
362 // HasAncestor returns true iff other is an ancestor of k. | |
Vadim Sh.
2015/09/28 18:52:56
... or k is other.
iannucci
2015/09/29 03:21:37
Yes. Done.
| |
363 func (k *Key) HasAncestor(other *Key) bool { | |
364 if k.appID != other.appID || k.namespace != other.namespace { | |
365 return false | |
366 } | |
367 if len(k.toks) < len(other.toks) { | |
368 return false | |
369 } | |
370 for i, tok := range other.toks { | |
371 if tok != k.toks[i] { | |
372 return false | |
373 } | |
374 } | |
375 return true | |
376 } | |
377 | |
362 // GQL returns a correctly formatted Cloud Datastore GQL key literal. | 378 // GQL returns a correctly formatted Cloud Datastore GQL key literal. |
363 // | 379 // |
364 // The flavor of GQL that this emits is defined here: | 380 // The flavor of GQL that this emits is defined here: |
365 // https://cloud.google.com/datastore/docs/apis/gql/gql_reference | 381 // https://cloud.google.com/datastore/docs/apis/gql/gql_reference |
366 func (k *Key) GQL() string { | 382 func (k *Key) GQL() string { |
367 ret := &bytes.Buffer{} | 383 ret := &bytes.Buffer{} |
368 fmt.Fprintf(ret, "KEY(DATASET(%s)", gqlQuoteString(k.appID)) | 384 fmt.Fprintf(ret, "KEY(DATASET(%s)", gqlQuoteString(k.appID)) |
369 if k.namespace != "" { | 385 if k.namespace != "" { |
370 fmt.Fprintf(ret, ", NAMESPACE(%s)", gqlQuoteString(k.namespace)) | 386 fmt.Fprintf(ret, ", NAMESPACE(%s)", gqlQuoteString(k.namespace)) |
371 } | 387 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
421 for _, t := range k.toks { | 437 for _, t := range k.toks { |
422 ret += int64(len(t.Kind)) | 438 ret += int64(len(t.Kind)) |
423 if t.StringID != "" { | 439 if t.StringID != "" { |
424 ret += int64(len(t.StringID)) | 440 ret += int64(len(t.StringID)) |
425 } else { | 441 } else { |
426 ret += 8 | 442 ret += 8 |
427 } | 443 } |
428 } | 444 } |
429 return ret | 445 return ret |
430 } | 446 } |
OLD | NEW |