1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "testing/gtest/include/gtest/gtest.h" 6 7#include <string> 8 9#include "base/files/file_path.h" 10#include "base/files/file_util.h" 11#include "base/files/scoped_temp_dir.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/stl_util.h" 14#include "base/strings/string_number_conversions.h" 15#include "sql/connection.h" 16#include "sql/statement.h" 17#include "sync/base/sync_export.h" 18#include "sync/internal_api/public/base/node_ordinal.h" 19#include "sync/protocol/bookmark_specifics.pb.h" 20#include "sync/protocol/sync.pb.h" 21#include "sync/syncable/directory_backing_store.h" 22#include "sync/syncable/on_disk_directory_backing_store.h" 23#include "sync/syncable/syncable-inl.h" 24#include "sync/test/test_directory_backing_store.h" 25#include "sync/util/time.h" 26#include "testing/gtest/include/gtest/gtest-param-test.h" 27 28namespace syncer { 29namespace syncable { 30 31SYNC_EXPORT_PRIVATE extern const int32 kCurrentDBVersion; 32 33class MigrationTest : public testing::TestWithParam<int> { 34 public: 35 virtual void SetUp() { 36 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 37 } 38 39 protected: 40 std::string GetUsername() { 41 return "nick@chromium.org"; 42 } 43 44 base::FilePath GetDatabasePath() { 45 return temp_dir_.path().Append(Directory::kSyncDatabaseFilename); 46 } 47 48 static bool LoadAndIgnoreReturnedData(DirectoryBackingStore *dbs) { 49 Directory::MetahandlesMap tmp_handles_map; 50 JournalIndex delete_journals; 51 STLValueDeleter<Directory::MetahandlesMap> deleter(&tmp_handles_map); 52 Directory::KernelLoadInfo kernel_load_info; 53 return dbs->Load(&tmp_handles_map, &delete_journals, &kernel_load_info) == 54 OPENED; 55 } 56 57 void SetUpVersion67Database(sql::Connection* connection); 58 void SetUpVersion68Database(sql::Connection* connection); 59 void SetUpVersion69Database(sql::Connection* connection); 60 void SetUpVersion70Database(sql::Connection* connection); 61 void SetUpVersion71Database(sql::Connection* connection); 62 void SetUpVersion72Database(sql::Connection* connection); 63 void SetUpVersion73Database(sql::Connection* connection); 64 void SetUpVersion74Database(sql::Connection* connection); 65 void SetUpVersion75Database(sql::Connection* connection); 66 void SetUpVersion76Database(sql::Connection* connection); 67 void SetUpVersion77Database(sql::Connection* connection); 68 void SetUpVersion78Database(sql::Connection* connection); 69 void SetUpVersion79Database(sql::Connection* connection); 70 void SetUpVersion80Database(sql::Connection* connection); 71 void SetUpVersion81Database(sql::Connection* connection); 72 void SetUpVersion82Database(sql::Connection* connection); 73 void SetUpVersion83Database(sql::Connection* connection); 74 void SetUpVersion84Database(sql::Connection* connection); 75 void SetUpVersion85Database(sql::Connection* connection); 76 void SetUpVersion86Database(sql::Connection* connection); 77 void SetUpVersion87Database(sql::Connection* connection); 78 void SetUpVersion88Database(sql::Connection* connection); 79 void SetUpVersion89Database(sql::Connection* connection); 80 81 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { 82 SetUpVersion89Database(connection); // Prepopulates data. 83 scoped_ptr<TestDirectoryBackingStore> dbs( 84 new TestDirectoryBackingStore(GetUsername(), connection)); 85 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); 86 87 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 88 ASSERT_FALSE(dbs->needs_column_refresh_); 89 } 90 91 private: 92 base::ScopedTempDir temp_dir_; 93}; 94 95class DirectoryBackingStoreTest : public MigrationTest {}; 96 97#if defined(OS_WIN) 98 99// On Windows, we used to store timestamps in FILETIME format. 100#define LEGACY_META_PROTO_TIMES_1 129079956640320000LL 101#define LEGACY_META_PROTO_TIMES_2 128976886618480000LL 102#define LEGACY_META_PROTO_TIMES_4 129002163642690000LL 103#define LEGACY_META_PROTO_TIMES_5 129001555500000000LL 104#define LEGACY_META_PROTO_TIMES_6 129053976170000000LL 105#define LEGACY_META_PROTO_TIMES_7 128976864758480000LL 106#define LEGACY_META_PROTO_TIMES_8 128976864758480000LL 107#define LEGACY_META_PROTO_TIMES_9 128976864758480000LL 108#define LEGACY_META_PROTO_TIMES_10 128976864758480000LL 109#define LEGACY_META_PROTO_TIMES_11 129079956948440000LL 110#define LEGACY_META_PROTO_TIMES_12 129079957513650000LL 111#define LEGACY_META_PROTO_TIMES_13 129079957985300000LL 112#define LEGACY_META_PROTO_TIMES_14 129079958383000000LL 113 114#define LEGACY_META_PROTO_TIMES_STR_1 "129079956640320000" 115#define LEGACY_META_PROTO_TIMES_STR_2 "128976886618480000" 116#define LEGACY_META_PROTO_TIMES_STR_4 "129002163642690000" 117#define LEGACY_META_PROTO_TIMES_STR_5 "129001555500000000" 118#define LEGACY_META_PROTO_TIMES_STR_6 "129053976170000000" 119#define LEGACY_META_PROTO_TIMES_STR_7 "128976864758480000" 120#define LEGACY_META_PROTO_TIMES_STR_8 "128976864758480000" 121#define LEGACY_META_PROTO_TIMES_STR_9 "128976864758480000" 122#define LEGACY_META_PROTO_TIMES_STR_10 "128976864758480000" 123#define LEGACY_META_PROTO_TIMES_STR_11 "129079956948440000" 124#define LEGACY_META_PROTO_TIMES_STR_12 "129079957513650000" 125#define LEGACY_META_PROTO_TIMES_STR_13 "129079957985300000" 126#define LEGACY_META_PROTO_TIMES_STR_14 "129079958383000000" 127 128// Generated via: 129// 130// ruby -ane '$F[1].sub!("LEGACY_", ""); $F[2] = Integer($F[2].sub!("LL", "")) / 131// 10000 - 11644473600000; print "#{$F[0]} #{$F[1]} #{$F[2]}LL"' 132// 133// Magic numbers taken from 134// http://stackoverflow.com/questions/5398557/ 135// java-library-for-dealing-with-win32-filetime . 136 137// Now we store them in Java format (ms since the Unix epoch). 138#define META_PROTO_TIMES_1 1263522064032LL 139#define META_PROTO_TIMES_2 1253215061848LL 140#define META_PROTO_TIMES_4 1255742764269LL 141#define META_PROTO_TIMES_5 1255681950000LL 142#define META_PROTO_TIMES_6 1260924017000LL 143#define META_PROTO_TIMES_7 1253212875848LL 144#define META_PROTO_TIMES_8 1253212875848LL 145#define META_PROTO_TIMES_9 1253212875848LL 146#define META_PROTO_TIMES_10 1253212875848LL 147#define META_PROTO_TIMES_11 1263522094844LL 148#define META_PROTO_TIMES_12 1263522151365LL 149#define META_PROTO_TIMES_13 1263522198530LL 150#define META_PROTO_TIMES_14 1263522238300LL 151 152#define META_PROTO_TIMES_STR_1 "1263522064032" 153#define META_PROTO_TIMES_STR_2 "1253215061848" 154#define META_PROTO_TIMES_STR_4 "1255742764269" 155#define META_PROTO_TIMES_STR_5 "1255681950000" 156#define META_PROTO_TIMES_STR_6 "1260924017000" 157#define META_PROTO_TIMES_STR_7 "1253212875848" 158#define META_PROTO_TIMES_STR_8 "1253212875848" 159#define META_PROTO_TIMES_STR_9 "1253212875848" 160#define META_PROTO_TIMES_STR_10 "1253212875848" 161#define META_PROTO_TIMES_STR_11 "1263522094844" 162#define META_PROTO_TIMES_STR_12 "1263522151365" 163#define META_PROTO_TIMES_STR_13 "1263522198530" 164#define META_PROTO_TIMES_STR_14 "1263522238300" 165 166#else 167 168// On other platforms, we used to store timestamps in time_t format (s 169// since the Unix epoch). 170#define LEGACY_META_PROTO_TIMES_1 1263522064LL 171#define LEGACY_META_PROTO_TIMES_2 1253215061LL 172#define LEGACY_META_PROTO_TIMES_4 1255742764LL 173#define LEGACY_META_PROTO_TIMES_5 1255681950LL 174#define LEGACY_META_PROTO_TIMES_6 1260924017LL 175#define LEGACY_META_PROTO_TIMES_7 1253212875LL 176#define LEGACY_META_PROTO_TIMES_8 1253212875LL 177#define LEGACY_META_PROTO_TIMES_9 1253212875LL 178#define LEGACY_META_PROTO_TIMES_10 1253212875LL 179#define LEGACY_META_PROTO_TIMES_11 1263522094LL 180#define LEGACY_META_PROTO_TIMES_12 1263522151LL 181#define LEGACY_META_PROTO_TIMES_13 1263522198LL 182#define LEGACY_META_PROTO_TIMES_14 1263522238LL 183 184#define LEGACY_META_PROTO_TIMES_STR_1 "1263522064" 185#define LEGACY_META_PROTO_TIMES_STR_2 "1253215061" 186#define LEGACY_META_PROTO_TIMES_STR_4 "1255742764" 187#define LEGACY_META_PROTO_TIMES_STR_5 "1255681950" 188#define LEGACY_META_PROTO_TIMES_STR_6 "1260924017" 189#define LEGACY_META_PROTO_TIMES_STR_7 "1253212875" 190#define LEGACY_META_PROTO_TIMES_STR_8 "1253212875" 191#define LEGACY_META_PROTO_TIMES_STR_9 "1253212875" 192#define LEGACY_META_PROTO_TIMES_STR_10 "1253212875" 193#define LEGACY_META_PROTO_TIMES_STR_11 "1263522094" 194#define LEGACY_META_PROTO_TIMES_STR_12 "1263522151" 195#define LEGACY_META_PROTO_TIMES_STR_13 "1263522198" 196#define LEGACY_META_PROTO_TIMES_STR_14 "1263522238" 197 198// Now we store them in Java format (ms since the Unix epoch). 199#define META_PROTO_TIMES_1 1263522064000LL 200#define META_PROTO_TIMES_2 1253215061000LL 201#define META_PROTO_TIMES_4 1255742764000LL 202#define META_PROTO_TIMES_5 1255681950000LL 203#define META_PROTO_TIMES_6 1260924017000LL 204#define META_PROTO_TIMES_7 1253212875000LL 205#define META_PROTO_TIMES_8 1253212875000LL 206#define META_PROTO_TIMES_9 1253212875000LL 207#define META_PROTO_TIMES_10 1253212875000LL 208#define META_PROTO_TIMES_11 1263522094000LL 209#define META_PROTO_TIMES_12 1263522151000LL 210#define META_PROTO_TIMES_13 1263522198000LL 211#define META_PROTO_TIMES_14 1263522238000LL 212 213#define META_PROTO_TIMES_STR_1 "1263522064000" 214#define META_PROTO_TIMES_STR_2 "1253215061000" 215#define META_PROTO_TIMES_STR_4 "1255742764000" 216#define META_PROTO_TIMES_STR_5 "1255681950000" 217#define META_PROTO_TIMES_STR_6 "1260924017000" 218#define META_PROTO_TIMES_STR_7 "1253212875000" 219#define META_PROTO_TIMES_STR_8 "1253212875000" 220#define META_PROTO_TIMES_STR_9 "1253212875000" 221#define META_PROTO_TIMES_STR_10 "1253212875000" 222#define META_PROTO_TIMES_STR_11 "1263522094000" 223#define META_PROTO_TIMES_STR_12 "1263522151000" 224#define META_PROTO_TIMES_STR_13 "1263522198000" 225#define META_PROTO_TIMES_STR_14 "1263522238000" 226 227#endif 228 229// Helper macros for the database dumps in the SetUpVersion*Database 230// functions. 231#define LEGACY_META_PROTO_TIMES(x) LEGACY_META_PROTO_TIMES_##x 232#define LEGACY_META_PROTO_TIMES_STR(x) LEGACY_META_PROTO_TIMES_STR_##x 233#define LEGACY_PROTO_TIME_VALS(x) \ 234 LEGACY_META_PROTO_TIMES_STR(x) "," \ 235 LEGACY_META_PROTO_TIMES_STR(x) "," \ 236 LEGACY_META_PROTO_TIMES_STR(x) "," \ 237 LEGACY_META_PROTO_TIMES_STR(x) 238#define META_PROTO_TIMES(x) META_PROTO_TIMES_##x 239#define META_PROTO_TIMES_STR(x) META_PROTO_TIMES_STR_##x 240#define META_PROTO_TIMES_VALS(x) \ 241 META_PROTO_TIMES_STR(x) "," \ 242 META_PROTO_TIMES_STR(x) "," \ 243 META_PROTO_TIMES_STR(x) "," \ 244 META_PROTO_TIMES_STR(x) 245 246namespace { 247 248// Helper functions for testing. 249 250enum ShouldIncludeDeletedItems { 251 INCLUDE_DELETED_ITEMS, 252 DONT_INCLUDE_DELETED_ITEMS 253}; 254 255// Returns a map from metahandle -> expected legacy time (in proto 256// format). 257std::map<int64, int64> GetExpectedLegacyMetaProtoTimes( 258 enum ShouldIncludeDeletedItems include_deleted) { 259 std::map<int64, int64> expected_legacy_meta_proto_times; 260 expected_legacy_meta_proto_times[1] = LEGACY_META_PROTO_TIMES(1); 261 if (include_deleted == INCLUDE_DELETED_ITEMS) { 262 expected_legacy_meta_proto_times[2] = LEGACY_META_PROTO_TIMES(2); 263 expected_legacy_meta_proto_times[4] = LEGACY_META_PROTO_TIMES(4); 264 expected_legacy_meta_proto_times[5] = LEGACY_META_PROTO_TIMES(5); 265 } 266 expected_legacy_meta_proto_times[6] = LEGACY_META_PROTO_TIMES(6); 267 expected_legacy_meta_proto_times[7] = LEGACY_META_PROTO_TIMES(7); 268 expected_legacy_meta_proto_times[8] = LEGACY_META_PROTO_TIMES(8); 269 expected_legacy_meta_proto_times[9] = LEGACY_META_PROTO_TIMES(9); 270 expected_legacy_meta_proto_times[10] = LEGACY_META_PROTO_TIMES(10); 271 expected_legacy_meta_proto_times[11] = LEGACY_META_PROTO_TIMES(11); 272 expected_legacy_meta_proto_times[12] = LEGACY_META_PROTO_TIMES(12); 273 expected_legacy_meta_proto_times[13] = LEGACY_META_PROTO_TIMES(13); 274 expected_legacy_meta_proto_times[14] = LEGACY_META_PROTO_TIMES(14); 275 return expected_legacy_meta_proto_times; 276} 277 278// Returns a map from metahandle -> expected time (in proto format). 279std::map<int64, int64> GetExpectedMetaProtoTimes( 280 enum ShouldIncludeDeletedItems include_deleted) { 281 std::map<int64, int64> expected_meta_proto_times; 282 expected_meta_proto_times[1] = META_PROTO_TIMES(1); 283 if (include_deleted == INCLUDE_DELETED_ITEMS) { 284 expected_meta_proto_times[2] = META_PROTO_TIMES(2); 285 expected_meta_proto_times[4] = META_PROTO_TIMES(4); 286 expected_meta_proto_times[5] = META_PROTO_TIMES(5); 287 } 288 expected_meta_proto_times[6] = META_PROTO_TIMES(6); 289 expected_meta_proto_times[7] = META_PROTO_TIMES(7); 290 expected_meta_proto_times[8] = META_PROTO_TIMES(8); 291 expected_meta_proto_times[9] = META_PROTO_TIMES(9); 292 expected_meta_proto_times[10] = META_PROTO_TIMES(10); 293 expected_meta_proto_times[11] = META_PROTO_TIMES(11); 294 expected_meta_proto_times[12] = META_PROTO_TIMES(12); 295 expected_meta_proto_times[13] = META_PROTO_TIMES(13); 296 expected_meta_proto_times[14] = META_PROTO_TIMES(14); 297 return expected_meta_proto_times; 298} 299 300// Returns a map from metahandle -> expected time (as a Time object). 301std::map<int64, base::Time> GetExpectedMetaTimes() { 302 std::map<int64, base::Time> expected_meta_times; 303 const std::map<int64, int64>& expected_meta_proto_times = 304 GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS); 305 for (std::map<int64, int64>::const_iterator it = 306 expected_meta_proto_times.begin(); 307 it != expected_meta_proto_times.end(); ++it) { 308 expected_meta_times[it->first] = ProtoTimeToTime(it->second); 309 } 310 return expected_meta_times; 311} 312 313// Extracts a map from metahandle -> time (in proto format) from the 314// given database. 315std::map<int64, int64> GetMetaProtoTimes(sql::Connection *db) { 316 sql::Statement s(db->GetCachedStatement( 317 SQL_FROM_HERE, 318 "SELECT metahandle, mtime, server_mtime, ctime, server_ctime " 319 "FROM metas")); 320 EXPECT_EQ(5, s.ColumnCount()); 321 std::map<int64, int64> meta_times; 322 while (s.Step()) { 323 int64 metahandle = s.ColumnInt64(0); 324 int64 mtime = s.ColumnInt64(1); 325 int64 server_mtime = s.ColumnInt64(2); 326 int64 ctime = s.ColumnInt64(3); 327 int64 server_ctime = s.ColumnInt64(4); 328 EXPECT_EQ(mtime, server_mtime); 329 EXPECT_EQ(mtime, ctime); 330 EXPECT_EQ(mtime, server_ctime); 331 meta_times[metahandle] = mtime; 332 } 333 EXPECT_TRUE(s.Succeeded()); 334 return meta_times; 335} 336 337::testing::AssertionResult AssertTimesMatch(const char* t1_expr, 338 const char* t2_expr, 339 const base::Time& t1, 340 const base::Time& t2) { 341 if (t1 == t2) 342 return ::testing::AssertionSuccess(); 343 344 return ::testing::AssertionFailure() 345 << t1_expr << " and " << t2_expr 346 << " (internal values: " << t1.ToInternalValue() 347 << " and " << t2.ToInternalValue() 348 << ") (proto time: " << TimeToProtoTime(t1) 349 << " and " << TimeToProtoTime(t2) 350 << ") do not match"; 351} 352 353// Expect that all time fields of the given entry kernel will be the 354// given time. 355void ExpectTime(const EntryKernel& entry_kernel, 356 const base::Time& expected_time) { 357 EXPECT_PRED_FORMAT2(AssertTimesMatch, 358 expected_time, entry_kernel.ref(CTIME)); 359 EXPECT_PRED_FORMAT2(AssertTimesMatch, 360 expected_time, entry_kernel.ref(SERVER_CTIME)); 361 EXPECT_PRED_FORMAT2(AssertTimesMatch, 362 expected_time, entry_kernel.ref(MTIME)); 363 EXPECT_PRED_FORMAT2(AssertTimesMatch, 364 expected_time, entry_kernel.ref(SERVER_MTIME)); 365} 366 367// Expect that all the entries in |entries| have times matching those in 368// the given map (from metahandle to expect time). 369void ExpectTimes(const Directory::MetahandlesMap& handles_map, 370 const std::map<int64, base::Time>& expected_times) { 371 for (Directory::MetahandlesMap::const_iterator it = handles_map.begin(); 372 it != handles_map.end(); ++it) { 373 int64 meta_handle = it->first; 374 SCOPED_TRACE(meta_handle); 375 std::map<int64, base::Time>::const_iterator it2 = 376 expected_times.find(meta_handle); 377 if (it2 == expected_times.end()) { 378 ADD_FAILURE() << "Could not find expected time for " << meta_handle; 379 continue; 380 } 381 ExpectTime(*it->second, it2->second); 382 } 383} 384 385} // namespace 386 387void MigrationTest::SetUpVersion67Database(sql::Connection* connection) { 388 // This is a version 67 database dump whose contents were backformed from 389 // the contents of the version 68 database dump (the v68 migration was 390 // actually written first). 391 ASSERT_TRUE(connection->is_open()); 392 ASSERT_TRUE(connection->BeginTransaction()); 393 ASSERT_TRUE(connection->Execute( 394 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), " 395 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);" 396 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL," 397 "base_version bigint default -1,server_version bigint default 0," 398 "mtime bigint default 0,server_mtime bigint default 0," 399 "ctime bigint default 0,server_ctime bigint default 0," 400 "server_position_in_parent bigint default 0," 401 "local_external_id bigint default 0,id varchar(255) default 'r'," 402 "parent_id varchar(255) default 'r'," 403 "server_parent_id varchar(255) default 'r'," 404 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r'," 405 "is_unsynced bit default 0,is_unapplied_update bit default 0," 406 "is_del bit default 0,is_dir bit default 0," 407 "is_bookmark_object bit default 0,server_is_dir bit default 0," 408 "server_is_del bit default 0,server_is_bookmark_object bit default 0," 409 "name varchar(255), " /* COLLATE PATHNAME, */ 410 "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */ 411 "non_unique_name varchar," 412 "server_name varchar(255)," /* COLLATE PATHNAME */ 413 "server_non_unique_name varchar," 414 "bookmark_url varchar,server_bookmark_url varchar," 415 "singleton_tag varchar,bookmark_favicon blob," 416 "server_bookmark_favicon blob);" 417 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 418 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL," 419 "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);" 420 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 421 ",-2097152," 422 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1," 423 "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item'," 424 "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA'," 425 "'ASADGADGADG');" 426 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 427 ",-3145728," 428 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1," 429 "'Welcome to Chromium',NULL,'Welcome to Chromium'," 430 "'Welcome to Chromium','Welcome to Chromium'," 431 "'http://www.google.com/chrome/intl/en/welcome.html'," 432 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL," 433 "NULL);" 434 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 435 ",1048576," 436 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1," 437 "'Google',NULL,'Google','Google','Google','http://www.google.com/'," 438 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');" 439 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 440 ",-4194304," 441 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1," 442 "'The Internet',NULL,'The Internet','The Internet'," 443 "'The Internet',NULL,NULL,NULL,NULL,NULL);" 444 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 445 "," 446 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1," 447 "'Google Chrome',NULL,'Google Chrome','Google Chrome'," 448 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);" 449 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 450 ",1048576," 451 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks'," 452 "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL," 453 "'google_chrome_bookmarks',NULL,NULL);" 454 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 455 "," 456 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0," 457 "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar'," 458 "NULL,NULL,'bookmark_bar',NULL,NULL);" 459 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 460 ",2097152," 461 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1," 462 "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks'," 463 "'Other Bookmarks',NULL,NULL,'other_bookmarks'," 464 "NULL,NULL);" 465 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 466 ",-1048576," 467 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1," 468 "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)'," 469 "'Home (The Chromium Projects)','Home (The Chromium Projects)'," 470 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL," 471 "'AGATWA','AFAGVASF');" 472 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 473 ",0,9," 474 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1," 475 "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks'," 476 "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);" 477 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 478 ",-917504," 479 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0," 480 "1,'ICANN | Internet Corporation for Assigned Names and Numbers'," 481 "'ICANN Internet Corporation for Assigned Names and Numbers'," 482 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 483 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 484 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 485 "'http://www.icann.com/','http://www.icann.com/',NULL," 486 "'PNGAXF0AAFF','DAAFASF');" 487 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 488 ",1048576," 489 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1," 490 "'The WebKit Open Source Project',NULL," 491 "'The WebKit Open Source Project','The WebKit Open Source Project'," 492 "'The WebKit Open Source Project','http://webkit.org/'," 493 "'http://webkit.org/x',NULL,'PNGX','PNG2Y');" 494 "CREATE TABLE share_info (id VARCHAR(128) primary key, " 495 "last_sync_timestamp INT, name VARCHAR(128), " 496 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), " 497 "db_create_version VARCHAR(128), db_create_time int, " 498 "next_id bigint default -2, cache_guid VARCHAR(32));" 499 "INSERT INTO share_info VALUES('nick@chromium.org',694," 500 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb'," 501 "'Unknown',1263522064,-65542," 502 "'9010788312004066376x-6609234393368420856x');" 503 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 504 "INSERT INTO share_version VALUES('nick@chromium.org',68);")); 505 ASSERT_TRUE(connection->CommitTransaction()); 506} 507 508void MigrationTest::SetUpVersion68Database(sql::Connection* connection) { 509 // This sets up an actual version 68 database dump. The IDs were 510 // canonicalized to be less huge, and the favicons were overwritten 511 // with random junk so that they didn't contain any unprintable 512 // characters. A few server URLs were tweaked so that they'd be 513 // different from the local URLs. Lastly, the custom collation on 514 // the server_non_unique_name column was removed. 515 ASSERT_TRUE(connection->is_open()); 516 ASSERT_TRUE(connection->BeginTransaction()); 517 ASSERT_TRUE(connection->Execute( 518 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), " 519 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);" 520 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL," 521 "base_version bigint default -1,server_version bigint default 0," 522 "mtime bigint default 0,server_mtime bigint default 0," 523 "ctime bigint default 0,server_ctime bigint default 0," 524 "server_position_in_parent bigint default 0," 525 "local_external_id bigint default 0,id varchar(255) default 'r'," 526 "parent_id varchar(255) default 'r'," 527 "server_parent_id varchar(255) default 'r'," 528 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r'," 529 "is_unsynced bit default 0,is_unapplied_update bit default 0," 530 "is_del bit default 0,is_dir bit default 0," 531 "is_bookmark_object bit default 0,server_is_dir bit default 0," 532 "server_is_del bit default 0," 533 "server_is_bookmark_object bit default 0," 534 "non_unique_name varchar,server_non_unique_name varchar(255)," 535 "bookmark_url varchar,server_bookmark_url varchar," 536 "singleton_tag varchar,bookmark_favicon blob," 537 "server_bookmark_favicon blob);" 538 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 539 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL," 540 "NULL,NULL,NULL,NULL,NULL,NULL);" 541 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 542 ",-2097152," 543 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1," 544 "'Deleted Item','Deleted Item','http://www.google.com/'," 545 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');" 546 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 547 ",-3145728," 548 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1," 549 "'Welcome to Chromium','Welcome to Chromium'," 550 "'http://www.google.com/chrome/intl/en/welcome.html'," 551 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL," 552 "NULL);" 553 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 554 ",1048576," 555 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1," 556 "'Google','Google','http://www.google.com/'," 557 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');" 558 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 559 ",-4194304," 560 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1," 561 "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);" 562 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 563 "," 564 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1," 565 "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL," 566 "NULL);" 567 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 568 ",1048576," 569 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks'," 570 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);" 571 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 572 "," 573 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0," 574 "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL," 575 "NULL);" 576 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 577 ",2097152," 578 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1," 579 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks'," 580 "NULL,NULL);" 581 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 582 ",-1048576," 583 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1," 584 "'Home (The Chromium Projects)','Home (The Chromium Projects)'," 585 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL," 586 "'AGATWA','AFAGVASF');" 587 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 588 ",0,9," 589 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1," 590 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);" 591 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 592 ",-917504," 593 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0," 594 "1,'ICANN | Internet Corporation for Assigned Names and Numbers'," 595 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 596 "'http://www.icann.com/','http://www.icann.com/',NULL," 597 "'PNGAXF0AAFF','DAAFASF');" 598 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 599 ",1048576," 600 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1," 601 "'The WebKit Open Source Project','The WebKit Open Source Project'," 602 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');" 603 "CREATE TABLE share_info (id VARCHAR(128) primary key, " 604 "last_sync_timestamp INT, name VARCHAR(128), " 605 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), " 606 "db_create_version VARCHAR(128), db_create_time int, " 607 "next_id bigint default -2, cache_guid VARCHAR(32));" 608 "INSERT INTO share_info VALUES('nick@chromium.org',694," 609 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb'," 610 "'Unknown',1263522064,-65542," 611 "'9010788312004066376x-6609234393368420856x');" 612 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 613 "INSERT INTO share_version VALUES('nick@chromium.org',68);")); 614 ASSERT_TRUE(connection->CommitTransaction()); 615} 616 617void MigrationTest::SetUpVersion69Database(sql::Connection* connection) { 618 ASSERT_TRUE(connection->is_open()); 619 ASSERT_TRUE(connection->BeginTransaction()); 620 ASSERT_TRUE(connection->Execute( 621 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), " 622 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);" 623 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL," 624 "base_version bigint default -1,server_version bigint default 0," 625 "mtime bigint default 0,server_mtime bigint default 0," 626 "ctime bigint default 0,server_ctime bigint default 0," 627 "server_position_in_parent bigint default 0," 628 "local_external_id bigint default 0,id varchar(255) default 'r'," 629 "parent_id varchar(255) default 'r'," 630 "server_parent_id varchar(255) default 'r'," 631 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r'," 632 "is_unsynced bit default 0,is_unapplied_update bit default 0," 633 "is_del bit default 0,is_dir bit default 0," 634 "is_bookmark_object bit default 0,server_is_dir bit default 0," 635 "server_is_del bit default 0," 636 "server_is_bookmark_object bit default 0," 637 "non_unique_name varchar,server_non_unique_name varchar(255)," 638 "bookmark_url varchar,server_bookmark_url varchar," 639 "singleton_tag varchar,bookmark_favicon blob," 640 "server_bookmark_favicon blob, specifics blob, " 641 "server_specifics blob);" 642 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 643 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL," 644 "NULL,NULL,X'',X'');" 645 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 646 ",-2097152," 647 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1," 648 "'Deleted Item','Deleted Item','http://www.google.com/'," 649 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG'," 650 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415" 651 "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F" 652 "6D2F32120B4153414447414447414447');" 653 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 654 ",-3145728," 655 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1," 656 "'Welcome to Chromium','Welcome to Chromium'," 657 "'http://www.google.com/chrome/intl/en/welcome.html'," 658 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL," 659 "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 660 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168" 661 "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6" 662 "56E2F77656C636F6D652E68746D6C1200');" 663 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 664 ",1048576,7," 665 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1," 666 "'Google','Google','http://www.google.com/'," 667 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166" 668 "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'" 669 "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464" 670 "447415347');" 671 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 672 ",-4194304,6" 673 ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet'," 674 "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');" 675 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 676 ",1048576,0," 677 "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome'," 678 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);" 679 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 680 ",1048576,0," 681 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks'," 682 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL," 683 "X'C2881000',X'C2881000');" 684 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 685 ",1048576,1," 686 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1," 687 "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL," 688 "X'C2881000',X'C2881000');" 689 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 690 ",2097152,2," 691 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1," 692 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks'," 693 "NULL,NULL,X'C2881000',X'C2881000');" 694 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 695 ",-1048576," 696 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1," 697 "'Home (The Chromium Projects)','Home (The Chromium Projects)'," 698 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL," 699 "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6" 700 "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576" 701 "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');" 702 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 703 ",0,9," 704 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1," 705 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL," 706 "X'C2881000',X'C2881000');" 707 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 708 ",-917504," 709 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0," 710 "1,'ICANN | Internet Corporation for Assigned Names and Numbers'," 711 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 712 "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF'," 713 "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1" 714 "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963" 715 "616E6E2E636F6D2F120744414146415346');" 716 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 717 ",1048576,11," 718 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1," 719 "'The WebKit Open Source Project','The WebKit Open Source Project'," 720 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y'," 721 "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2" 722 "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');" 723 "CREATE TABLE share_info (id VARCHAR(128) primary key, " 724 "last_sync_timestamp INT, name VARCHAR(128), " 725 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), " 726 "db_create_version VARCHAR(128), db_create_time int, " 727 "next_id bigint default -2, cache_guid VARCHAR(32));" 728 "INSERT INTO share_info VALUES('nick@chromium.org',694," 729 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb'," 730 "'Unknown',1263522064,-65542," 731 "'9010788312004066376x-6609234393368420856x');" 732 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 733 "INSERT INTO share_version VALUES('nick@chromium.org',69);" 734 )); 735 ASSERT_TRUE(connection->CommitTransaction()); 736} 737 738void MigrationTest::SetUpVersion70Database(sql::Connection* connection) { 739 ASSERT_TRUE(connection->is_open()); 740 ASSERT_TRUE(connection->BeginTransaction()); 741 ASSERT_TRUE(connection->Execute( 742 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), " 743 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);" 744 "CREATE TABLE share_info (id VARCHAR(128) primary key, " 745 "last_sync_timestamp INT, name VARCHAR(128), " 746 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), " 747 "db_create_version VARCHAR(128), db_create_time int, " 748 "next_id bigint default -2, cache_guid VARCHAR(32));" 749 "INSERT INTO share_info VALUES('nick@chromium.org',694," 750 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb'," 751 "'Unknown',1263522064,-65542," 752 "'9010788312004066376x-6609234393368420856x');" 753 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 754 "INSERT INTO share_version VALUES('nick@chromium.org',70);" 755 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL," 756 "base_version bigint default -1,server_version bigint default 0," 757 "mtime bigint default 0,server_mtime bigint default 0," 758 "ctime bigint default 0,server_ctime bigint default 0," 759 "server_position_in_parent bigint default 0," 760 "local_external_id bigint default 0,id varchar(255) default 'r'," 761 "parent_id varchar(255) default 'r'," 762 "server_parent_id varchar(255) default 'r'," 763 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r'," 764 "is_unsynced bit default 0,is_unapplied_update bit default 0," 765 "is_del bit default 0,is_dir bit default 0," 766 "server_is_dir bit default 0,server_is_del bit default 0," 767 "non_unique_name varchar,server_non_unique_name varchar(255)," 768 "unique_server_tag varchar,unique_client_tag varchar," 769 "specifics blob,server_specifics blob);" 770 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 771 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');" 772 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) "," 773 "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0," 774 "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A" 775 "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026" 776 "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741" 777 "4447414447');" 778 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 779 ",-3145728," 780 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1," 781 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A" 782 "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74" 783 "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F" 784 "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765" 785 "6C636F6D652E68746D6C1200');" 786 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 787 ",1048576,7," 788 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google'," 789 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6" 790 "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777" 791 "72E676F6F676C652E636F6D2F12084147464447415347');" 792 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 793 ",-4194304," 794 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet'," 795 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');" 796 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 797 ",1048576,0," 798 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome'," 799 "'Google Chrome','google_chrome',NULL,NULL,NULL);" 800 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 801 ",1048576,0," 802 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks'," 803 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000'," 804 "X'C2881000');" 805 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 806 ",1048576," 807 "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0," 808 "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000'," 809 "X'C2881000');" 810 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 811 "," 812 "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0," 813 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL," 814 "X'C2881000',X'C2881000');" 815 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 816 ",-1048576," 817 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0," 818 "'Home (The Chromium Projects)','Home (The Chromium Projects)'," 819 "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F" 820 "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872" 821 "6F6D69756D2E6F72672F6F7468657212084146414756415346');" 822 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 823 ",0,9," 824 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0," 825 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000'," 826 "X'C2881000');" 827 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 828 ",-917504," 829 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0," 830 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 831 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 832 "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F" 833 "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69" 834 "63616E6E2E636F6D2F120744414146415346');" 835 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 836 ",1048576," 837 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0," 838 "'The WebKit Open Source Project','The WebKit Open Source Project'," 839 "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450" 840 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550" 841 "4E473259');" 842 )); 843 ASSERT_TRUE(connection->CommitTransaction()); 844} 845 846void MigrationTest::SetUpVersion71Database(sql::Connection* connection) { 847 ASSERT_TRUE(connection->is_open()); 848 ASSERT_TRUE(connection->BeginTransaction()); 849 ASSERT_TRUE(connection->Execute( 850 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), " 851 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);" 852 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 853 "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);" 854 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL," 855 "base_version bigint default -1,server_version bigint default 0," 856 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint " 857 "default 0,server_ctime bigint default 0,server_position_in_parent " 858 "bigint default 0,local_external_id bigint default 0,id varchar(255) " 859 "default 'r',parent_id varchar(255) default 'r',server_parent_id " 860 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id " 861 "varchar(255) default 'r',is_unsynced bit default 0," 862 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit " 863 "default 0,server_is_dir bit default 0,server_is_del bit default 0," 864 "non_unique_name varchar,server_non_unique_name varchar(255)," 865 "unique_server_tag varchar,unique_client_tag varchar,specifics blob," 866 "server_specifics blob);" 867 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 868 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL," 869 "NULL,NULL,X'',X'');" 870 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 871 ",-2097152,4," 872 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1," 873 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F" 874 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768" 875 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144" 876 "47');" 877 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 878 ",-3145728,3," 879 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1," 880 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31" 881 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F" 882 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777" 883 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D" 884 "652E68746D6C1200');" 885 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 886 ",1048576,7," 887 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google'," 888 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652" 889 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6" 890 "76F6F676C652E636F6D2F12084147464447415347');" 891 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 892 ",-4194304,6," 893 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet'," 894 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');" 895 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 896 ",1048576,0," 897 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'" 898 ",'google_chrome',NULL,NULL,NULL);" 899 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 900 ",1048576,0," 901 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks'," 902 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');" 903 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 904 ",1048576,1," 905 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'," 906 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');" 907 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 908 ",2097152,2," 909 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0," 910 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL," 911 "X'C2881000',X'C2881000');" 912 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 913 ",-1048576,8," 914 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0," 915 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL," 916 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1" 917 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756" 918 "D2E6F72672F6F7468657212084146414756415346');" 919 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 920 ",0,9," 921 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0," 922 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000'," 923 "X'C2881000');" 924 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 925 ",-917504,10," 926 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0," 927 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 928 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL," 929 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504" 930 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2" 931 "E636F6D2F120744414146415346');" 932 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 933 ",1048576,11," 934 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0," 935 "'The WebKit Open Source Project','The WebKit Open Source Project'," 936 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450" 937 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E" 938 "473259');" 939 "CREATE TABLE models (model_id BLOB primary key, " 940 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);" 941 "INSERT INTO 'models' VALUES(X'C2881000',694,1);" 942 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, " 943 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, " 944 "next_id INT default -2, cache_guid TEXT);" 945 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 946 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542," 947 "'9010788312004066376x-6609234393368420856x');")); 948 ASSERT_TRUE(connection->CommitTransaction()); 949} 950 951void MigrationTest::SetUpVersion72Database(sql::Connection* connection) { 952 ASSERT_TRUE(connection->is_open()); 953 ASSERT_TRUE(connection->BeginTransaction()); 954 ASSERT_TRUE(connection->Execute( 955 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 956 "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);" 957 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL," 958 "base_version bigint default -1,server_version bigint default 0," 959 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint " 960 "default 0,server_ctime bigint default 0,server_position_in_parent " 961 "bigint default 0,local_external_id bigint default 0,id varchar(255) " 962 "default 'r',parent_id varchar(255) default 'r',server_parent_id " 963 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id " 964 "varchar(255) default 'r',is_unsynced bit default 0," 965 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit " 966 "default 0,server_is_dir bit default 0,server_is_del bit default 0," 967 "non_unique_name varchar,server_non_unique_name varchar(255)," 968 "unique_server_tag varchar,unique_client_tag varchar,specifics blob," 969 "server_specifics blob);" 970 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 971 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL," 972 "NULL,NULL,X'',X'');" 973 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 974 ",-2097152,4," 975 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1," 976 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F" 977 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768" 978 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144" 979 "47');" 980 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 981 ",-3145728,3," 982 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1," 983 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31" 984 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F" 985 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777" 986 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D" 987 "652E68746D6C1200');" 988 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 989 ",1048576,7," 990 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google'," 991 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652" 992 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6" 993 "76F6F676C652E636F6D2F12084147464447415347');" 994 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 995 ",-4194304,6," 996 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet'," 997 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');" 998 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 999 ",1048576,0," 1000 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'" 1001 ",'google_chrome',NULL,NULL,NULL);" 1002 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 1003 ",1048576,0," 1004 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks'," 1005 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');" 1006 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 1007 ",1048576,1," 1008 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'," 1009 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');" 1010 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 1011 ",2097152,2," 1012 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0," 1013 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL," 1014 "X'C2881000',X'C2881000');" 1015 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 1016 ",-1048576,8," 1017 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0," 1018 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL," 1019 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1" 1020 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756" 1021 "D2E6F72672F6F7468657212084146414756415346');" 1022 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 1023 ",0,9," 1024 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0," 1025 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000'," 1026 "X'C2881000');" 1027 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 1028 ",-917504,10," 1029 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0," 1030 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 1031 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL," 1032 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504" 1033 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2" 1034 "E636F6D2F120744414146415346');" 1035 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 1036 ",1048576,11," 1037 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0," 1038 "'The WebKit Open Source Project','The WebKit Open Source Project'," 1039 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450" 1040 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E" 1041 "473259');" 1042 "CREATE TABLE models (model_id BLOB primary key, " 1043 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);" 1044 "INSERT INTO 'models' VALUES(X'C2881000',694,1);" 1045 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, " 1046 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, " 1047 "next_id INT default -2, cache_guid TEXT);" 1048 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1049 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542," 1050 "'9010788312004066376x-6609234393368420856x');")); 1051 ASSERT_TRUE(connection->CommitTransaction()); 1052} 1053 1054void MigrationTest::SetUpVersion73Database(sql::Connection* connection) { 1055 ASSERT_TRUE(connection->is_open()); 1056 ASSERT_TRUE(connection->BeginTransaction()); 1057 ASSERT_TRUE(connection->Execute( 1058 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1059 "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);" 1060 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL," 1061 "base_version bigint default -1,server_version bigint default 0," 1062 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint " 1063 "default 0,server_ctime bigint default 0,server_position_in_parent " 1064 "bigint default 0,local_external_id bigint default 0,id varchar(255) " 1065 "default 'r',parent_id varchar(255) default 'r',server_parent_id " 1066 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id " 1067 "varchar(255) default 'r',is_unsynced bit default 0," 1068 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit " 1069 "default 0,server_is_dir bit default 0,server_is_del bit default 0," 1070 "non_unique_name varchar,server_non_unique_name varchar(255)," 1071 "unique_server_tag varchar,unique_client_tag varchar,specifics blob," 1072 "server_specifics blob);" 1073 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 1074 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL," 1075 "NULL,NULL,X'',X'');" 1076 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 1077 ",-2097152,4," 1078 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1," 1079 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F" 1080 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768" 1081 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144" 1082 "47');" 1083 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 1084 ",-3145728,3," 1085 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1," 1086 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31" 1087 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F" 1088 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777" 1089 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D" 1090 "652E68746D6C1200');" 1091 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 1092 ",1048576,7," 1093 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google'," 1094 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652" 1095 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6" 1096 "76F6F676C652E636F6D2F12084147464447415347');" 1097 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 1098 ",-4194304,6," 1099 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet'," 1100 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');" 1101 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 1102 ",1048576,0," 1103 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'" 1104 ",'google_chrome',NULL,NULL,NULL);" 1105 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 1106 ",1048576,0," 1107 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks'," 1108 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');" 1109 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 1110 ",1048576,1," 1111 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'," 1112 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');" 1113 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 1114 ",2097152,2," 1115 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0," 1116 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL," 1117 "X'C2881000',X'C2881000');" 1118 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 1119 ",-1048576,8," 1120 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0," 1121 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL," 1122 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1" 1123 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756" 1124 "D2E6F72672F6F7468657212084146414756415346');" 1125 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 1126 ",0,9," 1127 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0," 1128 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000'," 1129 "X'C2881000');" 1130 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 1131 ",-917504,10," 1132 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0," 1133 "'ICANN | Internet Corporation for Assigned Names and Numbers'," 1134 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL," 1135 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504" 1136 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2" 1137 "E636F6D2F120744414146415346');" 1138 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 1139 ",1048576,11," 1140 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0," 1141 "'The WebKit Open Source Project','The WebKit Open Source Project'," 1142 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450" 1143 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E" 1144 "473259');" 1145 "CREATE TABLE models (model_id BLOB primary key, " 1146 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);" 1147 "INSERT INTO 'models' VALUES(X'C2881000',694,1);" 1148 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, " 1149 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, " 1150 "next_id INT default -2, cache_guid TEXT, " 1151 "notification_state BLOB);" 1152 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1153 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542," 1154 "'9010788312004066376x-6609234393368420856x',X'C2881000');")); 1155 ASSERT_TRUE(connection->CommitTransaction()); 1156} 1157 1158void MigrationTest::SetUpVersion74Database(sql::Connection* connection) { 1159 ASSERT_TRUE(connection->is_open()); 1160 ASSERT_TRUE(connection->BeginTransaction()); 1161 ASSERT_TRUE(connection->Execute( 1162 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1163 "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);" 1164 "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp" 1165 " INT, initial_sync_ended BOOLEAN default 0);" 1166 "INSERT INTO 'models' VALUES(X'C2881000',694,1);" 1167 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd" 1168 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de" 1169 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra" 1170 "tion_state INT default 0, bookmarks_added_during_autofill_migration" 1171 " INT default 0, autofill_migration_time INT default 0, autofill_ent" 1172 "ries_added_during_migration INT default 0, autofill_profiles_added_" 1173 "during_migration INT default 0);" 1174 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'" 1175 ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542" 1176 ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);" 1177 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas" 1178 "e_version bigint default -1,server_version bigint default 0,mtime b" 1179 "igint default 0,server_mtime bigint default 0,ctime bigint default " 1180 "0,server_ctime bigint default 0,server_position_in_parent bigint de" 1181 "fault 0,local_external_id bigint default 0,id varchar(255) default " 1182 "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255" 1183 ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)" 1184 " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa" 1185 "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d" 1186 "efault 0,server_is_del bit default 0,non_unique_name varchar,server" 1187 "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie" 1188 "nt_tag varchar,specifics blob,server_specifics blob);" 1189 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 1190 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'" 1191 "');" 1192 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 1193 ",-2097152,4,'s_ID_2','s_ID" 1194 "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted " 1195 "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6" 1196 "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67" 1197 "6F6F676C652E636F6D2F32120B4153414447414447414447');" 1198 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 1199 ",-3145728,3,'s_ID_4','s_ID" 1200 "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W" 1201 "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6" 1202 "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E" 1203 "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636" 1204 "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');" 1205 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 1206 ",1048576,7,'s_ID_5','s_ID_" 1207 "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU" 1208 "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841" 1209 "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6" 1210 "36F6D2F12084147464447415347');" 1211 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 1212 ",-4194304,6,'s_ID_6','s_ID" 1213 "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL" 1214 ",NULL,X'C2881000',X'C2881000');" 1215 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 1216 ",1048576,0,'s_ID_7','r','r" 1217 "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom" 1218 "e',NULL,NULL,NULL);" 1219 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 1220 ",1048576,0,'s_ID_8','s_ID_" 1221 "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr" 1222 "ome_bookmarks',NULL,X'C2881000',X'C2881000');" 1223 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 1224 ",1048576,1,'s_ID_9','s_ID_" 1225 "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'" 1226 ",'bookmark_bar',NULL,X'C2881000',X'C2881000');" 1227 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 1228 ",2097152,2,'s_ID_10','s_I" 1229 "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo" 1230 "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');" 1231 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 1232 ",-1048576,8,'s_ID_11','s_" 1233 "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec" 1234 "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747" 1235 "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810" 1236 "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120" 1237 "84146414756415346');" 1238 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 1239 ",0,9,'s_ID_12','s_ID_6','" 1240 "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo" 1241 "okmarks',NULL,NULL,X'C2881000',X'C2881000');" 1242 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 1243 ",-917504,10,'s_ID_13','s_" 1244 "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co" 1245 "rporation for Assigned Names and Numbers','ICANN | Internet Corpora" 1246 "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474" 1247 "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C" 1248 "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641" 1249 "5346');" 1250 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 1251 ",1048576,11,'s_ID_14','s_" 1252 "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr" 1253 "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687" 1254 "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474" 1255 "703A2F2F7765626B69742E6F72672F781205504E473259');" 1256 )); 1257 ASSERT_TRUE(connection->CommitTransaction()); 1258} 1259 1260void MigrationTest::SetUpVersion75Database(sql::Connection* connection) { 1261 ASSERT_TRUE(connection->is_open()); 1262 ASSERT_TRUE(connection->BeginTransaction()); 1263 ASSERT_TRUE(connection->Execute( 1264 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1265 "INSERT INTO 'share_version' VALUES('nick@chromium.org',75);" 1266 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd" 1267 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de" 1268 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra" 1269 "tion_state INT default 0,bookmarks_added_during_autofill_migration " 1270 "INT default 0, autofill_migration_time INT default 0, autofill_entr" 1271 "ies_added_during_migration INT default 0, autofill_profiles_added_d" 1272 "uring_migration INT default 0);" 1273 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org" 1274 "','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-655" 1275 "42,'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);" 1276 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, " 1277 "initial_sync_ended BOOLEAN default 0);" 1278 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1279 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,ba" 1280 "se_version bigint default -1,server_version bigint default 0,mtime" 1281 " bigint default 0,server_mtime bigint default 0,ctime bigint defau" 1282 "lt 0,server_ctime bigint default 0,server_position_in_parent bigin" 1283 "t default 0,local_external_id bigint default 0,id varchar(255) def" 1284 "ault 'r',parent_id varchar(255) default 'r',server_parent_id varch" 1285 "ar(255) default 'r',prev_id varchar(255) default 'r',next_id varch" 1286 "ar(255) default 'r',is_unsynced bit default 0,is_unapplied_update " 1287 "bit default 0,is_del bit default 0,is_dir bit default 0,server_is_" 1288 "dir bit default 0,server_is_del bit default 0,non_unique_name varc" 1289 "har,server_non_unique_name varchar(255),unique_server_tag varchar," 1290 "unique_client_tag varchar,specifics blob,server_specifics blob);" 1291 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 1292 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NUL" 1293 "L,X'',X'');" 1294 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 1295 ",-2097152,4,'s_ID_" 1296 "2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Ite" 1297 "m','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772" 1298 "E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A176874" 1299 "74703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474" 1300 "14447');" 1301 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 1302 ",-3145728,3,'s_ID_" 1303 "4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to " 1304 "Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A316874747" 1305 "03A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F65" 1306 "6E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7" 1307 "777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765" 1308 "6C636F6D652E68746D6C1200');" 1309 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 1310 ",1048576,7,'s_ID_5" 1311 "','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Goo" 1312 "gle',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C65" 1313 "2E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F777" 1314 "7772E676F6F676C652E636F6D2F12084147464447415347');" 1315 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 1316 ",-4194304,6,'s_ID_" 1317 "6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The In" 1318 "ternet',NULL,NULL,X'C2881000',X'C2881000');" 1319 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 1320 ",1048576,0,'s_ID_7" 1321 "','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','" 1322 "google_chrome',NULL,NULL,NULL);" 1323 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 1324 ",1048576,0,'s_ID_8" 1325 "','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks'" 1326 ",'google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');" 1327 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 1328 ",1048576,1,'s_ID_9" 1329 "','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','B" 1330 "ookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');" 1331 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 1332 ",2097152,2,'s_ID_" 1333 "10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks" 1334 "','Other Bookmarks','other_bookmarks',NULL,X'C2881000',X'C28810" 1335 "00');" 1336 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 1337 ",-1048576,8,'s_ID" 1338 "_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chr" 1339 "omium Projects)','Home (The Chromium Projects)',NULL,NULL,X'C28" 1340 "810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641" 1341 "4741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756" 1342 "D2E6F72672F6F7468657212084146414756415346');" 1343 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 1344 ",0,9,'s_ID_12','s" 1345 "_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmark" 1346 "s','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000');" 1347 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 1348 ",-917504,10,'s_ID" 1349 "_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN |" 1350 " Internet Corporation for Assigned Names and Numbers','ICANN | " 1351 "Internet Corporation for Assigned Names and Numbers',NULL,NULL," 1352 "X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504" 1353 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E696361" 1354 "6E6E2E636F6D2F120744414146415346');" 1355 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 1356 ",1048576,11,'s_ID" 1357 "_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Op" 1358 "en Source Project','The WebKit Open Source Project',NULL,NULL,X" 1359 "'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758'," 1360 "X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473" 1361 "259');" 1362 )); 1363 ASSERT_TRUE(connection->CommitTransaction()); 1364} 1365 1366void MigrationTest::SetUpVersion76Database(sql::Connection* connection) { 1367 ASSERT_TRUE(connection->is_open()); 1368 ASSERT_TRUE(connection->BeginTransaction()); 1369 ASSERT_TRUE(connection->Execute( 1370 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1371 "INSERT INTO 'share_version' VALUES('nick@chromium.org',76);" 1372 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1373 "itial_sync_ended BOOLEAN default 0);" 1374 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1375 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1376 "_version bigint default -1,server_version bigint default 0,mtime big" 1377 "int default 0,server_mtime bigint default 0,ctime bigint default 0,s" 1378 "erver_ctime bigint default 0,server_position_in_parent bigint defaul" 1379 "t 0,local_external_id bigint default 0,id varchar(255) default 'r',p" 1380 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1381 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1382 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1383 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1384 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1385 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1386 "har,specifics blob,server_specifics blob);" 1387 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1) 1388 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'')" 1389 ";" 1390 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) 1391 ",-2097152,4,'s_ID_2','s_ID_9" 1392 "','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted Ite" 1393 "m',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6" 1394 "D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E676F6F6" 1395 "76C652E636F6D2F32120B4153414447414447414447');" 1396 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4) 1397 ",-3145728,3,'s_ID_4','s_ID_9" 1398 "','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','Welc" 1399 "ome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E676F6" 1400 "F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746" 1401 "D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6" 1402 "368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');" 1403 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5) 1404 ",1048576,7,'s_ID_5','s_ID_9'" 1405 ",'s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NULL," 1406 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F1208414741" 1407 "5347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D" 1408 "2F12084147464447415347');" 1409 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6) 1410 ",-4194304,6,'s_ID_6','s_ID_9" 1411 "','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL,NU" 1412 "LL,X'C2881000',X'C2881000');" 1413 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7) 1414 ",1048576,0,'s_ID_7','r','r'," 1415 "'r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrome'," 1416 "NULL,NULL,NULL);" 1417 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8) 1418 ",1048576,0,'s_ID_8','s_ID_7'" 1419 ",'s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chrome" 1420 "_bookmarks',NULL,X'C2881000',X'C2881000');" 1421 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9) 1422 ",1048576,1,'s_ID_9','s_ID_8'" 1423 ",'s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar','b" 1424 "ookmark_bar',NULL,X'C2881000',X'C2881000');" 1425 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10) 1426 ",2097152,2,'s_ID_10','s_ID_" 1427 "8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Bookma" 1428 "rks','other_bookmarks',NULL,X'C2881000',X'C2881000');" 1429 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11) 1430 ",-1048576,8,'s_ID_11','s_ID" 1431 "_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projects)" 1432 "','Home (The Chromium Projects)',NULL,NULL,X'C28810220A18687474703A2" 1433 "F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1" 1434 "D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120841464" 1435 "14756415346');" 1436 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12) 1437 ",0,9,'s_ID_12','s_ID_6','s_" 1438 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm" 1439 "arks',NULL,NULL,X'C2881000',X'C2881000');" 1440 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13) 1441 ",-917504,10,'s_ID_13','s_ID" 1442 "_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Corpo" 1443 "ration for Assigned Names and Numbers','ICANN | Internet Corporation" 1444 " for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474703A2" 1445 "F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C288102" 1446 "00A15687474703A2F2F7777772E6963616E6E2E636F6D2F120744414146415346');" 1447 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14) 1448 ",1048576,11,'s_ID_14','s_ID" 1449 "_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Proje" 1450 "ct','The WebKit Open Source Project',NULL,NULL,X'C288101A0A126874747" 1451 "03A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2" 1452 "F2F7765626B69742E6F72672F781205504E473259');" 1453 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1454 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1455 "ult -2, cache_guid TEXT , notification_state BLOB);" 1456 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1457 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'" 1458 "9010788312004066376x-6609234393368420856x',NULL);" 1459 )); 1460 ASSERT_TRUE(connection->CommitTransaction()); 1461} 1462 1463void MigrationTest::SetUpVersion77Database(sql::Connection* connection) { 1464 ASSERT_TRUE(connection->is_open()); 1465 ASSERT_TRUE(connection->BeginTransaction()); 1466 ASSERT_TRUE(connection->Execute( 1467 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1468 "INSERT INTO 'share_version' VALUES('nick@chromium.org',77);" 1469 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1470 "itial_sync_ended BOOLEAN default 0);" 1471 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1472 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1473 "_version bigint default -1,server_version bigint default 0,server_po" 1474 "sition_in_parent bigint default 0,local_external_id bigint default 0" 1475 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1476 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1477 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1478 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1479 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1480 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1481 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1482 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1483 "har,specifics blob,server_specifics blob);" 1484 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) 1485 ",'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');" 1486 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4," 1487 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 1488 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 1489 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 1490 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 1491 "14447414447414447');" 1492 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3," 1493 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 1494 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 1495 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 1496 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 1497 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 1498 "E2F77656C636F6D652E68746D6C1200');" 1499 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," META_PROTO_TIMES_VALS(5) 1500 ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','" 1501 "Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E" 1502 "636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E67" 1503 "6F6F676C652E636F6D2F12084147464447415347');" 1504 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6," 1505 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 1506 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 1507 ");" 1508 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," META_PROTO_TIMES_VALS(7) 1509 ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Goo" 1510 "gle Chrome','google_chrome',NULL,NULL,NULL);" 1511 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," META_PROTO_TIMES_VALS(8) 1512 ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmar" 1513 "ks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');" 1514 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," META_PROTO_TIMES_VALS(9) 1515 ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'" 1516 ",'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');" 1517 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2," 1518 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 1519 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 1520 "LL,X'C2881000',X'C2881000');" 1521 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8," 1522 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 1523 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 1524 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 1525 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 1526 "8726F6D69756D2E6F72672F6F7468657212084146414756415346');" 1527 "INSERT INTO 'metas' VALUES(12,685,685,0,9," META_PROTO_TIMES_VALS(12) 1528 ",'s_ID_12','s_ID_6','s_" 1529 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm" 1530 "arks',NULL,NULL,X'C2881000',X'C2881000');" 1531 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10," 1532 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 1533 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 1534 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 1535 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 1536 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 1537 "E6963616E6E2E636F6D2F120744414146415346');" 1538 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11," 1539 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 1540 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 1541 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 1542 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 1543 "81205504E473259');" 1544 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1545 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1546 "ult -2, cache_guid TEXT , notification_state BLOB);" 1547 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1548 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'" 1549 "9010788312004066376x-6609234393368420856x',NULL);" 1550 )); 1551 ASSERT_TRUE(connection->CommitTransaction()); 1552} 1553 1554void MigrationTest::SetUpVersion78Database(sql::Connection* connection) { 1555 ASSERT_TRUE(connection->is_open()); 1556 ASSERT_TRUE(connection->BeginTransaction()); 1557 ASSERT_TRUE(connection->Execute( 1558 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1559 "INSERT INTO 'share_version' VALUES('nick@chromium.org',78);" 1560 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1561 "itial_sync_ended BOOLEAN default 0);" 1562 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1563 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1564 "_version bigint default -1,server_version bigint default 0,server_po" 1565 "sition_in_parent bigint default 0,local_external_id bigint default 0" 1566 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1567 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1568 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1569 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1570 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1571 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1572 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1573 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1574 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 1575 ");" 1576 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 1577 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);" 1578 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4," 1579 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 1580 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 1581 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 1582 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 1583 "14447414447414447',NULL);" 1584 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3," 1585 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 1586 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 1587 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 1588 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 1589 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 1590 "E2F77656C636F6D652E68746D6C1200',NULL);" 1591 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," 1592 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 1593 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 1594 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 1595 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 1596 "ULL);" 1597 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6," 1598 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 1599 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 1600 ",NULL);" 1601 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," 1602 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 1603 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);" 1604 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," 1605 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 1606 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 1607 "00',X'C2881000',NULL);" 1608 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," 1609 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 1610 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 1611 "000',X'C2881000',NULL);" 1612 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2," 1613 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 1614 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 1615 "LL,X'C2881000',X'C2881000',NULL);" 1616 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8," 1617 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 1618 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 1619 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 1620 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 1621 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);" 1622 "INSERT INTO 'metas' VALUES(12,685,685,0,9," 1623 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 1624 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 1625 "2881000',X'C2881000',NULL);" 1626 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10," 1627 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 1628 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 1629 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 1630 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 1631 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 1632 "E6963616E6E2E636F6D2F120744414146415346',NULL);" 1633 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11," 1634 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 1635 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 1636 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 1637 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 1638 "81205504E473259',NULL);" 1639 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1640 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1641 "ult -2, cache_guid TEXT , notification_state BLOB);" 1642 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1643 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'" 1644 "9010788312004066376x-6609234393368420856x',NULL);" 1645 )); 1646 ASSERT_TRUE(connection->CommitTransaction()); 1647} 1648 1649void MigrationTest::SetUpVersion79Database(sql::Connection* connection) { 1650 ASSERT_TRUE(connection->is_open()); 1651 ASSERT_TRUE(connection->BeginTransaction()); 1652 ASSERT_TRUE(connection->Execute( 1653 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1654 "INSERT INTO 'share_version' VALUES('nick@chromium.org',79);" 1655 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1656 "itial_sync_ended BOOLEAN default 0);" 1657 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1658 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1659 "_version bigint default -1,server_version bigint default 0,server_po" 1660 "sition_in_parent bigint default 0,local_external_id bigint default 0" 1661 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1662 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1663 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1664 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1665 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1666 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1667 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1668 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1669 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 1670 ");" 1671 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 1672 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);" 1673 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4," 1674 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 1675 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 1676 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 1677 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 1678 "14447414447414447',NULL);" 1679 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3," 1680 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 1681 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 1682 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 1683 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 1684 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 1685 "E2F77656C636F6D652E68746D6C1200',NULL);" 1686 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," 1687 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 1688 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 1689 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 1690 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 1691 "ULL);" 1692 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6," 1693 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 1694 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 1695 ",NULL);" 1696 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," 1697 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 1698 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);" 1699 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," 1700 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 1701 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 1702 "00',X'C2881000',NULL);" 1703 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," 1704 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 1705 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 1706 "000',X'C2881000',NULL);" 1707 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2," 1708 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 1709 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 1710 "LL,X'C2881000',X'C2881000',NULL);" 1711 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8," 1712 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 1713 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 1714 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 1715 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 1716 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);" 1717 "INSERT INTO 'metas' VALUES(12,685,685,0,9," 1718 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 1719 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 1720 "2881000',X'C2881000',NULL);" 1721 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10," 1722 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 1723 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 1724 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 1725 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 1726 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 1727 "E6963616E6E2E636F6D2F120744414146415346',NULL);" 1728 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11," 1729 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 1730 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 1731 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 1732 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 1733 "81205504E473259',NULL);" 1734 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1735 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1736 "ult -2, cache_guid TEXT , notification_state BLOB);" 1737 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1738 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 1739 "-131078,'9010788312004066376x-6609234393368420856x',NULL);" 1740 )); 1741 ASSERT_TRUE(connection->CommitTransaction()); 1742} 1743 1744void MigrationTest::SetUpVersion80Database(sql::Connection* connection) { 1745 ASSERT_TRUE(connection->is_open()); 1746 ASSERT_TRUE(connection->BeginTransaction()); 1747 ASSERT_TRUE(connection->Execute( 1748 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1749 "INSERT INTO 'share_version' VALUES('nick@chromium.org',80);" 1750 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1751 "itial_sync_ended BOOLEAN default 0);" 1752 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1753 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1754 "_version bigint default -1,server_version bigint default 0,server_po" 1755 "sition_in_parent bigint default 0,local_external_id bigint default 0" 1756 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1757 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1758 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1759 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1760 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1761 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1762 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1763 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1764 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 1765 ");" 1766 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 1767 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);" 1768 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4," 1769 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 1770 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 1771 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 1772 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 1773 "14447414447414447',NULL);" 1774 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3," 1775 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 1776 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 1777 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 1778 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 1779 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 1780 "E2F77656C636F6D652E68746D6C1200',NULL);" 1781 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," 1782 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 1783 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 1784 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 1785 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 1786 "ULL);" 1787 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6," 1788 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 1789 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 1790 ",NULL);" 1791 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," 1792 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 1793 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);" 1794 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," 1795 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 1796 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 1797 "00',X'C2881000',NULL);" 1798 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," 1799 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 1800 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 1801 "000',X'C2881000',NULL);" 1802 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2," 1803 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 1804 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 1805 "LL,X'C2881000',X'C2881000',NULL);" 1806 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8," 1807 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 1808 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 1809 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 1810 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 1811 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);" 1812 "INSERT INTO 'metas' VALUES(12,685,685,0,9," 1813 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 1814 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 1815 "2881000',X'C2881000',NULL);" 1816 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10," 1817 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 1818 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 1819 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 1820 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 1821 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 1822 "E6963616E6E2E636F6D2F120744414146415346',NULL);" 1823 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11," 1824 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 1825 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 1826 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 1827 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 1828 "81205504E473259',NULL);" 1829 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1830 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1831 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 1832 "blob);" 1833 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1834 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 1835 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);" 1836 )); 1837 ASSERT_TRUE(connection->CommitTransaction()); 1838} 1839 1840 1841// Helper definitions to create the version 81 DB tables. 1842namespace { 1843 1844const int V80_ROW_COUNT = 13; 1845const int64 V80_POSITIONS[V80_ROW_COUNT] = { 1846 0, 1847 -2097152, 1848 -3145728, 1849 1048576, 1850 -4194304, 1851 1048576, 1852 1048576, 1853 1048576, 1854 2097152, 1855 -1048576, 1856 0, 1857 -917504, 1858 1048576 1859}; 1860 1861std::string V81_Ordinal(int n) { 1862 return Int64ToNodeOrdinal(V80_POSITIONS[n]).ToInternalValue(); 1863} 1864 1865} //namespace 1866 1867// Unlike the earlier versions, the rows for version 81 are generated 1868// programmatically to accurately handle unprintable characters for the 1869// server_ordinal_in_parent field. 1870void MigrationTest::SetUpVersion81Database(sql::Connection* connection) { 1871 ASSERT_TRUE(connection->is_open()); 1872 ASSERT_TRUE(connection->BeginTransaction()); 1873 ASSERT_TRUE(connection->Execute( 1874 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1875 "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);" 1876 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1877 "itial_sync_ended BOOLEAN default 0);" 1878 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 1879 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1880 "_version bigint default -1,server_version bigint default 0, " 1881 "local_external_id bigint default 0" 1882 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1883 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1884 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1885 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1886 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1887 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1888 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1889 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1890 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 1891 ", server_ordinal_in_parent blob);" 1892 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1893 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 1894 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 1895 "blob);" 1896 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 1897 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 1898 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); 1899 1900 const char* insert_stmts[V80_ROW_COUNT] = { 1901 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 1902 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);", 1903 "INSERT INTO 'metas' VALUES(2,669,669,4," 1904 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 1905 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 1906 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 1907 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 1908 "14447414447414447',NULL,?);", 1909 "INSERT INTO 'metas' VALUES(4,681,681,3," 1910 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 1911 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 1912 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 1913 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 1914 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 1915 "E2F77656C636F6D652E68746D6C1200',NULL,?);", 1916 "INSERT INTO 'metas' VALUES(5,677,677,7," 1917 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 1918 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 1919 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 1920 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 1921 "ULL,?);", 1922 "INSERT INTO 'metas' VALUES(6,694,694,6," 1923 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 1924 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 1925 ",NULL,?);", 1926 "INSERT INTO 'metas' VALUES(7,663,663,0," 1927 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 1928 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);", 1929 "INSERT INTO 'metas' VALUES(8,664,664,0," 1930 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 1931 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 1932 "00',X'C2881000',NULL,?);", 1933 "INSERT INTO 'metas' VALUES(9,665,665,1," 1934 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 1935 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 1936 "000',X'C2881000',NULL,?);", 1937 "INSERT INTO 'metas' VALUES(10,666,666,2," 1938 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 1939 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 1940 "LL,X'C2881000',X'C2881000',NULL,?);", 1941 "INSERT INTO 'metas' VALUES(11,683,683,8," 1942 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 1943 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 1944 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 1945 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 1946 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);", 1947 "INSERT INTO 'metas' VALUES(12,685,685,9," 1948 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 1949 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 1950 "2881000',X'C2881000',NULL,?);", 1951 "INSERT INTO 'metas' VALUES(13,687,687,10," 1952 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 1953 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 1954 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 1955 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 1956 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 1957 "E6963616E6E2E636F6D2F120744414146415346',NULL,?);", 1958 "INSERT INTO 'metas' VALUES(14,692,692,11," 1959 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 1960 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 1961 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 1962 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 1963 "81205504E473259',NULL,?);" }; 1964 1965 for (int i = 0; i < V80_ROW_COUNT; i++) { 1966 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); 1967 std::string ord = V81_Ordinal(i); 1968 s.BindBlob(0, ord.data(), ord.length()); 1969 ASSERT_TRUE(s.Run()); 1970 s.Reset(true); 1971 } 1972 ASSERT_TRUE(connection->CommitTransaction()); 1973} 1974 1975void MigrationTest::SetUpVersion82Database(sql::Connection* connection) { 1976 ASSERT_TRUE(connection->is_open()); 1977 ASSERT_TRUE(connection->BeginTransaction()); 1978 ASSERT_TRUE(connection->Execute( 1979 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 1980 "INSERT INTO 'share_version' VALUES('nick@chromium.org',82);" 1981 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 1982 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " 1983 "default 0);" 1984 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" 1985 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 1986 "_version bigint default -1,server_version bigint default 0, " 1987 "local_external_id bigint default 0" 1988 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 1989 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 1990 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 1991 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 1992 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 1993 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 1994 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 1995 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 1996 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 1997 ", server_ordinal_in_parent blob);" 1998 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 1999 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 2000 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 2001 "blob);" 2002 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2003 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 2004 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); 2005 2006 const char* insert_stmts[V80_ROW_COUNT] = { 2007 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 2008 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);", 2009 "INSERT INTO 'metas' VALUES(2,669,669,4," 2010 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 2011 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 2012 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 2013 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 2014 "14447414447414447',NULL,?);", 2015 "INSERT INTO 'metas' VALUES(4,681,681,3," 2016 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 2017 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 2018 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 2019 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 2020 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 2021 "E2F77656C636F6D652E68746D6C1200',NULL,?);", 2022 "INSERT INTO 'metas' VALUES(5,677,677,7," 2023 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 2024 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 2025 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 2026 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 2027 "ULL,?);", 2028 "INSERT INTO 'metas' VALUES(6,694,694,6," 2029 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 2030 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 2031 ",NULL,?);", 2032 "INSERT INTO 'metas' VALUES(7,663,663,0," 2033 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 2034 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);", 2035 "INSERT INTO 'metas' VALUES(8,664,664,0," 2036 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 2037 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 2038 "00',X'C2881000',NULL,?);", 2039 "INSERT INTO 'metas' VALUES(9,665,665,1," 2040 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 2041 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 2042 "000',X'C2881000',NULL,?);", 2043 "INSERT INTO 'metas' VALUES(10,666,666,2," 2044 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 2045 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 2046 "LL,X'C2881000',X'C2881000',NULL,?);", 2047 "INSERT INTO 'metas' VALUES(11,683,683,8," 2048 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 2049 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 2050 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 2051 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 2052 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);", 2053 "INSERT INTO 'metas' VALUES(12,685,685,9," 2054 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 2055 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 2056 "2881000',X'C2881000',NULL,?);", 2057 "INSERT INTO 'metas' VALUES(13,687,687,10," 2058 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 2059 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 2060 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 2061 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 2062 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 2063 "E6963616E6E2E636F6D2F120744414146415346',NULL,?);", 2064 "INSERT INTO 'metas' VALUES(14,692,692,11," 2065 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 2066 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 2067 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 2068 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 2069 "81205504E473259',NULL,?);" }; 2070 2071 for (int i = 0; i < V80_ROW_COUNT; i++) { 2072 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); 2073 std::string ord = V81_Ordinal(i); 2074 s.BindBlob(0, ord.data(), ord.length()); 2075 ASSERT_TRUE(s.Run()); 2076 s.Reset(true); 2077 } 2078 ASSERT_TRUE(connection->CommitTransaction()); 2079} 2080 2081void MigrationTest::SetUpVersion83Database(sql::Connection* connection) { 2082 ASSERT_TRUE(connection->is_open()); 2083 ASSERT_TRUE(connection->BeginTransaction()); 2084 ASSERT_TRUE(connection->Execute( 2085 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2086 "INSERT INTO 'share_version' VALUES('nick@chromium.org',83);" 2087 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 2088 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " 2089 "default 0);" 2090 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" 2091 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2092 "_version bigint default -1,server_version bigint default 0, " 2093 "local_external_id bigint default 0" 2094 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 2095 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 2096 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 2097 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 2098 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 2099 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 2100 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 2101 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 2102 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 2103 ", server_ordinal_in_parent blob, transaction_version bigint default " 2104 "0);" 2105 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2106 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 2107 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 2108 "blob);" 2109 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2110 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 2111 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); 2112 2113 const char* insert_stmts[V80_ROW_COUNT] = { 2114 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 2115 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", 2116 "INSERT INTO 'metas' VALUES(2,669,669,4," 2117 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 2118 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 2119 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 2120 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 2121 "14447414447414447',NULL,?,0);", 2122 "INSERT INTO 'metas' VALUES(4,681,681,3," 2123 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 2124 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 2125 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 2126 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 2127 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 2128 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);", 2129 "INSERT INTO 'metas' VALUES(5,677,677,7," 2130 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 2131 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 2132 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 2133 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 2134 "ULL,?,0);", 2135 "INSERT INTO 'metas' VALUES(6,694,694,6," 2136 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 2137 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 2138 ",NULL,?,0);", 2139 "INSERT INTO 'metas' VALUES(7,663,663,0," 2140 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 2141 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);" 2142 "", 2143 "INSERT INTO 'metas' VALUES(8,664,664,0," 2144 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 2145 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 2146 "00',X'C2881000',NULL,?,0);", 2147 "INSERT INTO 'metas' VALUES(9,665,665,1," 2148 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 2149 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 2150 "000',X'C2881000',NULL,?,0);", 2151 "INSERT INTO 'metas' VALUES(10,666,666,2," 2152 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 2153 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 2154 "LL,X'C2881000',X'C2881000',NULL,?,0);", 2155 "INSERT INTO 'metas' VALUES(11,683,683,8," 2156 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 2157 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 2158 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 2159 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 2160 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);", 2161 "INSERT INTO 'metas' VALUES(12,685,685,9," 2162 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 2163 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 2164 "2881000',X'C2881000',NULL,?,0);", 2165 "INSERT INTO 'metas' VALUES(13,687,687,10," 2166 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 2167 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 2168 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 2169 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 2170 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 2171 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);", 2172 "INSERT INTO 'metas' VALUES(14,692,692,11," 2173 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 2174 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 2175 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 2176 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 2177 "81205504E473259',NULL,?,0);" }; 2178 2179 for (int i = 0; i < V80_ROW_COUNT; i++) { 2180 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); 2181 std::string ord = V81_Ordinal(i); 2182 s.BindBlob(0, ord.data(), ord.length()); 2183 ASSERT_TRUE(s.Run()); 2184 s.Reset(true); 2185 } 2186 ASSERT_TRUE(connection->CommitTransaction()); 2187} 2188 2189void MigrationTest::SetUpVersion84Database(sql::Connection* connection) { 2190 ASSERT_TRUE(connection->is_open()); 2191 ASSERT_TRUE(connection->BeginTransaction()); 2192 ASSERT_TRUE(connection->Execute( 2193 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2194 "INSERT INTO 'share_version' VALUES('nick@chromium.org',84);" 2195 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" 2196 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " 2197 "default 0);" 2198 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" 2199 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2200 "_version bigint default -1,server_version bigint default 0, " 2201 "local_external_id bigint default 0" 2202 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 2203 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 2204 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 2205 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 2206 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 2207 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 2208 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 2209 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 2210 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 2211 ", server_ordinal_in_parent blob, transaction_version bigint default " 2212 "0);" 2213 "CREATE TABLE 'deleted_metas'" 2214 "(metahandle bigint primary key ON CONFLICT FAIL,base" 2215 "_version bigint default -1,server_version bigint default 0, " 2216 "local_external_id bigint default 0" 2217 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 2218 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 2219 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 2220 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 2221 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 2222 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 2223 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 2224 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 2225 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 2226 ", server_ordinal_in_parent blob, transaction_version bigint default " 2227 "0);" 2228 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2229 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 2230 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 2231 "blob);" 2232 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2233 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 2234 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); 2235 2236 const char* insert_stmts[V80_ROW_COUNT] = { 2237 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 2238 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", 2239 "INSERT INTO 'metas' VALUES(2,669,669,4," 2240 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 2241 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 2242 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 2243 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 2244 "14447414447414447',NULL,?,0);", 2245 "INSERT INTO 'metas' VALUES(4,681,681,3," 2246 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 2247 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 2248 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 2249 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 2250 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 2251 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);", 2252 "INSERT INTO 'metas' VALUES(5,677,677,7," 2253 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 2254 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 2255 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 2256 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 2257 "ULL,?,0);", 2258 "INSERT INTO 'metas' VALUES(6,694,694,6," 2259 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 2260 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 2261 ",NULL,?,0);", 2262 "INSERT INTO 'metas' VALUES(7,663,663,0," 2263 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 2264 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);" 2265 "", 2266 "INSERT INTO 'metas' VALUES(8,664,664,0," 2267 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 2268 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 2269 "00',X'C2881000',NULL,?,0);", 2270 "INSERT INTO 'metas' VALUES(9,665,665,1," 2271 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 2272 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 2273 "000',X'C2881000',NULL,?,0);", 2274 "INSERT INTO 'metas' VALUES(10,666,666,2," 2275 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 2276 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 2277 "LL,X'C2881000',X'C2881000',NULL,?,0);", 2278 "INSERT INTO 'metas' VALUES(11,683,683,8," 2279 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 2280 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 2281 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 2282 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 2283 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);", 2284 "INSERT INTO 'metas' VALUES(12,685,685,9," 2285 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 2286 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 2287 "2881000',X'C2881000',NULL,?,0);", 2288 "INSERT INTO 'metas' VALUES(13,687,687,10," 2289 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 2290 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 2291 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 2292 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 2293 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 2294 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);", 2295 "INSERT INTO 'metas' VALUES(14,692,692,11," 2296 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 2297 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 2298 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 2299 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 2300 "81205504E473259',NULL,?,0);" }; 2301 2302 for (int i = 0; i < V80_ROW_COUNT; i++) { 2303 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); 2304 std::string ord = V81_Ordinal(i); 2305 s.BindBlob(0, ord.data(), ord.length()); 2306 ASSERT_TRUE(s.Run()); 2307 s.Reset(true); 2308 } 2309 ASSERT_TRUE(connection->CommitTransaction()); 2310} 2311 2312void MigrationTest::SetUpVersion85Database(sql::Connection* connection) { 2313 ASSERT_TRUE(connection->is_open()); 2314 ASSERT_TRUE(connection->BeginTransaction()); 2315 ASSERT_TRUE(connection->Execute( 2316 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2317 "INSERT INTO 'share_version' VALUES('nick@chromium.org',85);" 2318 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, " 2319 "transaction_version BIGINT default 0);" 2320 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605', 1);" 2321 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2322 "_version bigint default -1,server_version bigint default 0, " 2323 "local_external_id bigint default 0" 2324 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 2325 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 2326 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 2327 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 2328 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 2329 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 2330 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 2331 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 2332 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 2333 ", server_ordinal_in_parent blob, transaction_version bigint default " 2334 "0);" 2335 "CREATE TABLE 'deleted_metas'" 2336 "(metahandle bigint primary key ON CONFLICT FAIL,base" 2337 "_version bigint default -1,server_version bigint default 0, " 2338 "local_external_id bigint default 0" 2339 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" 2340 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" 2341 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" 2342 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" 2343 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" 2344 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," 2345 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" 2346 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" 2347 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" 2348 ", server_ordinal_in_parent blob, transaction_version bigint default " 2349 "0);" 2350 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2351 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" 2352 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " 2353 "blob);" 2354 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2355 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," 2356 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); 2357 2358 const char* insert_stmts[V80_ROW_COUNT] = { 2359 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" 2360 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", 2361 "INSERT INTO 'metas' VALUES(2,669,669,4," 2362 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" 2363 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" 2364 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" 2365 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" 2366 "14447414447414447',NULL,?,0);", 2367 "INSERT INTO 'metas' VALUES(4,681,681,3," 2368 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" 2369 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" 2370 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" 2371 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" 2372 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" 2373 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);", 2374 "INSERT INTO 'metas' VALUES(5,677,677,7," 2375 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" 2376 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" 2377 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" 2378 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" 2379 "ULL,?,0);", 2380 "INSERT INTO 'metas' VALUES(6,694,694,6," 2381 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" 2382 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" 2383 ",NULL,?,0);", 2384 "INSERT INTO 'metas' VALUES(7,663,663,0," 2385 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" 2386 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);" 2387 "", 2388 "INSERT INTO 'metas' VALUES(8,664,664,0," 2389 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" 2390 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" 2391 "00',X'C2881000',NULL,?,0);", 2392 "INSERT INTO 'metas' VALUES(9,665,665,1," 2393 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" 2394 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" 2395 "000',X'C2881000',NULL,?,0);", 2396 "INSERT INTO 'metas' VALUES(10,666,666,2," 2397 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," 2398 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" 2399 "LL,X'C2881000',X'C2881000',NULL,?,0);", 2400 "INSERT INTO 'metas' VALUES(11,683,683,8," 2401 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" 2402 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" 2403 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" 2404 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" 2405 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);", 2406 "INSERT INTO 'metas' VALUES(12,685,685,9," 2407 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" 2408 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" 2409 "2881000',X'C2881000',NULL,?,0);", 2410 "INSERT INTO 'metas' VALUES(13,687,687,10," 2411 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" 2412 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " 2413 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" 2414 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" 2415 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" 2416 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);", 2417 "INSERT INTO 'metas' VALUES(14,692,692,11," 2418 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" 2419 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" 2420 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" 2421 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" 2422 "81205504E473259',NULL,?,0);" }; 2423 2424 for (int i = 0; i < V80_ROW_COUNT; i++) { 2425 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); 2426 std::string ord = V81_Ordinal(i); 2427 s.BindBlob(0, ord.data(), ord.length()); 2428 ASSERT_TRUE(s.Run()); 2429 s.Reset(true); 2430 } 2431 ASSERT_TRUE(connection->CommitTransaction()); 2432} 2433 2434void MigrationTest::SetUpVersion86Database(sql::Connection* connection) { 2435 ASSERT_TRUE(connection->is_open()); 2436 ASSERT_TRUE(connection->BeginTransaction()); 2437 ASSERT_TRUE(connection->Execute( 2438 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2439 "INSERT INTO 'share_version' VALUES('nick@chromium.org',86);" 2440 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB," 2441 " transaction_version BIGINT default 0);" 2442 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 2443 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,b" 2444 "ase_version bigint default -1,server_version bigint default 0,local_e" 2445 "xternal_id bigint default 0,transaction_version bigint default 0,mtim" 2446 "e bigint default 0,server_mtime bigint default 0,ctime bigint default" 2447 " 0,server_ctime bigint default 0,id varchar(255) default 'r',parent_i" 2448 "d varchar(255) default 'r',server_parent_id varchar(255) default 'r'," 2449 "is_unsynced bit default 0,is_unapplied_update bit default 0,is_del bi" 2450 "t default 0,is_dir bit default 0,server_is_dir bit default 0,server_i" 2451 "s_del bit default 0,non_unique_name varchar,server_non_unique_name va" 2452 "rchar(255),unique_server_tag varchar,unique_client_tag varchar,unique" 2453 "_bookmark_tag varchar,specifics blob,server_specifics blob,base_serve" 2454 "r_specifics blob,server_unique_position blob,unique_position blob);" 2455 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," 2456 META_PROTO_TIMES_VALS(1) 2457 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL," 2458 "X'',X'',X'',NULL,X'2200',X'2200');" 2459 "INSERT INTO 'metas' VALUES(6,694,694,6,0," 2460 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The" 2461 " Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D653" 2462 "273625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFF" 2463 "FFFC000006754307476346749735A5734654D653273625336557753582F77673D',X'" 2464 "22247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582" 2465 "F77673D');" 2466 "INSERT INTO 'metas' VALUES(7,663,663,0,0," 2467 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome" 2468 "','Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2" 2469 "200');" 2470 "INSERT INTO 'metas' VALUES(8,664,664,0,0," 2471 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Boo" 2472 "kmarks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'" 2473 "C2881000',NULL,X'2200',X'2200');" 2474 "INSERT INTO 'metas' VALUES(9,665,665,1,0," 2475 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Boo" 2476 "kmark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C2881" 2477 "000',NULL,X'2200',X'2200');" 2478 "INSERT INTO 'metas' VALUES(10,666,666,2,0," 2479 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'O" 2480 "ther Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C28810" 2481 "00',X'C2881000',NULL,X'2200',X'2200');" 2482 "INSERT INTO 'metas' VALUES(11,683,683,8,0," 2483 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'H" 2484 "ome (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL" 2485 ",X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C28810" 2486 "220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641474154574" 2487 "1',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74" 2488 "68657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D" 2489 "623579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF00000505" 2490 "14C784A456D623579366267644237646A7A2B62314130346E493D');" 2491 "INSERT INTO 'metas' VALUES(12,685,685,9,0," 2492 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'E" 2493 "xtra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6" 2494 "F616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'222" 2495 "480000000000000007867626A704A646134635A6F616C376A49513338734B46324837" 2496 "773D',X'222480000000000000007867626A704A646134635A6F616C376A495133387" 2497 "34B46324837773D');" 2498 "INSERT INTO 'metas' VALUES(13,687,687,10,0," 2499 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I" 2500 "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | " 2501 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142" 2502 "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156" 2503 "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646'," 2504 "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464" 2505 "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304" 2506 "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650" 2507 "4179672B304A614A514B3452384A413D');" 2508 "INSERT INTO 'metas' VALUES(14,692,692,11,0," 2509 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T" 2510 "he WebKit Open Source Project','The WebKit Open Source Project',NULL," 2511 "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2" 2512 "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101" 2513 "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222" 2514 "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C" 2515 "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315" 2516 "9552F6E644C553D');" 2517 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA" 2518 "IL,base_version bigint default -1,server_version bigint default 0,loc" 2519 "al_external_id bigint default 0,transaction_version bigint default 0," 2520 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def" 2521 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare" 2522 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default " 2523 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de" 2524 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv" 2525 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam" 2526 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un" 2527 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s" 2528 "erver_specifics blob,server_unique_position blob,unique_position blob" 2529 ");" 2530 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birt" 2531 "hday TEXT, db_create_version TEXT, db_create_time INT, next_id INT de" 2532 "fault -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB" 2533 ");" 2534 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.or" 2535 "g','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-13107" 2536 "8,'9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2537 ASSERT_TRUE(connection->CommitTransaction()); 2538} 2539 2540void MigrationTest::SetUpVersion87Database(sql::Connection* connection) { 2541 ASSERT_TRUE(connection->is_open()); 2542 ASSERT_TRUE(connection->BeginTransaction()); 2543 ASSERT_TRUE(connection->Execute( 2544 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2545 "INSERT INTO 'share_version' VALUES('nick@chromium.org',87);" 2546 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr" 2547 "ansaction_version BIGINT default 0);" 2548 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);" 2549 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2550 "_version bigint default -1,server_version bigint default 0,local_exte" 2551 "rnal_id bigint default 0,transaction_version bigint default 0,mtime b" 2552 "igint default 0,server_mtime bigint default 0,ctime bigint default 0," 2553 "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v" 2554 "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_" 2555 "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d" 2556 "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d" 2557 "el bit default 0,non_unique_name varchar,server_non_unique_name varch" 2558 "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo" 2559 "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s" 2560 "pecifics blob,server_unique_position blob,unique_position blob,attach" 2561 "ment_metadata blob);" 2562 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," 2563 META_PROTO_TIMES_VALS(1) 2564 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X''" 2565 ",X'',X'',NULL,X'2200',X'2200',NULL);" 2566 "INSERT INTO 'metas' VALUES(6,694,694,6,0," 2567 META_PROTO_TIMES_VALS(6) 2568 ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The " 2569 "Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D6532" 2570 "73625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFFF" 2571 "FFC000006754307476346749735A5734654D653273625336557753582F77673D',X'2" 2572 "2247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582F" 2573 "77673D',NULL);" 2574 "INSERT INTO 'metas' VALUES(7,663,663,0,0," 2575 META_PROTO_TIMES_VALS(7) 2576 ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome'" 2577 ",'Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'22" 2578 "00',NULL);" 2579 "INSERT INTO 'metas' VALUES(8,664,664,0,0," 2580 META_PROTO_TIMES_VALS(8) 2581 ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Book" 2582 "marks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'C" 2583 "2881000',NULL,X'2200',X'2200',NULL);" 2584 "INSERT INTO 'metas' VALUES(9,665,665,1,0," 2585 META_PROTO_TIMES_VALS(9) 2586 ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Book" 2587 "mark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C28810" 2588 "00',NULL,X'2200',X'2200',NULL);" 2589 "INSERT INTO 'metas' VALUES(10,666,666,2,0," 2590 META_PROTO_TIMES_VALS(10) 2591 ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Ot" 2592 "her Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C288100" 2593 "0',X'C2881000',NULL,X'2200',X'2200',NULL);" 2594 "INSERT INTO 'metas' VALUES(11,683,683,8,0," 2595 META_PROTO_TIMES_VALS(11) 2596 ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Ho" 2597 "me (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL," 2598 "X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C288102" 2599 "20A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741" 2600 "',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F746" 2601 "8657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D6" 2602 "23579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF000005051" 2603 "4C784A456D623579366267644237646A7A2B62314130346E493D',NULL);" 2604 "INSERT INTO 'metas' VALUES(12,685,685,9,0," 2605 META_PROTO_TIMES_VALS(12) 2606 ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Ex" 2607 "tra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6F" 2608 "616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'2224" 2609 "80000000000000007867626A704A646134635A6F616C376A49513338734B463248377" 2610 "73D',X'222480000000000000007867626A704A646134635A6F616C376A4951333873" 2611 "4B46324837773D',NULL);" 2612 "INSERT INTO 'metas' VALUES(13,687,687,10,0," 2613 META_PROTO_TIMES_VALS(13) 2614 ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I" 2615 "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | " 2616 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142" 2617 "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156" 2618 "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646'," 2619 "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464" 2620 "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304" 2621 "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650" 2622 "4179672B304A614A514B3452384A413D',NULL);" 2623 "INSERT INTO 'metas' VALUES(14,692,692,11,0," 2624 META_PROTO_TIMES_VALS(14) 2625 ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T" 2626 "he WebKit Open Source Project','The WebKit Open Source Project',NULL," 2627 "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2" 2628 "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101" 2629 "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222" 2630 "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C" 2631 "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315" 2632 "9552F6E644C553D',NULL);" 2633 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA" 2634 "IL,base_version bigint default -1,server_version bigint default 0,loc" 2635 "al_external_id bigint default 0,transaction_version bigint default 0," 2636 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def" 2637 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare" 2638 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default " 2639 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de" 2640 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv" 2641 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam" 2642 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un" 2643 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s" 2644 "erver_specifics blob,server_unique_position blob,unique_position blob" 2645 ",attachment_metadata blob);" 2646 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2647 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau" 2648 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);" 2649 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2650 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'" 2651 "9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2652 ASSERT_TRUE(connection->CommitTransaction()); 2653} 2654 2655void MigrationTest::SetUpVersion88Database(sql::Connection* connection) { 2656 ASSERT_TRUE(connection->is_open()); 2657 ASSERT_TRUE(connection->BeginTransaction()); 2658 ASSERT_TRUE(connection->Execute( 2659 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2660 "INSERT INTO 'share_version' VALUES('nick@chromium.org',88);" 2661 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB," 2662 " transaction_version BIGINT default 0, context BLOB);" 2663 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);" 2664 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2665 "_version bigint default -1,server_version bigint default 0,local_exte" 2666 "rnal_id bigint default 0,transaction_version bigint default 0,mtime b" 2667 "igint default 0,server_mtime bigint default 0,ctime bigint default 0," 2668 "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v" 2669 "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_" 2670 "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d" 2671 "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d" 2672 "el bit default 0,non_unique_name varchar,server_non_unique_name varch" 2673 "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo" 2674 "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s" 2675 "pecifics blob,server_unique_position blob,unique_position blob,attach" 2676 "ment_metadata blob);" 2677 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," 2678 META_PROTO_TIMES_VALS(1) 2679 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X''" 2680 ",X'',X'',NULL,X'2200',X'2200',NULL);" 2681 "INSERT INTO 'metas' VALUES(6,694,694,6,0," 2682 META_PROTO_TIMES_VALS(6) 2683 ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The " 2684 "Internet','The Internet',NULL,NULL,X'6754307476346749735A5734654D6532" 2685 "73625336557753582F77673D',X'C2881000',X'C2881000',NULL,X'22247FFFFFFF" 2686 "FFC000006754307476346749735A5734654D653273625336557753582F77673D',X'2" 2687 "2247FFFFFFFFFC000006754307476346749735A5734654D653273625336557753582F" 2688 "77673D',NULL);" 2689 "INSERT INTO 'metas' VALUES(7,663,663,0,0," 2690 META_PROTO_TIMES_VALS(7) 2691 ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome'" 2692 ",'Google Chrome','google_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'22" 2693 "00',NULL);" 2694 "INSERT INTO 'metas' VALUES(8,664,664,0,0," 2695 META_PROTO_TIMES_VALS(8) 2696 ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Book" 2697 "marks','Bookmarks','google_chrome_bookmarks',NULL,X'',X'C2881000',X'C" 2698 "2881000',NULL,X'2200',X'2200',NULL);" 2699 "INSERT INTO 'metas' VALUES(9,665,665,1,0," 2700 META_PROTO_TIMES_VALS(9) 2701 ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Book" 2702 "mark Bar','Bookmark Bar','bookmark_bar',NULL,X'',X'C2881000',X'C28810" 2703 "00',NULL,X'2200',X'2200',NULL);" 2704 "INSERT INTO 'metas' VALUES(10,666,666,2,0," 2705 META_PROTO_TIMES_VALS(10) 2706 ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Ot" 2707 "her Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'',X'C288100" 2708 "0',X'C2881000',NULL,X'2200',X'2200',NULL);" 2709 "INSERT INTO 'metas' VALUES(11,683,683,8,0," 2710 META_PROTO_TIMES_VALS(11) 2711 ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Ho" 2712 "me (The Chromium Projects)','Home (The Chromium Projects)',NULL,NULL," 2713 "X'50514C784A456D623579366267644237646A7A2B62314130346E493D',X'C288102" 2714 "20A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741" 2715 "',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F746" 2716 "8657212084146414756415346',NULL,X'22247FFFFFFFFFF0000050514C784A456D6" 2717 "23579366267644237646A7A2B62314130346E493D',X'22247FFFFFFFFFF000005051" 2718 "4C784A456D623579366267644237646A7A2B62314130346E493D',NULL);" 2719 "INSERT INTO 'metas' VALUES(12,685,685,9,0," 2720 META_PROTO_TIMES_VALS(12) 2721 ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Ex" 2722 "tra Bookmarks','Extra Bookmarks',NULL,NULL,X'7867626A704A646134635A6F" 2723 "616C376A49513338734B46324837773D',X'C2881000',X'C2881000',NULL,X'2224" 2724 "80000000000000007867626A704A646134635A6F616C376A49513338734B463248377" 2725 "73D',X'222480000000000000007867626A704A646134635A6F616C376A4951333873" 2726 "4B46324837773D',NULL);" 2727 "INSERT INTO 'metas' VALUES(13,687,687,10,0," 2728 META_PROTO_TIMES_VALS(13) 2729 ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'I" 2730 "CANN | Internet Corporation for Assigned Names and Numbers','ICANN | " 2731 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'3142" 2732 "756B572F7741766956504179672B304A614A514B3452384A413D',X'C28810240A156" 2733 "87474703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646'," 2734 "X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1207444141464" 2735 "15346',NULL,X'22247FFFFFFFFFF200003142756B572F7741766956504179672B304" 2736 "A614A514B3452384A413D',X'22247FFFFFFFFFF200003142756B572F774176695650" 2737 "4179672B304A614A514B3452384A413D',NULL);" 2738 "INSERT INTO 'metas' VALUES(14,692,692,11,0," 2739 META_PROTO_TIMES_VALS(14) 2740 ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'T" 2741 "he WebKit Open Source Project','The WebKit Open Source Project',NULL," 2742 "NULL,X'5A5678314E7976364579524D3177494F7236563159552F6E644C553D',X'C2" 2743 "88101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101" 2744 "C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259',NULL,X'222" 2745 "480000000001000005A5678314E7976364579524D3177494F7236563159552F6E644C" 2746 "553D',X'222480000000001000005A5678314E7976364579524D3177494F723656315" 2747 "9552F6E644C553D',NULL);" 2748 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA" 2749 "IL,base_version bigint default -1,server_version bigint default 0,loc" 2750 "al_external_id bigint default 0,transaction_version bigint default 0," 2751 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def" 2752 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare" 2753 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default " 2754 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de" 2755 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv" 2756 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam" 2757 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un" 2758 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s" 2759 "erver_specifics blob,server_unique_position blob,unique_position blob" 2760 ",attachment_metadata blob);" 2761 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2762 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau" 2763 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);" 2764 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2765 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'" 2766 "9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2767 ASSERT_TRUE(connection->CommitTransaction()); 2768} 2769 2770 2771void MigrationTest::SetUpVersion89Database(sql::Connection* connection) { 2772 ASSERT_TRUE(connection->is_open()); 2773 ASSERT_TRUE(connection->BeginTransaction()); 2774 ASSERT_TRUE(connection->Execute( 2775 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" 2776 "INSERT INTO 'share_version' VALUES('nick@chromium.org',89);" 2777 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr" 2778 "ansaction_version BIGINT default 0, context BLOB);" 2779 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);" 2780 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" 2781 "_version bigint default -1,server_version bigint default 0,local_exte" 2782 "rnal_id bigint default 0,transaction_version bigint default 0,mtime b" 2783 "igint default 0,server_mtime bigint default 0,ctime bigint default 0," 2784 "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v" 2785 "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_" 2786 "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d" 2787 "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d" 2788 "el bit default 0,non_unique_name varchar,server_non_unique_name varch" 2789 "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo" 2790 "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s" 2791 "pecifics blob,server_unique_position blob,unique_position blob,attach" 2792 "ment_metadata blob,server_attachment_metadata blob);" 2793 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," 2794 META_PROTO_TIMES_VALS(1) 2795 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',X'',NULL,X'2200'" 2796 ",X'2200',NULL,NULL);" 2797 "INSERT INTO 'metas' VALUES(6,694,694,6,0," 2798 META_PROTO_TIMES_VALS(6) 2799 ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The Internet','The Internet'" 2800 ",NULL,NULL,X'6754307476346749735A5734654D653273625336557753582F77673D" 2801 "',X'C2881000',X'C2881000',NULL,X'22247FFFFFFFFFC000006754307476346749" 2802 "735A5734654D653273625336557753582F77673D',X'22247FFFFFFFFFC0000067543" 2803 "07476346749735A5734654D653273625336557753582F77673D',NULL,NULL);" 2804 "INSERT INTO 'metas' VALUES(7,663,663,0,0," 2805 META_PROTO_TIMES_VALS(7) 2806 ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google" 2807 "_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2200',NULL,NULL);" 2808 "INSERT INTO 'metas' VALUES(8,664,664,0,0," 2809 META_PROTO_TIMES_VALS(8) 2810 ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Bookmarks','Bookmarks','goog" 2811 "le_chrome_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'" 2812 "2200',NULL,NULL);" 2813 "INSERT INTO 'metas' VALUES(9,665,665,1,0," 2814 META_PROTO_TIMES_VALS(9) 2815 ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'" 2816 ",'bookmark_bar',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'2200'" 2817 ",NULL,NULL);" 2818 "INSERT INTO 'metas' VALUES(10,666,666,2,0," 2819 META_PROTO_TIMES_VALS(10) 2820 ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Other Bookmarks','Other Boo" 2821 "kmarks','other_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'220" 2822 "0',X'2200',NULL,NULL);" 2823 "INSERT INTO 'metas' VALUES(11,683,683,8,0," 2824 META_PROTO_TIMES_VALS(11) 2825 ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Home (The Chromium Projects" 2826 ")','Home (The Chromium Projects)',NULL,NULL,X'50514C784A456D623579366" 2827 "267644237646A7A2B62314130346E493D',X'C28810220A18687474703A2F2F646576" 2828 "2E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1D687474703" 2829 "A2F2F6465762E6368726F6D69756D2E6F72672F6F7468657212084146414756415346" 2830 "',NULL,X'22247FFFFFFFFFF0000050514C784A456D623579366267644237646A7A2B" 2831 "62314130346E493D',X'22247FFFFFFFFFF0000050514C784A456D623579366267644" 2832 "237646A7A2B62314130346E493D',NULL,NULL);" 2833 "INSERT INTO 'metas' VALUES(12,685,685,9,0," 2834 META_PROTO_TIMES_VALS(12) 2835 ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Extra Bookmarks','Extra Boo" 2836 "kmarks',NULL,NULL,X'7867626A704A646134635A6F616C376A49513338734B46324" 2837 "837773D',X'C2881000',X'C2881000',NULL,X'222480000000000000007867626A7" 2838 "04A646134635A6F616C376A49513338734B46324837773D',X'222480000000000000" 2839 "007867626A704A646134635A6F616C376A49513338734B46324837773D',NULL,NULL" 2840 ");" 2841 "INSERT INTO 'metas' VALUES(13,687,687,10,0," 2842 META_PROTO_TIMES_VALS(13) 2843 ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'ICANN | Internet Corporatio" 2844 "n for Assigned Names and Numbers','ICANN | Internet Corporation for A" 2845 "ssigned Names and Numbers',NULL,NULL,X'3142756B572F774176695650417967" 2846 "2B304A614A514B3452384A413D',X'C28810240A15687474703A2F2F7777772E69636" 2847 "16E6E2E636F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F" 2848 "2F7777772E6963616E6E2E636F6D2F120744414146415346',NULL,X'22247FFFFFFF" 2849 "FFF200003142756B572F7741766956504179672B304A614A514B3452384A413D',X'2" 2850 "2247FFFFFFFFFF200003142756B572F7741766956504179672B304A614A514B345238" 2851 "4A413D',NULL,NULL);" 2852 "INSERT INTO 'metas' VALUES(14,692,692,11,0," 2853 META_PROTO_TIMES_VALS(14) 2854 ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'The WebKit Open Source Proj" 2855 "ect','The WebKit Open Source Project',NULL,NULL,X'5A5678314E797636457" 2856 "9524D3177494F7236563159552F6E644C553D',X'C288101A0A12687474703A2F2F77" 2857 "65626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2F2F7765626" 2858 "B69742E6F72672F781205504E473259',NULL,X'222480000000001000005A5678314" 2859 "E7976364579524D3177494F7236563159552F6E644C553D',X'222480000000001000" 2860 "005A5678314E7976364579524D3177494F7236563159552F6E644C553D',NULL,NULL" 2861 ");" 2862 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA" 2863 "IL,base_version bigint default -1,server_version bigint default 0,loc" 2864 "al_external_id bigint default 0,transaction_version bigint default 0," 2865 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def" 2866 "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare" 2867 "nt_id varchar(255) default 'r',server_parent_id varchar(255) default " 2868 "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de" 2869 "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv" 2870 "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam" 2871 "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un" 2872 "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s" 2873 "erver_specifics blob,server_unique_position blob,unique_position blob" 2874 ",attachment_metadata blob,server_attachment_metadata blob);" 2875 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" 2876 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau" 2877 "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);" 2878 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," 2879 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'" 2880 "9010788312004066376x-6609234393368420856x',NULL,NULL);")); 2881 ASSERT_TRUE(connection->CommitTransaction()); 2882} 2883 2884 2885TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) { 2886 sql::Connection connection; 2887 ASSERT_TRUE(connection.OpenInMemory()); 2888 2889 SetUpVersion67Database(&connection); 2890 2891 // Columns existing before version 67. 2892 ASSERT_TRUE(connection.DoesColumnExist("metas", "name")); 2893 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name")); 2894 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name")); 2895 2896 scoped_ptr<TestDirectoryBackingStore> dbs( 2897 new TestDirectoryBackingStore(GetUsername(), &connection)); 2898 2899 ASSERT_FALSE(dbs->needs_column_refresh_); 2900 ASSERT_TRUE(dbs->MigrateVersion67To68()); 2901 ASSERT_EQ(68, dbs->GetVersion()); 2902 ASSERT_TRUE(dbs->needs_column_refresh_); 2903} 2904 2905TEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) { 2906 sql::Connection connection; 2907 ASSERT_TRUE(connection.OpenInMemory()); 2908 SetUpVersion68Database(&connection); 2909 2910 { 2911 scoped_ptr<TestDirectoryBackingStore> dbs( 2912 new TestDirectoryBackingStore(GetUsername(), &connection)); 2913 2914 ASSERT_FALSE(dbs->needs_column_refresh_); 2915 ASSERT_TRUE(dbs->MigrateVersion68To69()); 2916 ASSERT_EQ(69, dbs->GetVersion()); 2917 ASSERT_TRUE(dbs->needs_column_refresh_); 2918 } 2919 2920 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics")); 2921 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics")); 2922 sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name," 2923 "is_del, is_dir, id, specifics, server_specifics FROM metas " 2924 "WHERE metahandle = 2")); 2925 ASSERT_TRUE(s.Step()); 2926 ASSERT_EQ("Deleted Item", s.ColumnString(0)); 2927 ASSERT_TRUE(s.ColumnBool(1)); 2928 ASSERT_FALSE(s.ColumnBool(2)); 2929 ASSERT_EQ("s_ID_2", s.ColumnString(3)); 2930 sync_pb::EntitySpecifics specifics; 2931 specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4)); 2932 ASSERT_TRUE(specifics.has_bookmark()); 2933 ASSERT_EQ("http://www.google.com/", specifics.bookmark().url()); 2934 ASSERT_EQ("AASGASGA", specifics.bookmark().favicon()); 2935 specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5)); 2936 ASSERT_TRUE(specifics.has_bookmark()); 2937 ASSERT_EQ("http://www.google.com/2", specifics.bookmark().url()); 2938 ASSERT_EQ("ASADGADGADG", specifics.bookmark().favicon()); 2939 ASSERT_FALSE(s.Step()); 2940} 2941 2942TEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) { 2943 sql::Connection connection; 2944 ASSERT_TRUE(connection.OpenInMemory()); 2945 SetUpVersion69Database(&connection); 2946 2947 ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag")); 2948 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag")); 2949 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag")); 2950 2951 { 2952 scoped_ptr<TestDirectoryBackingStore> dbs( 2953 new TestDirectoryBackingStore(GetUsername(), &connection)); 2954 2955 ASSERT_FALSE(dbs->needs_column_refresh_); 2956 ASSERT_TRUE(dbs->MigrateVersion69To70()); 2957 ASSERT_EQ(70, dbs->GetVersion()); 2958 ASSERT_TRUE(dbs->needs_column_refresh_); 2959 } 2960 2961 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag")); 2962 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag")); 2963 sql::Statement s(connection.GetUniqueStatement("SELECT id" 2964 " FROM metas WHERE unique_server_tag = 'google_chrome'")); 2965 ASSERT_TRUE(s.Step()); 2966 EXPECT_EQ("s_ID_7", s.ColumnString(0)); 2967} 2968 2969TEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) { 2970 sql::Connection connection; 2971 ASSERT_TRUE(connection.OpenInMemory()); 2972 SetUpVersion70Database(&connection); 2973 2974 ASSERT_TRUE(connection.DoesColumnExist("share_info", "last_sync_timestamp")); 2975 ASSERT_TRUE(connection.DoesColumnExist("share_info", "initial_sync_ended")); 2976 ASSERT_FALSE(connection.DoesTableExist("models")); 2977 2978 { 2979 scoped_ptr<TestDirectoryBackingStore> dbs( 2980 new TestDirectoryBackingStore(GetUsername(), &connection)); 2981 2982 ASSERT_FALSE(dbs->needs_column_refresh_); 2983 ASSERT_TRUE(dbs->MigrateVersion70To71()); 2984 ASSERT_EQ(71, dbs->GetVersion()); 2985 ASSERT_FALSE(dbs->needs_column_refresh_); 2986 } 2987 2988 ASSERT_FALSE(connection.DoesColumnExist("share_info", "last_sync_timestamp")); 2989 ASSERT_FALSE(connection.DoesColumnExist("share_info", "initial_sync_ended")); 2990 ASSERT_TRUE(connection.DoesTableExist("models")); 2991 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended")); 2992 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp")); 2993 ASSERT_TRUE(connection.DoesColumnExist("models", "model_id")); 2994 2995 sql::Statement s(connection.GetUniqueStatement("SELECT model_id, " 2996 "initial_sync_ended, last_download_timestamp FROM models")); 2997 ASSERT_TRUE(s.Step()); 2998 std::string model_id = s.ColumnString(0); 2999 EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size())) 3000 << "Model ID is expected to be the empty BookmarkSpecifics proto."; 3001 EXPECT_TRUE(s.ColumnBool(1)); 3002 EXPECT_EQ(694, s.ColumnInt64(2)); 3003 ASSERT_FALSE(s.Step()); 3004} 3005 3006 3007TEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) { 3008 sql::Connection connection; 3009 ASSERT_TRUE(connection.OpenInMemory()); 3010 SetUpVersion71Database(&connection); 3011 3012 ASSERT_TRUE(connection.DoesTableExist("extended_attributes")); 3013 3014 { 3015 scoped_ptr<TestDirectoryBackingStore> dbs( 3016 new TestDirectoryBackingStore(GetUsername(), &connection)); 3017 3018 ASSERT_FALSE(dbs->needs_column_refresh_); 3019 ASSERT_TRUE(dbs->MigrateVersion71To72()); 3020 ASSERT_EQ(72, dbs->GetVersion()); 3021 ASSERT_FALSE(dbs->needs_column_refresh_); 3022 } 3023 3024 ASSERT_FALSE(connection.DoesTableExist("extended_attributes")); 3025} 3026 3027TEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) { 3028 sql::Connection connection; 3029 ASSERT_TRUE(connection.OpenInMemory()); 3030 SetUpVersion72Database(&connection); 3031 3032 ASSERT_FALSE(connection.DoesColumnExist("share_info", "notification_state")); 3033 3034 { 3035 scoped_ptr<TestDirectoryBackingStore> dbs( 3036 new TestDirectoryBackingStore(GetUsername(), &connection)); 3037 3038 ASSERT_FALSE(dbs->needs_column_refresh_); 3039 ASSERT_TRUE(dbs->MigrateVersion72To73()); 3040 ASSERT_EQ(73, dbs->GetVersion()); 3041 ASSERT_FALSE(dbs->needs_column_refresh_); 3042 } 3043 3044 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state")); 3045} 3046 3047TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) { 3048 sql::Connection connection; 3049 ASSERT_TRUE(connection.OpenInMemory()); 3050 SetUpVersion73Database(&connection); 3051 3052 ASSERT_FALSE( 3053 connection.DoesColumnExist("share_info", "autofill_migration_state")); 3054 ASSERT_FALSE( 3055 connection.DoesColumnExist("share_info", 3056 "bookmarks_added_during_autofill_migration")); 3057 ASSERT_FALSE( 3058 connection.DoesColumnExist("share_info", "autofill_migration_time")); 3059 ASSERT_FALSE( 3060 connection.DoesColumnExist("share_info", 3061 "autofill_entries_added_during_migration")); 3062 3063 ASSERT_FALSE( 3064 connection.DoesColumnExist("share_info", 3065 "autofill_profiles_added_during_migration")); 3066 3067 { 3068 scoped_ptr<TestDirectoryBackingStore> dbs( 3069 new TestDirectoryBackingStore(GetUsername(), &connection)); 3070 3071 ASSERT_FALSE(dbs->needs_column_refresh_); 3072 ASSERT_TRUE(dbs->MigrateVersion73To74()); 3073 ASSERT_EQ(74, dbs->GetVersion()); 3074 ASSERT_FALSE(dbs->needs_column_refresh_); 3075 } 3076 3077 ASSERT_TRUE( 3078 connection.DoesColumnExist("share_info", "autofill_migration_state")); 3079 ASSERT_TRUE( 3080 connection.DoesColumnExist("share_info", 3081 "bookmarks_added_during_autofill_migration")); 3082 ASSERT_TRUE( 3083 connection.DoesColumnExist("share_info", "autofill_migration_time")); 3084 ASSERT_TRUE( 3085 connection.DoesColumnExist("share_info", 3086 "autofill_entries_added_during_migration")); 3087 3088 ASSERT_TRUE( 3089 connection.DoesColumnExist("share_info", 3090 "autofill_profiles_added_during_migration")); 3091} 3092 3093TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) { 3094 sql::Connection connection; 3095 ASSERT_TRUE(connection.OpenInMemory()); 3096 SetUpVersion74Database(&connection); 3097 3098 ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker")); 3099 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp")); 3100 3101 { 3102 scoped_ptr<TestDirectoryBackingStore> dbs( 3103 new TestDirectoryBackingStore(GetUsername(), &connection)); 3104 3105 ASSERT_FALSE(dbs->needs_column_refresh_); 3106 ASSERT_TRUE(dbs->MigrateVersion74To75()); 3107 ASSERT_EQ(75, dbs->GetVersion()); 3108 ASSERT_FALSE(dbs->needs_column_refresh_); 3109 } 3110 3111 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker")); 3112 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp")); 3113} 3114 3115TEST_F(DirectoryBackingStoreTest, MigrateVersion75To76) { 3116 sql::Connection connection; 3117 ASSERT_TRUE(connection.OpenInMemory()); 3118 SetUpVersion75Database(&connection); 3119 3120 ASSERT_TRUE( 3121 connection.DoesColumnExist("share_info", "autofill_migration_state")); 3122 ASSERT_TRUE(connection.DoesColumnExist("share_info", 3123 "bookmarks_added_during_autofill_migration")); 3124 ASSERT_TRUE( 3125 connection.DoesColumnExist("share_info", "autofill_migration_time")); 3126 ASSERT_TRUE(connection.DoesColumnExist("share_info", 3127 "autofill_entries_added_during_migration")); 3128 ASSERT_TRUE(connection.DoesColumnExist("share_info", 3129 "autofill_profiles_added_during_migration")); 3130 3131 scoped_ptr<TestDirectoryBackingStore> dbs( 3132 new TestDirectoryBackingStore(GetUsername(), &connection)); 3133 ASSERT_FALSE(dbs->needs_column_refresh_); 3134 ASSERT_TRUE(dbs->MigrateVersion75To76()); 3135 ASSERT_EQ(76, dbs->GetVersion()); 3136 ASSERT_TRUE(dbs->needs_column_refresh_); 3137 // Cannot actual refresh columns due to version 76 not containing all 3138 // necessary columns. 3139} 3140 3141TEST_F(DirectoryBackingStoreTest, MigrateVersion76To77) { 3142 sql::Connection connection; 3143 ASSERT_TRUE(connection.OpenInMemory()); 3144 SetUpVersion76Database(&connection); 3145 3146 scoped_ptr<TestDirectoryBackingStore> dbs( 3147 new TestDirectoryBackingStore(GetUsername(), &connection)); 3148 ASSERT_FALSE(dbs->needs_column_refresh_); 3149 3150 EXPECT_EQ(GetExpectedLegacyMetaProtoTimes(INCLUDE_DELETED_ITEMS), 3151 GetMetaProtoTimes(dbs->db_.get())); 3152 // Since the proto times are expected to be in a legacy format, they may not 3153 // be compatible with ProtoTimeToTime, so we don't call ExpectTimes(). 3154 3155 ASSERT_TRUE(dbs->MigrateVersion76To77()); 3156 ASSERT_EQ(77, dbs->GetVersion()); 3157 3158 EXPECT_EQ(GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS), 3159 GetMetaProtoTimes(dbs->db_.get())); 3160 // Cannot actually load entries due to version 77 not having all required 3161 // columns. 3162 ASSERT_FALSE(dbs->needs_column_refresh_); 3163} 3164 3165TEST_F(DirectoryBackingStoreTest, MigrateVersion77To78) { 3166 sql::Connection connection; 3167 ASSERT_TRUE(connection.OpenInMemory()); 3168 SetUpVersion77Database(&connection); 3169 3170 ASSERT_FALSE(connection.DoesColumnExist("metas", "BASE_SERVER_SPECIFICS")); 3171 3172 { 3173 scoped_ptr<TestDirectoryBackingStore> dbs( 3174 new TestDirectoryBackingStore(GetUsername(), &connection)); 3175 ASSERT_FALSE(dbs->needs_column_refresh_); 3176 ASSERT_TRUE(dbs->MigrateVersion77To78()); 3177 ASSERT_EQ(78, dbs->GetVersion()); 3178 3179 ASSERT_FALSE(dbs->needs_column_refresh_); 3180 } 3181 3182 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics")); 3183} 3184 3185TEST_F(DirectoryBackingStoreTest, MigrateVersion78To79) { 3186 const int kInitialNextId = -65542; 3187 3188 sql::Connection connection; 3189 ASSERT_TRUE(connection.OpenInMemory()); 3190 SetUpVersion78Database(&connection); 3191 3192 // Double-check the original next_id is what we think it is. 3193 sql::Statement s(connection.GetUniqueStatement( 3194 "SELECT next_id FROM share_info")); 3195 s.Step(); 3196 ASSERT_EQ(kInitialNextId, s.ColumnInt(0)); 3197 3198 scoped_ptr<TestDirectoryBackingStore> dbs( 3199 new TestDirectoryBackingStore(GetUsername(), &connection)); 3200 ASSERT_FALSE(dbs->needs_column_refresh_); 3201 ASSERT_TRUE(dbs->MigrateVersion78To79()); 3202 ASSERT_EQ(79, dbs->GetVersion()); 3203 ASSERT_FALSE(dbs->needs_column_refresh_); 3204 3205 // Ensure the next_id has been incremented. 3206 Directory::MetahandlesMap handles_map; 3207 JournalIndex delete_journals;; 3208 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map); 3209 Directory::KernelLoadInfo load_info; 3210 3211 s.Clear(); 3212 ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info)); 3213 EXPECT_LE(load_info.kernel_info.next_id, kInitialNextId - 65536); 3214} 3215 3216TEST_F(DirectoryBackingStoreTest, MigrateVersion79To80) { 3217 sql::Connection connection; 3218 ASSERT_TRUE(connection.OpenInMemory()); 3219 SetUpVersion79Database(&connection); 3220 3221 scoped_ptr<TestDirectoryBackingStore> dbs( 3222 new TestDirectoryBackingStore(GetUsername(), &connection)); 3223 ASSERT_FALSE(dbs->needs_column_refresh_); 3224 ASSERT_TRUE(dbs->MigrateVersion79To80()); 3225 ASSERT_EQ(80, dbs->GetVersion()); 3226 ASSERT_FALSE(dbs->needs_column_refresh_); 3227 3228 // Ensure the bag_of_chips has been set. 3229 Directory::MetahandlesMap handles_map; 3230 JournalIndex delete_journals;; 3231 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map); 3232 Directory::KernelLoadInfo load_info; 3233 3234 ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info)); 3235 // Check that the initial value is the serialization of an empty ChipBag. 3236 sync_pb::ChipBag chip_bag; 3237 std::string serialized_chip_bag; 3238 ASSERT_TRUE(chip_bag.SerializeToString(&serialized_chip_bag)); 3239 EXPECT_EQ(serialized_chip_bag, load_info.kernel_info.bag_of_chips); 3240} 3241 3242TEST_F(DirectoryBackingStoreTest, MigrateVersion80To81) { 3243 sql::Connection connection; 3244 ASSERT_TRUE(connection.OpenInMemory()); 3245 SetUpVersion80Database(&connection); 3246 3247 sql::Statement s(connection.GetUniqueStatement( 3248 "SELECT metahandle, server_position_in_parent " 3249 "FROM metas WHERE unique_server_tag = 'google_chrome'")); 3250 ASSERT_TRUE(s.Step()); 3251 ASSERT_EQ(sql::COLUMN_TYPE_INTEGER, s.ColumnType(1)); 3252 3253 scoped_ptr<TestDirectoryBackingStore> dbs( 3254 new TestDirectoryBackingStore(GetUsername(), &connection)); 3255 ASSERT_TRUE(dbs->MigrateVersion80To81()); 3256 ASSERT_EQ(81, dbs->GetVersion()); 3257 3258 // Test that ordinal values are preserved correctly. 3259 sql::Statement new_s(connection.GetUniqueStatement( 3260 "SELECT metahandle, server_ordinal_in_parent " 3261 "FROM metas WHERE unique_server_tag = 'google_chrome'")); 3262 ASSERT_TRUE(new_s.Step()); 3263 ASSERT_EQ(sql::COLUMN_TYPE_BLOB, new_s.ColumnType(1)); 3264 3265 std::string expected_ordinal = Int64ToNodeOrdinal(1048576).ToInternalValue(); 3266 std::string actual_ordinal; 3267 new_s.ColumnBlobAsString(1, &actual_ordinal); 3268 ASSERT_EQ(expected_ordinal, actual_ordinal); 3269} 3270 3271TEST_F(DirectoryBackingStoreTest, MigrateVersion81To82) { 3272 sql::Connection connection; 3273 ASSERT_TRUE(connection.OpenInMemory()); 3274 SetUpVersion81Database(&connection); 3275 ASSERT_FALSE(connection.DoesColumnExist("models", "transaction_version")); 3276 3277 scoped_ptr<TestDirectoryBackingStore> dbs( 3278 new TestDirectoryBackingStore(GetUsername(), &connection)); 3279 ASSERT_FALSE(dbs->needs_column_refresh_); 3280 ASSERT_TRUE(dbs->MigrateVersion81To82()); 3281 ASSERT_EQ(82, dbs->GetVersion()); 3282 ASSERT_FALSE(dbs->needs_column_refresh_); 3283 3284 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version")); 3285} 3286 3287TEST_F(DirectoryBackingStoreTest, MigrateVersion82To83) { 3288 sql::Connection connection; 3289 ASSERT_TRUE(connection.OpenInMemory()); 3290 SetUpVersion82Database(&connection); 3291 ASSERT_FALSE(connection.DoesColumnExist("metas", "transaction_version")); 3292 3293 scoped_ptr<TestDirectoryBackingStore> dbs( 3294 new TestDirectoryBackingStore(GetUsername(), &connection)); 3295 ASSERT_TRUE(dbs->MigrateVersion82To83()); 3296 ASSERT_EQ(83, dbs->GetVersion()); 3297 3298 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version")); 3299} 3300 3301TEST_F(DirectoryBackingStoreTest, MigrateVersion83To84) { 3302 sql::Connection connection; 3303 ASSERT_TRUE(connection.OpenInMemory()); 3304 SetUpVersion83Database(&connection); 3305 ASSERT_FALSE(connection.DoesTableExist("deleted_metas")); 3306 3307 scoped_ptr<TestDirectoryBackingStore> dbs( 3308 new TestDirectoryBackingStore(GetUsername(), &connection)); 3309 ASSERT_TRUE(dbs->MigrateVersion83To84()); 3310 ASSERT_EQ(84, dbs->GetVersion()); 3311 3312 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); 3313} 3314 3315TEST_F(DirectoryBackingStoreTest, MigrateVersion84To85) { 3316 sql::Connection connection; 3317 ASSERT_TRUE(connection.OpenInMemory()); 3318 SetUpVersion84Database(&connection); 3319 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended")); 3320 3321 scoped_ptr<TestDirectoryBackingStore> dbs( 3322 new TestDirectoryBackingStore(GetUsername(), &connection)); 3323 ASSERT_TRUE(dbs->MigrateVersion84To85()); 3324 ASSERT_EQ(85, dbs->GetVersion()); 3325 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended")); 3326} 3327 3328TEST_F(DirectoryBackingStoreTest, MigrateVersion85To86) { 3329 sql::Connection connection; 3330 ASSERT_TRUE(connection.OpenInMemory()); 3331 SetUpVersion85Database(&connection); 3332 EXPECT_TRUE(connection.DoesColumnExist("metas", "next_id")); 3333 EXPECT_TRUE(connection.DoesColumnExist("metas", "prev_id")); 3334 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_ordinal_in_parent")); 3335 EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_position")); 3336 EXPECT_FALSE(connection.DoesColumnExist("metas", "server_unique_position")); 3337 EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_bookmark_tag")); 3338 3339 scoped_ptr<TestDirectoryBackingStore> dbs( 3340 new TestDirectoryBackingStore(GetUsername(), &connection)); 3341 ASSERT_TRUE(dbs->MigrateVersion85To86()); 3342 EXPECT_EQ(86, dbs->GetVersion()); 3343 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_position")); 3344 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_unique_position")); 3345 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_bookmark_tag")); 3346 ASSERT_TRUE(dbs->needs_column_refresh_); 3347} 3348 3349TEST_F(DirectoryBackingStoreTest, MigrateVersion86To87) { 3350 sql::Connection connection; 3351 EXPECT_TRUE(connection.OpenInMemory()); 3352 SetUpVersion86Database(&connection); 3353 EXPECT_FALSE(connection.DoesColumnExist("metas", "attachment_metadata")); 3354 3355 scoped_ptr<TestDirectoryBackingStore> dbs( 3356 new TestDirectoryBackingStore(GetUsername(), &connection)); 3357 EXPECT_TRUE(dbs->MigrateVersion86To87()); 3358 EXPECT_EQ(87, dbs->GetVersion()); 3359 EXPECT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata")); 3360 EXPECT_TRUE(dbs->needs_column_refresh_); 3361} 3362 3363TEST_F(DirectoryBackingStoreTest, MigrateVersion87To88) { 3364 sql::Connection connection; 3365 ASSERT_TRUE(connection.OpenInMemory()); 3366 SetUpVersion87Database(&connection); 3367 3368 scoped_ptr<TestDirectoryBackingStore> dbs( 3369 new TestDirectoryBackingStore(GetUsername(), &connection)); 3370 ASSERT_TRUE(dbs->MigrateVersion87To88()); 3371 ASSERT_EQ(88, dbs->GetVersion()); 3372 ASSERT_TRUE(connection.DoesColumnExist("models", "context")); 3373} 3374 3375TEST_F(DirectoryBackingStoreTest, MigrateVersion88To89) { 3376 sql::Connection connection; 3377 ASSERT_TRUE(connection.OpenInMemory()); 3378 SetUpVersion88Database(&connection); 3379 ASSERT_FALSE( 3380 connection.DoesColumnExist("metas", "server_attachment_metadata")); 3381 3382 scoped_ptr<TestDirectoryBackingStore> dbs( 3383 new TestDirectoryBackingStore(GetUsername(), &connection)); 3384 ASSERT_TRUE(dbs->MigrateVersion88To89()); 3385 ASSERT_EQ(89, dbs->GetVersion()); 3386 EXPECT_TRUE( 3387 connection.DoesColumnExist("metas", "server_attachment_metadata")); 3388 EXPECT_TRUE(dbs->needs_column_refresh_); 3389} 3390 3391// The purpose of this test case is to make it easier to get a dump of the 3392// database so you can implement a SetUpVersionYDatabase method. Here's what 3393// you should do: 3394// 3395// 1. Say you're going from version X to version Y. Write the migration 3396// method MigrateVersionXToY. 3397// 2. Update the test below to call SetUpVersionXDatabase and then 3398// MigrateVersionXToY. You now have a database at version Y. Let's dump it. 3399// 3. Set a breakpoint to stop execution just after the connection is 3400// destroyed. Examine temp_dir_ to find the version Y database that was 3401// created on disk. E.g. (gdb) p temp_dir_.path().value().c_str() 3402// 4. Dump the database using the sqlite3 command line tool: 3403// > .output foo_dump.sql 3404// > .dump 3405// 5. Replace the timestamp columns with META_PROTO_TIMES(x) (or 3406// LEGACY_META_PROTO_TIMES(x) if before Version 77). Use this dump to write 3407// a SetupVersionYDatabase method. 3408TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) { 3409 { 3410 sql::Connection connection; 3411 ASSERT_TRUE(connection.Open(GetDatabasePath())); 3412 SetUpVersion88Database(&connection); // Update this. 3413 3414 scoped_ptr<TestDirectoryBackingStore> dbs( 3415 new TestDirectoryBackingStore(GetUsername(), &connection)); 3416 ASSERT_TRUE(dbs->MigrateVersion88To89()); // Update this. 3417 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 3418 EXPECT_EQ(89, dbs->GetVersion()); // Update this. 3419 ASSERT_FALSE(dbs->needs_column_refresh_); 3420 } 3421 // Set breakpoint here. 3422} 3423 3424TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) { 3425 sql::Connection connection; 3426 ASSERT_TRUE(connection.OpenInMemory()); 3427 SetUpVersion86Database(&connection); 3428 3429 scoped_ptr<TestDirectoryBackingStore> dbs( 3430 new TestDirectoryBackingStore(GetUsername(), &connection)); 3431 ASSERT_EQ(86, dbs->GetVersion()); 3432 3433 // Insert row with bad position. 3434 sql::Statement s(connection.GetUniqueStatement( 3435 "INSERT INTO metas " 3436 "( id, metahandle, is_dir, ctime, mtime," 3437 " unique_position, server_unique_position) " 3438 "VALUES('c-invalid', 9999, 1, 0, 0, 'BAD_POS', 'BAD_POS')")); 3439 ASSERT_TRUE(s.Run()); 3440 3441 // Trying to unpack this entry should signal that the DB is corrupted. 3442 Directory::MetahandlesMap handles_map; 3443 JournalIndex delete_journals;; 3444 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map); 3445 Directory::KernelLoadInfo kernel_load_info; 3446 ASSERT_EQ(FAILED_DATABASE_CORRUPT, 3447 dbs->Load(&handles_map, &delete_journals, &kernel_load_info)); 3448} 3449 3450TEST_P(MigrationTest, ToCurrentVersion) { 3451 sql::Connection connection; 3452 ASSERT_TRUE(connection.OpenInMemory()); 3453 switch (GetParam()) { 3454 case 67: 3455 SetUpVersion67Database(&connection); 3456 break; 3457 case 68: 3458 SetUpVersion68Database(&connection); 3459 break; 3460 case 69: 3461 SetUpVersion69Database(&connection); 3462 break; 3463 case 70: 3464 SetUpVersion70Database(&connection); 3465 break; 3466 case 71: 3467 SetUpVersion71Database(&connection); 3468 break; 3469 case 72: 3470 SetUpVersion72Database(&connection); 3471 break; 3472 case 73: 3473 SetUpVersion73Database(&connection); 3474 break; 3475 case 74: 3476 SetUpVersion74Database(&connection); 3477 break; 3478 case 75: 3479 SetUpVersion75Database(&connection); 3480 break; 3481 case 76: 3482 SetUpVersion76Database(&connection); 3483 break; 3484 case 77: 3485 SetUpVersion77Database(&connection); 3486 break; 3487 case 78: 3488 SetUpVersion78Database(&connection); 3489 break; 3490 case 79: 3491 SetUpVersion79Database(&connection); 3492 break; 3493 case 80: 3494 SetUpVersion80Database(&connection); 3495 break; 3496 case 81: 3497 SetUpVersion81Database(&connection); 3498 break; 3499 case 82: 3500 SetUpVersion82Database(&connection); 3501 break; 3502 case 83: 3503 SetUpVersion83Database(&connection); 3504 break; 3505 case 84: 3506 SetUpVersion84Database(&connection); 3507 break; 3508 case 85: 3509 SetUpVersion85Database(&connection); 3510 break; 3511 case 86: 3512 SetUpVersion86Database(&connection); 3513 break; 3514 case 87: 3515 SetUpVersion87Database(&connection); 3516 break; 3517 case 88: 3518 SetUpVersion88Database(&connection); 3519 break; 3520 case 89: 3521 SetUpVersion89Database(&connection); 3522 break; 3523 default: 3524 // If you see this error, it may mean that you've increased the 3525 // database version number but you haven't finished adding unit tests 3526 // for the database migration code. You need to need to supply a 3527 // SetUpVersionYDatabase function with a dump of the test database 3528 // at the new schema. See the MigrateToLatestAndDump test case. 3529 FAIL() << "Need to supply database dump for version " << GetParam(); 3530 } 3531 3532 syncable::Directory::KernelLoadInfo dir_info; 3533 Directory::MetahandlesMap handles_map; 3534 JournalIndex delete_journals;; 3535 STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map); 3536 3537 { 3538 scoped_ptr<TestDirectoryBackingStore> dbs( 3539 new TestDirectoryBackingStore(GetUsername(), &connection)); 3540 ASSERT_EQ(OPENED, dbs->Load(&handles_map, &delete_journals, &dir_info)); 3541 ASSERT_FALSE(dbs->needs_column_refresh_); 3542 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); 3543 } 3544 3545 // Columns deleted in Version 67. 3546 ASSERT_FALSE(connection.DoesColumnExist("metas", "name")); 3547 ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name")); 3548 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name")); 3549 3550 // Columns added in Version 68. 3551 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics")); 3552 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics")); 3553 3554 // Columns deleted in Version 68. 3555 ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object")); 3556 ASSERT_FALSE(connection.DoesColumnExist("metas", 3557 "server_is_bookmark_object")); 3558 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon")); 3559 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url")); 3560 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url")); 3561 3562 // Renamed a column in Version 70 3563 ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag")); 3564 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag")); 3565 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag")); 3566 3567 // Removed extended attributes in Version 72. 3568 ASSERT_FALSE(connection.DoesTableExist("extended_attributes")); 3569 3570 // Columns added in Version 73. 3571 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state")); 3572 3573 // Column replaced in version 75. 3574 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker")); 3575 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp")); 3576 3577 // Columns removed in version 76. 3578 ASSERT_FALSE( 3579 connection.DoesColumnExist("share_info", "autofill_migration_state")); 3580 ASSERT_FALSE(connection.DoesColumnExist("share_info", 3581 "bookmarks_added_during_autofill_migration")); 3582 ASSERT_FALSE( 3583 connection.DoesColumnExist("share_info", "autofill_migration_time")); 3584 ASSERT_FALSE(connection.DoesColumnExist("share_info", 3585 "autofill_entries_added_during_migration")); 3586 ASSERT_FALSE(connection.DoesColumnExist("share_info", 3587 "autofill_profiles_added_during_migration")); 3588 3589 // Column added in version 78. 3590 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics")); 3591 3592 // Column added in version 82. 3593 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version")); 3594 3595 // Column added in version 83. 3596 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version")); 3597 3598 // Table added in version 84. 3599 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); 3600 3601 // Column removed in version 85. 3602 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended")); 3603 3604 // Columns removed in version 86. 3605 ASSERT_FALSE(connection.DoesColumnExist("metas", "next_id")); 3606 ASSERT_FALSE(connection.DoesColumnExist("metas", "prev_id")); 3607 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent")); 3608 3609 // Column added in version 87. 3610 ASSERT_TRUE(connection.DoesColumnExist("metas", "attachment_metadata")); 3611 3612 // Column added in version 88. 3613 ASSERT_TRUE(connection.DoesColumnExist("models", "context")); 3614 3615 // Column added in version 89. 3616 ASSERT_TRUE( 3617 connection.DoesColumnExist("metas", "server_attachment_metadata")); 3618 3619 // Check download_progress state (v75 migration) 3620 ASSERT_EQ(694, 3621 dir_info.kernel_info.download_progress[BOOKMARKS] 3622 .timestamp_token_for_migration()); 3623 ASSERT_FALSE( 3624 dir_info.kernel_info.download_progress[BOOKMARKS] 3625 .has_token()); 3626 ASSERT_EQ(32904, 3627 dir_info.kernel_info.download_progress[BOOKMARKS] 3628 .data_type_id()); 3629 ASSERT_FALSE( 3630 dir_info.kernel_info.download_progress[THEMES] 3631 .has_timestamp_token_for_migration()); 3632 ASSERT_TRUE( 3633 dir_info.kernel_info.download_progress[THEMES] 3634 .has_token()); 3635 ASSERT_TRUE( 3636 dir_info.kernel_info.download_progress[THEMES] 3637 .token().empty()); 3638 ASSERT_EQ(41210, 3639 dir_info.kernel_info.download_progress[THEMES] 3640 .data_type_id()); 3641 3642 // Check metas 3643 EXPECT_EQ(GetExpectedMetaProtoTimes(DONT_INCLUDE_DELETED_ITEMS), 3644 GetMetaProtoTimes(&connection)); 3645 ExpectTimes(handles_map, GetExpectedMetaTimes()); 3646 3647 Directory::MetahandlesMap::iterator it = handles_map.find(1); 3648 ASSERT_TRUE(it != handles_map.end()); 3649 ASSERT_EQ(1, it->second->ref(META_HANDLE)); 3650 EXPECT_TRUE(it->second->ref(ID).IsRoot()); 3651 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3652 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3653 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3654 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3655 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3656 3657 // Items 2, 4, and 5 were deleted. 3658 it = handles_map.find(2); 3659 ASSERT_TRUE(it == handles_map.end()); 3660 it = handles_map.find(4); 3661 ASSERT_TRUE(it == handles_map.end()); 3662 it = handles_map.find(5); 3663 ASSERT_TRUE(it == handles_map.end()); 3664 3665 it = handles_map.find(6); 3666 ASSERT_EQ(6, it->second->ref(META_HANDLE)); 3667 EXPECT_TRUE(it->second->ref(IS_DIR)); 3668 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR)); 3669 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3670 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3671 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3672 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3673 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3674 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3675 EXPECT_EQ(UniquePosition::kSuffixLength, 3676 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3677 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3678 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3679 3680 it = handles_map.find(7); 3681 ASSERT_EQ(7, it->second->ref(META_HANDLE)); 3682 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG)); 3683 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark()); 3684 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3685 // Make sure we didn't assign positions to google_chrome. 3686 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3687 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3688 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3689 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3690 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3691 3692 it = handles_map.find(8); 3693 ASSERT_EQ(8, it->second->ref(META_HANDLE)); 3694 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3695 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3696 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3697 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_8"); 3698 // Make sure we didn't mistake the bookmark root node for a real bookmark. 3699 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3700 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3701 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3702 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3703 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3704 3705 it = handles_map.find(9); 3706 ASSERT_EQ(9, it->second->ref(META_HANDLE)); 3707 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG)); 3708 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3709 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3710 // Make sure we didn't assign positions to bookmark_bar. 3711 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3712 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3713 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3714 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3715 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3716 3717 it = handles_map.find(10); 3718 ASSERT_EQ(10, it->second->ref(META_HANDLE)); 3719 EXPECT_FALSE(it->second->ref(IS_DEL)); 3720 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3721 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3722 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3723 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3724 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3725 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3726 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG)); 3727 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME)); 3728 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); 3729 ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10"); 3730 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3731 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3732 // Make sure we didn't assign positions to server-created folders, either. 3733 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3734 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3735 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3736 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3737 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3738 3739 it = handles_map.find(11); 3740 ASSERT_EQ(11, it->second->ref(META_HANDLE)); 3741 EXPECT_FALSE(it->second->ref(IS_DEL)); 3742 EXPECT_FALSE(it->second->ref(IS_DIR)); 3743 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3744 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3745 EXPECT_EQ("http://dev.chromium.org/", 3746 it->second->ref(SPECIFICS).bookmark().url()); 3747 EXPECT_EQ("AGATWA", it->second->ref(SPECIFICS).bookmark().favicon()); 3748 EXPECT_EQ("http://dev.chromium.org/other", 3749 it->second->ref(SERVER_SPECIFICS).bookmark().url()); 3750 EXPECT_EQ("AFAGVASF", it->second->ref(SERVER_SPECIFICS).bookmark().favicon()); 3751 EXPECT_EQ("", it->second->ref(UNIQUE_SERVER_TAG)); 3752 EXPECT_EQ("Home (The Chromium Projects)", it->second->ref(NON_UNIQUE_NAME)); 3753 EXPECT_EQ("Home (The Chromium Projects)", 3754 it->second->ref(SERVER_NON_UNIQUE_NAME)); 3755 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3756 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3757 EXPECT_EQ(UniquePosition::kSuffixLength, 3758 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3759 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3760 3761 it = handles_map.find(12); 3762 ASSERT_EQ(12, it->second->ref(META_HANDLE)); 3763 EXPECT_FALSE(it->second->ref(IS_DEL)); 3764 EXPECT_TRUE(it->second->ref(IS_DIR)); 3765 EXPECT_EQ("Extra Bookmarks", it->second->ref(NON_UNIQUE_NAME)); 3766 EXPECT_EQ("Extra Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); 3767 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark()); 3768 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark()); 3769 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url()); 3770 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_url()); 3771 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_favicon()); 3772 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon()); 3773 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3774 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3775 EXPECT_EQ(UniquePosition::kSuffixLength, 3776 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3777 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3778 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3779 3780 it = handles_map.find(13); 3781 ASSERT_EQ(13, it->second->ref(META_HANDLE)); 3782 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3783 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3784 EXPECT_EQ(UniquePosition::kSuffixLength, 3785 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3786 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3787 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3788 3789 it = handles_map.find(14); 3790 ASSERT_EQ(14, it->second->ref(META_HANDLE)); 3791 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3792 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3793 EXPECT_EQ(UniquePosition::kSuffixLength, 3794 it->second->ref(UNIQUE_BOOKMARK_TAG).length()); 3795 EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); 3796 EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); 3797 3798 ASSERT_EQ(static_cast<size_t>(10), handles_map.size()); 3799 3800 // Make sure that the syncable::Directory and the migration code agree on 3801 // which items should or should not have unique position values. This test 3802 // may become obsolete if the directory's definition of that function 3803 // changes, but, until then, this is a useful test. 3804 for (it = handles_map.begin(); it != handles_map.end(); it++) { 3805 SCOPED_TRACE(it->second->ref(ID)); 3806 if (it->second->ShouldMaintainPosition()) { 3807 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid()); 3808 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3809 EXPECT_FALSE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3810 } else { 3811 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); 3812 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); 3813 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); 3814 } 3815 } 3816} 3817 3818INSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest, 3819 testing::Range(67, kCurrentDBVersion + 1)); 3820 3821TEST_F(DirectoryBackingStoreTest, ModelTypeIds) { 3822 ModelTypeSet protocol_types = ProtocolTypes(); 3823 for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good(); 3824 iter.Inc()) { 3825 std::string model_id = 3826 TestDirectoryBackingStore::ModelTypeEnumToModelId(iter.Get()); 3827 EXPECT_EQ(iter.Get(), 3828 TestDirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(), 3829 model_id.size())); 3830 } 3831} 3832 3833namespace { 3834 3835class OnDiskDirectoryBackingStoreForTest : public OnDiskDirectoryBackingStore { 3836 public: 3837 OnDiskDirectoryBackingStoreForTest(const std::string& dir_name, 3838 const base::FilePath& backing_filepath); 3839 virtual ~OnDiskDirectoryBackingStoreForTest(); 3840 bool DidFailFirstOpenAttempt(); 3841 3842 protected: 3843 virtual void ReportFirstTryOpenFailure() OVERRIDE; 3844 3845 private: 3846 bool first_open_failed_; 3847}; 3848 3849OnDiskDirectoryBackingStoreForTest::OnDiskDirectoryBackingStoreForTest( 3850 const std::string& dir_name, 3851 const base::FilePath& backing_filepath) : 3852 OnDiskDirectoryBackingStore(dir_name, backing_filepath), 3853 first_open_failed_(false) { } 3854 3855OnDiskDirectoryBackingStoreForTest::~OnDiskDirectoryBackingStoreForTest() { } 3856 3857void OnDiskDirectoryBackingStoreForTest::ReportFirstTryOpenFailure() { 3858 // Do nothing, just like we would in release-mode. In debug mode, we DCHECK. 3859 first_open_failed_ = true; 3860} 3861 3862bool OnDiskDirectoryBackingStoreForTest::DidFailFirstOpenAttempt() { 3863 return first_open_failed_; 3864} 3865 3866} // namespace 3867 3868// This is a whitebox test intended to exercise the code path where the on-disk 3869// directory load code decides to delete the current directory and start fresh. 3870// 3871// This is considered "minor" corruption because the database recreation is 3872// expected to succeed. The alternative, where recreation does not succeed (ie. 3873// due to read-only file system), is not tested here. 3874TEST_F(DirectoryBackingStoreTest, MinorCorruption) { 3875 { 3876 scoped_ptr<OnDiskDirectoryBackingStore> dbs( 3877 new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath())); 3878 EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 3879 } 3880 3881 // Corrupt the root node. 3882 { 3883 sql::Connection connection; 3884 ASSERT_TRUE(connection.Open(GetDatabasePath())); 3885 ASSERT_TRUE(connection.Execute( 3886 "UPDATE metas SET parent_id='bogus' WHERE id = 'r';")); 3887 } 3888 3889 { 3890 scoped_ptr<OnDiskDirectoryBackingStoreForTest> dbs( 3891 new OnDiskDirectoryBackingStoreForTest(GetUsername(), 3892 GetDatabasePath())); 3893 3894 EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); 3895 EXPECT_TRUE(dbs->DidFailFirstOpenAttempt()); 3896 } 3897} 3898 3899TEST_F(DirectoryBackingStoreTest, DeleteEntries) { 3900 sql::Connection connection; 3901 ASSERT_TRUE(connection.OpenInMemory()); 3902 3903 SetUpCurrentDatabaseAndCheckVersion(&connection); 3904 scoped_ptr<TestDirectoryBackingStore> dbs( 3905 new TestDirectoryBackingStore(GetUsername(), &connection)); 3906 Directory::MetahandlesMap handles_map; 3907 JournalIndex delete_journals; 3908 Directory::KernelLoadInfo kernel_load_info; 3909 STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map); 3910 3911 dbs->Load(&handles_map, &delete_journals, &kernel_load_info); 3912 size_t initial_size = handles_map.size(); 3913 ASSERT_LT(0U, initial_size) << "Test requires handles_map to delete."; 3914 int64 first_to_die = handles_map.begin()->second->ref(META_HANDLE); 3915 MetahandleSet to_delete; 3916 to_delete.insert(first_to_die); 3917 EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE, 3918 to_delete)); 3919 3920 STLDeleteValues(&handles_map); 3921 dbs->LoadEntries(&handles_map); 3922 3923 EXPECT_EQ(initial_size - 1, handles_map.size()); 3924 bool delete_failed = false; 3925 for (Directory::MetahandlesMap::iterator it = handles_map.begin(); 3926 it != handles_map.end(); ++it) { 3927 if (it->first == first_to_die) { 3928 delete_failed = true; 3929 break; 3930 } 3931 } 3932 EXPECT_FALSE(delete_failed); 3933 3934 to_delete.clear(); 3935 for (Directory::MetahandlesMap::iterator it = handles_map.begin(); 3936 it != handles_map.end(); ++it) { 3937 to_delete.insert(it->first); 3938 } 3939 3940 EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE, 3941 to_delete)); 3942 3943 STLDeleteValues(&handles_map); 3944 dbs->LoadEntries(&handles_map); 3945 EXPECT_EQ(0U, handles_map.size()); 3946} 3947 3948TEST_F(DirectoryBackingStoreTest, GenerateCacheGUID) { 3949 const std::string& guid1 = TestDirectoryBackingStore::GenerateCacheGUID(); 3950 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID(); 3951 EXPECT_EQ(24U, guid1.size()); 3952 EXPECT_EQ(24U, guid2.size()); 3953 // In theory this test can fail, but it won't before the universe 3954 // dies of heat death. 3955 EXPECT_NE(guid1, guid2); 3956} 3957 3958} // namespace syncable 3959} // namespace syncer 3960