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

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

Issue 2007123002: datastore: Update AllocateIDs to take keys. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Created 4 years, 6 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 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 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 fmt.Fprintf(ret, ", %s, %s", gqlQuoteString(t.Kind), gql QuoteString(t.StringID)) 407 fmt.Fprintf(ret, ", %s, %s", gqlQuoteString(t.Kind), gql QuoteString(t.StringID))
408 } 408 }
409 } 409 }
410 if _, err := ret.WriteString(")"); err != nil { 410 if _, err := ret.WriteString(")"); err != nil {
411 panic(err) 411 panic(err)
412 } 412 }
413 return ret.String() 413 return ret.String()
414 } 414 }
415 415
416 // Equal returns true iff the two keys represent identical key values. 416 // Equal returns true iff the two keys represent identical key values.
417 func (k *Key) Equal(other *Key) (ret bool) { 417 func (k *Key) Equal(other *Key) bool {
418 » return k.SameKind(other) && (k.LastTok() == other.LastTok())
419 }
420
421 // SameKind asserts that other refers to the same entity as k. This checks the
422 // full lineage of the key.
423 func (k *Key) SameKind(other *Key) (ret bool) {
418 ret = (k.appID == other.appID && 424 ret = (k.appID == other.appID &&
419 k.namespace == other.namespace && 425 k.namespace == other.namespace &&
420 len(k.toks) == len(other.toks)) 426 len(k.toks) == len(other.toks))
421 if ret { 427 if ret {
422 for i, t := range k.toks { 428 for i, t := range k.toks {
423 » » » if ret = t == other.toks[i]; !ret { 429 » » » if i == len(k.toks)-1 {
424 » » » » return 430 » » » » // Last token: check only Kind.
431 » » » » if ret = (t.Kind == other.toks[i].Kind); !ret {
432 » » » » » return
433 » » » » }
434 » » » } else {
435 » » » » if ret = t == other.toks[i]; !ret {
436 » » » » » return
437 » » » » }
425 } 438 }
426 } 439 }
427 } 440 }
428 return 441 return
429 } 442 }
430 443
431 // Split componentizes the key into pieces (AppID, Namespace and tokens) 444 // Split componentizes the key into pieces (AppID, Namespace and tokens)
432 // 445 //
433 // Each token represents one piece of they key's 'path'. 446 // Each token represents one piece of they key's 'path'.
434 // 447 //
(...skipping 17 matching lines...) Expand all
452 for _, t := range k.toks { 465 for _, t := range k.toks {
453 ret += int64(len(t.Kind)) 466 ret += int64(len(t.Kind))
454 if t.StringID != "" { 467 if t.StringID != "" {
455 ret += int64(len(t.StringID)) 468 ret += int64(len(t.StringID))
456 } else { 469 } else {
457 ret += 8 470 ret += 8
458 } 471 }
459 } 472 }
460 return ret 473 return ret
461 } 474 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698