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