12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 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)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/connection.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/base/node_ordinal.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/bookmark_specifics.pb.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/directory_backing_store.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/on_disk_directory_backing_store.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/syncable-inl.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/test/test_directory_backing_store.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/time.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest-param-test.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SYNC_EXPORT_PRIVATE extern const int32 kCurrentDBVersion;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MigrationTest : public testing::TestWithParam<int> {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetUsername() {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return "nick@chromium.org";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath GetDatabasePath() {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return temp_dir_.path().Append(Directory::kSyncDatabaseFilename);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool LoadAndIgnoreReturnedData(DirectoryBackingStore *dbs) {
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    Directory::MetahandlesMap tmp_handles_map;
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    JournalIndex  delete_journals;
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    STLValueDeleter<Directory::MetahandlesMap> deleter(&tmp_handles_map);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Directory::KernelLoadInfo kernel_load_info;
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return dbs->Load(&tmp_handles_map, &delete_journals, &kernel_load_info) ==
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        OPENED;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion67Database(sql::Connection* connection);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion68Database(sql::Connection* connection);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion69Database(sql::Connection* connection);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion70Database(sql::Connection* connection);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion71Database(sql::Connection* connection);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion72Database(sql::Connection* connection);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion73Database(sql::Connection* connection);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion74Database(sql::Connection* connection);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion75Database(sql::Connection* connection);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion76Database(sql::Connection* connection);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion77Database(sql::Connection* connection);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion78Database(sql::Connection* connection);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion79Database(sql::Connection* connection);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion80Database(sql::Connection* connection);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion81Database(sql::Connection* connection);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpVersion82Database(sql::Connection* connection);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUpVersion83Database(sql::Connection* connection);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUpVersion84Database(sql::Connection* connection);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUpVersion85Database(sql::Connection* connection);
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetUpVersion86Database(sql::Connection* connection);
77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void SetUpVersion87Database(sql::Connection* connection);
78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void SetUpVersion88Database(sql::Connection* connection);
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SetUpVersion89Database(sql::Connection* connection);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SetUpVersion89Database(connection);  // Prepopulates data.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), connection));
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ScopedTempDir temp_dir_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DirectoryBackingStoreTest : public MigrationTest {};
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Windows, we used to store timestamps in FILETIME format.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_1 129079956640320000LL
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_2 128976886618480000LL
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_4 129002163642690000LL
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_5 129001555500000000LL
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_6 129053976170000000LL
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_7 128976864758480000LL
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_8 128976864758480000LL
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_9 128976864758480000LL
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_10 128976864758480000LL
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_11 129079956948440000LL
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_12 129079957513650000LL
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_13 129079957985300000LL
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_14 129079958383000000LL
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_1 "129079956640320000"
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_2 "128976886618480000"
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_4 "129002163642690000"
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_5 "129001555500000000"
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_6 "129053976170000000"
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_7 "128976864758480000"
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_8 "128976864758480000"
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_9 "128976864758480000"
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_10 "128976864758480000"
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_11 "129079956948440000"
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_12 "129079957513650000"
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_13 "129079957985300000"
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_14 "129079958383000000"
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Generated via:
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ruby -ane '$F[1].sub!("LEGACY_", ""); $F[2] = Integer($F[2].sub!("LL", "")) /
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    10000 - 11644473600000; print "#{$F[0]} #{$F[1]} #{$F[2]}LL"'
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Magic numbers taken from
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://stackoverflow.com/questions/5398557/
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    java-library-for-dealing-with-win32-filetime .
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Now we store them in Java format (ms since the Unix epoch).
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_1 1263522064032LL
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_2 1253215061848LL
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_4 1255742764269LL
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_5 1255681950000LL
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_6 1260924017000LL
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_7 1253212875848LL
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_8 1253212875848LL
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_9 1253212875848LL
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_10 1253212875848LL
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_11 1263522094844LL
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_12 1263522151365LL
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_13 1263522198530LL
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_14 1263522238300LL
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_1 "1263522064032"
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_2 "1253215061848"
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_4 "1255742764269"
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_5 "1255681950000"
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_6 "1260924017000"
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_7 "1253212875848"
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_8 "1253212875848"
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_9 "1253212875848"
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_10 "1253212875848"
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_11 "1263522094844"
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_12 "1263522151365"
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_13 "1263522198530"
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_14 "1263522238300"
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On other platforms, we used to store timestamps in time_t format (s
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// since the Unix epoch).
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_1 1263522064LL
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_2 1253215061LL
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_4 1255742764LL
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_5 1255681950LL
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_6 1260924017LL
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_7 1253212875LL
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_8 1253212875LL
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_9 1253212875LL
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_10 1253212875LL
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_11 1263522094LL
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_12 1263522151LL
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_13 1263522198LL
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_14 1263522238LL
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_1 "1263522064"
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_2 "1253215061"
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_4 "1255742764"
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_5 "1255681950"
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_6 "1260924017"
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_7 "1253212875"
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_8 "1253212875"
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_9 "1253212875"
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_10 "1253212875"
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_11 "1263522094"
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_12 "1263522151"
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_13 "1263522198"
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR_14 "1263522238"
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Now we store them in Java format (ms since the Unix epoch).
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_1 1263522064000LL
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_2 1253215061000LL
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_4 1255742764000LL
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_5 1255681950000LL
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_6 1260924017000LL
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_7 1253212875000LL
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_8 1253212875000LL
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_9 1253212875000LL
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_10 1253212875000LL
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_11 1263522094000LL
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_12 1263522151000LL
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_13 1263522198000LL
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_14 1263522238000LL
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_1 "1263522064000"
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_2 "1253215061000"
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_4 "1255742764000"
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_5 "1255681950000"
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_6 "1260924017000"
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_7 "1253212875000"
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_8 "1253212875000"
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_9 "1253212875000"
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_10 "1253212875000"
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_11 "1263522094000"
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_12 "1263522151000"
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_13 "1263522198000"
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR_14 "1263522238000"
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macros for the database dumps in the SetUpVersion*Database
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// functions.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES(x) LEGACY_META_PROTO_TIMES_##x
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_META_PROTO_TIMES_STR(x) LEGACY_META_PROTO_TIMES_STR_##x
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LEGACY_PROTO_TIME_VALS(x)    \
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x) "," \
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LEGACY_META_PROTO_TIMES_STR(x)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES(x) META_PROTO_TIMES_##x
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_STR(x) META_PROTO_TIMES_STR_##x
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define META_PROTO_TIMES_VALS(x)    \
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x) "," \
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  META_PROTO_TIMES_STR(x)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper functions for testing.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ShouldIncludeDeletedItems {
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  INCLUDE_DELETED_ITEMS,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DONT_INCLUDE_DELETED_ITEMS
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected legacy time (in proto
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// format).
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetExpectedLegacyMetaProtoTimes(
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum ShouldIncludeDeletedItems include_deleted) {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> expected_legacy_meta_proto_times;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[1] = LEGACY_META_PROTO_TIMES(1);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_deleted == INCLUDE_DELETED_ITEMS) {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[2] = LEGACY_META_PROTO_TIMES(2);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[4] = LEGACY_META_PROTO_TIMES(4);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_legacy_meta_proto_times[5] = LEGACY_META_PROTO_TIMES(5);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[6] = LEGACY_META_PROTO_TIMES(6);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[7] = LEGACY_META_PROTO_TIMES(7);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[8] = LEGACY_META_PROTO_TIMES(8);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[9] = LEGACY_META_PROTO_TIMES(9);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[10] = LEGACY_META_PROTO_TIMES(10);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[11] = LEGACY_META_PROTO_TIMES(11);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[12] = LEGACY_META_PROTO_TIMES(12);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[13] = LEGACY_META_PROTO_TIMES(13);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_legacy_meta_proto_times[14] = LEGACY_META_PROTO_TIMES(14);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_legacy_meta_proto_times;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected time (in proto format).
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetExpectedMetaProtoTimes(
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum ShouldIncludeDeletedItems include_deleted) {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> expected_meta_proto_times;
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[1] = META_PROTO_TIMES(1);
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_deleted == INCLUDE_DELETED_ITEMS) {
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[2] = META_PROTO_TIMES(2);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[4] = META_PROTO_TIMES(4);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_proto_times[5] = META_PROTO_TIMES(5);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[6] = META_PROTO_TIMES(6);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[7] = META_PROTO_TIMES(7);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[8] = META_PROTO_TIMES(8);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[9] = META_PROTO_TIMES(9);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[10] = META_PROTO_TIMES(10);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[11] = META_PROTO_TIMES(11);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[12] = META_PROTO_TIMES(12);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[13] = META_PROTO_TIMES(13);
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_meta_proto_times[14] = META_PROTO_TIMES(14);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_meta_proto_times;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a map from metahandle -> expected time (as a Time object).
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, base::Time> GetExpectedMetaTimes() {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, base::Time> expected_meta_times;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::map<int64, int64>& expected_meta_proto_times =
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::map<int64, int64>::const_iterator it =
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           expected_meta_proto_times.begin();
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       it != expected_meta_proto_times.end(); ++it) {
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_meta_times[it->first] = ProtoTimeToTime(it->second);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return expected_meta_times;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts a map from metahandle -> time (in proto format) from the
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// given database.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::map<int64, int64> GetMetaProtoTimes(sql::Connection *db) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(db->GetCachedStatement(
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          SQL_FROM_HERE,
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "SELECT metahandle, mtime, server_mtime, ctime, server_ctime "
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "FROM metas"));
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(5, s.ColumnCount());
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int64, int64> meta_times;
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (s.Step()) {
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 metahandle = s.ColumnInt64(0);
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 mtime = s.ColumnInt64(1);
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 server_mtime = s.ColumnInt64(2);
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 ctime = s.ColumnInt64(3);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 server_ctime = s.ColumnInt64(4);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, server_mtime);
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, ctime);
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(mtime, server_ctime);
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    meta_times[metahandle] = mtime;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.Succeeded());
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return meta_times;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)::testing::AssertionResult AssertTimesMatch(const char* t1_expr,
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const char* t2_expr,
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const base::Time& t1,
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            const base::Time& t2) {
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (t1 == t2)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ::testing::AssertionSuccess();
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ::testing::AssertionFailure()
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << t1_expr << " and " << t2_expr
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " (internal values: " << t1.ToInternalValue()
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " and " << t2.ToInternalValue()
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << ") (proto time: " << TimeToProtoTime(t1)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << " and " << TimeToProtoTime(t2)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << ") do not match";
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Expect that all time fields of the given entry kernel will be the
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// given time.
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectTime(const EntryKernel& entry_kernel,
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const base::Time& expected_time) {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(CTIME));
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(SERVER_CTIME));
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(MTIME));
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_PRED_FORMAT2(AssertTimesMatch,
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      expected_time, entry_kernel.ref(SERVER_MTIME));
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Expect that all the entries in |entries| have times matching those in
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the given map (from metahandle to expect time).
369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ExpectTimes(const Directory::MetahandlesMap& handles_map,
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const std::map<int64, base::Time>& expected_times) {
371868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  for (Directory::MetahandlesMap::const_iterator it = handles_map.begin();
372868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)       it != handles_map.end(); ++it) {
373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    int64 meta_handle = it->first;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(meta_handle);
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::map<int64, base::Time>::const_iterator it2 =
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        expected_times.find(meta_handle);
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it2 == expected_times.end()) {
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ADD_FAILURE() << "Could not find expected time for " << meta_handle;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ExpectTime(*it->second, it2->second);
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion67Database(sql::Connection* connection) {
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is a version 67 database dump whose contents were backformed from
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the contents of the version 68 database dump (the v68 migration was
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // actually written first).
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "name varchar(255), "  /* COLLATE PATHNAME, */
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,"
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_name varchar(255),"  /* COLLATE PATHNAME */
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_non_unique_name varchar,"
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob);"
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item',"
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA',"
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ASADGADGADG');"
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium',NULL,'Welcome to Chromium',"
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,'Google','Google','Google','http://www.google.com/',"
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,'The Internet','The Internet',"
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,NULL,NULL,NULL);"
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,'Google Chrome','Google Chrome',"
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);"
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL,"
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'google_chrome_bookmarks',NULL,NULL);"
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar',"
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,'bookmark_bar',NULL,NULL);"
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,"
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks',"
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks',NULL,NULL,'other_bookmarks',"
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL);"
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)',"
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF');"
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks',"
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN  Internet Corporation for Assigned Names and Numbers',"
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,"
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'PNGAXF0AAFF','DAAFASF');"
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project',NULL,"
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','http://webkit.org/',"
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/x',NULL,'PNGX','PNG2Y');"
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion68Database(sql::Connection* connection) {
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This sets up an actual version 68 database dump.  The IDs were
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // canonicalized to be less huge, and the favicons were overwritten
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with random junk so that they didn't contain any unprintable
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // characters.  A few server URLs were tweaked so that they'd be
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // different from the local URLs.  Lastly, the custom collation on
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the server_non_unique_name column was removed.
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,"
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_bookmark_object bit default 0,"
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob);"
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL,NULL,NULL,NULL);"
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item','http://www.google.com/',"
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');"
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google','Google','http://www.google.com/',"
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);"
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL,"
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);"
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,"
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL);"
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,"
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL);"
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF');"
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,"
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'PNGAXF0AAFF','DAAFASF');"
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');"
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion69Database(sql::Connection* connection) {
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,"
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_bookmark_object bit default 0,"
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmark_url varchar,server_bookmark_url varchar,"
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "singleton_tag varchar,bookmark_favicon blob,"
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_bookmark_favicon blob, specifics blob, "
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL,"
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,"
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item','http://www.google.com/',"
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG',"
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415"
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F"
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6D2F32120B4153414447414447414447');"
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',"
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',"
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL,"
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168"
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6"
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "56E2F77656C636F6D652E68746D6C1200');"
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google','Google','http://www.google.com/',"
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166"
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'"
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464"
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "447415347');"
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6"
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet',"
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');"
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome',"
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);"
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL,"
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1,"
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL,"
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C2881000',X'C2881000');"
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6"
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576"
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');"
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL,"
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (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,"
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF',"
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963"
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "616E6E2E636F6D2F120744414146415346');"
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y',"
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2"
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');"
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',69);"
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ));
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion70Database(sql::Connection* connection) {
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_sync_timestamp INT, name VARCHAR(128), "
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "db_create_version VARCHAR(128), db_create_time int, "
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id bigint default -2, cache_guid VARCHAR(32));"
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Unknown',1263522064,-65542,"
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO share_version VALUES('nick@chromium.org',70);"
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,"
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ctime bigint default 0,server_ctime bigint default 0,"
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_position_in_parent bigint default 0,"
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0,id varchar(255) default 'r',"
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "parent_id varchar(255) default 'r',"
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_parent_id varchar(255) default 'r',"
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_del bit default 0,is_dir bit default 0,"
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_dir bit default 0,server_is_del bit default 0,"
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,"
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "specifics blob,server_specifics blob);"
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) ","
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,"
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A"
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026"
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741"
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4447414447');"
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,"
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A"
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74"
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F"
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6C636F6D652E68746D6C1200');"
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6"
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777"
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72E676F6F676C652E636F6D2F12084147464447415347');"
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,"
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome',"
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google Chrome','google_chrome',NULL,NULL,NULL);"
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',"
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,"
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',"
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ","
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,"
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F"
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872"
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6D69756D2E6F72672F6F7468657212084146414756415346');"
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,"
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F"
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69"
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "63616E6E2E636F6D2F120744414146415346');"
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,"
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550"
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E473259');"
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion71Database(sql::Connection* connection) {
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);"
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT);"
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"));
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion72Database(sql::Connection* connection) {
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);"
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT);"
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x');"));
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion73Database(sql::Connection* connection) {
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);"
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "base_version bigint default -1,server_version bigint default 0,"
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_ctime bigint default 0,server_position_in_parent "
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "varchar(255) default 'r',is_unsynced bit default 0,"
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "non_unique_name varchar,server_non_unique_name varchar(255),"
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_specifics blob);"
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,X'',X'');"
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,"
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47');"
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,"
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "652E68746D6C1200');"
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,"
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F12084147464447415347');"
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,"
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'google_chrome',NULL,NULL,NULL);"
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,"
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,"
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,"
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000',X'C2881000');"
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,"
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F6F7468657212084146414756415346');"
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,"
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C2881000');"
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,"
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E636F6D2F120744414146415346');"
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,"
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'The WebKit Open Source Project','The WebKit Open Source Project',"
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "473259');"
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, "
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "next_id INT default -2, cache_guid TEXT, "
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "notification_state BLOB);"
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'9010788312004066376x-6609234393368420856x',X'C2881000');"));
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion74Database(sql::Connection* connection) {
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " INT, initial_sync_ended BOOLEAN default 0);"
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion_state INT default 0, bookmarks_added_during_autofill_migration"
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " INT default 0, autofill_migration_time INT default 0, autofill_ent"
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ries_added_during_migration INT default 0, autofill_profiles_added_"
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "during_migration INT default 0);"
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_version bigint default -1,server_version bigint default 0,mtime b"
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "igint default 0,server_mtime bigint default 0,ctime bigint default "
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,server_ctime bigint default 0,server_position_in_parent bigint de"
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault 0,local_external_id bigint default 0,id varchar(255) default "
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "nt_tag varchar,specifics blob,server_specifics blob);"
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "');"
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,'s_ID_2','s_ID"
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6F676C652E636F6D2F32120B4153414447414447414447');"
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,'s_ID_4','s_ID"
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,'s_ID_5','s_ID_"
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "36F6D2F12084147464447415347');"
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,'s_ID_6','s_ID"
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,X'C2881000',X'C2881000');"
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_7','r','r"
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e',NULL,NULL,NULL);"
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_8','s_ID_"
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,'s_ID_9','s_ID_"
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,'s_ID_10','s_I"
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,'s_ID_11','s_"
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "84146414756415346');"
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,'s_ID_12','s_ID_6','"
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,'s_ID_13','s_"
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5346');"
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,'s_ID_14','s_"
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "703A2F2F7765626B69742E6F72672F781205504E473259');"
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion75Database(sql::Connection* connection) {
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',75);"
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "tion_state INT default 0,bookmarks_added_during_autofill_migration "
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "INT default 0, autofill_migration_time INT default 0, autofill_entr"
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ies_added_during_migration INT default 0, autofill_profiles_added_d"
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "uring_migration INT default 0);"
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org"
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-655"
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "42,'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "initial_sync_ended BOOLEAN default 0);"
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,ba"
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "se_version bigint default -1,server_version bigint default 0,mtime"
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           " bigint default 0,server_mtime bigint default 0,ctime bigint defau"
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "lt 0,server_ctime bigint default 0,server_position_in_parent bigin"
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "t default 0,local_external_id bigint default 0,id varchar(255) def"
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ault 'r',parent_id varchar(255) default 'r',server_parent_id varch"
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ar(255) default 'r',prev_id varchar(255) default 'r',next_id varch"
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "ar(255) default 'r',is_unsynced bit default 0,is_unapplied_update "
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "bit default 0,is_del bit default 0,is_dir bit default 0,server_is_"
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "dir bit default 0,server_is_del bit default 0,non_unique_name varc"
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "har,server_non_unique_name varchar(255),unique_server_tag varchar,"
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "unique_client_tag varchar,specifics blob,server_specifics blob);"
12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NUL"
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "L,X'',X'');"
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-2097152,4,'s_ID_"
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Ite"
12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "m','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772"
12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A176874"
12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "74703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474"
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "14447');"
13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-3145728,3,'s_ID_"
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to "
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A316874747"
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "03A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F65"
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7"
13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6C636F6D652E68746D6C1200');"
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,7,'s_ID_5"
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Goo"
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "gle',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C65"
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "2E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F777"
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "7772E676F6F676C652E636F6D2F12084147464447415347');"
13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-4194304,6,'s_ID_"
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The In"
13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "ternet',NULL,NULL,X'C2881000',X'C2881000');"
13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,0,'s_ID_7"
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','"
13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "google_chrome',NULL,NULL,NULL);"
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,0,'s_ID_8"
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks'"
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",'google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,1,'s_ID_9"
13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','B"
13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "ookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",2097152,2,'s_ID_"
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks"
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "','Other Bookmarks','other_bookmarks',NULL,X'C2881000',X'C28810"
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "00');"
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-1048576,8,'s_ID"
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chr"
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "omium Projects)','Home (The Chromium Projects)',NULL,NULL,X'C28"
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641"
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "4741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "D2E6F72672F6F7468657212084146414756415346');"
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",0,9,'s_ID_12','s"
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmark"
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "s','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000');"
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",-917504,10,'s_ID"
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN |"
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              " Internet Corporation for Assigned Names and Numbers','ICANN | "
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "Internet Corporation for Assigned Names and Numbers',NULL,NULL,"
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "E474158463041414646',X'C28810200A15687474703A2F2F7777772E696361"
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "6E6E2E636F6D2F120744414146415346');"
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              ",1048576,11,'s_ID"
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Op"
13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "en Source Project','The WebKit Open Source Project',NULL,NULL,X"
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',"
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473"
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "259');"
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion76Database(sql::Connection* connection) {
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',76);"
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,mtime big"
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "int default 0,server_mtime bigint default 0,ctime bigint default 0,s"
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "erver_ctime bigint default 0,server_position_in_parent bigint defaul"
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 0,local_external_id bigint default 0,id varchar(255) default 'r',p"
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob);"
13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'')"
13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ";"
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-2097152,4,'s_ID_2','s_ID_9"
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted Ite"
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "m',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6"
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E676F6F6"
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "76C652E636F6D2F32120B4153414447414447414447');"
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-3145728,3,'s_ID_4','s_ID_9"
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','Welc"
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E676F6"
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746"
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6"
14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,7,'s_ID_5','s_ID_9'"
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NULL,"
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F1208414741"
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D"
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2F12084147464447415347');"
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-4194304,6,'s_ID_6','s_ID_9"
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL,NU"
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000');"
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_7','r','r',"
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrome',"
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "NULL,NULL,NULL);"
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,0,'s_ID_8','s_ID_7'"
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chrome"
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_bookmarks',NULL,X'C2881000',X'C2881000');"
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,1,'s_ID_9','s_ID_8'"
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar','b"
14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ookmark_bar',NULL,X'C2881000',X'C2881000');"
14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",2097152,2,'s_ID_10','s_ID_"
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Bookma"
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "rks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-1048576,8,'s_ID_11','s_ID"
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projects)"
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "','Home (The Chromium Projects)',NULL,NULL,X'C28810220A18687474703A2"
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1"
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120841464"
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14756415346');"
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,9,'s_ID_12','s_ID_6','s_"
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arks',NULL,NULL,X'C2881000',X'C2881000');"
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",-917504,10,'s_ID_13','s_ID"
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Corpo"
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ration for Assigned Names and Numbers','ICANN | Internet Corporation"
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          " for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474703A2"
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C288102"
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00A15687474703A2F2F7777772E6963616E6E2E636F6D2F120744414146415346');"
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1048576,11,'s_ID_14','s_ID"
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Proje"
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ct','The WebKit Open Source Project',NULL,NULL,X'C288101A0A126874747"
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "03A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2"
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7765626B69742E6F72672F781205504E473259');"
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion77Database(sql::Connection* connection) {
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',77);"
14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob);"
14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1)
14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447');"
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200');"
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," META_PROTO_TIMES_VALS(5)
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','"
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E"
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E67"
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6F6F676C652E636F6D2F12084147464447415347');"
15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," META_PROTO_TIMES_VALS(7)
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Goo"
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "gle Chrome','google_chrome',NULL,NULL,NULL);"
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," META_PROTO_TIMES_VALS(8)
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmar"
15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," META_PROTO_TIMES_VALS(9)
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'"
15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000');"
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346');"
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9," META_PROTO_TIMES_VALS(12)
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",'s_ID_12','s_ID_6','s_"
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arks',NULL,NULL,X'C2881000',X'C2881000');"
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346');"
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259');"
15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ));
15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion78Database(sql::Connection* connection) {
15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',78);"
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "9010788312004066376x-6609234393368420856x',NULL);"
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion79Database(sql::Connection* connection) {
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',79);"
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB);"
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL);"
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion80Database(sql::Connection* connection) {
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',80);"
17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,server_po"
17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "sition_in_parent bigint default 0,local_external_id bigint default 0"
17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ");"
17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL);"
17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL);"
17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL);"
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL);"
17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL);"
17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL);"
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL);"
18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL);"
18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL);"
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL);"
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"
18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ));
18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper definitions to create the version 81 DB tables.
18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int V80_ROW_COUNT = 13;
18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int64 V80_POSITIONS[V80_ROW_COUNT] = {
18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  0,
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -2097152,
18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -3145728,
18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -4194304,
18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576,
18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  2097152,
18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -1048576,
18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  0,
18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  -917504,
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  1048576
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string V81_Ordinal(int n) {
18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Int64ToNodeOrdinal(V80_POSITIONS[n]).ToInternalValue();
18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} //namespace
18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unlike the earlier versions, the rows for version 81 are generated
18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// programmatically to accurately handle unprintable characters for the
18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server_ordinal_in_parent field.
18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion81Database(sql::Connection* connection) {
18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);"
18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0);"
18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0"
18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ", server_ordinal_in_parent blob);"
18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL,?);",
19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?);",
19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL,?);",
19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,?);",
19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL,?);",
19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL,?);",
19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?);",
19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL,?);",
19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL,?);" };
19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string ord = V81_Ordinal(i);
19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(s.Run());
19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.Reset(true);
19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MigrationTest::SetUpVersion82Database(sql::Connection* connection) {
19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->is_open());
19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->Execute(
19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',82);"
19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "default 0);"
19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "local_external_id bigint default 0"
19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ", server_ordinal_in_parent blob);"
19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "blob);"
20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "14447414447414447',NULL,?);",
20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?);",
20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ULL,?);",
20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",NULL,?);",
20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "00',X'C2881000',NULL,?);",
20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "000',X'C2881000',NULL,?);",
20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?);",
20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "2881000',X'C2881000',NULL,?);",
20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "81205504E473259',NULL,?);" };
20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string ord = V81_Ordinal(i);
20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(s.Run());
20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    s.Reset(true);
20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MigrationTest::SetUpVersion83Database(sql::Connection* connection) {
20822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->is_open());
20832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
20842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->Execute(
20852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',83);"
20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
20882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
20892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "default 0);"
20902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
20912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
20922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
20932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "local_external_id bigint default 0"
20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
20952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
20962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
20972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
20982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
20992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
21002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
21012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
21022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
21032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ", server_ordinal_in_parent blob, transaction_version bigint default "
21042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0);"
21052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
21062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
21072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
21082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "blob);"
21092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
21102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
21112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
21122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
21142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
21152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
21162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
21172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
21182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
21192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
21202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "14447414447414447',NULL,?,0);",
21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
21232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
21242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
21252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
21262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
21272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
21282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
21292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
21302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
21312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
21322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
21332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
21342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ULL,?,0);",
21352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
21362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
21372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
21382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",NULL,?,0);",
21392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
21402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
21412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
21422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "",
21432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
21442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
21452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
21462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "00',X'C2881000',NULL,?,0);",
21472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
21482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
21492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
21502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "000',X'C2881000',NULL,?,0);",
21512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
21522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
21532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
21542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?,0);",
21552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
21562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
21572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
21582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
21592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
21602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
21612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
21622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
21632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
21642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2881000',X'C2881000',NULL,?,0);",
21652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
21662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
21672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
21682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
21692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
21702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
21712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
21722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
21732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
21742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
21752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
21762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
21772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "81205504E473259',NULL,?,0);" };
21782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
21802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
21812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string ord = V81_Ordinal(i);
21822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
21832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(s.Run());
21842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.Reset(true);
21852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
21862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
21872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
21882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MigrationTest::SetUpVersion84Database(sql::Connection* connection) {
21902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->is_open());
21912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
21922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->Execute(
21932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
21942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',84);"
21952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
21962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
21972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "default 0);"
21982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
21992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
22002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
22012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "local_external_id bigint default 0"
22022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
22032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
22042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
22052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
22062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
22072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
22082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
22092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
22102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
22112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ", server_ordinal_in_parent blob, transaction_version bigint default "
22122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0);"
22132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'deleted_metas'"
22142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "(metahandle bigint primary key ON CONFLICT FAIL,base"
22152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
22162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "local_external_id bigint default 0"
22172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
22182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
22192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
22202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
22212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
22222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
22232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
22242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
22252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
22262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ", server_ordinal_in_parent blob, transaction_version bigint default "
22272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0);"
22282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
22292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
22302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
22312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "blob);"
22322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
22332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
22342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
22352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
22372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
22382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
22392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
22402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
22412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
22422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
22432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
22442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "14447414447414447',NULL,?,0);",
22452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
22462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
22472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
22482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
22492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
22502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
22512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
22522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
22532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
22542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
22552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
22562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
22572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ULL,?,0);",
22582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
22592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
22602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
22612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",NULL,?,0);",
22622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
22632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
22642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
22652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "",
22662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
22672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
22682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
22692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "00',X'C2881000',NULL,?,0);",
22702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
22712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
22722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
22732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "000',X'C2881000',NULL,?,0);",
22742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
22752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
22762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
22772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?,0);",
22782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
22792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
22802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
22812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
22822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
22832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
22842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
22852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
22862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
22872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2881000',X'C2881000',NULL,?,0);",
22882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
22892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
22902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
22912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
22922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
22932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
22942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
22952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
22962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
22972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
22982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
22992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
23002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "81205504E473259',NULL,?,0);" };
23012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
23032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
23042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string ord = V81_Ordinal(i);
23052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
23062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(s.Run());
23072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.Reset(true);
23082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
23092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
23102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
23112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MigrationTest::SetUpVersion85Database(sql::Connection* connection) {
23132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->is_open());
23142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
23152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->Execute(
23162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
23172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',85);"
23182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
23192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "transaction_version BIGINT default 0);"
23202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605', 1);"
23212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
23222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
23232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "local_external_id bigint default 0"
23242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
23252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
23262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
23272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
23282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
23292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
23302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
23312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
23322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
23332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ", server_ordinal_in_parent blob, transaction_version bigint default "
23342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0);"
23352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'deleted_metas'"
23362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "(metahandle bigint primary key ON CONFLICT FAIL,base"
23372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_version bigint default -1,server_version bigint default 0,         "
23382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "local_external_id bigint default 0"
23392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
23402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
23412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
23422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
23432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
23442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
23452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
23462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
23472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
23482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ", server_ordinal_in_parent blob, transaction_version bigint default "
23492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0);"
23502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
23512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
23522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
23532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "blob);"
23542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
23552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
23562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
23572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const char* insert_stmts[V80_ROW_COUNT] = {
23592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
23602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
23612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(2,669,669,4,"
23622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
23632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
23642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
23652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
23662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "14447414447414447',NULL,?,0);",
23672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(4,681,681,3,"
23682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
23692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
23702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
23712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
23722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
23732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
23742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(5,677,677,7,"
23752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
23762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
23772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
23782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
23792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ULL,?,0);",
23802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,"
23812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
23822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
23832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",NULL,?,0);",
23842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,"
23852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
23862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
23872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "",
23882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,"
23892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
23902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
23912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "00',X'C2881000',NULL,?,0);",
23922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,"
23932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
23942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
23952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "000',X'C2881000',NULL,?,0);",
23962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,"
23972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
23982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
23992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "LL,X'C2881000',X'C2881000',NULL,?,0);",
24002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,"
24012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
24022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
24032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
24042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
24052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
24062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,"
24072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
24082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
24092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "2881000',X'C2881000',NULL,?,0);",
24102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,"
24112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
24122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
24132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
24142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
24152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
24162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
24172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,"
24182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
24192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
24202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
24212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "81205504E473259',NULL,?,0);" };
24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
24242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = 0; i < V80_ROW_COUNT; i++) {
24252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string ord = V81_Ordinal(i);
24272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.BindBlob(0, ord.data(), ord.length());
24282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(s.Run());
24292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    s.Reset(true);
24302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
24312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
24322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
24332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MigrationTest::SetUpVersion86Database(sql::Connection* connection) {
2435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection->is_open());
2436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection->BeginTransaction());
2437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection->Execute(
2438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'share_version' VALUES('nick@chromium.org',86);"
2440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB,"
2441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         " transaction_version BIGINT default 0);"
2442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
2443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,b"
2444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "ase_version bigint default -1,server_version bigint default 0,local_e"
2445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "xternal_id bigint default 0,transaction_version bigint default 0,mtim"
2446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "e bigint default 0,server_mtime bigint default 0,ctime bigint default"
2447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         " 0,server_ctime bigint default 0,id varchar(255) default 'r',parent_i"
2448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "d varchar(255) default 'r',server_parent_id varchar(255) default 'r',"
2449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "is_unsynced bit default 0,is_unapplied_update bit default 0,is_del bi"
2450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "t default 0,is_dir bit default 0,server_is_dir bit default 0,server_i"
2451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "s_del bit default 0,non_unique_name varchar,server_non_unique_name va"
2452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "rchar(255),unique_server_tag varchar,unique_client_tag varchar,unique"
2453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "_bookmark_tag varchar,specifics blob,server_specifics blob,base_serve"
2454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "r_specifics blob,server_unique_position blob,unique_position blob);"
2455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         META_PROTO_TIMES_VALS(1)
2457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,"
2458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "X'',X'',X'',NULL,X'2200',X'2200');"
2459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The"
2461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         " Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D653"
2462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "273625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFF"
2463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "FFFC000006754307476346749735A5734654D653273625336557753582F77673D',X'"
2464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "22247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582"
2465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "F77673D');"
2466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome"
2468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "','Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2"
2469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "200');"
2470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Boo"
2472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "kmarks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'"
2473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "C2881000',NULL,X'2200',X'2200');"
2474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Boo"
2476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "kmark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C2881"
2477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "000',NULL,X'2200',X'2200');"
2478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'O"
2480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "ther Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C28810"
2481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "00',X'C2881000',NULL,X'2200',X'2200');"
2482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'H"
2484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "ome (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL"
2485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         ",X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C28810"
2486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641474154574"
2487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "1',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74"
2488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "68657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D"
2489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "623579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF00000505"
2490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "14C784A456D623579366267644237646A7A2B62314130346E493D');"
2491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'E"
2493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "xtra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6"
2494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "F616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'222"
2495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "480000000000000007867626A704A646134635A6F616C376A49513338734B46324837"
2496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "773D',X'222480000000000000007867626A704A646134635A6F616C376A495133387"
2497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "34B46324837773D');"
2498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I"
2500a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | "
2501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142"
2502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156"
2503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',"
2504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464"
2505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304"
2506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650"
2507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "4179672B304A614A514B3452384A413D');"
2508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T"
2510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "he WebKit Open Source Project','The WebKit Open Source Project',NULL,"
2511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2"
2512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101"
2513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222"
2514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C"
2515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315"
2516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "9552F6E644C553D');"
2517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "IL,base_version bigint default -1,server_version bigint default 0,loc"
2519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "al_external_id bigint default 0,transaction_version bigint default 0,"
2520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         "erver_specifics blob,server_unique_position blob,unique_position blob"
2529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         ");"
2530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birt"
2531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "hday TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
2532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "fault -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB"
2533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         ");"
2534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.or"
2535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "g','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-13107"
2536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)         "8,'9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection->CommitTransaction());
2538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
2539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2540e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid MigrationTest::SetUpVersion87Database(sql::Connection* connection) {
2541e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(connection->is_open());
2542e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(connection->BeginTransaction());
2543e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(connection->Execute(
2544e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2545e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'share_version' VALUES('nick@chromium.org',87);"
2546e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr"
2547e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "ansaction_version BIGINT default 0);"
2548e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
2549e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2550e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "_version bigint default -1,server_version bigint default 0,local_exte"
2551e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "rnal_id bigint default 0,transaction_version bigint default 0,mtime b"
2552e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "igint default 0,server_mtime bigint default 0,ctime bigint default 0,"
2553e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v"
2554e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_"
2555e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d"
2556e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d"
2557e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "el bit default 0,non_unique_name varchar,server_non_unique_name varch"
2558e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo"
2559e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s"
2560e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "pecifics blob,server_unique_position blob,unique_position blob,attach"
2561e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "ment_metadata blob);"
2562e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2563e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(1)
2564e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X''"
2565e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",X'',X'',NULL,X'2200',X'2200',NULL);"
2566e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2567e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(6)
2568e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The "
2569e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D6532"
2570e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "73625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFFF"
2571e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "FFC000006754307476346749735A5734654D653273625336557753582F77673D',X'2"
2572e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "2247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582F"
2573e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "77673D',NULL);"
2574e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2575e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(7)
2576e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome'"
2577e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'22"
2578e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "00',NULL);"
2579e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2580e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(8)
2581e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Book"
2582e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "marks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'C"
2583e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "2881000',NULL,X'2200',X'2200',NULL);"
2584e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2585e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(9)
2586e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Book"
2587e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "mark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C28810"
2588e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "00',NULL,X'2200',X'2200',NULL);"
2589e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2590e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(10)
2591e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Ot"
2592e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "her Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C288100"
2593e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "0',X'C2881000',NULL,X'2200',X'2200',NULL);"
2594e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2595e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(11)
2596e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Ho"
2597e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "me (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL,"
2598e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C288102"
2599e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "20A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741"
2600e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F746"
2601e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "8657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D6"
2602e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "23579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF000005051"
2603e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "4C784A456D623579366267644237646A7A2B62314130346E493D',NULL);"
2604e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2605e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(12)
2606e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Ex"
2607e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "tra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6F"
2608e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'2224"
2609e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "80000000000000007867626A704A646134635A6F616C376A49513338734B463248377"
2610e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "73D',X'222480000000000000007867626A704A646134635A6F616C376A4951333873"
2611e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "4B46324837773D',NULL);"
2612e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2613e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(13)
2614e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I"
2615e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | "
2616e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142"
2617e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156"
2618e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',"
2619e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464"
2620e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304"
2621e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650"
2622e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "4179672B304A614A514B3452384A413D',NULL);"
2623e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2624e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         META_PROTO_TIMES_VALS(14)
2625e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T"
2626e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "he WebKit Open Source Project','The WebKit Open Source Project',NULL,"
2627e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2"
2628e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101"
2629e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222"
2630e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C"
2631e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315"
2632e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "9552F6E644C553D',NULL);"
2633e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2634e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "IL,base_version bigint default -1,server_version bigint default 0,loc"
2635e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "al_external_id bigint default 0,transaction_version bigint default 0,"
2636e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2637e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2638e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2639e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2640e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2641e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2642e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2643e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2644e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "erver_specifics blob,server_unique_position blob,unique_position blob"
2645e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         ",attachment_metadata blob);"
2646e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2647e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2648e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2649e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2650e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2651e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch         "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2652e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(connection->CommitTransaction());
2653e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
2654e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
2655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MigrationTest::SetUpVersion88Database(sql::Connection* connection) {
2656c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection->is_open());
2657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection->BeginTransaction());
2658c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection->Execute(
2659c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2660c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'share_version' VALUES('nick@chromium.org',88);"
2661c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB,"
2662c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         " transaction_version BIGINT default 0, context BLOB);"
2663c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);"
2664c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2665c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "_version bigint default -1,server_version bigint default 0,local_exte"
2666c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "rnal_id bigint default 0,transaction_version bigint default 0,mtime b"
2667c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "igint default 0,server_mtime bigint default 0,ctime bigint default 0,"
2668c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v"
2669c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_"
2670c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d"
2671c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d"
2672c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "el bit default 0,non_unique_name varchar,server_non_unique_name varch"
2673c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo"
2674c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s"
2675c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "pecifics blob,server_unique_position blob,unique_position blob,attach"
2676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "ment_metadata blob);"
2677c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2678c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(1)
2679c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X''"
2680c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",X'',X'',NULL,X'2200',X'2200',NULL);"
2681c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2682c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(6)
2683c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The "
2684c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D6532"
2685c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "73625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFFF"
2686c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "FFC000006754307476346749735A5734654D653273625336557753582F77673D',X'2"
2687c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "2247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582F"
2688c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "77673D',NULL);"
2689c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2690c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(7)
2691c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome'"
2692c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'22"
2693c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "00',NULL);"
2694c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2695c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(8)
2696c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Book"
2697c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "marks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'C"
2698c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "2881000',NULL,X'2200',X'2200',NULL);"
2699c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2700c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(9)
2701c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Book"
2702c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "mark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C28810"
2703c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "00',NULL,X'2200',X'2200',NULL);"
2704c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2705c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(10)
2706c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Ot"
2707c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "her Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C288100"
2708c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "0',X'C2881000',NULL,X'2200',X'2200',NULL);"
2709c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2710c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(11)
2711c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Ho"
2712c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "me (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL,"
2713c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C288102"
2714c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "20A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741"
2715c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F746"
2716c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "8657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D6"
2717c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "23579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF000005051"
2718c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "4C784A456D623579366267644237646A7A2B62314130346E493D',NULL);"
2719c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2720c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(12)
2721c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Ex"
2722c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "tra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6F"
2723c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'2224"
2724c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "80000000000000007867626A704A646134635A6F616C376A49513338734B463248377"
2725c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "73D',X'222480000000000000007867626A704A646134635A6F616C376A4951333873"
2726c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "4B46324837773D',NULL);"
2727c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2728c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(13)
2729c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I"
2730c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | "
2731c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142"
2732c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156"
2733c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',"
2734c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464"
2735c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304"
2736c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650"
2737c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "4179672B304A614A514B3452384A413D',NULL);"
2738c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2739c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         META_PROTO_TIMES_VALS(14)
2740c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T"
2741c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "he WebKit Open Source Project','The WebKit Open Source Project',NULL,"
2742c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2"
2743c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101"
2744c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222"
2745c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C"
2746c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315"
2747c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "9552F6E644C553D',NULL);"
2748c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2749c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "IL,base_version bigint default -1,server_version bigint default 0,loc"
2750c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "al_external_id bigint default 0,transaction_version bigint default 0,"
2751c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2752c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2753c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2754c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2755c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2756c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2757c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2758c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "erver_specifics blob,server_unique_position blob,unique_position blob"
2760c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         ",attachment_metadata blob);"
2761c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2762c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2763c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2764c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2765c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2766c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch         "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2767c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection->CommitTransaction());
2768c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
2769c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
2770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2771116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MigrationTest::SetUpVersion89Database(sql::Connection* connection) {
2772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(connection->is_open());
2773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(connection->BeginTransaction());
2774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(connection->Execute(
2775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'share_version' VALUES('nick@chromium.org',89);"
2777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr"
2778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ansaction_version BIGINT default 0, context BLOB);"
2779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);"
2780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "_version bigint default -1,server_version bigint default 0,local_exte"
2782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "rnal_id bigint default 0,transaction_version bigint default 0,mtime b"
2783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "igint default 0,server_mtime bigint default 0,ctime bigint default 0,"
2784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v"
2785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_"
2786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d"
2787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d"
2788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "el bit default 0,non_unique_name varchar,server_non_unique_name varch"
2789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo"
2790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s"
2791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "pecifics blob,server_unique_position blob,unique_position blob,attach"
2792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ment_metadata blob,server_attachment_metadata blob);"
2793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(1)
2795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',X'',NULL,X'2200'"
2796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",X'2200',NULL,NULL);"
2797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(6)
2799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The Internet','The Internet'"
2800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",NULL,NULL,X'6754307476346749735A5734654D653273625336557753582F77673D"
2801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "',X'C2881000',X'C2881000',NULL,X'22247FFFFFFFFFC000006754307476346749"
2802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "735A5734654D653273625336557753582F77673D',X'22247FFFFFFFFFC0000067543"
2803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "07476346749735A5734654D653273625336557753582F77673D',NULL,NULL);"
2804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(7)
2806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google"
2807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2200',NULL,NULL);"
2808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(8)
2810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Bookmarks','Bookmarks','goog"
2811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "le_chrome_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'"
2812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "2200',NULL,NULL);"
2813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(9)
2815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
2816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'bookmark_bar',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'2200'"
2817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",NULL,NULL);"
2818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(10)
2820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
2821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "kmarks','other_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'220"
2822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "0',X'2200',NULL,NULL);"
2823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(11)
2825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Home (The Chromium Projects"
2826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ")','Home (The Chromium Projects)',NULL,NULL,X'50514C784A456D623579366"
2827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "267644237646A7A2B62314130346E493D',X'C28810220A18687474703A2F2F646576"
2828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "2E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1D687474703"
2829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "A2F2F6465762E6368726F6D69756D2E6F72672F6F7468657212084146414756415346"
2830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "',NULL,X'22247FFFFFFFFFF0000050514C784A456D623579366267644237646A7A2B"
2831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "62314130346E493D',X'22247FFFFFFFFFF0000050514C784A456D623579366267644"
2832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "237646A7A2B62314130346E493D',NULL,NULL);"
2833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(12)
2835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Extra Bookmarks','Extra Boo"
2836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "kmarks',NULL,NULL,X'7867626A704A646134635A6F616C376A49513338734B46324"
2837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "837773D',X'C2881000',X'C2881000',NULL,X'222480000000000000007867626A7"
2838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "04A646134635A6F616C376A49513338734B46324837773D',X'222480000000000000"
2839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "007867626A704A646134635A6F616C376A49513338734B46324837773D',NULL,NULL"
2840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ");"
2841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(13)
2843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'ICANN | Internet Corporatio"
2844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "n for Assigned Names and Numbers','ICANN | Internet Corporation for A"
2845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ssigned Names and Numbers',NULL,NULL,X'3142756B572F774176695650417967"
2846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "2B304A614A514B3452384A413D',X'C28810240A15687474703A2F2F7777772E69636"
2847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "16E6E2E636F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F"
2848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "2F7777772E6963616E6E2E636F6D2F120744414146415346',NULL,X'22247FFFFFFF"
2849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "FFF200003142756B572F7741766956504179672B304A614A514B3452384A413D',X'2"
2850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "2247FFFFFFFFFF200003142756B572F7741766956504179672B304A614A514B345238"
2851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "4A413D',NULL,NULL);"
2852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         META_PROTO_TIMES_VALS(14)
2854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'The WebKit Open Source Proj"
2855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ect','The WebKit Open Source Project',NULL,NULL,X'5A5678314E797636457"
2856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "9524D3177494F7236563159552F6E644C553D',X'C288101A0A12687474703A2F2F77"
2857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "65626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2F2F7765626"
2858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "B69742E6F72672F781205504E473259',NULL,X'222480000000001000005A5678314"
2859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "E7976364579524D3177494F7236563159552F6E644C553D',X'222480000000001000"
2860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "005A5678314E7976364579524D3177494F7236563159552F6E644C553D',NULL,NULL"
2861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ");"
2862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA"
2863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "IL,base_version bigint default -1,server_version bigint default 0,loc"
2864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "al_external_id bigint default 0,transaction_version bigint default 0,"
2865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def"
2866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare"
2867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "nt_id varchar(255) default 'r',server_parent_id varchar(255) default "
2868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de"
2869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv"
2870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam"
2871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un"
2872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s"
2873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "erver_specifics blob,server_unique_position blob,unique_position blob"
2874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         ",attachment_metadata blob,server_attachment_metadata blob);"
2875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau"
2877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);"
2878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'"
2880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         "9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(connection->CommitTransaction());
2882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
2883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
28885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion67Database(&connection);
28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns existing before version 67.
28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion67To68());
29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(68, dbs->GetVersion());
29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->needs_column_refresh_);
29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) {
29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
29075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion68Database(&connection);
29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
29125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
29135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion68To69());
29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(69, dbs->GetVersion());
29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->needs_column_refresh_);
29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
29225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name,"
29235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "is_del, is_dir, id, specifics, server_specifics FROM metas "
29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "WHERE metahandle = 2"));
29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
29265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("Deleted Item", s.ColumnString(0));
29275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.ColumnBool(1));
29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.ColumnBool(2));
29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("s_ID_2", s.ColumnString(3));
29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::EntitySpecifics specifics;
29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4));
29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(specifics.has_bookmark());
29335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("http://www.google.com/", specifics.bookmark().url());
29345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("AASGASGA", specifics.bookmark().favicon());
29355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5));
29365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(specifics.has_bookmark());
29375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("http://www.google.com/2", specifics.bookmark().url());
29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("ASADGADGADG", specifics.bookmark().favicon());
29395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.Step());
29405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
29415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) {
29435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion69Database(&connection);
29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag"));
29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag"));
29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag"));
29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
29565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion69To70());
29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(70, dbs->GetVersion());
29585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->needs_column_refresh_);
29595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
29605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
29625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
29635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT id"
29645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      " FROM metas WHERE unique_server_tag = 'google_chrome'"));
29655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
29665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("s_ID_7", s.ColumnString(0));
29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) {
29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
29725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion70Database(&connection);
29735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
29755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
29765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("models"));
29775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
29795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
29805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
29815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
29835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion70To71());
29845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(71, dbs->GetVersion());
29855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
29865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
29875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
29895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
29905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("models"));
29915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
29925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
29935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "model_id"));
29945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement("SELECT model_id, "
29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "initial_sync_ended, last_download_timestamp FROM models"));
29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
29985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string model_id = s.ColumnString(0);
29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size()))
30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Model ID is expected to be the empty BookmarkSpecifics proto.";
30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.ColumnBool(1));
30025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(694, s.ColumnInt64(2));
30035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(s.Step());
30045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
30055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) {
30085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
30095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
30105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion71Database(&connection);
30115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("extended_attributes"));
30135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
30155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
30165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
30175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion71To72());
30205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(72, dbs->GetVersion());
30215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
30235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
30255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
30265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) {
30285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
30295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
30305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion72Database(&connection);
30315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info", "notification_state"));
30335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
30355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
30365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
30375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion72To73());
30405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(73, dbs->GetVersion());
30415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
30435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
30455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
30465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
30485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
30495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
30505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion73Database(&connection);
30515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
30535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
30545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
30555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmarks_added_during_autofill_migration"));
30575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
30585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
30595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
30605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_entries_added_during_migration"));
30625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
30645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_profiles_added_during_migration"));
30665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
30685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
30695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
30705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion73To74());
30735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(74, dbs->GetVersion());
30745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
30755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
30765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
30785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
30795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
30805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "bookmarks_added_during_autofill_migration"));
30825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
30835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
30845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
30855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_entries_added_during_migration"));
30875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
30895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info",
30905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          "autofill_profiles_added_during_migration"));
30915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
30925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
30945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
30955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
30965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion74Database(&connection);
30975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
30995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
31005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
31025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
31035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
31045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
31065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion74To75());
31075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(75, dbs->GetVersion());
31085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
31095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
31105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
31125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
31135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
31145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion75To76) {
31165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
31175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
31185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion75Database(&connection);
31195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
31215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
31225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
31235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "bookmarks_added_during_autofill_migration"));
31245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
31255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_time"));
31265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
31275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autofill_entries_added_during_migration"));
31285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info",
31295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autofill_profiles_added_during_migration"));
31305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
31325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
31335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
31345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion75To76());
31355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(76, dbs->GetVersion());
31365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->needs_column_refresh_);
31375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cannot actual refresh columns due to version 76 not containing all
31385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // necessary columns.
31395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
31405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion76To77) {
31425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
31435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
31445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion76Database(&connection);
31455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
31475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
31485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
31495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedLegacyMetaProtoTimes(INCLUDE_DELETED_ITEMS),
31515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(dbs->db_.get()));
31525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Since the proto times are expected to be in a legacy format, they may not
31535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be compatible with ProtoTimeToTime, so we don't call ExpectTimes().
31545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion76To77());
31565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(77, dbs->GetVersion());
31575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS),
31595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(dbs->db_.get()));
31605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cannot actually load entries due to version 77 not having all required
31615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // columns.
31625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
31635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
31645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion77To78) {
31665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
31675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
31685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion77Database(&connection);
31695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "BASE_SERVER_SPECIFICS"));
31715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
31735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
31745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
31755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
31765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(dbs->MigrateVersion77To78());
31775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(78, dbs->GetVersion());
31785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
31805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
31815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
31835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
31845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion78To79) {
31865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kInitialNextId = -65542;
31875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
31895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
31905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion78Database(&connection);
31915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Double-check the original next_id is what we think it is.
31935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
31945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT next_id FROM share_info"));
31955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.Step();
31965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(kInitialNextId, s.ColumnInt(0));
31975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
31995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
32005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion78To79());
32025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(79, dbs->GetVersion());
32035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure the next_id has been incremented.
3206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap handles_map;
32072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JournalIndex  delete_journals;;
3208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
32095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo load_info;
32105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s.Clear();
3212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info));
32135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_LE(load_info.kernel_info.next_id, kInitialNextId - 65536);
32145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
32155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion79To80) {
32175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
32185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
32195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion79Database(&connection);
32205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
32225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
32235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion79To80());
32255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(80, dbs->GetVersion());
32265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure the bag_of_chips has been set.
3229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap handles_map;
32302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JournalIndex  delete_journals;;
3231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
32325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo load_info;
32335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info));
32355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that the initial value is the serialization of an empty ChipBag.
32365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::ChipBag chip_bag;
32375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string serialized_chip_bag;
32385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(chip_bag.SerializeToString(&serialized_chip_bag));
32395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(serialized_chip_bag, load_info.kernel_info.bag_of_chips);
32405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
32415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion80To81) {
32435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
32445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
32455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion80Database(&connection);
32465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
32485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT metahandle, server_position_in_parent "
32495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FROM metas WHERE unique_server_tag = 'google_chrome'"));
32505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(s.Step());
32515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(sql::COLUMN_TYPE_INTEGER, s.ColumnType(1));
32525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
32545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
32555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion80To81());
32565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(81, dbs->GetVersion());
32575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that ordinal values are preserved correctly.
32595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement new_s(connection.GetUniqueStatement(
32605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT metahandle, server_ordinal_in_parent "
32615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "FROM metas WHERE unique_server_tag = 'google_chrome'"));
32625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_s.Step());
32635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(sql::COLUMN_TYPE_BLOB, new_s.ColumnType(1));
32645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string expected_ordinal = Int64ToNodeOrdinal(1048576).ToInternalValue();
32665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string actual_ordinal;
32675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_s.ColumnBlobAsString(1, &actual_ordinal);
32685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(expected_ordinal, actual_ordinal);
32695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
32705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion81To82) {
32725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
32735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
32745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion81Database(&connection);
32755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "transaction_version"));
32765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
32785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
32795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion81To82());
32815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(82, dbs->GetVersion());
32825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(dbs->needs_column_refresh_);
32835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
32855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
32865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion82To83) {
32885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
32895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
32905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpVersion82Database(&connection);
32915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "transaction_version"));
32925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
32945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
32955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion82To83());
32965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(83, dbs->GetVersion());
32975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
32995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
33005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion83To84) {
33022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sql::Connection connection;
33032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
33042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUpVersion83Database(&connection);
33052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("deleted_metas"));
33062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
33082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
33092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion83To84());
33102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(84, dbs->GetVersion());
33112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("deleted_metas"));
33132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
33142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion84To85) {
33162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sql::Connection connection;
33172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
33182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUpVersion84Database(&connection);
33192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
33202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
33222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
33232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion84To85());
33242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(85, dbs->GetVersion());
33252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended"));
33262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
33272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateVersion85To86) {
3329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  sql::Connection connection;
3330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
3331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SetUpVersion85Database(&connection);
3332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "next_id"));
3333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "prev_id"));
3334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
3335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_position"));
3336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(connection.DoesColumnExist("metas", "server_unique_position"));
3337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_bookmark_tag"));
3338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
3340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
3341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(dbs->MigrateVersion85To86());
3342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(86, dbs->GetVersion());
3343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_position"));
3344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "server_unique_position"));
3345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_bookmark_tag"));
3346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(dbs->needs_column_refresh_);
3347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
3348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3349e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion86To87) {
3350e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  sql::Connection connection;
3351e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(connection.OpenInMemory());
3352e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  SetUpVersion86Database(&connection);
3353e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_FALSE(connection.DoesColumnExist("metas", "attachment_metadata"));
3354e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
3355e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  scoped_ptr<TestDirectoryBackingStore> dbs(
3356e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      new TestDirectoryBackingStore(GetUsername(), &connection));
3357e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(dbs->MigrateVersion86To87());
3358e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_EQ(87, dbs->GetVersion());
3359e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata"));
3360e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(dbs->needs_column_refresh_);
3361e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
3362e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
3363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion87To88) {
3364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  sql::Connection connection;
3365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection.OpenInMemory());
3366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SetUpVersion87Database(&connection);
3367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
3368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<TestDirectoryBackingStore> dbs(
3369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      new TestDirectoryBackingStore(GetUsername(), &connection));
3370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion87To88());
3371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_EQ(88, dbs->GetVersion());
3372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection.DoesColumnExist("models", "context"));
3373c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
3374c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
3375116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion88To89) {
3376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  sql::Connection connection;
3377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(connection.OpenInMemory());
3378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetUpVersion88Database(&connection);
3379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_FALSE(
3380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      connection.DoesColumnExist("metas", "server_attachment_metadata"));
3381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<TestDirectoryBackingStore> dbs(
3383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      new TestDirectoryBackingStore(GetUsername(), &connection));
3384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(dbs->MigrateVersion88To89());
3385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_EQ(89, dbs->GetVersion());
3386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(
3387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      connection.DoesColumnExist("metas", "server_attachment_metadata"));
3388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(dbs->needs_column_refresh_);
3389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
3390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The purpose of this test case is to make it easier to get a dump of the
3392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// database so you can implement a SetUpVersionYDatabase method.  Here's what
3393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// you should do:
3394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//
3395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//   1. Say you're going from version X to version Y.  Write the migration
3396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      method MigrateVersionXToY.
3397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//   2. Update the test below to call SetUpVersionXDatabase and then
3398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      MigrateVersionXToY. You now have a database at version Y. Let's dump it.
3399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//   3. Set a breakpoint to stop execution just after the connection is
3400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      destroyed.  Examine temp_dir_ to find the version Y database that was
3401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      created on disk. E.g. (gdb) p temp_dir_.path().value().c_str()
3402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//   4. Dump the database using the sqlite3 command line tool:
3403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//        > .output foo_dump.sql
3404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//        > .dump
3405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//   5. Replace the timestamp columns with META_PROTO_TIMES(x) (or
3406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write
3407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//      a SetupVersionYDatabase method.
3408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) {
3409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
3410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    sql::Connection connection;
3411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ASSERT_TRUE(connection.Open(GetDatabasePath()));
3412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SetUpVersion88Database(&connection);  // Update this.
3413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
3414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
3415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
3416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ASSERT_TRUE(dbs->MigrateVersion88To89());  // Update this.
3417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
3418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(89, dbs->GetVersion());  // Update this.
3419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
3420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
3421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Set breakpoint here.
3422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
3423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) {
3425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  sql::Connection connection;
3426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
3427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SetUpVersion86Database(&connection);
3428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
3430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
3431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_EQ(86, dbs->GetVersion());
3432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Insert row with bad position.
3434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  sql::Statement s(connection.GetUniqueStatement(
3435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "INSERT INTO metas "
3436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "( id, metahandle, is_dir, ctime, mtime,"
3437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "  unique_position, server_unique_position) "
3438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "VALUES('c-invalid', 9999, 1, 0, 0, 'BAD_POS', 'BAD_POS')"));
3439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(s.Run());
3440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Trying to unpack this entry should signal that the DB is corrupted.
3442868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap handles_map;
3443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  JournalIndex  delete_journals;;
3444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
3445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Directory::KernelLoadInfo kernel_load_info;
3446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_EQ(FAILED_DATABASE_CORRUPT,
3447868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            dbs->Load(&handles_map, &delete_journals, &kernel_load_info));
3448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
3449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
34505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(MigrationTest, ToCurrentVersion) {
34515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
34525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
34535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (GetParam()) {
34545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 67:
34555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion67Database(&connection);
34565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 68:
34585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion68Database(&connection);
34595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 69:
34615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion69Database(&connection);
34625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 70:
34645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion70Database(&connection);
34655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 71:
34675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion71Database(&connection);
34685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 72:
34705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion72Database(&connection);
34715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 73:
34735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion73Database(&connection);
34745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 74:
34765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion74Database(&connection);
34775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 75:
34795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion75Database(&connection);
34805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 76:
34825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion76Database(&connection);
34835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 77:
34855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion77Database(&connection);
34865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 78:
34885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion78Database(&connection);
34895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 79:
34915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion79Database(&connection);
34925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 80:
34945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion80Database(&connection);
34955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 81:
34975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion81Database(&connection);
34985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
34995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case 82:
35005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetUpVersion82Database(&connection);
35015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
35022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case 83:
35032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SetUpVersion83Database(&connection);
35042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
35052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case 84:
35062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SetUpVersion84Database(&connection);
35072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
3508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case 85:
3509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SetUpVersion85Database(&connection);
3510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      break;
3511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case 86:
3512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SetUpVersion86Database(&connection);
3513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      break;
3514e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    case 87:
3515e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      SetUpVersion87Database(&connection);
3516e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      break;
3517c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    case 88:
3518c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      SetUpVersion88Database(&connection);
3519c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      break;
3520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case 89:
3521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      SetUpVersion89Database(&connection);
3522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      break;
35235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
35245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // If you see this error, it may mean that you've increased the
35255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // database version number but you haven't finished adding unit tests
35265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // for the database migration code.  You need to need to supply a
3527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      // SetUpVersionYDatabase function with a dump of the test database
3528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      // at the new schema.  See the MigrateToLatestAndDump test case.
35295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FAIL() << "Need to supply database dump for version " << GetParam();
35305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
35315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  syncable::Directory::KernelLoadInfo dir_info;
3533868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap handles_map;
35342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JournalIndex  delete_journals;;
3535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map);
35365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
35385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TestDirectoryBackingStore> dbs(
35395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new TestDirectoryBackingStore(GetUsername(), &connection));
3540868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ASSERT_EQ(OPENED, dbs->Load(&handles_map, &delete_journals, &dir_info));
35415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(dbs->needs_column_refresh_);
35425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
35435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
35445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns deleted in Version 67.
35465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "name"));
35475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name"));
35485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name"));
35495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns added in Version 68.
35515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
35525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
35535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns deleted in Version 68.
35555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object"));
35565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas",
35575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          "server_is_bookmark_object"));
35585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon"));
35595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url"));
35605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url"));
35615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Renamed a column in Version 70
35635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag"));
35645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
35655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
35665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removed extended attributes in Version 72.
35685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
35695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns added in Version 73.
35715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
35725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column replaced in version 75.
35745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
35755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
35765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Columns removed in version 76.
35785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
35795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      connection.DoesColumnExist("share_info", "autofill_migration_state"));
35805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
35815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "bookmarks_added_during_autofill_migration"));
35825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
35835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    connection.DoesColumnExist("share_info", "autofill_migration_time"));
35845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
35855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "autofill_entries_added_during_migration"));
35865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("share_info",
35875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "autofill_profiles_added_during_migration"));
35885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 78.
35905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
35915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 82.
35935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
35945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column added in version 83.
35965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
35975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Table added in version 84.
35992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(connection.DoesTableExist("deleted_metas"));
36002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
36012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Column removed in version 85.
36022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended"));
36032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Columns removed in version 86.
3605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id"));
3606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id"));
3607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
3608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
3609e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // Column added in version 87.
3610e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata"));
3611e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
3612c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Column added in version 88.
3613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(connection.DoesColumnExist("models", "context"));
3614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
3615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Column added in version 89.
3616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(
3617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      connection.DoesColumnExist("metas", "server_attachment_metadata"));
3618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
36195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check download_progress state (v75 migration)
36205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(694,
36215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
36225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .timestamp_token_for_migration());
36235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
36245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
36255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_token());
36265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(32904,
36275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[BOOKMARKS]
36285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .data_type_id());
36295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
36305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
36315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_timestamp_token_for_migration());
36325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
36335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
36345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .has_token());
36355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
36365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
36375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .token().empty());
36385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(41210,
36395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dir_info.kernel_info.download_progress[THEMES]
36405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .data_type_id());
36415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check metas
36435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetExpectedMetaProtoTimes(DONT_INCLUDE_DELETED_ITEMS),
36445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetMetaProtoTimes(&connection));
3645868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ExpectTimes(handles_map, GetExpectedMetaTimes());
36465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap::iterator it = handles_map.find(1);
3648868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(it != handles_map.end());
3649868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(1, it->second->ref(META_HANDLE));
3650868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(ID).IsRoot());
3651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3653a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3654e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3656a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
3657a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Items 2, 4, and 5 were deleted.
3658a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  it = handles_map.find(2);
3659a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_TRUE(it == handles_map.end());
3660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  it = handles_map.find(4);
3661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_TRUE(it == handles_map.end());
3662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  it = handles_map.find(5);
3663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_TRUE(it == handles_map.end());
36645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(6);
3666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(6, it->second->ref(META_HANDLE));
3667868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(IS_DIR));
3668868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_IS_DIR));
3669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(UniquePosition::kSuffixLength,
3676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3677e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3679868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3680868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(7);
3681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(7, it->second->ref(META_HANDLE));
3682868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG));
3683868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark());
3684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Make sure we didn't assign positions to google_chrome.
3686a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3687a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3688a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3689e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3691868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3692868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(8);
3693868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(8, it->second->ref(META_HANDLE));
3694868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3695868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3696868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8");
3698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Make sure we didn't mistake the bookmark root node for a real bookmark.
3699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3700a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3701a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3702e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3704868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(9);
3706868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(9, it->second->ref(META_HANDLE));
3707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG));
3708868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Make sure we didn't assign positions to bookmark_bar.
3711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3714e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3716868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3717868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(10);
3718868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(10, it->second->ref(META_HANDLE));
3719868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(IS_DEL));
3720868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3721868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3722868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3723a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3724a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3725868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3726868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3727868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3728868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3729a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10");
3730e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Make sure we didn't assign positions to server-created folders, either.
3733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3736e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
3738868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3739868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(11);
3740868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(11, it->second->ref(META_HANDLE));
3741868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(IS_DEL));
3742868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(IS_DIR));
3743868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3744868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
37455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://dev.chromium.org/",
3746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(SPECIFICS).bookmark().url());
3747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon());
37485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://dev.chromium.org/other",
3749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(SERVER_SPECIFICS).bookmark().url());
3750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ("AFAGVASF", it->second->ref(SERVER_SPECIFICS).bookmark().favicon());
3751868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("", it->second->ref(UNIQUE_SERVER_TAG));
3752868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Home (The Chromium Projects)", it->second->ref(NON_UNIQUE_NAME));
3753868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Home (The Chromium Projects)",
3754868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            it->second->ref(SERVER_NON_UNIQUE_NAME));
3755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3757a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(UniquePosition::kSuffixLength,
3758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3759e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3760868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3761868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(12);
3762868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(12, it->second->ref(META_HANDLE));
3763868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(IS_DEL));
3764868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(IS_DIR));
3765868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Extra Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3766868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("Extra Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3767868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3768868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3769a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon());
3772868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3775a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(UniquePosition::kSuffixLength,
3776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3777e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
37795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3780868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(13);
3781868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(13, it->second->ref(META_HANDLE));
3782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(UniquePosition::kSuffixLength,
3785a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3786e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
37885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3789868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  it = handles_map.find(14);
3790868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(14, it->second->ref(META_HANDLE));
3791a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3792a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3793a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(UniquePosition::kSuffixLength,
3794a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            it->second->ref(UNIQUE_BOOKMARK_TAG).length());
3795e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized());
3796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized());
37975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3798868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(static_cast<size_t>(10), handles_map.size());
3799a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
3800a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Make sure that the syncable::Directory and the migration code agree on
3801a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // which items should or should not have unique position values.  This test
3802a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // may become obsolete if the directory's definition of that function
3803a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // changes, but, until then, this is a useful test.
3804a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  for (it = handles_map.begin(); it != handles_map.end(); it++) {
3805a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    SCOPED_TRACE(it->second->ref(ID));
3806a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (it->second->ShouldMaintainPosition()) {
3807a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3808a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3809a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_FALSE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3810a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    } else {
3811a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3812a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3813a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
3815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
38165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest,
3819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        testing::Range(67, kCurrentDBVersion + 1));
38205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
38222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ModelTypeSet protocol_types = ProtocolTypes();
38232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good();
38242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       iter.Inc()) {
38255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string model_id =
38262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        TestDirectoryBackingStore::ModelTypeEnumToModelId(iter.Get());
38272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(iter.Get(),
38285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TestDirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
38295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          model_id.size()));
38305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
38315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
38345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OnDiskDirectoryBackingStoreForTest : public OnDiskDirectoryBackingStore {
38365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
38375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnDiskDirectoryBackingStoreForTest(const std::string& dir_name,
38382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const base::FilePath& backing_filepath);
38395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OnDiskDirectoryBackingStoreForTest();
38405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DidFailFirstOpenAttempt();
38415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
38435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ReportFirstTryOpenFailure() OVERRIDE;
38445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
38465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool first_open_failed_;
38475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
38485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OnDiskDirectoryBackingStoreForTest::OnDiskDirectoryBackingStoreForTest(
38505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& dir_name,
38512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath& backing_filepath) :
38525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnDiskDirectoryBackingStore(dir_name, backing_filepath),
38535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  first_open_failed_(false) { }
38545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OnDiskDirectoryBackingStoreForTest::~OnDiskDirectoryBackingStoreForTest() { }
38565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OnDiskDirectoryBackingStoreForTest::ReportFirstTryOpenFailure() {
38585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do nothing, just like we would in release-mode.  In debug mode, we DCHECK.
38595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  first_open_failed_ = true;
38605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OnDiskDirectoryBackingStoreForTest::DidFailFirstOpenAttempt() {
38635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return first_open_failed_;
38645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
38675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a whitebox test intended to exercise the code path where the on-disk
38695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// directory load code decides to delete the current directory and start fresh.
38705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
38715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is considered "minor" corruption because the database recreation is
38725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// expected to succeed.  The alternative, where recreation does not succeed (ie.
38735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// due to read-only file system), is not tested here.
38745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, MinorCorruption) {
38755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
38765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<OnDiskDirectoryBackingStore> dbs(
38775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath()));
38785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
38795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
38805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Corrupt the root node.
38825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
38835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sql::Connection connection;
38845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(connection.Open(GetDatabasePath()));
38855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(connection.Execute(
38865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "UPDATE metas SET parent_id='bogus' WHERE id = 'r';"));
38875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
38885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
38905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<OnDiskDirectoryBackingStoreForTest> dbs(
38915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new OnDiskDirectoryBackingStoreForTest(GetUsername(),
38925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               GetDatabasePath()));
38935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
38955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dbs->DidFailFirstOpenAttempt());
38965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
38975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
38985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, DeleteEntries) {
39005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection connection;
39015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(connection.OpenInMemory());
39025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUpCurrentDatabaseAndCheckVersion(&connection);
39045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestDirectoryBackingStore> dbs(
39055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new TestDirectoryBackingStore(GetUsername(), &connection));
3906868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Directory::MetahandlesMap handles_map;
39072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JournalIndex  delete_journals;
39085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Directory::KernelLoadInfo kernel_load_info;
3909868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map);
39105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3911868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  dbs->Load(&handles_map, &delete_journals, &kernel_load_info);
3912868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  size_t initial_size = handles_map.size();
3913868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_LT(0U, initial_size) << "Test requires handles_map to delete.";
3914868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int64 first_to_die = handles_map.begin()->second->ref(META_HANDLE);
39155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MetahandleSet to_delete;
39165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  to_delete.insert(first_to_die);
39172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE,
39182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 to_delete));
39195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3920868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLDeleteValues(&handles_map);
3921868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  dbs->LoadEntries(&handles_map);
39225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3923868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(initial_size - 1, handles_map.size());
39245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool delete_failed = false;
3925868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  for (Directory::MetahandlesMap::iterator it = handles_map.begin();
3926868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)       it != handles_map.end(); ++it) {
3927868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (it->first == first_to_die) {
39285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete_failed = true;
39295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
39305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
39315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
39325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(delete_failed);
39335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  to_delete.clear();
3935868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  for (Directory::MetahandlesMap::iterator it = handles_map.begin();
3936868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)       it != handles_map.end(); ++it) {
3937868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    to_delete.insert(it->first);
39385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
39395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE,
39412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 to_delete));
39425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3943868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  STLDeleteValues(&handles_map);
3944868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  dbs->LoadEntries(&handles_map);
3945868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(0U, handles_map.size());
39465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
39475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DirectoryBackingStoreTest, GenerateCacheGUID) {
39495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& guid1 = TestDirectoryBackingStore::GenerateCacheGUID();
39505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
39515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(24U, guid1.size());
39525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(24U, guid2.size());
39535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In theory this test can fail, but it won't before the universe
39545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // dies of heat death.
39555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(guid1, guid2);
39565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
39575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncable
39595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
3960