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