directory_backing_store_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_path.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/scoped_temp_dir.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_number_conversions.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/connection.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/base/node_ordinal.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/bookmark_specifics.pb.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/directory_backing_store.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/on_disk_directory_backing_store.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/syncable-inl.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/test/test_directory_backing_store.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/time.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest-param-test.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int32 kCurrentDBVersion;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MigrationTest : public testing::TestWithParam<int> {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetUsername() {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return "nick@chromium.org";
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FilePath GetDatabasePath() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return temp_dir_.path().Append(Directory::kSyncDatabaseFilename);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool LoadAndIgnoreReturnedData(DirectoryBackingStore *dbs) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MetahandlesIndex metas;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STLElementDeleter<MetahandlesIndex> index_deleter(&metas);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Directory::KernelLoadInfo kernel_load_info;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return dbs->Load(&metas, &kernel_load_info) == OPENED;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion67Database(sql::Connection* connection);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion68Database(sql::Connection* connection);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion69Database(sql::Connection* connection);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion70Database(sql::Connection* connection);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion71Database(sql::Connection* connection);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion72Database(sql::Connection* connection);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion73Database(sql::Connection* connection);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion74Database(sql::Connection* connection);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion75Database(sql::Connection* connection);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion76Database(sql::Connection* connection);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion77Database(sql::Connection* connection);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion78Database(sql::Connection* connection);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion79Database(sql::Connection* connection);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion80Database(sql::Connection* connection);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion81Database(sql::Connection* connection);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion82Database(sql::Connection* connection);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetUpVersion77Database(connection);  // Prepopulates data.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), connection));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedTempDir temp_dir_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DirectoryBackingStoreTest : public MigrationTest {};
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Windows, we used to store timestamps in FILETIME format.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_1 129079956640320000LL
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_2 128976886618480000LL
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_4 129002163642690000LL
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_5 129001555500000000LL
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_6 129053976170000000LL
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_7 128976864758480000LL
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_8 128976864758480000LL
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_9 128976864758480000LL
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_10 128976864758480000LL
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_11 129079956948440000LL
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_12 129079957513650000LL
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_13 129079957985300000LL
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_14 129079958383000000LL
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_1 "129079956640320000"
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_2 "128976886618480000"
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_4 "129002163642690000"
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_5 "129001555500000000"
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_6 "129053976170000000"
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_7 "128976864758480000"
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_8 "128976864758480000"
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_9 "128976864758480000"
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_10 "128976864758480000"
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_11 "129079956948440000"
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_12 "129079957513650000"
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_13 "129079957985300000"
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_14 "129079958383000000"
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Generated via:
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ruby -ane '$F[1].sub!("LEGACY_", ""); $F[2] = Integer($F[2].sub!("LL", "")) /
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    10000 - 11644473600000; print "#{$F[0]} #{$F[1]} #{$F[2]}LL"'
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Magic numbers taken from
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://stackoverflow.com/questions/5398557/
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    java-library-for-dealing-with-win32-filetime .
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Now we store them in Java format (ms since the Unix epoch).
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_1 1263522064032LL
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_2 1253215061848LL
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_4 1255742764269LL
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_5 1255681950000LL
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_6 1260924017000LL
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_7 1253212875848LL
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_8 1253212875848LL
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_9 1253212875848LL
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_10 1253212875848LL
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_11 1263522094844LL
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_12 1263522151365LL
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_13 1263522198530LL
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_14 1263522238300LL
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_1 "1263522064032"
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_2 "1253215061848"
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_4 "1255742764269"
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_5 "1255681950000"
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_6 "1260924017000"
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_7 "1253212875848"
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_8 "1253212875848"
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_9 "1253212875848"
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_10 "1253212875848"
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_11 "1263522094844"
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_12 "1263522151365"
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_13 "1263522198530"
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_14 "1263522238300"
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On other platforms, we used to store timestamps in time_t format (s
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// since the Unix epoch).
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_1 1263522064LL
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_2 1253215061LL
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_4 1255742764LL
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_5 1255681950LL
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_6 1260924017LL
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_7 1253212875LL
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_8 1253212875LL
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_9 1253212875LL
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_10 1253212875LL
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_11 1263522094LL
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_12 1263522151LL
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_13 1263522198LL
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_14 1263522238LL
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_1 "1263522064"
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_2 "1253215061"
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_4 "1255742764"
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_5 "1255681950"
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_6 "1260924017"
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_7 "1253212875"
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_8 "1253212875"
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_9 "1253212875"
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_10 "1253212875"
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_11 "1263522094"
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_12 "1263522151"
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_13 "1263522198"
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_14 "1263522238"
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Now we store them in Java format (ms since the Unix epoch).
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_1 1263522064000LL
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_2 1253215061000LL
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_4 1255742764000LL
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_5 1255681950000LL
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_6 1260924017000LL
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_7 1253212875000LL
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_8 1253212875000LL
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_9 1253212875000LL
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_10 1253212875000LL
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_11 1263522094000LL
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_12 1263522151000LL
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_13 1263522198000LL
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_14 1263522238000LL
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_1 "1263522064000"
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_2 "1253215061000"
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_4 "1255742764000"
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_5 "1255681950000"
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_6 "1260924017000"
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_7 "1253212875000"
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_8 "1253212875000"
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_9 "1253212875000"
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_10 "1253212875000"
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_11 "1263522094000"
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_12 "1263522151000"
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_13 "1263522198000"
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_14 "1263522238000"
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macros for the database dumps in the SetUpVersion*Database
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// functions.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES(x) LEGACY_META_PROTO_TIMES_##x
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR(x) LEGACY_META_PROTO_TIMES_STR_##x
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_PROTO_TIME_VALS(x)    \
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES(x) META_PROTO_TIMES_##x
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR(x) META_PROTO_TIMES_STR_##x
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_VALS(x)    \
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper functions for testing.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ShouldIncludeDeletedItems {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  INCLUDE_DELETED_ITEMS,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DONT_INCLUDE_DELETED_ITEMS
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected legacy time (in proto
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// format).
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetExpectedLegacyMetaProtoTimes(
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum ShouldIncludeDeletedItems include_deleted) {
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> expected_legacy_meta_proto_times;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[1] = LEGACY_META_PROTO_TIMES(1);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_deleted == INCLUDE_DELETED_ITEMS) {
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[2] = LEGACY_META_PROTO_TIMES(2);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[4] = LEGACY_META_PROTO_TIMES(4);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[5] = LEGACY_META_PROTO_TIMES(5);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[6] = LEGACY_META_PROTO_TIMES(6);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[7] = LEGACY_META_PROTO_TIMES(7);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[8] = LEGACY_META_PROTO_TIMES(8);
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[9] = LEGACY_META_PROTO_TIMES(9);
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[10] = LEGACY_META_PROTO_TIMES(10);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[11] = LEGACY_META_PROTO_TIMES(11);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[12] = LEGACY_META_PROTO_TIMES(12);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[13] = LEGACY_META_PROTO_TIMES(13);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[14] = LEGACY_META_PROTO_TIMES(14);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_legacy_meta_proto_times;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected time (in proto format).
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetExpectedMetaProtoTimes(
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum ShouldIncludeDeletedItems include_deleted) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> expected_meta_proto_times;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[1] = META_PROTO_TIMES(1);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_deleted == INCLUDE_DELETED_ITEMS) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[2] = META_PROTO_TIMES(2);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[4] = META_PROTO_TIMES(4);
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[5] = META_PROTO_TIMES(5);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[6] = META_PROTO_TIMES(6);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[7] = META_PROTO_TIMES(7);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[8] = META_PROTO_TIMES(8);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[9] = META_PROTO_TIMES(9);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[10] = META_PROTO_TIMES(10);
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[11] = META_PROTO_TIMES(11);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[12] = META_PROTO_TIMES(12);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[13] = META_PROTO_TIMES(13);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[14] = META_PROTO_TIMES(14);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_meta_proto_times;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected time (as a Time object).
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, base::Time> GetExpectedMetaTimes() {
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, base::Time> expected_meta_times;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::map<int64, int64>& expected_meta_proto_times =
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::map<int64, int64>::const_iterator it =
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           expected_meta_proto_times.begin();
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       it != expected_meta_proto_times.end(); ++it) {
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_times[it->first] = ProtoTimeToTime(it->second);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_meta_times;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts a map from metahandle -> time (in proto format) from the
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// given database.
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetMetaProtoTimes(sql::Connection *db) {
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(db->GetCachedStatement(
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          SQL_FROM_HERE,
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "SELECT metahandle, mtime, server_mtime, ctime, server_ctime "
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "FROM metas"));
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(5, s.ColumnCount());
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> meta_times;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (s.Step()) {
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 metahandle = s.ColumnInt64(0);
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 mtime = s.ColumnInt64(1);
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 server_mtime = s.ColumnInt64(2);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 ctime = s.ColumnInt64(3);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 server_ctime = s.ColumnInt64(4);
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, server_mtime);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, ctime);
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, server_ctime);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    meta_times[metahandle] = mtime;
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.Succeeded());
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return meta_times;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)::testing::AssertionResult AssertTimesMatch(const char* t1_expr,
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const char* t2_expr,
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const base::Time& t1,
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const base::Time& t2) {
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (t1 == t2)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ::testing::AssertionSuccess();
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ::testing::AssertionFailure()
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << t1_expr << " and " << t2_expr
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " (internal values: " << t1.ToInternalValue()
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " and " << t2.ToInternalValue()
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << ") (proto time: " << TimeToProtoTime(t1)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " and " << TimeToProtoTime(t2)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << ") do not match";
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Expect that all time fields of the given entry kernel will be the
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// given time.
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectTime(const EntryKernel& entry_kernel,
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const base::Time& expected_time) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(CTIME));
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(SERVER_CTIME));
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(MTIME));
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(SERVER_MTIME));
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Expect that all the entries in |index| have times matching those in
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the given map (from metahandle to expect time).
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectTimes(const MetahandlesIndex& index,
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const std::map<int64, base::Time>& expected_times) {
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (MetahandlesIndex::const_iterator it = index.begin();
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       it != index.end(); ++it) {
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 meta_handle = (*it)->ref(META_HANDLE);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(meta_handle);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::map<int64, base::Time>::const_iterator it2 =
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        expected_times.find(meta_handle);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it2 == expected_times.end()) {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ADD_FAILURE() << "Could not find expected time for " << meta_handle;
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectTime(**it, it2->second);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion67Database(sql::Connection* connection) {
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is a version 67 database dump whose contents were backformed from
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the contents of the version 68 database dump (the v68 migration was
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // actually written first).
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "name varchar(255), "  /* COLLATE PATHNAME, */
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,"
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_name varchar(255),"  /* COLLATE PATHNAME */
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_non_unique_name varchar,"
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob);"
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item',"
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA',"
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ASADGADGADG');"
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium',NULL,'Welcome to Chromium',"
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,'Google','Google','Google','http://www.google.com/',"
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,'The Internet','The Internet',"
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,NULL,NULL,NULL);"
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,'Google Chrome','Google Chrome',"
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);"
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL,"
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'google_chrome_bookmarks',NULL,NULL);"
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar',"
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,'bookmark_bar',NULL,NULL);"
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,"
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks',"
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks',NULL,NULL,'other_bookmarks',"
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL);"
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)',"
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF');"
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks',"
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN  Internet Corporation for Assigned Names and Numbers',"
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,"
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'PNGAXF0AAFF','DAAFASF');"
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project',NULL,"
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','http://webkit.org/',"
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/x',NULL,'PNGX','PNG2Y');"
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion68Database(sql::Connection* connection) {
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This sets up an actual version 68 database dump.  The IDs were
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // canonicalized to be less huge, and the favicons were overwritten
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with random junk so that they didn't contain any unprintable
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // characters.  A few server URLs were tweaked so that they'd be
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // different from the local URLs.  Lastly, the custom collation on
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the server_non_unique_name column was removed.
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,"
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_bookmark_object bit default 0,"
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob);"
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL,NULL,NULL,NULL);"
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item','http://www.google.com/',"
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');"
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google','Google','http://www.google.com/',"
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);"
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL,"
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);"
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,"
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,"
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL);"
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF');"
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,"
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'PNGAXF0AAFF','DAAFASF');"
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');"
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion69Database(sql::Connection* connection) {
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,"
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_bookmark_object bit default 0,"
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob, specifics blob, "
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL,"
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item','http://www.google.com/',"
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG',"
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415"
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F"
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6D2F32120B4153414447414447414447');"
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL,"
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168"
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6"
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "56E2F77656C636F6D652E68746D6C1200');"
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google','Google','http://www.google.com/',"
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166"
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'"
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464"
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "447415347');"
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6"
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet',"
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');"
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome',"
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);"
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL,"
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1,"
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL,"
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C2881000',X'C2881000');"
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6"
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576"
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');"
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL,"
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF',"
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963"
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "616E6E2E636F6D2F120744414146415346');"
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y',"
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2"
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');"
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',69);"
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ));
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion70Database(sql::Connection* connection) {
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',70);"
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_dir bit default 0,server_is_del bit default 0,"
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,"
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "specifics blob,server_specifics blob);"
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) ","
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,"
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A"
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026"
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741"
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4447414447');"
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A"
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74"
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F"
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6C636F6D652E68746D6C1200');"
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6"
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777"
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72E676F6F676C652E636F6D2F12084147464447415347');"
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome',"
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome','google_chrome',NULL,NULL,NULL);"
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',"
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,"
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',"
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F"
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872"
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6D69756D2E6F72672F6F7468657212084146414756415346');"
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F"
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69"
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "63616E6E2E636F6D2F120744414146415346');"
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550"
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E473259');"
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion71Database(sql::Connection* connection) {
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);"
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT);"
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"));
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion72Database(sql::Connection* connection) {
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);"
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT);"
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"));
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion73Database(sql::Connection* connection) {
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);"
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT, "
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "notification_state BLOB);"
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x',X'C2881000');"));
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion74Database(sql::Connection* connection) {
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " INT, initial_sync_ended BOOLEAN default 0);"
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion_state INT default 0, bookmarks_added_during_autofill_migration"
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " INT default 0, autofill_migration_time INT default 0, autofill_ent"
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ries_added_during_migration INT default 0, autofill_profiles_added_"
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "during_migration INT default 0);"
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_version bigint default -1,server_version bigint default 0,mtime b"
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "igint default 0,server_mtime bigint default 0,ctime bigint default "
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,server_ctime bigint default 0,server_position_in_parent bigint de"
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault 0,local_external_id bigint default 0,id varchar(255) default "
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "nt_tag varchar,specifics blob,server_specifics blob);"
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "');"
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,'s_ID_2','s_ID"
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6F676C652E636F6D2F32120B4153414447414447414447');"
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,'s_ID_4','s_ID"
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,'s_ID_5','s_ID_"
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "36F6D2F12084147464447415347');"
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,'s_ID_6','s_ID"
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,X'C2881000',X'C2881000');"
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_7','r','r"
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e',NULL,NULL,NULL);"
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_8','s_ID_"
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,'s_ID_9','s_ID_"
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,'s_ID_10','s_I"
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,'s_ID_11','s_"
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "84146414756415346');"
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,'s_ID_12','s_ID_6','"
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,'s_ID_13','s_"
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5346');"
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,'s_ID_14','s_"
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "703A2F2F7765626B69742E6F72672F781205504E473259');"
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion75Database(sql::Connection* connection) {
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',75);"
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion_state INT default 0,bookmarks_added_during_autofill_migration "
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "INT default 0, autofill_migration_time INT default 0, autofill_entr"
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ies_added_during_migration INT default 0, autofill_profiles_added_d"
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "uring_migration INT default 0);"
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org"
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-655"
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "42,'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "initial_sync_ended BOOLEAN default 0);"
12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,ba"
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "se_version bigint default -1,server_version bigint default 0,mtime"
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           " bigint default 0,server_mtime bigint default 0,ctime bigint defau"
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "lt 0,server_ctime bigint default 0,server_position_in_parent bigin"
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "t default 0,local_external_id bigint default 0,id varchar(255) def"
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ault 'r',parent_id varchar(255) default 'r',server_parent_id varch"
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ar(255) default 'r',prev_id varchar(255) default 'r',next_id varch"
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ar(255) default 'r',is_unsynced bit default 0,is_unapplied_update "
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "bit default 0,is_del bit default 0,is_dir bit default 0,server_is_"
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "dir bit default 0,server_is_del bit default 0,non_unique_name varc"
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "har,server_non_unique_name varchar(255),unique_server_tag varchar,"
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "unique_client_tag varchar,specifics blob,server_specifics blob);"
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NUL"
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "L,X'',X'');"
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-2097152,4,'s_ID_"
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Ite"
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "m','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772"
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A176874"
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "74703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474"
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "14447');"
12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-3145728,3,'s_ID_"
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to "
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A316874747"
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "03A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F65"
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7"
12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6C636F6D652E68746D6C1200');"
12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,7,'s_ID_5"
13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Goo"
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "gle',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C65"
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "2E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F777"
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "7772E676F6F676C652E636F6D2F12084147464447415347');"
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-4194304,6,'s_ID_"
13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The In"
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "ternet',NULL,NULL,X'C2881000',X'C2881000');"
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,0,'s_ID_7"
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','"
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "google_chrome',NULL,NULL,NULL);"
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,0,'s_ID_8"
13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks'"
13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",'google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,1,'s_ID_9"
13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','B"
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "ookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",2097152,2,'s_ID_"
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks"
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','Other Bookmarks','other_bookmarks',NULL,X'C2881000',X'C28810"
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "00');"
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-1048576,8,'s_ID"
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chr"
13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "omium Projects)','Home (The Chromium Projects)',NULL,NULL,X'C28"
13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641"
13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "4741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "D2E6F72672F6F7468657212084146414756415346');"
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",0,9,'s_ID_12','s"
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmark"
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "s','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000');"
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-917504,10,'s_ID"
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN |"
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              " Internet Corporation for Assigned Names and Numbers','ICANN | "
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "Internet Corporation for Assigned Names and Numbers',NULL,NULL,"
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "E474158463041414646',X'C28810200A15687474703A2F2F7777772E696361"
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6E6E2E636F6D2F120744414146415346');"
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,11,'s_ID"
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Op"
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "en Source Project','The WebKit Open Source Project',NULL,NULL,X"
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',"
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473"
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "259');"
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion76Database(sql::Connection* connection) {
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',76);"
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,mtime big"
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "int default 0,server_mtime bigint default 0,ctime bigint default 0,s"
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "erver_ctime bigint default 0,server_position_in_parent bigint defaul"
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 0,local_external_id bigint default 0,id varchar(255) default 'r',p"
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob);"
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'')"
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ";"
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,'s_ID_2','s_ID_9"
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted Ite"
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "m',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6"
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E676F6F6"
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76C652E636F6D2F32120B4153414447414447414447');"
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,'s_ID_4','s_ID_9"
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','Welc"
13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E676F6"
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746"
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6"
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,'s_ID_5','s_ID_9'"
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NULL,"
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F1208414741"
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D"
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F12084147464447415347');"
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,'s_ID_6','s_ID_9"
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL,NU"
14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000');"
14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_7','r','r',"
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrome',"
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL);"
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_8','s_ID_7'"
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chrome"
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_bookmarks',NULL,X'C2881000',X'C2881000');"
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,'s_ID_9','s_ID_8'"
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar','b"
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ookmark_bar',NULL,X'C2881000',X'C2881000');"
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,'s_ID_10','s_ID_"
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Bookma"
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "rks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,'s_ID_11','s_ID"
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projects)"
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','Home (The Chromium Projects)',NULL,NULL,X'C28810220A18687474703A2"
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1"
14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120841464"
14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14756415346');"
14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,'s_ID_12','s_ID_6','s_"
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arks',NULL,NULL,X'C2881000',X'C2881000');"
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,'s_ID_13','s_ID"
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Corpo"
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ration for Assigned Names and Numbers','ICANN | Internet Corporation"
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474703A2"
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C288102"
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00A15687474703A2F2F7777772E6963616E6E2E636F6D2F120744414146415346');"
14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,'s_ID_14','s_ID"
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Proje"
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ct','The WebKit Open Source Project',NULL,NULL,X'C288101A0A126874747"
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "03A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2"
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7765626B69742E6F72672F781205504E473259');"
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion77Database(sql::Connection* connection) {
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',77);"
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob);"
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1)
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447');"
14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200');"
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," META_PROTO_TIMES_VALS(5)
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','"
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E"
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E67"
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6F676C652E636F6D2F12084147464447415347');"
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," META_PROTO_TIMES_VALS(7)
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Goo"
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "gle Chrome','google_chrome',NULL,NULL,NULL);"
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," META_PROTO_TIMES_VALS(8)
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmar"
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," META_PROTO_TIMES_VALS(9)
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'"
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000');"
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346');"
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9," META_PROTO_TIMES_VALS(12)
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_12','s_ID_6','s_"
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arks',NULL,NULL,X'C2881000',X'C2881000');"
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346');"
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259');"
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion78Database(sql::Connection* connection) {
15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',78);"
15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion79Database(sql::Connection* connection) {
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',79);"
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL);"
17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion80Database(sql::Connection* connection) {
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',80);"
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper definitions to create the version 81 DB tables.
18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int V80_ROW_COUNT = 13;
18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int64 V80_POSITIONS[V80_ROW_COUNT] = {
18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  0,
18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -2097152,
18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -3145728,
18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -4194304,
18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  2097152,
18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -1048576,
18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  0,
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -917504,
18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576
18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string V81_Ordinal(int n) {
18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Int64ToNodeOrdinal(V80_POSITIONS[n]).ToInternalValue();
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} //namespace
18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unlike the earlier versions, the rows for version 81 are generated
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// programmatically to accurately handle unprintable characters for the
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server_ordinal_in_parent field.
18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion81Database(sql::Connection* connection) {
18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);"
18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0"
18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ", server_ordinal_in_parent blob);"
18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL,?);",
18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?);",
19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL,?);",
19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,?);",
19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL,?);",
19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL,?);",
19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?);",
19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL,?);",
19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL,?);" };
19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string ord = V81_Ordinal(i);
19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(s.Run());
19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.Reset(true);
19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion82Database(sql::Connection* connection) {
19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);"
19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0);"
19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0"
19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ", server_ordinal_in_parent blob);"
19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL,?);",
20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?);",
20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL,?);",
20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,?);",
20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL,?);",
20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL,?);",
20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?);",
20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL,?);",
20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL,?);" };
20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string ord = V81_Ordinal(i);
20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(s.Run());
20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.Reset(true);
20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion67Database(&connection);
20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns existing before version 67.
20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion67To68());
20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(68, dbs->GetVersion());
20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->needs_column_refresh_);
20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) {
20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion68Database(&connection);
20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion68To69());
21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(69, dbs->GetVersion());
21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->needs_column_refresh_);
21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name,"
21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "is_del, is_dir, id, specifics, server_specifics FROM metas "
21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "WHERE metahandle = 2"));
21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("Deleted Item", s.ColumnString(0));
21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.ColumnBool(1));
21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.ColumnBool(2));
21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("s_ID_2", s.ColumnString(3));
21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::EntitySpecifics specifics;
21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4));
21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(specifics.has_bookmark());
21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("http://www.google.com/", specifics.bookmark().url());
21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("AASGASGA", specifics.bookmark().favicon());
21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5));
21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(specifics.has_bookmark());
21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("http://www.google.com/2", specifics.bookmark().url());
21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("ASADGADGADG", specifics.bookmark().favicon());
21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.Step());
21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) {
21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion69Database(&connection);
21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag"));
21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag"));
21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag"));
21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion69To70());
21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(70, dbs->GetVersion());
21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->needs_column_refresh_);
21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT id"
21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      " FROM metas WHERE unique_server_tag = 'google_chrome'"));
21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("s_ID_7", s.ColumnString(0));
21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) {
21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion70Database(&connection);
21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("models"));
21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion70To71());
21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(71, dbs->GetVersion());
21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("models"));
21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "model_id"));
21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT model_id, "
21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "initial_sync_ended, last_download_timestamp FROM models"));
21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string model_id = s.ColumnString(0);
21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size()))
21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Model ID is expected to be the empty BookmarkSpecifics proto.";
21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.ColumnBool(1));
21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(694, s.ColumnInt64(2));
21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.Step());
21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) {
21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion71Database(&connection);
21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("extended_attributes"));
21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion71To72());
22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(72, dbs->GetVersion());
22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) {
22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion72Database(&connection);
22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "notification_state"));
22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion72To73());
22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(73, dbs->GetVersion());
22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion73Database(&connection);
22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmarks_added_during_autofill_migration"));
22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_entries_added_during_migration"));
22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_profiles_added_during_migration"));
22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion73To74());
22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(74, dbs->GetVersion());
22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmarks_added_during_autofill_migration"));
22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_entries_added_during_migration"));
22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_profiles_added_during_migration"));
22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion74Database(&connection);
22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion74To75());
22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(75, dbs->GetVersion());
22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion75To76) {
23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion75Database(&connection);
23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "bookmarks_added_during_autofill_migration"));
23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autofill_entries_added_during_migration"));
23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autofill_profiles_added_during_migration"));
23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion75To76());
23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(76, dbs->GetVersion());
23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->needs_column_refresh_);
23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cannot actual refresh columns due to version 76 not containing all
23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // necessary columns.
23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion76To77) {
23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion76Database(&connection);
23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedLegacyMetaProtoTimes(INCLUDE_DELETED_ITEMS),
23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(dbs->db_.get()));
23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Since the proto times are expected to be in a legacy format, they may not
23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be compatible with ProtoTimeToTime, so we don't call ExpectTimes().
23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion76To77());
23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(77, dbs->GetVersion());
23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS),
23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(dbs->db_.get()));
23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cannot actually load entries due to version 77 not having all required
23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // columns.
23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion77To78) {
23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion77Database(&connection);
23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "BASE_SERVER_SPECIFICS"));
23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion77To78());
23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(78, dbs->GetVersion());
23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
23695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion78To79) {
23725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kInitialNextId = -65542;
23735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion78Database(&connection);
23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Double-check the original next_id is what we think it is.
23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT next_id FROM share_info"));
23815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.Step();
23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(kInitialNextId, s.ColumnInt(0));
23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion78To79());
23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(79, dbs->GetVersion());
23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure the next_id has been incremented.
23925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex entry_bucket;
23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLElementDeleter<MetahandlesIndex> deleter(&entry_bucket);
23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo load_info;
23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.Clear();
23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->Load(&entry_bucket, &load_info));
23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_LE(load_info.kernel_info.next_id, kInitialNextId - 65536);
23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion79To80) {
24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion79Database(&connection);
24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion79To80());
24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(80, dbs->GetVersion());
24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure the bag_of_chips has been set.
24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex entry_bucket;
24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLElementDeleter<MetahandlesIndex> deleter(&entry_bucket);
24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo load_info;
24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->Load(&entry_bucket, &load_info));
24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that the initial value is the serialization of an empty ChipBag.
24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::ChipBag chip_bag;
24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string serialized_chip_bag;
24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(chip_bag.SerializeToString(&serialized_chip_bag));
24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(serialized_chip_bag, load_info.kernel_info.bag_of_chips);
24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion80To81) {
24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion80Database(&connection);
24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT metahandle, server_position_in_parent "
24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FROM metas WHERE unique_server_tag = 'google_chrome'"));
24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(sql::COLUMN_TYPE_INTEGER, s.ColumnType(1));
24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion80To81());
24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(81, dbs->GetVersion());
24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that ordinal values are preserved correctly.
24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement new_s(connection.GetUniqueStatement(
24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT metahandle, server_ordinal_in_parent "
24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FROM metas WHERE unique_server_tag = 'google_chrome'"));
24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_s.Step());
24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(sql::COLUMN_TYPE_BLOB, new_s.ColumnType(1));
24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string expected_ordinal = Int64ToNodeOrdinal(1048576).ToInternalValue();
24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string actual_ordinal;
24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_s.ColumnBlobAsString(1, &actual_ordinal);
24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(expected_ordinal, actual_ordinal);
24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, DetectInvalidOrdinal) {
24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion81Database(&connection);
24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(81, dbs->GetVersion());
24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Insert row with bad ordinal.
24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int64 now = TimeToProtoTime(base::Time::Now());
24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas "
24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "( id, metahandle, is_dir, ctime, mtime, server_ordinal_in_parent) "
24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "VALUES( \"c-invalid\", 9999, 1, ?, ?, \" \")"));
24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.BindInt64(0, now);
24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.BindInt64(1, now);
24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Run());
24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Trying to unpack this entry should signal that the DB is corrupted.
24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex entry_bucket;
24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLElementDeleter<MetahandlesIndex> deleter(&entry_bucket);
24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo kernel_load_info;
24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(FAILED_DATABASE_CORRUPT,
24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            dbs->Load(&entry_bucket, &kernel_load_info));
24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion81To82) {
24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion81Database(&connection);
24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "transaction_version"));
24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion81To82());
24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(82, dbs->GetVersion());
24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion82To83) {
24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion82Database(&connection);
25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "transaction_version"));
25035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion82To83());
25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(83, dbs->GetVersion());
25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(MigrationTest, ToCurrentVersion) {
25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
25155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (GetParam()) {
25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 67:
25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion67Database(&connection);
25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 68:
25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion68Database(&connection);
25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 69:
25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion69Database(&connection);
25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 70:
25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion70Database(&connection);
25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 71:
25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion71Database(&connection);
25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 72:
25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion72Database(&connection);
25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 73:
25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion73Database(&connection);
25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 74:
25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion74Database(&connection);
25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 75:
25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion75Database(&connection);
25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 76:
25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion76Database(&connection);
25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 77:
25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion77Database(&connection);
25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 78:
25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion78Database(&connection);
25515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 79:
25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion79Database(&connection);
25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 80:
25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion80Database(&connection);
25575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 81:
25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion81Database(&connection);
25605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 82:
25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion82Database(&connection);
25635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // If you see this error, it may mean that you've increased the
25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // database version number but you haven't finished adding unit tests
25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // for the database migration code.  You need to need to supply a
25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // SetUpVersionXXDatabase function with a dump of the test database
25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // at the old schema.  Here's one way to do that:
25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   1. Start on a clean tree (with none of your pending schema changes).
25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   2. Set a breakpoint in this function and run the unit test.
25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   3. Allow this test to run to completion (step out of the call),
25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //      without allowing ~MigrationTest to execute.
25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   4. Examine this->temp_dir_ to determine the location of the
25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //      test database (it is currently of the version you need).
25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   5. Dump this using the sqlite3 command line tool:
25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //        > .output foo_dump.sql
25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //        > .dump
25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //   6. Replace the timestamp columns with META_PROTO_TIMES(x) (or
25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      //      LEGACY_META_PROTO_TIMES(x) if before Version 77).
25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FAIL() << "Need to supply database dump for version " << GetParam();
25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
25835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  syncable::Directory::KernelLoadInfo dir_info;
25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex index;
25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLElementDeleter<MetahandlesIndex> index_deleter(&index);
25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(OPENED, dbs->Load(&index, &dir_info));
25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns deleted in Version 67.
25975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "name"));
25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name"));
25995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name"));
26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns added in Version 68.
26025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns deleted in Version 68.
26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object"));
26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas",
26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          "server_is_bookmark_object"));
26095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon"));
26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url"));
26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url"));
26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Renamed a column in Version 70
26145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag"));
26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
26175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removed extended attributes in Version 72.
26195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns added in Version 73.
26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column replaced in version 75.
26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns removed in version 76.
26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "bookmarks_added_during_autofill_migration"));
26335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    connection.DoesColumnExist("share_info", "autofill_migration_time"));
26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "autofill_entries_added_during_migration"));
26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "autofill_profiles_added_during_migration"));
26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 78.
26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 82.
26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 83.
26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check download_progress state (v75 migration)
26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(694,
26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .timestamp_token_for_migration());
26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_token());
26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(32904,
26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .data_type_id());
26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_timestamp_token_for_migration());
26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_token());
26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .token().empty());
26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(41210,
26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .data_type_id());
26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check metas
26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedMetaProtoTimes(DONT_INCLUDE_DELETED_ITEMS),
26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(&connection));
26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectTimes(index, GetExpectedMetaTimes());
26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex::iterator it = index.begin();
26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(it != index.end());
26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1, (*it)->ref(META_HANDLE));
26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(ID).IsRoot());
26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(6, (*it)->ref(META_HANDLE));
26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(IS_DIR));
26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_IS_DIR));
26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().has_url());
26885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().has_favicon());
26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
26955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(7, (*it)->ref(META_HANDLE));
26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("google_chrome", (*it)->ref(UNIQUE_SERVER_TAG));
26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SPECIFICS).has_bookmark());
26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(8, (*it)->ref(META_HANDLE));
27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("google_chrome_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(9, (*it)->ref(META_HANDLE));
27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("bookmark_bar", (*it)->ref(UNIQUE_SERVER_TAG));
27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(10, (*it)->ref(META_HANDLE));
27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(IS_DEL));
27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SPECIFICS).bookmark().has_url());
27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
27195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().has_favicon());
27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("other_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Other Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
27255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Other Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(11, (*it)->ref(META_HANDLE));
27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(IS_DEL));
27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(IS_DIR));
27315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
27325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://dev.chromium.org/",
27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().url());
27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("AGATWA",
27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().favicon());
27375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://dev.chromium.org/other",
27385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SERVER_SPECIFICS).bookmark().url());
27395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("AFAGVASF",
27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SERVER_SPECIFICS).bookmark().favicon());
27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", (*it)->ref(UNIQUE_SERVER_TAG));
27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(NON_UNIQUE_NAME));
27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(SERVER_NON_UNIQUE_NAME));
27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(12, (*it)->ref(META_HANDLE));
27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(IS_DEL));
27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(IS_DIR));
27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Extra Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
27505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("Extra Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SPECIFICS).has_bookmark());
27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).has_bookmark());
27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().has_url());
27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SERVER_SPECIFICS).bookmark().has_url());
27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(
27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (*it)->ref(SPECIFICS).bookmark().has_favicon());
27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).bookmark().has_favicon());
27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(13, (*it)->ref(META_HANDLE));
27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it != index.end());
27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(14, (*it)->ref(META_HANDLE));
27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(++it == index.end());
27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest,
27715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        testing::Range(67, kCurrentDBVersion));
27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
27745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string model_id =
27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TestDirectoryBackingStore::ModelTypeEnumToModelId(ModelTypeFromInt(i));
27775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(i,
27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TestDirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          model_id.size()));
27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
27815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OnDiskDirectoryBackingStoreForTest : public OnDiskDirectoryBackingStore {
27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnDiskDirectoryBackingStoreForTest(const std::string& dir_name,
27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const FilePath& backing_filepath);
27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OnDiskDirectoryBackingStoreForTest();
27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DidFailFirstOpenAttempt();
27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
27935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ReportFirstTryOpenFailure() OVERRIDE;
27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
27965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool first_open_failed_;
27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OnDiskDirectoryBackingStoreForTest::OnDiskDirectoryBackingStoreForTest(
28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& dir_name,
28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FilePath& backing_filepath) :
28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnDiskDirectoryBackingStore(dir_name, backing_filepath),
28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  first_open_failed_(false) { }
28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OnDiskDirectoryBackingStoreForTest::~OnDiskDirectoryBackingStoreForTest() { }
28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OnDiskDirectoryBackingStoreForTest::ReportFirstTryOpenFailure() {
28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do nothing, just like we would in release-mode.  In debug mode, we DCHECK.
28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  first_open_failed_ = true;
28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OnDiskDirectoryBackingStoreForTest::DidFailFirstOpenAttempt() {
28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return first_open_failed_;
28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a whitebox test intended to exercise the code path where the on-disk
28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// directory load code decides to delete the current directory and start fresh.
28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is considered "minor" corruption because the database recreation is
28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// expected to succeed.  The alternative, where recreation does not succeed (ie.
28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// due to read-only file system), is not tested here.
28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MinorCorruption) {
28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<OnDiskDirectoryBackingStore> dbs(
28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath()));
28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Corrupt the root node.
28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Connection connection;
28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(connection.Open(GetDatabasePath()));
28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(connection.Execute(
28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "UPDATE metas SET parent_id='bogus' WHERE id = 'r';"));
28375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<OnDiskDirectoryBackingStoreForTest> dbs(
28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new OnDiskDirectoryBackingStoreForTest(GetUsername(),
28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               GetDatabasePath()));
28435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dbs->DidFailFirstOpenAttempt());
28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, DeleteEntries) {
28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
28515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpCurrentDatabaseAndCheckVersion(&connection);
28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandlesIndex index;
28575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo kernel_load_info;
28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLElementDeleter<MetahandlesIndex> index_deleter(&index);
28595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbs->Load(&index, &kernel_load_info);
28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t initial_size = index.size();
28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_LT(0U, initial_size) << "Test requires entries to delete.";
28635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 first_to_die = (*index.begin())->ref(META_HANDLE);
28645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandleSet to_delete;
28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  to_delete.insert(first_to_die);
28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dbs->DeleteEntries(to_delete));
28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLDeleteElements(&index);
28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbs->LoadEntries(&index);
28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(initial_size - 1, index.size());
28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool delete_failed = false;
28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++it) {
28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if ((*it)->ref(META_HANDLE) == first_to_die) {
28765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_failed = true;
28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(delete_failed);
28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  to_delete.clear();
28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++it) {
28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    to_delete.insert((*it)->ref(META_HANDLE));
28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dbs->DeleteEntries(to_delete));
28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLDeleteElements(&index);
28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbs->LoadEntries(&index);
28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, index.size());
28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, GenerateCacheGUID) {
28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& guid1 = TestDirectoryBackingStore::GenerateCacheGUID();
28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(24U, guid1.size());
28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(24U, guid2.size());
29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In theory this test can fail, but it won't before the universe
29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // dies of heat death.
29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(guid1, guid2);
29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncable
29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
2907