OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h" | 5 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 static const unsigned char kObjectStoreFreeListTypeByte = 150; | 216 static const unsigned char kObjectStoreFreeListTypeByte = 150; |
217 static const unsigned char kIndexFreeListTypeByte = 151; | 217 static const unsigned char kIndexFreeListTypeByte = 151; |
218 static const unsigned char kObjectStoreNamesTypeByte = 200; | 218 static const unsigned char kObjectStoreNamesTypeByte = 200; |
219 static const unsigned char kIndexNamesKeyTypeByte = 201; | 219 static const unsigned char kIndexNamesKeyTypeByte = 201; |
220 | 220 |
221 static const unsigned char kObjectMetaDataTypeMaximum = 255; | 221 static const unsigned char kObjectMetaDataTypeMaximum = 255; |
222 static const unsigned char kIndexMetaDataTypeMaximum = 255; | 222 static const unsigned char kIndexMetaDataTypeMaximum = 255; |
223 | 223 |
224 const unsigned char kMinimumIndexId = 30; | 224 const unsigned char kMinimumIndexId = 30; |
225 | 225 |
226 inline void EncodeIntSafely(int64 value, int64 max, std::string* into) { | 226 inline void EncodeIntSafely(int64_t value, int64_t max, std::string* into) { |
227 DCHECK_LE(value, max); | 227 DCHECK_LE(value, max); |
228 return EncodeInt(value, into); | 228 return EncodeInt(value, into); |
229 } | 229 } |
230 | 230 |
231 std::string MaxIDBKey() { | 231 std::string MaxIDBKey() { |
232 std::string ret; | 232 std::string ret; |
233 EncodeByte(kIndexedDBKeyNullTypeByte, &ret); | 233 EncodeByte(kIndexedDBKeyNullTypeByte, &ret); |
234 return ret; | 234 return ret; |
235 } | 235 } |
236 | 236 |
237 std::string MinIDBKey() { | 237 std::string MinIDBKey() { |
238 std::string ret; | 238 std::string ret; |
239 EncodeByte(kIndexedDBKeyMinKeyTypeByte, &ret); | 239 EncodeByte(kIndexedDBKeyMinKeyTypeByte, &ret); |
240 return ret; | 240 return ret; |
241 } | 241 } |
242 | 242 |
243 void EncodeByte(unsigned char value, std::string* into) { | 243 void EncodeByte(unsigned char value, std::string* into) { |
244 into->push_back(value); | 244 into->push_back(value); |
245 } | 245 } |
246 | 246 |
247 void EncodeBool(bool value, std::string* into) { | 247 void EncodeBool(bool value, std::string* into) { |
248 into->push_back(value ? 1 : 0); | 248 into->push_back(value ? 1 : 0); |
249 } | 249 } |
250 | 250 |
251 void EncodeInt(int64 value, std::string* into) { | 251 void EncodeInt(int64_t value, std::string* into) { |
252 #ifndef NDEBUG | 252 #ifndef NDEBUG |
253 // Exercised by unit tests in debug only. | 253 // Exercised by unit tests in debug only. |
254 DCHECK_GE(value, 0); | 254 DCHECK_GE(value, 0); |
255 #endif | 255 #endif |
256 uint64 n = static_cast<uint64>(value); | 256 uint64_t n = static_cast<uint64_t>(value); |
257 | 257 |
258 do { | 258 do { |
259 unsigned char c = n; | 259 unsigned char c = n; |
260 into->push_back(c); | 260 into->push_back(c); |
261 n >>= 8; | 261 n >>= 8; |
262 } while (n); | 262 } while (n); |
263 } | 263 } |
264 | 264 |
265 void EncodeVarInt(int64 value, std::string* into) { | 265 void EncodeVarInt(int64_t value, std::string* into) { |
266 #ifndef NDEBUG | 266 #ifndef NDEBUG |
267 // Exercised by unit tests in debug only. | 267 // Exercised by unit tests in debug only. |
268 DCHECK_GE(value, 0); | 268 DCHECK_GE(value, 0); |
269 #endif | 269 #endif |
270 uint64 n = static_cast<uint64>(value); | 270 uint64_t n = static_cast<uint64_t>(value); |
271 | 271 |
272 do { | 272 do { |
273 unsigned char c = n & 0x7f; | 273 unsigned char c = n & 0x7f; |
274 n >>= 7; | 274 n >>= 7; |
275 if (n) | 275 if (n) |
276 c |= 0x80; | 276 c |= 0x80; |
277 into->push_back(c); | 277 into->push_back(c); |
278 } while (n); | 278 } while (n); |
279 } | 279 } |
280 | 280 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 | 397 |
398 bool DecodeBool(StringPiece* slice, bool* value) { | 398 bool DecodeBool(StringPiece* slice, bool* value) { |
399 if (slice->empty()) | 399 if (slice->empty()) |
400 return false; | 400 return false; |
401 | 401 |
402 *value = !!(*slice)[0]; | 402 *value = !!(*slice)[0]; |
403 slice->remove_prefix(1); | 403 slice->remove_prefix(1); |
404 return true; | 404 return true; |
405 } | 405 } |
406 | 406 |
407 bool DecodeInt(StringPiece* slice, int64* value) { | 407 bool DecodeInt(StringPiece* slice, int64_t* value) { |
408 if (slice->empty()) | 408 if (slice->empty()) |
409 return false; | 409 return false; |
410 | 410 |
411 StringPiece::const_iterator it = slice->begin(); | 411 StringPiece::const_iterator it = slice->begin(); |
412 int shift = 0; | 412 int shift = 0; |
413 int64 ret = 0; | 413 int64_t ret = 0; |
414 while (it != slice->end()) { | 414 while (it != slice->end()) { |
415 unsigned char c = *it++; | 415 unsigned char c = *it++; |
416 ret |= static_cast<int64>(c) << shift; | 416 ret |= static_cast<int64_t>(c) << shift; |
417 shift += 8; | 417 shift += 8; |
418 } | 418 } |
419 *value = ret; | 419 *value = ret; |
420 slice->remove_prefix(it - slice->begin()); | 420 slice->remove_prefix(it - slice->begin()); |
421 return true; | 421 return true; |
422 } | 422 } |
423 | 423 |
424 bool DecodeVarInt(StringPiece* slice, int64* value) { | 424 bool DecodeVarInt(StringPiece* slice, int64_t* value) { |
425 if (slice->empty()) | 425 if (slice->empty()) |
426 return false; | 426 return false; |
427 | 427 |
428 StringPiece::const_iterator it = slice->begin(); | 428 StringPiece::const_iterator it = slice->begin(); |
429 int shift = 0; | 429 int shift = 0; |
430 int64 ret = 0; | 430 int64_t ret = 0; |
431 do { | 431 do { |
432 if (it == slice->end()) | 432 if (it == slice->end()) |
433 return false; | 433 return false; |
434 | 434 |
435 unsigned char c = *it; | 435 unsigned char c = *it; |
436 ret |= static_cast<int64>(c & 0x7f) << shift; | 436 ret |= static_cast<int64_t>(c & 0x7f) << shift; |
437 shift += 7; | 437 shift += 7; |
438 } while (*it++ & 0x80); | 438 } while (*it++ & 0x80); |
439 *value = ret; | 439 *value = ret; |
440 slice->remove_prefix(it - slice->begin()); | 440 slice->remove_prefix(it - slice->begin()); |
441 return true; | 441 return true; |
442 } | 442 } |
443 | 443 |
444 bool DecodeString(StringPiece* slice, base::string16* value) { | 444 bool DecodeString(StringPiece* slice, base::string16* value) { |
445 if (slice->empty()) { | 445 if (slice->empty()) { |
446 value->clear(); | 446 value->clear(); |
(...skipping 12 matching lines...) Expand all Loading... |
459 | 459 |
460 *value = decoded; | 460 *value = decoded; |
461 slice->remove_prefix(length * sizeof(base::char16)); | 461 slice->remove_prefix(length * sizeof(base::char16)); |
462 return true; | 462 return true; |
463 } | 463 } |
464 | 464 |
465 bool DecodeStringWithLength(StringPiece* slice, base::string16* value) { | 465 bool DecodeStringWithLength(StringPiece* slice, base::string16* value) { |
466 if (slice->empty()) | 466 if (slice->empty()) |
467 return false; | 467 return false; |
468 | 468 |
469 int64 length = 0; | 469 int64_t length = 0; |
470 if (!DecodeVarInt(slice, &length) || length < 0) | 470 if (!DecodeVarInt(slice, &length) || length < 0) |
471 return false; | 471 return false; |
472 size_t bytes = length * sizeof(base::char16); | 472 size_t bytes = length * sizeof(base::char16); |
473 if (slice->size() < bytes) | 473 if (slice->size() < bytes) |
474 return false; | 474 return false; |
475 | 475 |
476 StringPiece subpiece(slice->begin(), bytes); | 476 StringPiece subpiece(slice->begin(), bytes); |
477 slice->remove_prefix(bytes); | 477 slice->remove_prefix(bytes); |
478 if (!DecodeString(&subpiece, value)) | 478 if (!DecodeString(&subpiece, value)) |
479 return false; | 479 return false; |
480 | 480 |
481 return true; | 481 return true; |
482 } | 482 } |
483 | 483 |
484 bool DecodeBinary(StringPiece* slice, std::string* value) { | 484 bool DecodeBinary(StringPiece* slice, std::string* value) { |
485 if (slice->empty()) | 485 if (slice->empty()) |
486 return false; | 486 return false; |
487 | 487 |
488 int64 length = 0; | 488 int64_t length = 0; |
489 if (!DecodeVarInt(slice, &length) || length < 0) | 489 if (!DecodeVarInt(slice, &length) || length < 0) |
490 return false; | 490 return false; |
491 size_t size = length; | 491 size_t size = length; |
492 if (slice->size() < size) | 492 if (slice->size() < size) |
493 return false; | 493 return false; |
494 | 494 |
495 value->assign(slice->begin(), size); | 495 value->assign(slice->begin(), size); |
496 slice->remove_prefix(size); | 496 slice->remove_prefix(size); |
497 return true; | 497 return true; |
498 } | 498 } |
499 | 499 |
500 bool DecodeIDBKey(StringPiece* slice, scoped_ptr<IndexedDBKey>* value) { | 500 bool DecodeIDBKey(StringPiece* slice, scoped_ptr<IndexedDBKey>* value) { |
501 if (slice->empty()) | 501 if (slice->empty()) |
502 return false; | 502 return false; |
503 | 503 |
504 unsigned char type = (*slice)[0]; | 504 unsigned char type = (*slice)[0]; |
505 slice->remove_prefix(1); | 505 slice->remove_prefix(1); |
506 | 506 |
507 switch (type) { | 507 switch (type) { |
508 case kIndexedDBKeyNullTypeByte: | 508 case kIndexedDBKeyNullTypeByte: |
509 *value = make_scoped_ptr(new IndexedDBKey()); | 509 *value = make_scoped_ptr(new IndexedDBKey()); |
510 return true; | 510 return true; |
511 | 511 |
512 case kIndexedDBKeyArrayTypeByte: { | 512 case kIndexedDBKeyArrayTypeByte: { |
513 int64 length = 0; | 513 int64_t length = 0; |
514 if (!DecodeVarInt(slice, &length) || length < 0) | 514 if (!DecodeVarInt(slice, &length) || length < 0) |
515 return false; | 515 return false; |
516 IndexedDBKey::KeyArray array; | 516 IndexedDBKey::KeyArray array; |
517 while (length--) { | 517 while (length--) { |
518 scoped_ptr<IndexedDBKey> key; | 518 scoped_ptr<IndexedDBKey> key; |
519 if (!DecodeIDBKey(slice, &key)) | 519 if (!DecodeIDBKey(slice, &key)) |
520 return false; | 520 return false; |
521 array.push_back(*key); | 521 array.push_back(*key); |
522 } | 522 } |
523 *value = make_scoped_ptr(new IndexedDBKey(array)); | 523 *value = make_scoped_ptr(new IndexedDBKey(array)); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 case WebIDBKeyPathTypeString: { | 592 case WebIDBKeyPathTypeString: { |
593 base::string16 string; | 593 base::string16 string; |
594 if (!DecodeStringWithLength(slice, &string)) | 594 if (!DecodeStringWithLength(slice, &string)) |
595 return false; | 595 return false; |
596 DCHECK(slice->empty()); | 596 DCHECK(slice->empty()); |
597 *value = IndexedDBKeyPath(string); | 597 *value = IndexedDBKeyPath(string); |
598 return true; | 598 return true; |
599 } | 599 } |
600 case WebIDBKeyPathTypeArray: { | 600 case WebIDBKeyPathTypeArray: { |
601 std::vector<base::string16> array; | 601 std::vector<base::string16> array; |
602 int64 count; | 602 int64_t count; |
603 if (!DecodeVarInt(slice, &count)) | 603 if (!DecodeVarInt(slice, &count)) |
604 return false; | 604 return false; |
605 DCHECK_GE(count, 0); | 605 DCHECK_GE(count, 0); |
606 while (count--) { | 606 while (count--) { |
607 base::string16 string; | 607 base::string16 string; |
608 if (!DecodeStringWithLength(slice, &string)) | 608 if (!DecodeStringWithLength(slice, &string)) |
609 return false; | 609 return false; |
610 array.push_back(string); | 610 array.push_back(string); |
611 } | 611 } |
612 DCHECK(slice->empty()); | 612 DCHECK(slice->empty()); |
613 *value = IndexedDBKeyPath(array); | 613 *value = IndexedDBKeyPath(array); |
614 return true; | 614 return true; |
615 } | 615 } |
616 } | 616 } |
617 NOTREACHED(); | 617 NOTREACHED(); |
618 return false; | 618 return false; |
619 } | 619 } |
620 | 620 |
621 bool DecodeBlobJournal(StringPiece* slice, BlobJournalType* journal) { | 621 bool DecodeBlobJournal(StringPiece* slice, BlobJournalType* journal) { |
622 BlobJournalType output; | 622 BlobJournalType output; |
623 while (!slice->empty()) { | 623 while (!slice->empty()) { |
624 int64 database_id = -1; | 624 int64_t database_id = -1; |
625 int64 blob_key = -1; | 625 int64_t blob_key = -1; |
626 if (!DecodeVarInt(slice, &database_id)) | 626 if (!DecodeVarInt(slice, &database_id)) |
627 return false; | 627 return false; |
628 if (!KeyPrefix::IsValidDatabaseId(database_id)) | 628 if (!KeyPrefix::IsValidDatabaseId(database_id)) |
629 return false; | 629 return false; |
630 if (!DecodeVarInt(slice, &blob_key)) | 630 if (!DecodeVarInt(slice, &blob_key)) |
631 return false; | 631 return false; |
632 if (!DatabaseMetaDataKey::IsValidBlobKey(blob_key) && | 632 if (!DatabaseMetaDataKey::IsValidBlobKey(blob_key) && |
633 (blob_key != DatabaseMetaDataKey::kAllBlobsKey)) { | 633 (blob_key != DatabaseMetaDataKey::kAllBlobsKey)) { |
634 return false; | 634 return false; |
635 } | 635 } |
636 output.push_back(std::make_pair(database_id, blob_key)); | 636 output.push_back(std::make_pair(database_id, blob_key)); |
637 } | 637 } |
638 journal->swap(output); | 638 journal->swap(output); |
639 return true; | 639 return true; |
640 } | 640 } |
641 | 641 |
642 bool ConsumeEncodedIDBKey(StringPiece* slice) { | 642 bool ConsumeEncodedIDBKey(StringPiece* slice) { |
643 unsigned char type = (*slice)[0]; | 643 unsigned char type = (*slice)[0]; |
644 slice->remove_prefix(1); | 644 slice->remove_prefix(1); |
645 | 645 |
646 switch (type) { | 646 switch (type) { |
647 case kIndexedDBKeyNullTypeByte: | 647 case kIndexedDBKeyNullTypeByte: |
648 case kIndexedDBKeyMinKeyTypeByte: | 648 case kIndexedDBKeyMinKeyTypeByte: |
649 return true; | 649 return true; |
650 case kIndexedDBKeyArrayTypeByte: { | 650 case kIndexedDBKeyArrayTypeByte: { |
651 int64 length; | 651 int64_t length; |
652 if (!DecodeVarInt(slice, &length)) | 652 if (!DecodeVarInt(slice, &length)) |
653 return false; | 653 return false; |
654 while (length--) { | 654 while (length--) { |
655 if (!ConsumeEncodedIDBKey(slice)) | 655 if (!ConsumeEncodedIDBKey(slice)) |
656 return false; | 656 return false; |
657 } | 657 } |
658 return true; | 658 return true; |
659 } | 659 } |
660 case kIndexedDBKeyBinaryTypeByte: { | 660 case kIndexedDBKeyBinaryTypeByte: { |
661 int64 length = 0; | 661 int64_t length = 0; |
662 if (!DecodeVarInt(slice, &length) || length < 0) | 662 if (!DecodeVarInt(slice, &length) || length < 0) |
663 return false; | 663 return false; |
664 if (slice->size() < static_cast<size_t>(length)) | 664 if (slice->size() < static_cast<size_t>(length)) |
665 return false; | 665 return false; |
666 slice->remove_prefix(length); | 666 slice->remove_prefix(length); |
667 return true; | 667 return true; |
668 } | 668 } |
669 case kIndexedDBKeyStringTypeByte: { | 669 case kIndexedDBKeyStringTypeByte: { |
670 int64 length = 0; | 670 int64_t length = 0; |
671 if (!DecodeVarInt(slice, &length) || length < 0) | 671 if (!DecodeVarInt(slice, &length) || length < 0) |
672 return false; | 672 return false; |
673 if (slice->size() < static_cast<size_t>(length) * sizeof(base::char16)) | 673 if (slice->size() < static_cast<size_t>(length) * sizeof(base::char16)) |
674 return false; | 674 return false; |
675 slice->remove_prefix(length * sizeof(base::char16)); | 675 slice->remove_prefix(length * sizeof(base::char16)); |
676 return true; | 676 return true; |
677 } | 677 } |
678 case kIndexedDBKeyDateTypeByte: | 678 case kIndexedDBKeyDateTypeByte: |
679 case kIndexedDBKeyNumberTypeByte: | 679 case kIndexedDBKeyNumberTypeByte: |
680 if (slice->size() < sizeof(double)) | 680 if (slice->size() < sizeof(double)) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 return WebIDBKeyTypeMin; | 714 return WebIDBKeyTypeMin; |
715 } | 715 } |
716 | 716 |
717 NOTREACHED(); | 717 NOTREACHED(); |
718 return WebIDBKeyTypeInvalid; | 718 return WebIDBKeyTypeInvalid; |
719 } | 719 } |
720 | 720 |
721 int CompareEncodedStringsWithLength(StringPiece* slice1, | 721 int CompareEncodedStringsWithLength(StringPiece* slice1, |
722 StringPiece* slice2, | 722 StringPiece* slice2, |
723 bool* ok) { | 723 bool* ok) { |
724 int64 len1, len2; | 724 int64_t len1, len2; |
725 if (!DecodeVarInt(slice1, &len1) || !DecodeVarInt(slice2, &len2)) { | 725 if (!DecodeVarInt(slice1, &len1) || !DecodeVarInt(slice2, &len2)) { |
726 *ok = false; | 726 *ok = false; |
727 return 0; | 727 return 0; |
728 } | 728 } |
729 DCHECK_GE(len1, 0); | 729 DCHECK_GE(len1, 0); |
730 DCHECK_GE(len2, 0); | 730 DCHECK_GE(len2, 0); |
731 if (len1 < 0 || len2 < 0) { | 731 if (len1 < 0 || len2 < 0) { |
732 *ok = false; | 732 *ok = false; |
733 return 0; | 733 return 0; |
734 } | 734 } |
(...skipping 12 matching lines...) Expand all Loading... |
747 slice2->remove_prefix(len2 * sizeof(base::char16)); | 747 slice2->remove_prefix(len2 * sizeof(base::char16)); |
748 | 748 |
749 *ok = true; | 749 *ok = true; |
750 // Strings are UTF-16BE encoded, so a simple memcmp is sufficient. | 750 // Strings are UTF-16BE encoded, so a simple memcmp is sufficient. |
751 return string1.compare(string2); | 751 return string1.compare(string2); |
752 } | 752 } |
753 | 753 |
754 int CompareEncodedBinary(StringPiece* slice1, | 754 int CompareEncodedBinary(StringPiece* slice1, |
755 StringPiece* slice2, | 755 StringPiece* slice2, |
756 bool* ok) { | 756 bool* ok) { |
757 int64 len1, len2; | 757 int64_t len1, len2; |
758 if (!DecodeVarInt(slice1, &len1) || !DecodeVarInt(slice2, &len2)) { | 758 if (!DecodeVarInt(slice1, &len1) || !DecodeVarInt(slice2, &len2)) { |
759 *ok = false; | 759 *ok = false; |
760 return 0; | 760 return 0; |
761 } | 761 } |
762 DCHECK_GE(len1, 0); | 762 DCHECK_GE(len1, 0); |
763 DCHECK_GE(len2, 0); | 763 DCHECK_GE(len2, 0); |
764 if (len1 < 0 || len2 < 0) { | 764 if (len1 < 0 || len2 < 0) { |
765 *ok = false; | 765 *ok = false; |
766 return 0; | 766 return 0; |
767 } | 767 } |
(...skipping 11 matching lines...) Expand all Loading... |
779 StringPiece binary1(slice1->begin(), size1); | 779 StringPiece binary1(slice1->begin(), size1); |
780 StringPiece binary2(slice2->begin(), size2); | 780 StringPiece binary2(slice2->begin(), size2); |
781 slice1->remove_prefix(size1); | 781 slice1->remove_prefix(size1); |
782 slice2->remove_prefix(size2); | 782 slice2->remove_prefix(size2); |
783 | 783 |
784 *ok = true; | 784 *ok = true; |
785 // This is the same as a memcmp() | 785 // This is the same as a memcmp() |
786 return binary1.compare(binary2); | 786 return binary1.compare(binary2); |
787 } | 787 } |
788 | 788 |
789 static int CompareInts(int64 a, int64 b) { | 789 static int CompareInts(int64_t a, int64_t b) { |
790 #ifndef NDEBUG | 790 #ifndef NDEBUG |
791 // Exercised by unit tests in debug only. | 791 // Exercised by unit tests in debug only. |
792 DCHECK_GE(a, 0); | 792 DCHECK_GE(a, 0); |
793 DCHECK_GE(b, 0); | 793 DCHECK_GE(b, 0); |
794 #endif | 794 #endif |
795 int64 diff = a - b; | 795 int64_t diff = a - b; |
796 if (diff < 0) | 796 if (diff < 0) |
797 return -1; | 797 return -1; |
798 if (diff > 0) | 798 if (diff > 0) |
799 return 1; | 799 return 1; |
800 return 0; | 800 return 0; |
801 } | 801 } |
802 | 802 |
803 static inline int CompareSizes(size_t a, size_t b) { | 803 static inline int CompareSizes(size_t a, size_t b) { |
804 if (a > b) | 804 if (a > b) |
805 return 1; | 805 return 1; |
(...skipping 18 matching lines...) Expand all Loading... |
824 if (int x = CompareTypes(KeyTypeByteToKeyType(type_a), | 824 if (int x = CompareTypes(KeyTypeByteToKeyType(type_a), |
825 KeyTypeByteToKeyType(type_b))) | 825 KeyTypeByteToKeyType(type_b))) |
826 return x; | 826 return x; |
827 | 827 |
828 switch (type_a) { | 828 switch (type_a) { |
829 case kIndexedDBKeyNullTypeByte: | 829 case kIndexedDBKeyNullTypeByte: |
830 case kIndexedDBKeyMinKeyTypeByte: | 830 case kIndexedDBKeyMinKeyTypeByte: |
831 // Null type or max type; no payload to compare. | 831 // Null type or max type; no payload to compare. |
832 return 0; | 832 return 0; |
833 case kIndexedDBKeyArrayTypeByte: { | 833 case kIndexedDBKeyArrayTypeByte: { |
834 int64 length_a, length_b; | 834 int64_t length_a, length_b; |
835 if (!DecodeVarInt(slice_a, &length_a) || | 835 if (!DecodeVarInt(slice_a, &length_a) || |
836 !DecodeVarInt(slice_b, &length_b)) { | 836 !DecodeVarInt(slice_b, &length_b)) { |
837 *ok = false; | 837 *ok = false; |
838 return 0; | 838 return 0; |
839 } | 839 } |
840 for (int64 i = 0; i < length_a && i < length_b; ++i) { | 840 for (int64_t i = 0; i < length_a && i < length_b; ++i) { |
841 int result = CompareEncodedIDBKeys(slice_a, slice_b, ok); | 841 int result = CompareEncodedIDBKeys(slice_a, slice_b, ok); |
842 if (!*ok || result) | 842 if (!*ok || result) |
843 return result; | 843 return result; |
844 } | 844 } |
845 return length_a - length_b; | 845 return length_a - length_b; |
846 } | 846 } |
847 case kIndexedDBKeyBinaryTypeByte: | 847 case kIndexedDBKeyBinaryTypeByte: |
848 return CompareEncodedBinary(slice_a, slice_b, ok); | 848 return CompareEncodedBinary(slice_a, slice_b, ok); |
849 case kIndexedDBKeyStringTypeByte: | 849 case kIndexedDBKeyStringTypeByte: |
850 return CompareEncodedStringsWithLength(slice_a, slice_b, ok); | 850 return CompareEncodedStringsWithLength(slice_a, slice_b, ok); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 bool only_compare_index_keys, | 933 bool only_compare_index_keys, |
934 bool* ok) { | 934 bool* ok) { |
935 // index key | 935 // index key |
936 int result = CompareEncodedIDBKeys(slice_a, slice_b, ok); | 936 int result = CompareEncodedIDBKeys(slice_a, slice_b, ok); |
937 if (!*ok || result) | 937 if (!*ok || result) |
938 return result; | 938 return result; |
939 if (only_compare_index_keys) | 939 if (only_compare_index_keys) |
940 return 0; | 940 return 0; |
941 | 941 |
942 // sequence number [optional] | 942 // sequence number [optional] |
943 int64 sequence_number_a = -1; | 943 int64_t sequence_number_a = -1; |
944 int64 sequence_number_b = -1; | 944 int64_t sequence_number_b = -1; |
945 if (!slice_a->empty() && !DecodeVarInt(slice_a, &sequence_number_a)) | 945 if (!slice_a->empty() && !DecodeVarInt(slice_a, &sequence_number_a)) |
946 return 0; | 946 return 0; |
947 if (!slice_b->empty() && !DecodeVarInt(slice_b, &sequence_number_b)) | 947 if (!slice_b->empty() && !DecodeVarInt(slice_b, &sequence_number_b)) |
948 return 0; | 948 return 0; |
949 | 949 |
950 if (slice_a->empty() || slice_b->empty()) | 950 if (slice_a->empty() || slice_b->empty()) |
951 return CompareSizes(slice_a->size(), slice_b->size()); | 951 return CompareSizes(slice_a->size(), slice_b->size()); |
952 | 952 |
953 // primary key [optional] | 953 // primary key [optional] |
954 result = CompareEncodedIDBKeys(slice_a, slice_b, ok); | 954 result = CompareEncodedIDBKeys(slice_a, slice_b, ok); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 if (!ok) | 1126 if (!ok) |
1127 return 0; | 1127 return 0; |
1128 return result; | 1128 return result; |
1129 } | 1129 } |
1130 | 1130 |
1131 KeyPrefix::KeyPrefix() | 1131 KeyPrefix::KeyPrefix() |
1132 : database_id_(INVALID_TYPE), | 1132 : database_id_(INVALID_TYPE), |
1133 object_store_id_(INVALID_TYPE), | 1133 object_store_id_(INVALID_TYPE), |
1134 index_id_(INVALID_TYPE) {} | 1134 index_id_(INVALID_TYPE) {} |
1135 | 1135 |
1136 KeyPrefix::KeyPrefix(int64 database_id) | 1136 KeyPrefix::KeyPrefix(int64_t database_id) |
1137 : database_id_(database_id), object_store_id_(0), index_id_(0) { | 1137 : database_id_(database_id), object_store_id_(0), index_id_(0) { |
1138 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); | 1138 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); |
1139 } | 1139 } |
1140 | 1140 |
1141 KeyPrefix::KeyPrefix(int64 database_id, int64 object_store_id) | 1141 KeyPrefix::KeyPrefix(int64_t database_id, int64_t object_store_id) |
1142 : database_id_(database_id), | 1142 : database_id_(database_id), |
1143 object_store_id_(object_store_id), | 1143 object_store_id_(object_store_id), |
1144 index_id_(0) { | 1144 index_id_(0) { |
1145 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); | 1145 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); |
1146 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); | 1146 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); |
1147 } | 1147 } |
1148 | 1148 |
1149 KeyPrefix::KeyPrefix(int64 database_id, int64 object_store_id, int64 index_id) | 1149 KeyPrefix::KeyPrefix(int64_t database_id, |
| 1150 int64_t object_store_id, |
| 1151 int64_t index_id) |
1150 : database_id_(database_id), | 1152 : database_id_(database_id), |
1151 object_store_id_(object_store_id), | 1153 object_store_id_(object_store_id), |
1152 index_id_(index_id) { | 1154 index_id_(index_id) { |
1153 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); | 1155 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); |
1154 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); | 1156 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); |
1155 DCHECK(KeyPrefix::IsValidIndexId(index_id)); | 1157 DCHECK(KeyPrefix::IsValidIndexId(index_id)); |
1156 } | 1158 } |
1157 | 1159 |
1158 KeyPrefix::KeyPrefix(enum Type type, | 1160 KeyPrefix::KeyPrefix(enum Type type, |
1159 int64 database_id, | 1161 int64_t database_id, |
1160 int64 object_store_id, | 1162 int64_t object_store_id, |
1161 int64 index_id) | 1163 int64_t index_id) |
1162 : database_id_(database_id), | 1164 : database_id_(database_id), |
1163 object_store_id_(object_store_id), | 1165 object_store_id_(object_store_id), |
1164 index_id_(index_id) { | 1166 index_id_(index_id) { |
1165 DCHECK_EQ(type, INVALID_TYPE); | 1167 DCHECK_EQ(type, INVALID_TYPE); |
1166 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); | 1168 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); |
1167 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); | 1169 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); |
1168 } | 1170 } |
1169 | 1171 |
1170 KeyPrefix KeyPrefix::CreateWithSpecialIndex(int64 database_id, | 1172 KeyPrefix KeyPrefix::CreateWithSpecialIndex(int64_t database_id, |
1171 int64 object_store_id, | 1173 int64_t object_store_id, |
1172 int64 index_id) { | 1174 int64_t index_id) { |
1173 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); | 1175 DCHECK(KeyPrefix::IsValidDatabaseId(database_id)); |
1174 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); | 1176 DCHECK(KeyPrefix::IsValidObjectStoreId(object_store_id)); |
1175 DCHECK(index_id); | 1177 DCHECK(index_id); |
1176 return KeyPrefix(INVALID_TYPE, database_id, object_store_id, index_id); | 1178 return KeyPrefix(INVALID_TYPE, database_id, object_store_id, index_id); |
1177 } | 1179 } |
1178 | 1180 |
1179 bool KeyPrefix::IsValidDatabaseId(int64 database_id) { | 1181 bool KeyPrefix::IsValidDatabaseId(int64_t database_id) { |
1180 return (database_id > 0) && (database_id < KeyPrefix::kMaxDatabaseId); | 1182 return (database_id > 0) && (database_id < KeyPrefix::kMaxDatabaseId); |
1181 } | 1183 } |
1182 | 1184 |
1183 bool KeyPrefix::IsValidObjectStoreId(int64 object_store_id) { | 1185 bool KeyPrefix::IsValidObjectStoreId(int64_t object_store_id) { |
1184 return (object_store_id > 0) && | 1186 return (object_store_id > 0) && |
1185 (object_store_id < KeyPrefix::kMaxObjectStoreId); | 1187 (object_store_id < KeyPrefix::kMaxObjectStoreId); |
1186 } | 1188 } |
1187 | 1189 |
1188 bool KeyPrefix::IsValidIndexId(int64 index_id) { | 1190 bool KeyPrefix::IsValidIndexId(int64_t index_id) { |
1189 return (index_id >= kMinimumIndexId) && (index_id < KeyPrefix::kMaxIndexId); | 1191 return (index_id >= kMinimumIndexId) && (index_id < KeyPrefix::kMaxIndexId); |
1190 } | 1192 } |
1191 | 1193 |
1192 bool KeyPrefix::Decode(StringPiece* slice, KeyPrefix* result) { | 1194 bool KeyPrefix::Decode(StringPiece* slice, KeyPrefix* result) { |
1193 unsigned char first_byte; | 1195 unsigned char first_byte; |
1194 if (!DecodeByte(slice, &first_byte)) | 1196 if (!DecodeByte(slice, &first_byte)) |
1195 return false; | 1197 return false; |
1196 | 1198 |
1197 size_t database_id_bytes = ((first_byte >> 5) & 0x7) + 1; | 1199 size_t database_id_bytes = ((first_byte >> 5) & 0x7) + 1; |
1198 size_t object_store_id_bytes = ((first_byte >> 2) & 0x7) + 1; | 1200 size_t object_store_id_bytes = ((first_byte >> 2) & 0x7) + 1; |
(...skipping 30 matching lines...) Expand all Loading... |
1229 return result; | 1231 return result; |
1230 } | 1232 } |
1231 | 1233 |
1232 std::string KeyPrefix::Encode() const { | 1234 std::string KeyPrefix::Encode() const { |
1233 DCHECK(database_id_ != kInvalidId); | 1235 DCHECK(database_id_ != kInvalidId); |
1234 DCHECK(object_store_id_ != kInvalidId); | 1236 DCHECK(object_store_id_ != kInvalidId); |
1235 DCHECK(index_id_ != kInvalidId); | 1237 DCHECK(index_id_ != kInvalidId); |
1236 return EncodeInternal(database_id_, object_store_id_, index_id_); | 1238 return EncodeInternal(database_id_, object_store_id_, index_id_); |
1237 } | 1239 } |
1238 | 1240 |
1239 std::string KeyPrefix::EncodeInternal(int64 database_id, | 1241 std::string KeyPrefix::EncodeInternal(int64_t database_id, |
1240 int64 object_store_id, | 1242 int64_t object_store_id, |
1241 int64 index_id) { | 1243 int64_t index_id) { |
1242 std::string database_id_string; | 1244 std::string database_id_string; |
1243 std::string object_store_id_string; | 1245 std::string object_store_id_string; |
1244 std::string index_id_string; | 1246 std::string index_id_string; |
1245 | 1247 |
1246 EncodeIntSafely(database_id, kMaxDatabaseId, &database_id_string); | 1248 EncodeIntSafely(database_id, kMaxDatabaseId, &database_id_string); |
1247 EncodeIntSafely(object_store_id, kMaxObjectStoreId, &object_store_id_string); | 1249 EncodeIntSafely(object_store_id, kMaxObjectStoreId, &object_store_id_string); |
1248 EncodeIntSafely(index_id, kMaxIndexId, &index_id_string); | 1250 EncodeIntSafely(index_id, kMaxIndexId, &index_id_string); |
1249 | 1251 |
1250 DCHECK(database_id_string.size() <= kMaxDatabaseIdSizeBytes); | 1252 DCHECK(database_id_string.size() <= kMaxDatabaseIdSizeBytes); |
1251 DCHECK(object_store_id_string.size() <= kMaxObjectStoreIdSizeBytes); | 1253 DCHECK(object_store_id_string.size() <= kMaxObjectStoreIdSizeBytes); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 DCHECK(!prefix.index_id_); | 1351 DCHECK(!prefix.index_id_); |
1350 unsigned char type_byte = 0; | 1352 unsigned char type_byte = 0; |
1351 if (!DecodeByte(slice, &type_byte)) | 1353 if (!DecodeByte(slice, &type_byte)) |
1352 return false; | 1354 return false; |
1353 DCHECK_EQ(type_byte, kDatabaseFreeListTypeByte); | 1355 DCHECK_EQ(type_byte, kDatabaseFreeListTypeByte); |
1354 if (!DecodeVarInt(slice, &result->database_id_)) | 1356 if (!DecodeVarInt(slice, &result->database_id_)) |
1355 return false; | 1357 return false; |
1356 return true; | 1358 return true; |
1357 } | 1359 } |
1358 | 1360 |
1359 std::string DatabaseFreeListKey::Encode(int64 database_id) { | 1361 std::string DatabaseFreeListKey::Encode(int64_t database_id) { |
1360 std::string ret = KeyPrefix::EncodeEmpty(); | 1362 std::string ret = KeyPrefix::EncodeEmpty(); |
1361 ret.push_back(kDatabaseFreeListTypeByte); | 1363 ret.push_back(kDatabaseFreeListTypeByte); |
1362 EncodeVarInt(database_id, &ret); | 1364 EncodeVarInt(database_id, &ret); |
1363 return ret; | 1365 return ret; |
1364 } | 1366 } |
1365 | 1367 |
1366 std::string DatabaseFreeListKey::EncodeMaxKey() { | 1368 std::string DatabaseFreeListKey::EncodeMaxKey() { |
1367 return Encode(std::numeric_limits<int64>::max()); | 1369 return Encode(std::numeric_limits<int64_t>::max()); |
1368 } | 1370 } |
1369 | 1371 |
1370 int64 DatabaseFreeListKey::DatabaseId() const { | 1372 int64_t DatabaseFreeListKey::DatabaseId() const { |
1371 DCHECK_GE(database_id_, 0); | 1373 DCHECK_GE(database_id_, 0); |
1372 return database_id_; | 1374 return database_id_; |
1373 } | 1375 } |
1374 | 1376 |
1375 int DatabaseFreeListKey::Compare(const DatabaseFreeListKey& other) const { | 1377 int DatabaseFreeListKey::Compare(const DatabaseFreeListKey& other) const { |
1376 DCHECK_GE(database_id_, 0); | 1378 DCHECK_GE(database_id_, 0); |
1377 return CompareInts(database_id_, other.database_id_); | 1379 return CompareInts(database_id_, other.database_id_); |
1378 } | 1380 } |
1379 | 1381 |
1380 bool DatabaseNameKey::Decode(StringPiece* slice, DatabaseNameKey* result) { | 1382 bool DatabaseNameKey::Decode(StringPiece* slice, DatabaseNameKey* result) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1414 // just after origin in collation order | 1416 // just after origin in collation order |
1415 return EncodeMinKeyForOrigin(origin_identifier + '\x01'); | 1417 return EncodeMinKeyForOrigin(origin_identifier + '\x01'); |
1416 } | 1418 } |
1417 | 1419 |
1418 int DatabaseNameKey::Compare(const DatabaseNameKey& other) { | 1420 int DatabaseNameKey::Compare(const DatabaseNameKey& other) { |
1419 if (int x = origin_.compare(other.origin_)) | 1421 if (int x = origin_.compare(other.origin_)) |
1420 return x; | 1422 return x; |
1421 return database_name_.compare(other.database_name_); | 1423 return database_name_.compare(other.database_name_); |
1422 } | 1424 } |
1423 | 1425 |
1424 bool DatabaseMetaDataKey::IsValidBlobKey(int64 blob_key) { | 1426 bool DatabaseMetaDataKey::IsValidBlobKey(int64_t blob_key) { |
1425 return blob_key >= kBlobKeyGeneratorInitialNumber; | 1427 return blob_key >= kBlobKeyGeneratorInitialNumber; |
1426 } | 1428 } |
1427 | 1429 |
1428 const int64 DatabaseMetaDataKey::kAllBlobsKey = 1; | 1430 const int64_t DatabaseMetaDataKey::kAllBlobsKey = 1; |
1429 const int64 DatabaseMetaDataKey::kBlobKeyGeneratorInitialNumber = 2; | 1431 const int64_t DatabaseMetaDataKey::kBlobKeyGeneratorInitialNumber = 2; |
1430 const int64 DatabaseMetaDataKey::kInvalidBlobKey = -1; | 1432 const int64_t DatabaseMetaDataKey::kInvalidBlobKey = -1; |
1431 | 1433 |
1432 std::string DatabaseMetaDataKey::Encode(int64 database_id, | 1434 std::string DatabaseMetaDataKey::Encode(int64_t database_id, |
1433 MetaDataType meta_data_type) { | 1435 MetaDataType meta_data_type) { |
1434 KeyPrefix prefix(database_id); | 1436 KeyPrefix prefix(database_id); |
1435 std::string ret = prefix.Encode(); | 1437 std::string ret = prefix.Encode(); |
1436 ret.push_back(meta_data_type); | 1438 ret.push_back(meta_data_type); |
1437 return ret; | 1439 return ret; |
1438 } | 1440 } |
1439 | 1441 |
1440 ObjectStoreMetaDataKey::ObjectStoreMetaDataKey() | 1442 ObjectStoreMetaDataKey::ObjectStoreMetaDataKey() |
1441 : object_store_id_(-1), meta_data_type_(0xFF) {} | 1443 : object_store_id_(-1), meta_data_type_(0xFF) {} |
1442 | 1444 |
(...skipping 10 matching lines...) Expand all Loading... |
1453 return false; | 1455 return false; |
1454 DCHECK_EQ(type_byte, kObjectStoreMetaDataTypeByte); | 1456 DCHECK_EQ(type_byte, kObjectStoreMetaDataTypeByte); |
1455 if (!DecodeVarInt(slice, &result->object_store_id_)) | 1457 if (!DecodeVarInt(slice, &result->object_store_id_)) |
1456 return false; | 1458 return false; |
1457 DCHECK(result->object_store_id_); | 1459 DCHECK(result->object_store_id_); |
1458 if (!DecodeByte(slice, &result->meta_data_type_)) | 1460 if (!DecodeByte(slice, &result->meta_data_type_)) |
1459 return false; | 1461 return false; |
1460 return true; | 1462 return true; |
1461 } | 1463 } |
1462 | 1464 |
1463 std::string ObjectStoreMetaDataKey::Encode(int64 database_id, | 1465 std::string ObjectStoreMetaDataKey::Encode(int64_t database_id, |
1464 int64 object_store_id, | 1466 int64_t object_store_id, |
1465 unsigned char meta_data_type) { | 1467 unsigned char meta_data_type) { |
1466 KeyPrefix prefix(database_id); | 1468 KeyPrefix prefix(database_id); |
1467 std::string ret = prefix.Encode(); | 1469 std::string ret = prefix.Encode(); |
1468 ret.push_back(kObjectStoreMetaDataTypeByte); | 1470 ret.push_back(kObjectStoreMetaDataTypeByte); |
1469 EncodeVarInt(object_store_id, &ret); | 1471 EncodeVarInt(object_store_id, &ret); |
1470 ret.push_back(meta_data_type); | 1472 ret.push_back(meta_data_type); |
1471 return ret; | 1473 return ret; |
1472 } | 1474 } |
1473 | 1475 |
1474 std::string ObjectStoreMetaDataKey::EncodeMaxKey(int64 database_id) { | 1476 std::string ObjectStoreMetaDataKey::EncodeMaxKey(int64_t database_id) { |
1475 return Encode(database_id, | 1477 return Encode(database_id, std::numeric_limits<int64_t>::max(), |
1476 std::numeric_limits<int64>::max(), | |
1477 kObjectMetaDataTypeMaximum); | 1478 kObjectMetaDataTypeMaximum); |
1478 } | 1479 } |
1479 | 1480 |
1480 std::string ObjectStoreMetaDataKey::EncodeMaxKey(int64 database_id, | 1481 std::string ObjectStoreMetaDataKey::EncodeMaxKey(int64_t database_id, |
1481 int64 object_store_id) { | 1482 int64_t object_store_id) { |
1482 return Encode(database_id, object_store_id, kObjectMetaDataTypeMaximum); | 1483 return Encode(database_id, object_store_id, kObjectMetaDataTypeMaximum); |
1483 } | 1484 } |
1484 | 1485 |
1485 int64 ObjectStoreMetaDataKey::ObjectStoreId() const { | 1486 int64_t ObjectStoreMetaDataKey::ObjectStoreId() const { |
1486 DCHECK_GE(object_store_id_, 0); | 1487 DCHECK_GE(object_store_id_, 0); |
1487 return object_store_id_; | 1488 return object_store_id_; |
1488 } | 1489 } |
1489 unsigned char ObjectStoreMetaDataKey::MetaDataType() const { | 1490 unsigned char ObjectStoreMetaDataKey::MetaDataType() const { |
1490 return meta_data_type_; | 1491 return meta_data_type_; |
1491 } | 1492 } |
1492 | 1493 |
1493 int ObjectStoreMetaDataKey::Compare(const ObjectStoreMetaDataKey& other) { | 1494 int ObjectStoreMetaDataKey::Compare(const ObjectStoreMetaDataKey& other) { |
1494 DCHECK_GE(object_store_id_, 0); | 1495 DCHECK_GE(object_store_id_, 0); |
1495 if (int x = CompareInts(object_store_id_, other.object_store_id_)) | 1496 if (int x = CompareInts(object_store_id_, other.object_store_id_)) |
(...skipping 17 matching lines...) Expand all Loading... |
1513 DCHECK_EQ(type_byte, kIndexMetaDataTypeByte); | 1514 DCHECK_EQ(type_byte, kIndexMetaDataTypeByte); |
1514 if (!DecodeVarInt(slice, &result->object_store_id_)) | 1515 if (!DecodeVarInt(slice, &result->object_store_id_)) |
1515 return false; | 1516 return false; |
1516 if (!DecodeVarInt(slice, &result->index_id_)) | 1517 if (!DecodeVarInt(slice, &result->index_id_)) |
1517 return false; | 1518 return false; |
1518 if (!DecodeByte(slice, &result->meta_data_type_)) | 1519 if (!DecodeByte(slice, &result->meta_data_type_)) |
1519 return false; | 1520 return false; |
1520 return true; | 1521 return true; |
1521 } | 1522 } |
1522 | 1523 |
1523 std::string IndexMetaDataKey::Encode(int64 database_id, | 1524 std::string IndexMetaDataKey::Encode(int64_t database_id, |
1524 int64 object_store_id, | 1525 int64_t object_store_id, |
1525 int64 index_id, | 1526 int64_t index_id, |
1526 unsigned char meta_data_type) { | 1527 unsigned char meta_data_type) { |
1527 KeyPrefix prefix(database_id); | 1528 KeyPrefix prefix(database_id); |
1528 std::string ret = prefix.Encode(); | 1529 std::string ret = prefix.Encode(); |
1529 ret.push_back(kIndexMetaDataTypeByte); | 1530 ret.push_back(kIndexMetaDataTypeByte); |
1530 EncodeVarInt(object_store_id, &ret); | 1531 EncodeVarInt(object_store_id, &ret); |
1531 EncodeVarInt(index_id, &ret); | 1532 EncodeVarInt(index_id, &ret); |
1532 EncodeByte(meta_data_type, &ret); | 1533 EncodeByte(meta_data_type, &ret); |
1533 return ret; | 1534 return ret; |
1534 } | 1535 } |
1535 | 1536 |
1536 std::string IndexMetaDataKey::EncodeMaxKey(int64 database_id, | 1537 std::string IndexMetaDataKey::EncodeMaxKey(int64_t database_id, |
1537 int64 object_store_id) { | 1538 int64_t object_store_id) { |
1538 return Encode(database_id, | 1539 return Encode(database_id, object_store_id, |
1539 object_store_id, | 1540 std::numeric_limits<int64_t>::max(), kIndexMetaDataTypeMaximum); |
1540 std::numeric_limits<int64>::max(), | |
1541 kIndexMetaDataTypeMaximum); | |
1542 } | 1541 } |
1543 | 1542 |
1544 std::string IndexMetaDataKey::EncodeMaxKey(int64 database_id, | 1543 std::string IndexMetaDataKey::EncodeMaxKey(int64_t database_id, |
1545 int64 object_store_id, | 1544 int64_t object_store_id, |
1546 int64 index_id) { | 1545 int64_t index_id) { |
1547 return Encode( | 1546 return Encode( |
1548 database_id, object_store_id, index_id, kIndexMetaDataTypeMaximum); | 1547 database_id, object_store_id, index_id, kIndexMetaDataTypeMaximum); |
1549 } | 1548 } |
1550 | 1549 |
1551 int IndexMetaDataKey::Compare(const IndexMetaDataKey& other) { | 1550 int IndexMetaDataKey::Compare(const IndexMetaDataKey& other) { |
1552 DCHECK_GE(object_store_id_, 0); | 1551 DCHECK_GE(object_store_id_, 0); |
1553 DCHECK_GE(index_id_, 0); | 1552 DCHECK_GE(index_id_, 0); |
1554 | 1553 |
1555 if (int x = CompareInts(object_store_id_, other.object_store_id_)) | 1554 if (int x = CompareInts(object_store_id_, other.object_store_id_)) |
1556 return x; | 1555 return x; |
1557 if (int x = CompareInts(index_id_, other.index_id_)) | 1556 if (int x = CompareInts(index_id_, other.index_id_)) |
1558 return x; | 1557 return x; |
1559 return meta_data_type_ - other.meta_data_type_; | 1558 return meta_data_type_ - other.meta_data_type_; |
1560 } | 1559 } |
1561 | 1560 |
1562 int64 IndexMetaDataKey::IndexId() const { | 1561 int64_t IndexMetaDataKey::IndexId() const { |
1563 DCHECK_GE(index_id_, 0); | 1562 DCHECK_GE(index_id_, 0); |
1564 return index_id_; | 1563 return index_id_; |
1565 } | 1564 } |
1566 | 1565 |
1567 ObjectStoreFreeListKey::ObjectStoreFreeListKey() : object_store_id_(-1) {} | 1566 ObjectStoreFreeListKey::ObjectStoreFreeListKey() : object_store_id_(-1) {} |
1568 | 1567 |
1569 bool ObjectStoreFreeListKey::Decode(StringPiece* slice, | 1568 bool ObjectStoreFreeListKey::Decode(StringPiece* slice, |
1570 ObjectStoreFreeListKey* result) { | 1569 ObjectStoreFreeListKey* result) { |
1571 KeyPrefix prefix; | 1570 KeyPrefix prefix; |
1572 if (!KeyPrefix::Decode(slice, &prefix)) | 1571 if (!KeyPrefix::Decode(slice, &prefix)) |
1573 return false; | 1572 return false; |
1574 DCHECK(prefix.database_id_); | 1573 DCHECK(prefix.database_id_); |
1575 DCHECK(!prefix.object_store_id_); | 1574 DCHECK(!prefix.object_store_id_); |
1576 DCHECK(!prefix.index_id_); | 1575 DCHECK(!prefix.index_id_); |
1577 unsigned char type_byte = 0; | 1576 unsigned char type_byte = 0; |
1578 if (!DecodeByte(slice, &type_byte)) | 1577 if (!DecodeByte(slice, &type_byte)) |
1579 return false; | 1578 return false; |
1580 DCHECK_EQ(type_byte, kObjectStoreFreeListTypeByte); | 1579 DCHECK_EQ(type_byte, kObjectStoreFreeListTypeByte); |
1581 if (!DecodeVarInt(slice, &result->object_store_id_)) | 1580 if (!DecodeVarInt(slice, &result->object_store_id_)) |
1582 return false; | 1581 return false; |
1583 return true; | 1582 return true; |
1584 } | 1583 } |
1585 | 1584 |
1586 std::string ObjectStoreFreeListKey::Encode(int64 database_id, | 1585 std::string ObjectStoreFreeListKey::Encode(int64_t database_id, |
1587 int64 object_store_id) { | 1586 int64_t object_store_id) { |
1588 KeyPrefix prefix(database_id); | 1587 KeyPrefix prefix(database_id); |
1589 std::string ret = prefix.Encode(); | 1588 std::string ret = prefix.Encode(); |
1590 ret.push_back(kObjectStoreFreeListTypeByte); | 1589 ret.push_back(kObjectStoreFreeListTypeByte); |
1591 EncodeVarInt(object_store_id, &ret); | 1590 EncodeVarInt(object_store_id, &ret); |
1592 return ret; | 1591 return ret; |
1593 } | 1592 } |
1594 | 1593 |
1595 std::string ObjectStoreFreeListKey::EncodeMaxKey(int64 database_id) { | 1594 std::string ObjectStoreFreeListKey::EncodeMaxKey(int64_t database_id) { |
1596 return Encode(database_id, std::numeric_limits<int64>::max()); | 1595 return Encode(database_id, std::numeric_limits<int64_t>::max()); |
1597 } | 1596 } |
1598 | 1597 |
1599 int64 ObjectStoreFreeListKey::ObjectStoreId() const { | 1598 int64_t ObjectStoreFreeListKey::ObjectStoreId() const { |
1600 DCHECK_GE(object_store_id_, 0); | 1599 DCHECK_GE(object_store_id_, 0); |
1601 return object_store_id_; | 1600 return object_store_id_; |
1602 } | 1601 } |
1603 | 1602 |
1604 int ObjectStoreFreeListKey::Compare(const ObjectStoreFreeListKey& other) { | 1603 int ObjectStoreFreeListKey::Compare(const ObjectStoreFreeListKey& other) { |
1605 // TODO(jsbell): It may seem strange that we're not comparing database id's, | 1604 // TODO(jsbell): It may seem strange that we're not comparing database id's, |
1606 // but that comparison will have been made earlier. | 1605 // but that comparison will have been made earlier. |
1607 // We should probably make this more clear, though... | 1606 // We should probably make this more clear, though... |
1608 DCHECK_GE(object_store_id_, 0); | 1607 DCHECK_GE(object_store_id_, 0); |
1609 return CompareInts(object_store_id_, other.object_store_id_); | 1608 return CompareInts(object_store_id_, other.object_store_id_); |
(...skipping 12 matching lines...) Expand all Loading... |
1622 if (!DecodeByte(slice, &type_byte)) | 1621 if (!DecodeByte(slice, &type_byte)) |
1623 return false; | 1622 return false; |
1624 DCHECK_EQ(type_byte, kIndexFreeListTypeByte); | 1623 DCHECK_EQ(type_byte, kIndexFreeListTypeByte); |
1625 if (!DecodeVarInt(slice, &result->object_store_id_)) | 1624 if (!DecodeVarInt(slice, &result->object_store_id_)) |
1626 return false; | 1625 return false; |
1627 if (!DecodeVarInt(slice, &result->index_id_)) | 1626 if (!DecodeVarInt(slice, &result->index_id_)) |
1628 return false; | 1627 return false; |
1629 return true; | 1628 return true; |
1630 } | 1629 } |
1631 | 1630 |
1632 std::string IndexFreeListKey::Encode(int64 database_id, | 1631 std::string IndexFreeListKey::Encode(int64_t database_id, |
1633 int64 object_store_id, | 1632 int64_t object_store_id, |
1634 int64 index_id) { | 1633 int64_t index_id) { |
1635 KeyPrefix prefix(database_id); | 1634 KeyPrefix prefix(database_id); |
1636 std::string ret = prefix.Encode(); | 1635 std::string ret = prefix.Encode(); |
1637 ret.push_back(kIndexFreeListTypeByte); | 1636 ret.push_back(kIndexFreeListTypeByte); |
1638 EncodeVarInt(object_store_id, &ret); | 1637 EncodeVarInt(object_store_id, &ret); |
1639 EncodeVarInt(index_id, &ret); | 1638 EncodeVarInt(index_id, &ret); |
1640 return ret; | 1639 return ret; |
1641 } | 1640 } |
1642 | 1641 |
1643 std::string IndexFreeListKey::EncodeMaxKey(int64 database_id, | 1642 std::string IndexFreeListKey::EncodeMaxKey(int64_t database_id, |
1644 int64 object_store_id) { | 1643 int64_t object_store_id) { |
1645 return Encode( | 1644 return Encode(database_id, object_store_id, |
1646 database_id, object_store_id, std::numeric_limits<int64>::max()); | 1645 std::numeric_limits<int64_t>::max()); |
1647 } | 1646 } |
1648 | 1647 |
1649 int IndexFreeListKey::Compare(const IndexFreeListKey& other) { | 1648 int IndexFreeListKey::Compare(const IndexFreeListKey& other) { |
1650 DCHECK_GE(object_store_id_, 0); | 1649 DCHECK_GE(object_store_id_, 0); |
1651 DCHECK_GE(index_id_, 0); | 1650 DCHECK_GE(index_id_, 0); |
1652 if (int x = CompareInts(object_store_id_, other.object_store_id_)) | 1651 if (int x = CompareInts(object_store_id_, other.object_store_id_)) |
1653 return x; | 1652 return x; |
1654 return CompareInts(index_id_, other.index_id_); | 1653 return CompareInts(index_id_, other.index_id_); |
1655 } | 1654 } |
1656 | 1655 |
1657 int64 IndexFreeListKey::ObjectStoreId() const { | 1656 int64_t IndexFreeListKey::ObjectStoreId() const { |
1658 DCHECK_GE(object_store_id_, 0); | 1657 DCHECK_GE(object_store_id_, 0); |
1659 return object_store_id_; | 1658 return object_store_id_; |
1660 } | 1659 } |
1661 | 1660 |
1662 int64 IndexFreeListKey::IndexId() const { | 1661 int64_t IndexFreeListKey::IndexId() const { |
1663 DCHECK_GE(index_id_, 0); | 1662 DCHECK_GE(index_id_, 0); |
1664 return index_id_; | 1663 return index_id_; |
1665 } | 1664 } |
1666 | 1665 |
1667 // TODO(jsbell): We never use this to look up object store ids, | 1666 // TODO(jsbell): We never use this to look up object store ids, |
1668 // because a mapping is kept in the IndexedDBDatabase. Can the | 1667 // because a mapping is kept in the IndexedDBDatabase. Can the |
1669 // mapping become unreliable? Can we remove this? | 1668 // mapping become unreliable? Can we remove this? |
1670 bool ObjectStoreNamesKey::Decode(StringPiece* slice, | 1669 bool ObjectStoreNamesKey::Decode(StringPiece* slice, |
1671 ObjectStoreNamesKey* result) { | 1670 ObjectStoreNamesKey* result) { |
1672 KeyPrefix prefix; | 1671 KeyPrefix prefix; |
1673 if (!KeyPrefix::Decode(slice, &prefix)) | 1672 if (!KeyPrefix::Decode(slice, &prefix)) |
1674 return false; | 1673 return false; |
1675 DCHECK(prefix.database_id_); | 1674 DCHECK(prefix.database_id_); |
1676 DCHECK(!prefix.object_store_id_); | 1675 DCHECK(!prefix.object_store_id_); |
1677 DCHECK(!prefix.index_id_); | 1676 DCHECK(!prefix.index_id_); |
1678 unsigned char type_byte = 0; | 1677 unsigned char type_byte = 0; |
1679 if (!DecodeByte(slice, &type_byte)) | 1678 if (!DecodeByte(slice, &type_byte)) |
1680 return false; | 1679 return false; |
1681 DCHECK_EQ(type_byte, kObjectStoreNamesTypeByte); | 1680 DCHECK_EQ(type_byte, kObjectStoreNamesTypeByte); |
1682 if (!DecodeStringWithLength(slice, &result->object_store_name_)) | 1681 if (!DecodeStringWithLength(slice, &result->object_store_name_)) |
1683 return false; | 1682 return false; |
1684 return true; | 1683 return true; |
1685 } | 1684 } |
1686 | 1685 |
1687 std::string ObjectStoreNamesKey::Encode( | 1686 std::string ObjectStoreNamesKey::Encode( |
1688 int64 database_id, | 1687 int64_t database_id, |
1689 const base::string16& object_store_name) { | 1688 const base::string16& object_store_name) { |
1690 KeyPrefix prefix(database_id); | 1689 KeyPrefix prefix(database_id); |
1691 std::string ret = prefix.Encode(); | 1690 std::string ret = prefix.Encode(); |
1692 ret.push_back(kObjectStoreNamesTypeByte); | 1691 ret.push_back(kObjectStoreNamesTypeByte); |
1693 EncodeStringWithLength(object_store_name, &ret); | 1692 EncodeStringWithLength(object_store_name, &ret); |
1694 return ret; | 1693 return ret; |
1695 } | 1694 } |
1696 | 1695 |
1697 int ObjectStoreNamesKey::Compare(const ObjectStoreNamesKey& other) { | 1696 int ObjectStoreNamesKey::Compare(const ObjectStoreNamesKey& other) { |
1698 return object_store_name_.compare(other.object_store_name_); | 1697 return object_store_name_.compare(other.object_store_name_); |
(...skipping 14 matching lines...) Expand all Loading... |
1713 if (!DecodeByte(slice, &type_byte)) | 1712 if (!DecodeByte(slice, &type_byte)) |
1714 return false; | 1713 return false; |
1715 DCHECK_EQ(type_byte, kIndexNamesKeyTypeByte); | 1714 DCHECK_EQ(type_byte, kIndexNamesKeyTypeByte); |
1716 if (!DecodeVarInt(slice, &result->object_store_id_)) | 1715 if (!DecodeVarInt(slice, &result->object_store_id_)) |
1717 return false; | 1716 return false; |
1718 if (!DecodeStringWithLength(slice, &result->index_name_)) | 1717 if (!DecodeStringWithLength(slice, &result->index_name_)) |
1719 return false; | 1718 return false; |
1720 return true; | 1719 return true; |
1721 } | 1720 } |
1722 | 1721 |
1723 std::string IndexNamesKey::Encode(int64 database_id, | 1722 std::string IndexNamesKey::Encode(int64_t database_id, |
1724 int64 object_store_id, | 1723 int64_t object_store_id, |
1725 const base::string16& index_name) { | 1724 const base::string16& index_name) { |
1726 KeyPrefix prefix(database_id); | 1725 KeyPrefix prefix(database_id); |
1727 std::string ret = prefix.Encode(); | 1726 std::string ret = prefix.Encode(); |
1728 ret.push_back(kIndexNamesKeyTypeByte); | 1727 ret.push_back(kIndexNamesKeyTypeByte); |
1729 EncodeVarInt(object_store_id, &ret); | 1728 EncodeVarInt(object_store_id, &ret); |
1730 EncodeStringWithLength(index_name, &ret); | 1729 EncodeStringWithLength(index_name, &ret); |
1731 return ret; | 1730 return ret; |
1732 } | 1731 } |
1733 | 1732 |
1734 int IndexNamesKey::Compare(const IndexNamesKey& other) { | 1733 int IndexNamesKey::Compare(const IndexNamesKey& other) { |
(...skipping 12 matching lines...) Expand all Loading... |
1747 if (!KeyPrefix::Decode(slice, &prefix)) | 1746 if (!KeyPrefix::Decode(slice, &prefix)) |
1748 return false; | 1747 return false; |
1749 DCHECK(prefix.database_id_); | 1748 DCHECK(prefix.database_id_); |
1750 DCHECK(prefix.object_store_id_); | 1749 DCHECK(prefix.object_store_id_); |
1751 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); | 1750 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); |
1752 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) | 1751 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) |
1753 return false; | 1752 return false; |
1754 return true; | 1753 return true; |
1755 } | 1754 } |
1756 | 1755 |
1757 std::string ObjectStoreDataKey::Encode(int64 database_id, | 1756 std::string ObjectStoreDataKey::Encode(int64_t database_id, |
1758 int64 object_store_id, | 1757 int64_t object_store_id, |
1759 const std::string encoded_user_key) { | 1758 const std::string encoded_user_key) { |
1760 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( | 1759 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( |
1761 database_id, object_store_id, kSpecialIndexNumber)); | 1760 database_id, object_store_id, kSpecialIndexNumber)); |
1762 std::string ret = prefix.Encode(); | 1761 std::string ret = prefix.Encode(); |
1763 ret.append(encoded_user_key); | 1762 ret.append(encoded_user_key); |
1764 | 1763 |
1765 return ret; | 1764 return ret; |
1766 } | 1765 } |
1767 | 1766 |
1768 std::string ObjectStoreDataKey::Encode(int64 database_id, | 1767 std::string ObjectStoreDataKey::Encode(int64_t database_id, |
1769 int64 object_store_id, | 1768 int64_t object_store_id, |
1770 const IndexedDBKey& user_key) { | 1769 const IndexedDBKey& user_key) { |
1771 std::string encoded_key; | 1770 std::string encoded_key; |
1772 EncodeIDBKey(user_key, &encoded_key); | 1771 EncodeIDBKey(user_key, &encoded_key); |
1773 return Encode(database_id, object_store_id, encoded_key); | 1772 return Encode(database_id, object_store_id, encoded_key); |
1774 } | 1773 } |
1775 | 1774 |
1776 scoped_ptr<IndexedDBKey> ObjectStoreDataKey::user_key() const { | 1775 scoped_ptr<IndexedDBKey> ObjectStoreDataKey::user_key() const { |
1777 scoped_ptr<IndexedDBKey> key; | 1776 scoped_ptr<IndexedDBKey> key; |
1778 StringPiece slice(encoded_user_key_); | 1777 StringPiece slice(encoded_user_key_); |
1779 if (!DecodeIDBKey(&slice, &key)) { | 1778 if (!DecodeIDBKey(&slice, &key)) { |
1780 // TODO(jsbell): Return error. | 1779 // TODO(jsbell): Return error. |
1781 } | 1780 } |
1782 return key.Pass(); | 1781 return key.Pass(); |
1783 } | 1782 } |
1784 | 1783 |
1785 const int64 ObjectStoreDataKey::kSpecialIndexNumber = kObjectStoreDataIndexId; | 1784 const int64_t ObjectStoreDataKey::kSpecialIndexNumber = kObjectStoreDataIndexId; |
1786 | 1785 |
1787 ExistsEntryKey::ExistsEntryKey() {} | 1786 ExistsEntryKey::ExistsEntryKey() {} |
1788 ExistsEntryKey::~ExistsEntryKey() {} | 1787 ExistsEntryKey::~ExistsEntryKey() {} |
1789 | 1788 |
1790 bool ExistsEntryKey::Decode(StringPiece* slice, ExistsEntryKey* result) { | 1789 bool ExistsEntryKey::Decode(StringPiece* slice, ExistsEntryKey* result) { |
1791 KeyPrefix prefix; | 1790 KeyPrefix prefix; |
1792 if (!KeyPrefix::Decode(slice, &prefix)) | 1791 if (!KeyPrefix::Decode(slice, &prefix)) |
1793 return false; | 1792 return false; |
1794 DCHECK(prefix.database_id_); | 1793 DCHECK(prefix.database_id_); |
1795 DCHECK(prefix.object_store_id_); | 1794 DCHECK(prefix.object_store_id_); |
1796 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); | 1795 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); |
1797 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) | 1796 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) |
1798 return false; | 1797 return false; |
1799 return true; | 1798 return true; |
1800 } | 1799 } |
1801 | 1800 |
1802 std::string ExistsEntryKey::Encode(int64 database_id, | 1801 std::string ExistsEntryKey::Encode(int64_t database_id, |
1803 int64 object_store_id, | 1802 int64_t object_store_id, |
1804 const std::string& encoded_key) { | 1803 const std::string& encoded_key) { |
1805 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( | 1804 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( |
1806 database_id, object_store_id, kSpecialIndexNumber)); | 1805 database_id, object_store_id, kSpecialIndexNumber)); |
1807 std::string ret = prefix.Encode(); | 1806 std::string ret = prefix.Encode(); |
1808 ret.append(encoded_key); | 1807 ret.append(encoded_key); |
1809 return ret; | 1808 return ret; |
1810 } | 1809 } |
1811 | 1810 |
1812 std::string ExistsEntryKey::Encode(int64 database_id, | 1811 std::string ExistsEntryKey::Encode(int64_t database_id, |
1813 int64 object_store_id, | 1812 int64_t object_store_id, |
1814 const IndexedDBKey& user_key) { | 1813 const IndexedDBKey& user_key) { |
1815 std::string encoded_key; | 1814 std::string encoded_key; |
1816 EncodeIDBKey(user_key, &encoded_key); | 1815 EncodeIDBKey(user_key, &encoded_key); |
1817 return Encode(database_id, object_store_id, encoded_key); | 1816 return Encode(database_id, object_store_id, encoded_key); |
1818 } | 1817 } |
1819 | 1818 |
1820 scoped_ptr<IndexedDBKey> ExistsEntryKey::user_key() const { | 1819 scoped_ptr<IndexedDBKey> ExistsEntryKey::user_key() const { |
1821 scoped_ptr<IndexedDBKey> key; | 1820 scoped_ptr<IndexedDBKey> key; |
1822 StringPiece slice(encoded_user_key_); | 1821 StringPiece slice(encoded_user_key_); |
1823 if (!DecodeIDBKey(&slice, &key)) { | 1822 if (!DecodeIDBKey(&slice, &key)) { |
1824 // TODO(jsbell): Return error. | 1823 // TODO(jsbell): Return error. |
1825 } | 1824 } |
1826 return key.Pass(); | 1825 return key.Pass(); |
1827 } | 1826 } |
1828 | 1827 |
1829 const int64 ExistsEntryKey::kSpecialIndexNumber = kExistsEntryIndexId; | 1828 const int64_t ExistsEntryKey::kSpecialIndexNumber = kExistsEntryIndexId; |
1830 | 1829 |
1831 bool BlobEntryKey::Decode(StringPiece* slice, BlobEntryKey* result) { | 1830 bool BlobEntryKey::Decode(StringPiece* slice, BlobEntryKey* result) { |
1832 KeyPrefix prefix; | 1831 KeyPrefix prefix; |
1833 if (!KeyPrefix::Decode(slice, &prefix)) | 1832 if (!KeyPrefix::Decode(slice, &prefix)) |
1834 return false; | 1833 return false; |
1835 DCHECK(prefix.database_id_); | 1834 DCHECK(prefix.database_id_); |
1836 DCHECK(prefix.object_store_id_); | 1835 DCHECK(prefix.object_store_id_); |
1837 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); | 1836 DCHECK_EQ(prefix.index_id_, kSpecialIndexNumber); |
1838 | 1837 |
1839 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) | 1838 if (!ExtractEncodedIDBKey(slice, &result->encoded_user_key_)) |
(...skipping 23 matching lines...) Expand all Loading... |
1863 std::string BlobEntryKey::ReencodeToObjectStoreDataKey(StringPiece* slice) { | 1862 std::string BlobEntryKey::ReencodeToObjectStoreDataKey(StringPiece* slice) { |
1864 // TODO(ericu): We could be more efficient here, since the suffix is the same. | 1863 // TODO(ericu): We could be more efficient here, since the suffix is the same. |
1865 BlobEntryKey key; | 1864 BlobEntryKey key; |
1866 if (!Decode(slice, &key)) | 1865 if (!Decode(slice, &key)) |
1867 return std::string(); | 1866 return std::string(); |
1868 | 1867 |
1869 return ObjectStoreDataKey::Encode( | 1868 return ObjectStoreDataKey::Encode( |
1870 key.database_id_, key.object_store_id_, key.encoded_user_key_); | 1869 key.database_id_, key.object_store_id_, key.encoded_user_key_); |
1871 } | 1870 } |
1872 | 1871 |
1873 std::string BlobEntryKey::EncodeMinKeyForObjectStore(int64 database_id, | 1872 std::string BlobEntryKey::EncodeMinKeyForObjectStore(int64_t database_id, |
1874 int64 object_store_id) { | 1873 int64_t object_store_id) { |
1875 // Our implied encoded_user_key_ here is empty, the lowest possible key. | 1874 // Our implied encoded_user_key_ here is empty, the lowest possible key. |
1876 return Encode(database_id, object_store_id, std::string()); | 1875 return Encode(database_id, object_store_id, std::string()); |
1877 } | 1876 } |
1878 | 1877 |
1879 std::string BlobEntryKey::EncodeStopKeyForObjectStore(int64 database_id, | 1878 std::string BlobEntryKey::EncodeStopKeyForObjectStore(int64_t database_id, |
1880 int64 object_store_id) { | 1879 int64_t object_store_id) { |
1881 DCHECK(KeyPrefix::ValidIds(database_id, object_store_id)); | 1880 DCHECK(KeyPrefix::ValidIds(database_id, object_store_id)); |
1882 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( | 1881 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( |
1883 database_id, object_store_id, kSpecialIndexNumber + 1)); | 1882 database_id, object_store_id, kSpecialIndexNumber + 1)); |
1884 return prefix.Encode(); | 1883 return prefix.Encode(); |
1885 } | 1884 } |
1886 | 1885 |
1887 std::string BlobEntryKey::Encode() const { | 1886 std::string BlobEntryKey::Encode() const { |
1888 DCHECK(!encoded_user_key_.empty()); | 1887 DCHECK(!encoded_user_key_.empty()); |
1889 return Encode(database_id_, object_store_id_, encoded_user_key_); | 1888 return Encode(database_id_, object_store_id_, encoded_user_key_); |
1890 } | 1889 } |
1891 | 1890 |
1892 std::string BlobEntryKey::Encode(int64 database_id, | 1891 std::string BlobEntryKey::Encode(int64_t database_id, |
1893 int64 object_store_id, | 1892 int64_t object_store_id, |
1894 const IndexedDBKey& user_key) { | 1893 const IndexedDBKey& user_key) { |
1895 std::string encoded_key; | 1894 std::string encoded_key; |
1896 EncodeIDBKey(user_key, &encoded_key); | 1895 EncodeIDBKey(user_key, &encoded_key); |
1897 return Encode(database_id, object_store_id, encoded_key); | 1896 return Encode(database_id, object_store_id, encoded_key); |
1898 } | 1897 } |
1899 | 1898 |
1900 std::string BlobEntryKey::Encode(int64 database_id, | 1899 std::string BlobEntryKey::Encode(int64_t database_id, |
1901 int64 object_store_id, | 1900 int64_t object_store_id, |
1902 const std::string& encoded_user_key) { | 1901 const std::string& encoded_user_key) { |
1903 DCHECK(KeyPrefix::ValidIds(database_id, object_store_id)); | 1902 DCHECK(KeyPrefix::ValidIds(database_id, object_store_id)); |
1904 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( | 1903 KeyPrefix prefix(KeyPrefix::CreateWithSpecialIndex( |
1905 database_id, object_store_id, kSpecialIndexNumber)); | 1904 database_id, object_store_id, kSpecialIndexNumber)); |
1906 return prefix.Encode() + encoded_user_key; | 1905 return prefix.Encode() + encoded_user_key; |
1907 } | 1906 } |
1908 | 1907 |
1909 const int64 BlobEntryKey::kSpecialIndexNumber = kBlobEntryIndexId; | 1908 const int64_t BlobEntryKey::kSpecialIndexNumber = kBlobEntryIndexId; |
1910 | 1909 |
1911 IndexDataKey::IndexDataKey() | 1910 IndexDataKey::IndexDataKey() |
1912 : database_id_(-1), | 1911 : database_id_(-1), |
1913 object_store_id_(-1), | 1912 object_store_id_(-1), |
1914 index_id_(-1), | 1913 index_id_(-1), |
1915 sequence_number_(-1) {} | 1914 sequence_number_(-1) {} |
1916 | 1915 |
1917 IndexDataKey::~IndexDataKey() {} | 1916 IndexDataKey::~IndexDataKey() {} |
1918 | 1917 |
1919 bool IndexDataKey::Decode(StringPiece* slice, IndexDataKey* result) { | 1918 bool IndexDataKey::Decode(StringPiece* slice, IndexDataKey* result) { |
(...skipping 19 matching lines...) Expand all Loading... |
1939 return false; | 1938 return false; |
1940 | 1939 |
1941 // [optional] primary key | 1940 // [optional] primary key |
1942 if (slice->empty()) | 1941 if (slice->empty()) |
1943 return true; | 1942 return true; |
1944 if (!ExtractEncodedIDBKey(slice, &result->encoded_primary_key_)) | 1943 if (!ExtractEncodedIDBKey(slice, &result->encoded_primary_key_)) |
1945 return false; | 1944 return false; |
1946 return true; | 1945 return true; |
1947 } | 1946 } |
1948 | 1947 |
1949 std::string IndexDataKey::Encode(int64 database_id, | 1948 std::string IndexDataKey::Encode(int64_t database_id, |
1950 int64 object_store_id, | 1949 int64_t object_store_id, |
1951 int64 index_id, | 1950 int64_t index_id, |
1952 const std::string& encoded_user_key, | 1951 const std::string& encoded_user_key, |
1953 const std::string& encoded_primary_key, | 1952 const std::string& encoded_primary_key, |
1954 int64 sequence_number) { | 1953 int64_t sequence_number) { |
1955 KeyPrefix prefix(database_id, object_store_id, index_id); | 1954 KeyPrefix prefix(database_id, object_store_id, index_id); |
1956 std::string ret = prefix.Encode(); | 1955 std::string ret = prefix.Encode(); |
1957 ret.append(encoded_user_key); | 1956 ret.append(encoded_user_key); |
1958 EncodeVarInt(sequence_number, &ret); | 1957 EncodeVarInt(sequence_number, &ret); |
1959 ret.append(encoded_primary_key); | 1958 ret.append(encoded_primary_key); |
1960 return ret; | 1959 return ret; |
1961 } | 1960 } |
1962 | 1961 |
1963 std::string IndexDataKey::Encode(int64 database_id, | 1962 std::string IndexDataKey::Encode(int64_t database_id, |
1964 int64 object_store_id, | 1963 int64_t object_store_id, |
1965 int64 index_id, | 1964 int64_t index_id, |
1966 const IndexedDBKey& user_key) { | 1965 const IndexedDBKey& user_key) { |
1967 std::string encoded_key; | 1966 std::string encoded_key; |
1968 EncodeIDBKey(user_key, &encoded_key); | 1967 EncodeIDBKey(user_key, &encoded_key); |
1969 return Encode( | 1968 return Encode( |
1970 database_id, object_store_id, index_id, encoded_key, MinIDBKey(), 0); | 1969 database_id, object_store_id, index_id, encoded_key, MinIDBKey(), 0); |
1971 } | 1970 } |
1972 | 1971 |
1973 std::string IndexDataKey::Encode(int64 database_id, | 1972 std::string IndexDataKey::Encode(int64_t database_id, |
1974 int64 object_store_id, | 1973 int64_t object_store_id, |
1975 int64 index_id, | 1974 int64_t index_id, |
1976 const IndexedDBKey& user_key, | 1975 const IndexedDBKey& user_key, |
1977 const IndexedDBKey& user_primary_key) { | 1976 const IndexedDBKey& user_primary_key) { |
1978 std::string encoded_key; | 1977 std::string encoded_key; |
1979 EncodeIDBKey(user_key, &encoded_key); | 1978 EncodeIDBKey(user_key, &encoded_key); |
1980 std::string encoded_primary_key; | 1979 std::string encoded_primary_key; |
1981 EncodeIDBKey(user_primary_key, &encoded_primary_key); | 1980 EncodeIDBKey(user_primary_key, &encoded_primary_key); |
1982 return Encode(database_id, | 1981 return Encode(database_id, |
1983 object_store_id, | 1982 object_store_id, |
1984 index_id, | 1983 index_id, |
1985 encoded_key, | 1984 encoded_key, |
1986 encoded_primary_key, | 1985 encoded_primary_key, |
1987 0); | 1986 0); |
1988 } | 1987 } |
1989 | 1988 |
1990 std::string IndexDataKey::EncodeMinKey(int64 database_id, | 1989 std::string IndexDataKey::EncodeMinKey(int64_t database_id, |
1991 int64 object_store_id, | 1990 int64_t object_store_id, |
1992 int64 index_id) { | 1991 int64_t index_id) { |
1993 return Encode( | 1992 return Encode( |
1994 database_id, object_store_id, index_id, MinIDBKey(), MinIDBKey(), 0); | 1993 database_id, object_store_id, index_id, MinIDBKey(), MinIDBKey(), 0); |
1995 } | 1994 } |
1996 | 1995 |
1997 std::string IndexDataKey::EncodeMaxKey(int64 database_id, | 1996 std::string IndexDataKey::EncodeMaxKey(int64_t database_id, |
1998 int64 object_store_id, | 1997 int64_t object_store_id, |
1999 int64 index_id) { | 1998 int64_t index_id) { |
2000 return Encode(database_id, | 1999 return Encode(database_id, object_store_id, index_id, MaxIDBKey(), |
2001 object_store_id, | 2000 MaxIDBKey(), std::numeric_limits<int64_t>::max()); |
2002 index_id, | |
2003 MaxIDBKey(), | |
2004 MaxIDBKey(), | |
2005 std::numeric_limits<int64>::max()); | |
2006 } | 2001 } |
2007 | 2002 |
2008 int64 IndexDataKey::DatabaseId() const { | 2003 int64_t IndexDataKey::DatabaseId() const { |
2009 DCHECK_GE(database_id_, 0); | 2004 DCHECK_GE(database_id_, 0); |
2010 return database_id_; | 2005 return database_id_; |
2011 } | 2006 } |
2012 | 2007 |
2013 int64 IndexDataKey::ObjectStoreId() const { | 2008 int64_t IndexDataKey::ObjectStoreId() const { |
2014 DCHECK_GE(object_store_id_, 0); | 2009 DCHECK_GE(object_store_id_, 0); |
2015 return object_store_id_; | 2010 return object_store_id_; |
2016 } | 2011 } |
2017 | 2012 |
2018 int64 IndexDataKey::IndexId() const { | 2013 int64_t IndexDataKey::IndexId() const { |
2019 DCHECK_GE(index_id_, 0); | 2014 DCHECK_GE(index_id_, 0); |
2020 return index_id_; | 2015 return index_id_; |
2021 } | 2016 } |
2022 | 2017 |
2023 scoped_ptr<IndexedDBKey> IndexDataKey::user_key() const { | 2018 scoped_ptr<IndexedDBKey> IndexDataKey::user_key() const { |
2024 scoped_ptr<IndexedDBKey> key; | 2019 scoped_ptr<IndexedDBKey> key; |
2025 StringPiece slice(encoded_user_key_); | 2020 StringPiece slice(encoded_user_key_); |
2026 if (!DecodeIDBKey(&slice, &key)) { | 2021 if (!DecodeIDBKey(&slice, &key)) { |
2027 // TODO(jsbell): Return error. | 2022 // TODO(jsbell): Return error. |
2028 } | 2023 } |
2029 return key.Pass(); | 2024 return key.Pass(); |
2030 } | 2025 } |
2031 | 2026 |
2032 scoped_ptr<IndexedDBKey> IndexDataKey::primary_key() const { | 2027 scoped_ptr<IndexedDBKey> IndexDataKey::primary_key() const { |
2033 scoped_ptr<IndexedDBKey> key; | 2028 scoped_ptr<IndexedDBKey> key; |
2034 StringPiece slice(encoded_primary_key_); | 2029 StringPiece slice(encoded_primary_key_); |
2035 if (!DecodeIDBKey(&slice, &key)) { | 2030 if (!DecodeIDBKey(&slice, &key)) { |
2036 // TODO(jsbell): Return error. | 2031 // TODO(jsbell): Return error. |
2037 } | 2032 } |
2038 return key.Pass(); | 2033 return key.Pass(); |
2039 } | 2034 } |
2040 | 2035 |
2041 } // namespace content | 2036 } // namespace content |
OLD | NEW |