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"
9 #include "base/file_util.h"
10 #include "base/files/file_path.h"
11 #include "base/files/scoped_temp_dir.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/stl_util.h"
14 #include "base/strings/string_number_conversions.h"
15 #include "sql/connection.h"
16 #include "sql/statement.h"
17 #include "sync/base/sync_export.h"
18 #include "sync/internal_api/public/base/node_ordinal.h"
19 #include "sync/protocol/bookmark_specifics.pb.h"
20 #include "sync/protocol/sync.pb.h"
21 #include "sync/syncable/directory_backing_store.h"
22 #include "sync/syncable/on_disk_directory_backing_store.h"
23 #include "sync/syncable/syncable-inl.h"
24 #include "sync/test/test_directory_backing_store.h"
25 #include "sync/util/time.h"
26 #include "testing/gtest/include/gtest/gtest-param-test.h"
31 SYNC_EXPORT_PRIVATE extern const int32 kCurrentDBVersion;
33 class MigrationTest : public testing::TestWithParam<int> {
35 virtual void SetUp() {
36 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
40 std::string GetUsername() {
41 return "nick@chromium.org";
44 base::FilePath GetDatabasePath() {
45 return temp_dir_.path().Append(Directory::kSyncDatabaseFilename);
48 static bool LoadAndIgnoreReturnedData(DirectoryBackingStore *dbs) {
49 Directory::MetahandlesMap tmp_handles_map;
50 JournalIndex delete_journals;
51 STLValueDeleter<Directory::MetahandlesMap> deleter(&tmp_handles_map);
52 Directory::KernelLoadInfo kernel_load_info;
53 return dbs->Load(&tmp_handles_map, &delete_journals, &kernel_load_info) ==
57 void SetUpVersion67Database(sql::Connection* connection);
58 void SetUpVersion68Database(sql::Connection* connection);
59 void SetUpVersion69Database(sql::Connection* connection);
60 void SetUpVersion70Database(sql::Connection* connection);
61 void SetUpVersion71Database(sql::Connection* connection);
62 void SetUpVersion72Database(sql::Connection* connection);
63 void SetUpVersion73Database(sql::Connection* connection);
64 void SetUpVersion74Database(sql::Connection* connection);
65 void SetUpVersion75Database(sql::Connection* connection);
66 void SetUpVersion76Database(sql::Connection* connection);
67 void SetUpVersion77Database(sql::Connection* connection);
68 void SetUpVersion78Database(sql::Connection* connection);
69 void SetUpVersion79Database(sql::Connection* connection);
70 void SetUpVersion80Database(sql::Connection* connection);
71 void SetUpVersion81Database(sql::Connection* connection);
72 void SetUpVersion82Database(sql::Connection* connection);
73 void SetUpVersion83Database(sql::Connection* connection);
74 void SetUpVersion84Database(sql::Connection* connection);
75 void SetUpVersion85Database(sql::Connection* connection);
76 void SetUpVersion86Database(sql::Connection* connection);
78 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) {
79 SetUpVersion86Database(connection); // Prepopulates data.
80 scoped_ptr<TestDirectoryBackingStore> dbs(
81 new TestDirectoryBackingStore(GetUsername(), connection));
82 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
84 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
85 ASSERT_FALSE(dbs->needs_column_refresh_);
89 base::ScopedTempDir temp_dir_;
92 class DirectoryBackingStoreTest : public MigrationTest {};
96 // On Windows, we used to store timestamps in FILETIME format.
97 #define LEGACY_META_PROTO_TIMES_1 129079956640320000LL
98 #define LEGACY_META_PROTO_TIMES_2 128976886618480000LL
99 #define LEGACY_META_PROTO_TIMES_4 129002163642690000LL
100 #define LEGACY_META_PROTO_TIMES_5 129001555500000000LL
101 #define LEGACY_META_PROTO_TIMES_6 129053976170000000LL
102 #define LEGACY_META_PROTO_TIMES_7 128976864758480000LL
103 #define LEGACY_META_PROTO_TIMES_8 128976864758480000LL
104 #define LEGACY_META_PROTO_TIMES_9 128976864758480000LL
105 #define LEGACY_META_PROTO_TIMES_10 128976864758480000LL
106 #define LEGACY_META_PROTO_TIMES_11 129079956948440000LL
107 #define LEGACY_META_PROTO_TIMES_12 129079957513650000LL
108 #define LEGACY_META_PROTO_TIMES_13 129079957985300000LL
109 #define LEGACY_META_PROTO_TIMES_14 129079958383000000LL
111 #define LEGACY_META_PROTO_TIMES_STR_1 "129079956640320000"
112 #define LEGACY_META_PROTO_TIMES_STR_2 "128976886618480000"
113 #define LEGACY_META_PROTO_TIMES_STR_4 "129002163642690000"
114 #define LEGACY_META_PROTO_TIMES_STR_5 "129001555500000000"
115 #define LEGACY_META_PROTO_TIMES_STR_6 "129053976170000000"
116 #define LEGACY_META_PROTO_TIMES_STR_7 "128976864758480000"
117 #define LEGACY_META_PROTO_TIMES_STR_8 "128976864758480000"
118 #define LEGACY_META_PROTO_TIMES_STR_9 "128976864758480000"
119 #define LEGACY_META_PROTO_TIMES_STR_10 "128976864758480000"
120 #define LEGACY_META_PROTO_TIMES_STR_11 "129079956948440000"
121 #define LEGACY_META_PROTO_TIMES_STR_12 "129079957513650000"
122 #define LEGACY_META_PROTO_TIMES_STR_13 "129079957985300000"
123 #define LEGACY_META_PROTO_TIMES_STR_14 "129079958383000000"
127 // ruby -ane '$F[1].sub!("LEGACY_", ""); $F[2] = Integer($F[2].sub!("LL", "")) /
128 // 10000 - 11644473600000; print "#{$F[0]} #{$F[1]} #{$F[2]}LL"'
130 // Magic numbers taken from
131 // http://stackoverflow.com/questions/5398557/
132 // java-library-for-dealing-with-win32-filetime .
134 // Now we store them in Java format (ms since the Unix epoch).
135 #define META_PROTO_TIMES_1 1263522064032LL
136 #define META_PROTO_TIMES_2 1253215061848LL
137 #define META_PROTO_TIMES_4 1255742764269LL
138 #define META_PROTO_TIMES_5 1255681950000LL
139 #define META_PROTO_TIMES_6 1260924017000LL
140 #define META_PROTO_TIMES_7 1253212875848LL
141 #define META_PROTO_TIMES_8 1253212875848LL
142 #define META_PROTO_TIMES_9 1253212875848LL
143 #define META_PROTO_TIMES_10 1253212875848LL
144 #define META_PROTO_TIMES_11 1263522094844LL
145 #define META_PROTO_TIMES_12 1263522151365LL
146 #define META_PROTO_TIMES_13 1263522198530LL
147 #define META_PROTO_TIMES_14 1263522238300LL
149 #define META_PROTO_TIMES_STR_1 "1263522064032"
150 #define META_PROTO_TIMES_STR_2 "1253215061848"
151 #define META_PROTO_TIMES_STR_4 "1255742764269"
152 #define META_PROTO_TIMES_STR_5 "1255681950000"
153 #define META_PROTO_TIMES_STR_6 "1260924017000"
154 #define META_PROTO_TIMES_STR_7 "1253212875848"
155 #define META_PROTO_TIMES_STR_8 "1253212875848"
156 #define META_PROTO_TIMES_STR_9 "1253212875848"
157 #define META_PROTO_TIMES_STR_10 "1253212875848"
158 #define META_PROTO_TIMES_STR_11 "1263522094844"
159 #define META_PROTO_TIMES_STR_12 "1263522151365"
160 #define META_PROTO_TIMES_STR_13 "1263522198530"
161 #define META_PROTO_TIMES_STR_14 "1263522238300"
165 // On other platforms, we used to store timestamps in time_t format (s
166 // since the Unix epoch).
167 #define LEGACY_META_PROTO_TIMES_1 1263522064LL
168 #define LEGACY_META_PROTO_TIMES_2 1253215061LL
169 #define LEGACY_META_PROTO_TIMES_4 1255742764LL
170 #define LEGACY_META_PROTO_TIMES_5 1255681950LL
171 #define LEGACY_META_PROTO_TIMES_6 1260924017LL
172 #define LEGACY_META_PROTO_TIMES_7 1253212875LL
173 #define LEGACY_META_PROTO_TIMES_8 1253212875LL
174 #define LEGACY_META_PROTO_TIMES_9 1253212875LL
175 #define LEGACY_META_PROTO_TIMES_10 1253212875LL
176 #define LEGACY_META_PROTO_TIMES_11 1263522094LL
177 #define LEGACY_META_PROTO_TIMES_12 1263522151LL
178 #define LEGACY_META_PROTO_TIMES_13 1263522198LL
179 #define LEGACY_META_PROTO_TIMES_14 1263522238LL
181 #define LEGACY_META_PROTO_TIMES_STR_1 "1263522064"
182 #define LEGACY_META_PROTO_TIMES_STR_2 "1253215061"
183 #define LEGACY_META_PROTO_TIMES_STR_4 "1255742764"
184 #define LEGACY_META_PROTO_TIMES_STR_5 "1255681950"
185 #define LEGACY_META_PROTO_TIMES_STR_6 "1260924017"
186 #define LEGACY_META_PROTO_TIMES_STR_7 "1253212875"
187 #define LEGACY_META_PROTO_TIMES_STR_8 "1253212875"
188 #define LEGACY_META_PROTO_TIMES_STR_9 "1253212875"
189 #define LEGACY_META_PROTO_TIMES_STR_10 "1253212875"
190 #define LEGACY_META_PROTO_TIMES_STR_11 "1263522094"
191 #define LEGACY_META_PROTO_TIMES_STR_12 "1263522151"
192 #define LEGACY_META_PROTO_TIMES_STR_13 "1263522198"
193 #define LEGACY_META_PROTO_TIMES_STR_14 "1263522238"
195 // Now we store them in Java format (ms since the Unix epoch).
196 #define META_PROTO_TIMES_1 1263522064000LL
197 #define META_PROTO_TIMES_2 1253215061000LL
198 #define META_PROTO_TIMES_4 1255742764000LL
199 #define META_PROTO_TIMES_5 1255681950000LL
200 #define META_PROTO_TIMES_6 1260924017000LL
201 #define META_PROTO_TIMES_7 1253212875000LL
202 #define META_PROTO_TIMES_8 1253212875000LL
203 #define META_PROTO_TIMES_9 1253212875000LL
204 #define META_PROTO_TIMES_10 1253212875000LL
205 #define META_PROTO_TIMES_11 1263522094000LL
206 #define META_PROTO_TIMES_12 1263522151000LL
207 #define META_PROTO_TIMES_13 1263522198000LL
208 #define META_PROTO_TIMES_14 1263522238000LL
210 #define META_PROTO_TIMES_STR_1 "1263522064000"
211 #define META_PROTO_TIMES_STR_2 "1253215061000"
212 #define META_PROTO_TIMES_STR_4 "1255742764000"
213 #define META_PROTO_TIMES_STR_5 "1255681950000"
214 #define META_PROTO_TIMES_STR_6 "1260924017000"
215 #define META_PROTO_TIMES_STR_7 "1253212875000"
216 #define META_PROTO_TIMES_STR_8 "1253212875000"
217 #define META_PROTO_TIMES_STR_9 "1253212875000"
218 #define META_PROTO_TIMES_STR_10 "1253212875000"
219 #define META_PROTO_TIMES_STR_11 "1263522094000"
220 #define META_PROTO_TIMES_STR_12 "1263522151000"
221 #define META_PROTO_TIMES_STR_13 "1263522198000"
222 #define META_PROTO_TIMES_STR_14 "1263522238000"
226 // Helper macros for the database dumps in the SetUpVersion*Database
228 #define LEGACY_META_PROTO_TIMES(x) LEGACY_META_PROTO_TIMES_##x
229 #define LEGACY_META_PROTO_TIMES_STR(x) LEGACY_META_PROTO_TIMES_STR_##x
230 #define LEGACY_PROTO_TIME_VALS(x) \
231 LEGACY_META_PROTO_TIMES_STR(x) "," \
232 LEGACY_META_PROTO_TIMES_STR(x) "," \
233 LEGACY_META_PROTO_TIMES_STR(x) "," \
234 LEGACY_META_PROTO_TIMES_STR(x)
235 #define META_PROTO_TIMES(x) META_PROTO_TIMES_##x
236 #define META_PROTO_TIMES_STR(x) META_PROTO_TIMES_STR_##x
237 #define META_PROTO_TIMES_VALS(x) \
238 META_PROTO_TIMES_STR(x) "," \
239 META_PROTO_TIMES_STR(x) "," \
240 META_PROTO_TIMES_STR(x) "," \
241 META_PROTO_TIMES_STR(x)
245 // Helper functions for testing.
247 enum ShouldIncludeDeletedItems {
248 INCLUDE_DELETED_ITEMS,
249 DONT_INCLUDE_DELETED_ITEMS
252 // Returns a map from metahandle -> expected legacy time (in proto
254 std::map<int64, int64> GetExpectedLegacyMetaProtoTimes(
255 enum ShouldIncludeDeletedItems include_deleted) {
256 std::map<int64, int64> expected_legacy_meta_proto_times;
257 expected_legacy_meta_proto_times[1] = LEGACY_META_PROTO_TIMES(1);
258 if (include_deleted == INCLUDE_DELETED_ITEMS) {
259 expected_legacy_meta_proto_times[2] = LEGACY_META_PROTO_TIMES(2);
260 expected_legacy_meta_proto_times[4] = LEGACY_META_PROTO_TIMES(4);
261 expected_legacy_meta_proto_times[5] = LEGACY_META_PROTO_TIMES(5);
263 expected_legacy_meta_proto_times[6] = LEGACY_META_PROTO_TIMES(6);
264 expected_legacy_meta_proto_times[7] = LEGACY_META_PROTO_TIMES(7);
265 expected_legacy_meta_proto_times[8] = LEGACY_META_PROTO_TIMES(8);
266 expected_legacy_meta_proto_times[9] = LEGACY_META_PROTO_TIMES(9);
267 expected_legacy_meta_proto_times[10] = LEGACY_META_PROTO_TIMES(10);
268 expected_legacy_meta_proto_times[11] = LEGACY_META_PROTO_TIMES(11);
269 expected_legacy_meta_proto_times[12] = LEGACY_META_PROTO_TIMES(12);
270 expected_legacy_meta_proto_times[13] = LEGACY_META_PROTO_TIMES(13);
271 expected_legacy_meta_proto_times[14] = LEGACY_META_PROTO_TIMES(14);
272 return expected_legacy_meta_proto_times;
275 // Returns a map from metahandle -> expected time (in proto format).
276 std::map<int64, int64> GetExpectedMetaProtoTimes(
277 enum ShouldIncludeDeletedItems include_deleted) {
278 std::map<int64, int64> expected_meta_proto_times;
279 expected_meta_proto_times[1] = META_PROTO_TIMES(1);
280 if (include_deleted == INCLUDE_DELETED_ITEMS) {
281 expected_meta_proto_times[2] = META_PROTO_TIMES(2);
282 expected_meta_proto_times[4] = META_PROTO_TIMES(4);
283 expected_meta_proto_times[5] = META_PROTO_TIMES(5);
285 expected_meta_proto_times[6] = META_PROTO_TIMES(6);
286 expected_meta_proto_times[7] = META_PROTO_TIMES(7);
287 expected_meta_proto_times[8] = META_PROTO_TIMES(8);
288 expected_meta_proto_times[9] = META_PROTO_TIMES(9);
289 expected_meta_proto_times[10] = META_PROTO_TIMES(10);
290 expected_meta_proto_times[11] = META_PROTO_TIMES(11);
291 expected_meta_proto_times[12] = META_PROTO_TIMES(12);
292 expected_meta_proto_times[13] = META_PROTO_TIMES(13);
293 expected_meta_proto_times[14] = META_PROTO_TIMES(14);
294 return expected_meta_proto_times;
297 // Returns a map from metahandle -> expected time (as a Time object).
298 std::map<int64, base::Time> GetExpectedMetaTimes() {
299 std::map<int64, base::Time> expected_meta_times;
300 const std::map<int64, int64>& expected_meta_proto_times =
301 GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS);
302 for (std::map<int64, int64>::const_iterator it =
303 expected_meta_proto_times.begin();
304 it != expected_meta_proto_times.end(); ++it) {
305 expected_meta_times[it->first] = ProtoTimeToTime(it->second);
307 return expected_meta_times;
310 // Extracts a map from metahandle -> time (in proto format) from the
312 std::map<int64, int64> GetMetaProtoTimes(sql::Connection *db) {
313 sql::Statement s(db->GetCachedStatement(
315 "SELECT metahandle, mtime, server_mtime, ctime, server_ctime "
317 EXPECT_EQ(5, s.ColumnCount());
318 std::map<int64, int64> meta_times;
320 int64 metahandle = s.ColumnInt64(0);
321 int64 mtime = s.ColumnInt64(1);
322 int64 server_mtime = s.ColumnInt64(2);
323 int64 ctime = s.ColumnInt64(3);
324 int64 server_ctime = s.ColumnInt64(4);
325 EXPECT_EQ(mtime, server_mtime);
326 EXPECT_EQ(mtime, ctime);
327 EXPECT_EQ(mtime, server_ctime);
328 meta_times[metahandle] = mtime;
330 EXPECT_TRUE(s.Succeeded());
334 ::testing::AssertionResult AssertTimesMatch(const char* t1_expr,
336 const base::Time& t1,
337 const base::Time& t2) {
339 return ::testing::AssertionSuccess();
341 return ::testing::AssertionFailure()
342 << t1_expr << " and " << t2_expr
343 << " (internal values: " << t1.ToInternalValue()
344 << " and " << t2.ToInternalValue()
345 << ") (proto time: " << TimeToProtoTime(t1)
346 << " and " << TimeToProtoTime(t2)
350 // Expect that all time fields of the given entry kernel will be the
352 void ExpectTime(const EntryKernel& entry_kernel,
353 const base::Time& expected_time) {
354 EXPECT_PRED_FORMAT2(AssertTimesMatch,
355 expected_time, entry_kernel.ref(CTIME));
356 EXPECT_PRED_FORMAT2(AssertTimesMatch,
357 expected_time, entry_kernel.ref(SERVER_CTIME));
358 EXPECT_PRED_FORMAT2(AssertTimesMatch,
359 expected_time, entry_kernel.ref(MTIME));
360 EXPECT_PRED_FORMAT2(AssertTimesMatch,
361 expected_time, entry_kernel.ref(SERVER_MTIME));
364 // Expect that all the entries in |entries| have times matching those in
365 // the given map (from metahandle to expect time).
366 void ExpectTimes(const Directory::MetahandlesMap& handles_map,
367 const std::map<int64, base::Time>& expected_times) {
368 for (Directory::MetahandlesMap::const_iterator it = handles_map.begin();
369 it != handles_map.end(); ++it) {
370 int64 meta_handle = it->first;
371 SCOPED_TRACE(meta_handle);
372 std::map<int64, base::Time>::const_iterator it2 =
373 expected_times.find(meta_handle);
374 if (it2 == expected_times.end()) {
375 ADD_FAILURE() << "Could not find expected time for " << meta_handle;
378 ExpectTime(*it->second, it2->second);
384 void MigrationTest::SetUpVersion67Database(sql::Connection* connection) {
385 // This is a version 67 database dump whose contents were backformed from
386 // the contents of the version 68 database dump (the v68 migration was
387 // actually written first).
388 ASSERT_TRUE(connection->is_open());
389 ASSERT_TRUE(connection->BeginTransaction());
390 ASSERT_TRUE(connection->Execute(
391 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
392 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
393 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
394 "base_version bigint default -1,server_version bigint default 0,"
395 "mtime bigint default 0,server_mtime bigint default 0,"
396 "ctime bigint default 0,server_ctime bigint default 0,"
397 "server_position_in_parent bigint default 0,"
398 "local_external_id bigint default 0,id varchar(255) default 'r',"
399 "parent_id varchar(255) default 'r',"
400 "server_parent_id varchar(255) default 'r',"
401 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
402 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
403 "is_del bit default 0,is_dir bit default 0,"
404 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
405 "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
406 "name varchar(255), " /* COLLATE PATHNAME, */
407 "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
408 "non_unique_name varchar,"
409 "server_name varchar(255)," /* COLLATE PATHNAME */
410 "server_non_unique_name varchar,"
411 "bookmark_url varchar,server_bookmark_url varchar,"
412 "singleton_tag varchar,bookmark_favicon blob,"
413 "server_bookmark_favicon blob);"
414 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
415 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
416 "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
417 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
419 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
420 "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item',"
421 "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA',"
423 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
425 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
426 "'Welcome to Chromium',NULL,'Welcome to Chromium',"
427 "'Welcome to Chromium','Welcome to Chromium',"
428 "'http://www.google.com/chrome/intl/en/welcome.html',"
429 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
431 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
433 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
434 "'Google',NULL,'Google','Google','Google','http://www.google.com/',"
435 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
436 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
438 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
439 "'The Internet',NULL,'The Internet','The Internet',"
440 "'The Internet',NULL,NULL,NULL,NULL,NULL);"
441 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
443 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
444 "'Google Chrome',NULL,'Google Chrome','Google Chrome',"
445 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);"
446 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
448 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
449 "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL,"
450 "'google_chrome_bookmarks',NULL,NULL);"
451 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
453 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
454 "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar',"
455 "NULL,NULL,'bookmark_bar',NULL,NULL);"
456 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
458 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
459 "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks',"
460 "'Other Bookmarks',NULL,NULL,'other_bookmarks',"
462 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
464 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
465 "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)',"
466 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
467 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
468 "'AGATWA','AFAGVASF');"
469 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
471 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
472 "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks',"
473 "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
474 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
476 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
477 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
478 "'ICANN Internet Corporation for Assigned Names and Numbers',"
479 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
480 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
481 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
482 "'http://www.icann.com/','http://www.icann.com/',NULL,"
483 "'PNGAXF0AAFF','DAAFASF');"
484 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
486 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
487 "'The WebKit Open Source Project',NULL,"
488 "'The WebKit Open Source Project','The WebKit Open Source Project',"
489 "'The WebKit Open Source Project','http://webkit.org/',"
490 "'http://webkit.org/x',NULL,'PNGX','PNG2Y');"
491 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
492 "last_sync_timestamp INT, name VARCHAR(128), "
493 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
494 "db_create_version VARCHAR(128), db_create_time int, "
495 "next_id bigint default -2, cache_guid VARCHAR(32));"
496 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
497 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
498 "'Unknown',1263522064,-65542,"
499 "'9010788312004066376x-6609234393368420856x');"
500 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
501 "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
502 ASSERT_TRUE(connection->CommitTransaction());
505 void MigrationTest::SetUpVersion68Database(sql::Connection* connection) {
506 // This sets up an actual version 68 database dump. The IDs were
507 // canonicalized to be less huge, and the favicons were overwritten
508 // with random junk so that they didn't contain any unprintable
509 // characters. A few server URLs were tweaked so that they'd be
510 // different from the local URLs. Lastly, the custom collation on
511 // the server_non_unique_name column was removed.
512 ASSERT_TRUE(connection->is_open());
513 ASSERT_TRUE(connection->BeginTransaction());
514 ASSERT_TRUE(connection->Execute(
515 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
516 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
517 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
518 "base_version bigint default -1,server_version bigint default 0,"
519 "mtime bigint default 0,server_mtime bigint default 0,"
520 "ctime bigint default 0,server_ctime bigint default 0,"
521 "server_position_in_parent bigint default 0,"
522 "local_external_id bigint default 0,id varchar(255) default 'r',"
523 "parent_id varchar(255) default 'r',"
524 "server_parent_id varchar(255) default 'r',"
525 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
526 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
527 "is_del bit default 0,is_dir bit default 0,"
528 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
529 "server_is_del bit default 0,"
530 "server_is_bookmark_object bit default 0,"
531 "non_unique_name varchar,server_non_unique_name varchar(255),"
532 "bookmark_url varchar,server_bookmark_url varchar,"
533 "singleton_tag varchar,bookmark_favicon blob,"
534 "server_bookmark_favicon blob);"
535 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
536 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
537 "NULL,NULL,NULL,NULL,NULL,NULL);"
538 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
540 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
541 "'Deleted Item','Deleted Item','http://www.google.com/',"
542 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');"
543 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
545 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
546 "'Welcome to Chromium','Welcome to Chromium',"
547 "'http://www.google.com/chrome/intl/en/welcome.html',"
548 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
550 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
552 "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
553 "'Google','Google','http://www.google.com/',"
554 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
555 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
557 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
558 "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);"
559 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
561 "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
562 "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL,"
564 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
566 "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
567 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);"
568 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
570 "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
571 "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,"
573 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
575 "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
576 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
578 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
580 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
581 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
582 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
583 "'AGATWA','AFAGVASF');"
584 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
586 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
587 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
588 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
590 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
591 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
592 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
593 "'http://www.icann.com/','http://www.icann.com/',NULL,"
594 "'PNGAXF0AAFF','DAAFASF');"
595 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
597 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
598 "'The WebKit Open Source Project','The WebKit Open Source Project',"
599 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');"
600 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
601 "last_sync_timestamp INT, name VARCHAR(128), "
602 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
603 "db_create_version VARCHAR(128), db_create_time int, "
604 "next_id bigint default -2, cache_guid VARCHAR(32));"
605 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
606 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
607 "'Unknown',1263522064,-65542,"
608 "'9010788312004066376x-6609234393368420856x');"
609 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
610 "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
611 ASSERT_TRUE(connection->CommitTransaction());
614 void MigrationTest::SetUpVersion69Database(sql::Connection* connection) {
615 ASSERT_TRUE(connection->is_open());
616 ASSERT_TRUE(connection->BeginTransaction());
617 ASSERT_TRUE(connection->Execute(
618 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
619 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
620 "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
621 "base_version bigint default -1,server_version bigint default 0,"
622 "mtime bigint default 0,server_mtime bigint default 0,"
623 "ctime bigint default 0,server_ctime bigint default 0,"
624 "server_position_in_parent bigint default 0,"
625 "local_external_id bigint default 0,id varchar(255) default 'r',"
626 "parent_id varchar(255) default 'r',"
627 "server_parent_id varchar(255) default 'r',"
628 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
629 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
630 "is_del bit default 0,is_dir bit default 0,"
631 "is_bookmark_object bit default 0,server_is_dir bit default 0,"
632 "server_is_del bit default 0,"
633 "server_is_bookmark_object bit default 0,"
634 "non_unique_name varchar,server_non_unique_name varchar(255),"
635 "bookmark_url varchar,server_bookmark_url varchar,"
636 "singleton_tag varchar,bookmark_favicon blob,"
637 "server_bookmark_favicon blob, specifics blob, "
638 "server_specifics blob);"
639 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
640 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL,"
641 "NULL,NULL,X'',X'');"
642 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
644 "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
645 "'Deleted Item','Deleted Item','http://www.google.com/',"
646 "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG',"
647 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415"
648 "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F"
649 "6D2F32120B4153414447414447414447');"
650 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
652 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
653 "'Welcome to Chromium','Welcome to Chromium',"
654 "'http://www.google.com/chrome/intl/en/welcome.html',"
655 "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL,"
656 "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
657 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168"
658 "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6"
659 "56E2F77656C636F6D652E68746D6C1200');"
660 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
662 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
663 "'Google','Google','http://www.google.com/',"
664 "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166"
665 "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'"
666 "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464"
668 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
670 ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet',"
671 "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');"
672 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
674 "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome',"
675 "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);"
676 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
678 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
679 "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL,"
680 "X'C2881000',X'C2881000');"
681 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
683 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1,"
684 "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL,"
685 "X'C2881000',X'C2881000');"
686 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
688 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
689 "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
690 "NULL,NULL,X'C2881000',X'C2881000');"
691 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
693 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
694 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
695 "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
696 "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6"
697 "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576"
698 "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');"
699 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
701 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
702 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL,"
703 "X'C2881000',X'C2881000');"
704 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
706 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
707 "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
708 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
709 "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF',"
710 "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
711 "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963"
712 "616E6E2E636F6D2F120744414146415346');"
713 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
715 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
716 "'The WebKit Open Source Project','The WebKit Open Source Project',"
717 "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y',"
718 "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2"
719 "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');"
720 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
721 "last_sync_timestamp INT, name VARCHAR(128), "
722 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
723 "db_create_version VARCHAR(128), db_create_time int, "
724 "next_id bigint default -2, cache_guid VARCHAR(32));"
725 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
726 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
727 "'Unknown',1263522064,-65542,"
728 "'9010788312004066376x-6609234393368420856x');"
729 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
730 "INSERT INTO share_version VALUES('nick@chromium.org',69);"
732 ASSERT_TRUE(connection->CommitTransaction());
735 void MigrationTest::SetUpVersion70Database(sql::Connection* connection) {
736 ASSERT_TRUE(connection->is_open());
737 ASSERT_TRUE(connection->BeginTransaction());
738 ASSERT_TRUE(connection->Execute(
739 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
740 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
741 "CREATE TABLE share_info (id VARCHAR(128) primary key, "
742 "last_sync_timestamp INT, name VARCHAR(128), "
743 "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
744 "db_create_version VARCHAR(128), db_create_time int, "
745 "next_id bigint default -2, cache_guid VARCHAR(32));"
746 "INSERT INTO share_info VALUES('nick@chromium.org',694,"
747 "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
748 "'Unknown',1263522064,-65542,"
749 "'9010788312004066376x-6609234393368420856x');"
750 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
751 "INSERT INTO share_version VALUES('nick@chromium.org',70);"
752 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
753 "base_version bigint default -1,server_version bigint default 0,"
754 "mtime bigint default 0,server_mtime bigint default 0,"
755 "ctime bigint default 0,server_ctime bigint default 0,"
756 "server_position_in_parent bigint default 0,"
757 "local_external_id bigint default 0,id varchar(255) default 'r',"
758 "parent_id varchar(255) default 'r',"
759 "server_parent_id varchar(255) default 'r',"
760 "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
761 "is_unsynced bit default 0,is_unapplied_update bit default 0,"
762 "is_del bit default 0,is_dir bit default 0,"
763 "server_is_dir bit default 0,server_is_del bit default 0,"
764 "non_unique_name varchar,server_non_unique_name varchar(255),"
765 "unique_server_tag varchar,unique_client_tag varchar,"
766 "specifics blob,server_specifics blob);"
767 "INSERT INTO metas VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
768 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
769 "INSERT INTO metas VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2) ","
770 "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,"
771 "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A"
772 "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026"
773 "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741"
775 "INSERT INTO metas VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
777 "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
778 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A"
779 "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74"
780 "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F"
781 "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
782 "6C636F6D652E68746D6C1200');"
783 "INSERT INTO metas VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
785 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
786 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6"
787 "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777"
788 "72E676F6F676C652E636F6D2F12084147464447415347');"
789 "INSERT INTO metas VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
791 "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
792 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
793 "INSERT INTO metas VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
795 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome',"
796 "'Google Chrome','google_chrome',NULL,NULL,NULL);"
797 "INSERT INTO metas VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
799 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
800 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',"
802 "INSERT INTO metas VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
804 "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,"
805 "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',"
807 "INSERT INTO metas VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
809 "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
810 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
811 "X'C2881000',X'C2881000');"
812 "INSERT INTO metas VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
814 "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
815 "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
816 "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F"
817 "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872"
818 "6F6D69756D2E6F72672F6F7468657212084146414756415346');"
819 "INSERT INTO metas VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
821 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
822 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
824 "INSERT INTO metas VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
826 "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
827 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
828 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
829 "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F"
830 "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69"
831 "63616E6E2E636F6D2F120744414146415346');"
832 "INSERT INTO metas VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
834 "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
835 "'The WebKit Open Source Project','The WebKit Open Source Project',"
836 "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
837 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550"
840 ASSERT_TRUE(connection->CommitTransaction());
843 void MigrationTest::SetUpVersion71Database(sql::Connection* connection) {
844 ASSERT_TRUE(connection->is_open());
845 ASSERT_TRUE(connection->BeginTransaction());
846 ASSERT_TRUE(connection->Execute(
847 "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
848 "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
849 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
850 "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);"
851 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
852 "base_version bigint default -1,server_version bigint default 0,"
853 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
854 "default 0,server_ctime bigint default 0,server_position_in_parent "
855 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
856 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
857 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
858 "varchar(255) default 'r',is_unsynced bit default 0,"
859 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
860 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
861 "non_unique_name varchar,server_non_unique_name varchar(255),"
862 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
863 "server_specifics blob);"
864 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
865 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
866 "NULL,NULL,X'',X'');"
867 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
869 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
870 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
871 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
872 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
874 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
876 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
877 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
878 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
879 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
880 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
881 "652E68746D6C1200');"
882 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
884 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
885 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
886 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
887 "76F6F676C652E636F6D2F12084147464447415347');"
888 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
890 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
891 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
892 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
894 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
895 ",'google_chrome',NULL,NULL,NULL);"
896 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
898 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
899 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
900 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
902 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
903 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
904 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
906 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
907 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
908 "X'C2881000',X'C2881000');"
909 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
911 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
912 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
913 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
914 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
915 "D2E6F72672F6F7468657212084146414756415346');"
916 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
918 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
919 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
921 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
923 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
924 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
925 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
926 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
927 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
928 "E636F6D2F120744414146415346');"
929 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
931 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
932 "'The WebKit Open Source Project','The WebKit Open Source Project',"
933 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
934 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
936 "CREATE TABLE models (model_id BLOB primary key, "
937 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
938 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
939 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
940 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
941 "next_id INT default -2, cache_guid TEXT);"
942 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
943 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
944 "'9010788312004066376x-6609234393368420856x');"));
945 ASSERT_TRUE(connection->CommitTransaction());
948 void MigrationTest::SetUpVersion72Database(sql::Connection* connection) {
949 ASSERT_TRUE(connection->is_open());
950 ASSERT_TRUE(connection->BeginTransaction());
951 ASSERT_TRUE(connection->Execute(
952 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
953 "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);"
954 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
955 "base_version bigint default -1,server_version bigint default 0,"
956 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
957 "default 0,server_ctime bigint default 0,server_position_in_parent "
958 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
959 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
960 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
961 "varchar(255) default 'r',is_unsynced bit default 0,"
962 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
963 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
964 "non_unique_name varchar,server_non_unique_name varchar(255),"
965 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
966 "server_specifics blob);"
967 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
968 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
969 "NULL,NULL,X'',X'');"
970 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
972 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
973 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
974 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
975 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
977 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
979 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
980 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
981 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
982 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
983 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
984 "652E68746D6C1200');"
985 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
987 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
988 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
989 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
990 "76F6F676C652E636F6D2F12084147464447415347');"
991 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
993 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
994 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
995 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
997 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
998 ",'google_chrome',NULL,NULL,NULL);"
999 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1001 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
1002 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1003 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1005 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
1006 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1007 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1009 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
1010 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
1011 "X'C2881000',X'C2881000');"
1012 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1014 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
1015 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
1016 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
1017 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1018 "D2E6F72672F6F7468657212084146414756415346');"
1019 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1021 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
1022 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
1024 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1026 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
1027 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
1028 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
1029 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1030 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
1031 "E636F6D2F120744414146415346');"
1032 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1034 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
1035 "'The WebKit Open Source Project','The WebKit Open Source Project',"
1036 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
1037 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
1039 "CREATE TABLE models (model_id BLOB primary key, "
1040 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
1041 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1042 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
1043 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
1044 "next_id INT default -2, cache_guid TEXT);"
1045 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1046 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
1047 "'9010788312004066376x-6609234393368420856x');"));
1048 ASSERT_TRUE(connection->CommitTransaction());
1051 void MigrationTest::SetUpVersion73Database(sql::Connection* connection) {
1052 ASSERT_TRUE(connection->is_open());
1053 ASSERT_TRUE(connection->BeginTransaction());
1054 ASSERT_TRUE(connection->Execute(
1055 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1056 "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);"
1057 "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
1058 "base_version bigint default -1,server_version bigint default 0,"
1059 "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
1060 "default 0,server_ctime bigint default 0,server_position_in_parent "
1061 "bigint default 0,local_external_id bigint default 0,id varchar(255) "
1062 "default 'r',parent_id varchar(255) default 'r',server_parent_id "
1063 "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
1064 "varchar(255) default 'r',is_unsynced bit default 0,"
1065 "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
1066 "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
1067 "non_unique_name varchar,server_non_unique_name varchar(255),"
1068 "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
1069 "server_specifics blob);"
1070 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1071 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
1072 "NULL,NULL,X'',X'');"
1073 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1075 "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
1076 "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
1077 "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
1078 "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
1080 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1082 "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
1083 "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
1084 "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
1085 "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
1086 "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
1087 "652E68746D6C1200');"
1088 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1090 "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
1091 "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
1092 "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
1093 "76F6F676C652E636F6D2F12084147464447415347');"
1094 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1096 "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
1097 "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
1098 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1100 "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
1101 ",'google_chrome',NULL,NULL,NULL);"
1102 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1104 "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
1105 "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1106 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1108 "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
1109 "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1110 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1112 "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
1113 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
1114 "X'C2881000',X'C2881000');"
1115 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1117 "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
1118 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
1119 "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
1120 "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1121 "D2E6F72672F6F7468657212084146414756415346');"
1122 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1124 "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
1125 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
1127 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1129 "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
1130 "'ICANN | Internet Corporation for Assigned Names and Numbers',"
1131 "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
1132 "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1133 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
1134 "E636F6D2F120744414146415346');"
1135 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1137 "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
1138 "'The WebKit Open Source Project','The WebKit Open Source Project',"
1139 "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
1140 "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
1142 "CREATE TABLE models (model_id BLOB primary key, "
1143 "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
1144 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1145 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
1146 "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
1147 "next_id INT default -2, cache_guid TEXT, "
1148 "notification_state BLOB);"
1149 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1150 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
1151 "'9010788312004066376x-6609234393368420856x',X'C2881000');"));
1152 ASSERT_TRUE(connection->CommitTransaction());
1155 void MigrationTest::SetUpVersion74Database(sql::Connection* connection) {
1156 ASSERT_TRUE(connection->is_open());
1157 ASSERT_TRUE(connection->BeginTransaction());
1158 ASSERT_TRUE(connection->Execute(
1159 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1160 "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
1161 "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
1162 " INT, initial_sync_ended BOOLEAN default 0);"
1163 "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
1164 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
1165 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
1166 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
1167 "tion_state INT default 0, bookmarks_added_during_autofill_migration"
1168 " INT default 0, autofill_migration_time INT default 0, autofill_ent"
1169 "ries_added_during_migration INT default 0, autofill_profiles_added_"
1170 "during_migration INT default 0);"
1171 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
1172 ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
1173 ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
1174 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
1175 "e_version bigint default -1,server_version bigint default 0,mtime b"
1176 "igint default 0,server_mtime bigint default 0,ctime bigint default "
1177 "0,server_ctime bigint default 0,server_position_in_parent bigint de"
1178 "fault 0,local_external_id bigint default 0,id varchar(255) default "
1179 "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
1180 ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
1181 " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
1182 "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
1183 "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
1184 "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
1185 "nt_tag varchar,specifics blob,server_specifics blob);"
1186 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1187 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
1189 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1190 ",-2097152,4,'s_ID_2','s_ID"
1191 "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
1192 "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
1193 "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
1194 "6F6F676C652E636F6D2F32120B4153414447414447414447');"
1195 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1196 ",-3145728,3,'s_ID_4','s_ID"
1197 "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
1198 "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
1199 "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
1200 "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
1201 "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
1202 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1203 ",1048576,7,'s_ID_5','s_ID_"
1204 "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
1205 "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
1206 "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
1207 "36F6D2F12084147464447415347');"
1208 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1209 ",-4194304,6,'s_ID_6','s_ID"
1210 "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
1211 ",NULL,X'C2881000',X'C2881000');"
1212 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1213 ",1048576,0,'s_ID_7','r','r"
1214 "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
1215 "e',NULL,NULL,NULL);"
1216 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1217 ",1048576,0,'s_ID_8','s_ID_"
1218 "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
1219 "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
1220 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1221 ",1048576,1,'s_ID_9','s_ID_"
1222 "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
1223 ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
1224 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1225 ",2097152,2,'s_ID_10','s_I"
1226 "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
1227 "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
1228 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1229 ",-1048576,8,'s_ID_11','s_"
1230 "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
1231 "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
1232 "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
1233 "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
1234 "84146414756415346');"
1235 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1236 ",0,9,'s_ID_12','s_ID_6','"
1237 "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
1238 "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
1239 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1240 ",-917504,10,'s_ID_13','s_"
1241 "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
1242 "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
1243 "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
1244 "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
1245 "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
1247 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1248 ",1048576,11,'s_ID_14','s_"
1249 "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
1250 "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
1251 "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
1252 "703A2F2F7765626B69742E6F72672F781205504E473259');"
1254 ASSERT_TRUE(connection->CommitTransaction());
1257 void MigrationTest::SetUpVersion75Database(sql::Connection* connection) {
1258 ASSERT_TRUE(connection->is_open());
1259 ASSERT_TRUE(connection->BeginTransaction());
1260 ASSERT_TRUE(connection->Execute(
1261 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1262 "INSERT INTO 'share_version' VALUES('nick@chromium.org',75);"
1263 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
1264 "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
1265 "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
1266 "tion_state INT default 0,bookmarks_added_during_autofill_migration "
1267 "INT default 0, autofill_migration_time INT default 0, autofill_entr"
1268 "ies_added_during_migration INT default 0, autofill_profiles_added_d"
1269 "uring_migration INT default 0);"
1270 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org"
1271 "','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-655"
1272 "42,'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
1273 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
1274 "initial_sync_ended BOOLEAN default 0);"
1275 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1276 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,ba"
1277 "se_version bigint default -1,server_version bigint default 0,mtime"
1278 " bigint default 0,server_mtime bigint default 0,ctime bigint defau"
1279 "lt 0,server_ctime bigint default 0,server_position_in_parent bigin"
1280 "t default 0,local_external_id bigint default 0,id varchar(255) def"
1281 "ault 'r',parent_id varchar(255) default 'r',server_parent_id varch"
1282 "ar(255) default 'r',prev_id varchar(255) default 'r',next_id varch"
1283 "ar(255) default 'r',is_unsynced bit default 0,is_unapplied_update "
1284 "bit default 0,is_del bit default 0,is_dir bit default 0,server_is_"
1285 "dir bit default 0,server_is_del bit default 0,non_unique_name varc"
1286 "har,server_non_unique_name varchar(255),unique_server_tag varchar,"
1287 "unique_client_tag varchar,specifics blob,server_specifics blob);"
1288 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1289 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NUL"
1291 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1292 ",-2097152,4,'s_ID_"
1293 "2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Ite"
1294 "m','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772"
1295 "E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A176874"
1296 "74703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474"
1298 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1299 ",-3145728,3,'s_ID_"
1300 "4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to "
1301 "Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A316874747"
1302 "03A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F65"
1303 "6E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7"
1304 "777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
1305 "6C636F6D652E68746D6C1200');"
1306 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1307 ",1048576,7,'s_ID_5"
1308 "','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Goo"
1309 "gle',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C65"
1310 "2E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F777"
1311 "7772E676F6F676C652E636F6D2F12084147464447415347');"
1312 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1313 ",-4194304,6,'s_ID_"
1314 "6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The In"
1315 "ternet',NULL,NULL,X'C2881000',X'C2881000');"
1316 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1317 ",1048576,0,'s_ID_7"
1318 "','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','"
1319 "google_chrome',NULL,NULL,NULL);"
1320 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1321 ",1048576,0,'s_ID_8"
1322 "','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks'"
1323 ",'google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1324 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1325 ",1048576,1,'s_ID_9"
1326 "','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','B"
1327 "ookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1328 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1330 "10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks"
1331 "','Other Bookmarks','other_bookmarks',NULL,X'C2881000',X'C28810"
1333 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1335 "_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chr"
1336 "omium Projects)','Home (The Chromium Projects)',NULL,NULL,X'C28"
1337 "810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F120641"
1338 "4741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
1339 "D2E6F72672F6F7468657212084146414756415346');"
1340 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1342 "_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmark"
1343 "s','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000');"
1344 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1346 "_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN |"
1347 " Internet Corporation for Assigned Names and Numbers','ICANN | "
1348 "Internet Corporation for Assigned Names and Numbers',NULL,NULL,"
1349 "X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
1350 "E474158463041414646',X'C28810200A15687474703A2F2F7777772E696361"
1351 "6E6E2E636F6D2F120744414146415346');"
1352 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1354 "_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Op"
1355 "en Source Project','The WebKit Open Source Project',NULL,NULL,X"
1356 "'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',"
1357 "X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473"
1360 ASSERT_TRUE(connection->CommitTransaction());
1363 void MigrationTest::SetUpVersion76Database(sql::Connection* connection) {
1364 ASSERT_TRUE(connection->is_open());
1365 ASSERT_TRUE(connection->BeginTransaction());
1366 ASSERT_TRUE(connection->Execute(
1367 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1368 "INSERT INTO 'share_version' VALUES('nick@chromium.org',76);"
1369 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1370 "itial_sync_ended BOOLEAN default 0);"
1371 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1372 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1373 "_version bigint default -1,server_version bigint default 0,mtime big"
1374 "int default 0,server_mtime bigint default 0,ctime bigint default 0,s"
1375 "erver_ctime bigint default 0,server_position_in_parent bigint defaul"
1376 "t 0,local_external_id bigint default 0,id varchar(255) default 'r',p"
1377 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1378 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1379 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1380 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1381 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1382 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1383 "har,specifics blob,server_specifics blob);"
1384 "INSERT INTO 'metas' VALUES(1,-1,0," LEGACY_PROTO_TIME_VALS(1)
1385 ",0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'')"
1387 "INSERT INTO 'metas' VALUES(2,669,669," LEGACY_PROTO_TIME_VALS(2)
1388 ",-2097152,4,'s_ID_2','s_ID_9"
1389 "','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted Ite"
1390 "m',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6"
1391 "D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E676F6F6"
1392 "76C652E636F6D2F32120B4153414447414447414447');"
1393 "INSERT INTO 'metas' VALUES(4,681,681," LEGACY_PROTO_TIME_VALS(4)
1394 ",-3145728,3,'s_ID_4','s_ID_9"
1395 "','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','Welc"
1396 "ome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E676F6"
1397 "F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746"
1398 "D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6"
1399 "368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
1400 "INSERT INTO 'metas' VALUES(5,677,677," LEGACY_PROTO_TIME_VALS(5)
1401 ",1048576,7,'s_ID_5','s_ID_9'"
1402 ",'s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NULL,"
1403 "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F1208414741"
1404 "5347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D"
1405 "2F12084147464447415347');"
1406 "INSERT INTO 'metas' VALUES(6,694,694," LEGACY_PROTO_TIME_VALS(6)
1407 ",-4194304,6,'s_ID_6','s_ID_9"
1408 "','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL,NU"
1409 "LL,X'C2881000',X'C2881000');"
1410 "INSERT INTO 'metas' VALUES(7,663,663," LEGACY_PROTO_TIME_VALS(7)
1411 ",1048576,0,'s_ID_7','r','r',"
1412 "'r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrome',"
1414 "INSERT INTO 'metas' VALUES(8,664,664," LEGACY_PROTO_TIME_VALS(8)
1415 ",1048576,0,'s_ID_8','s_ID_7'"
1416 ",'s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chrome"
1417 "_bookmarks',NULL,X'C2881000',X'C2881000');"
1418 "INSERT INTO 'metas' VALUES(9,665,665," LEGACY_PROTO_TIME_VALS(9)
1419 ",1048576,1,'s_ID_9','s_ID_8'"
1420 ",'s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar','b"
1421 "ookmark_bar',NULL,X'C2881000',X'C2881000');"
1422 "INSERT INTO 'metas' VALUES(10,666,666," LEGACY_PROTO_TIME_VALS(10)
1423 ",2097152,2,'s_ID_10','s_ID_"
1424 "8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Bookma"
1425 "rks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
1426 "INSERT INTO 'metas' VALUES(11,683,683," LEGACY_PROTO_TIME_VALS(11)
1427 ",-1048576,8,'s_ID_11','s_ID"
1428 "_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projects)"
1429 "','Home (The Chromium Projects)',NULL,NULL,X'C28810220A18687474703A2"
1430 "F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1"
1431 "D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120841464"
1433 "INSERT INTO 'metas' VALUES(12,685,685," LEGACY_PROTO_TIME_VALS(12)
1434 ",0,9,'s_ID_12','s_ID_6','s_"
1435 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
1436 "arks',NULL,NULL,X'C2881000',X'C2881000');"
1437 "INSERT INTO 'metas' VALUES(13,687,687," LEGACY_PROTO_TIME_VALS(13)
1438 ",-917504,10,'s_ID_13','s_ID"
1439 "_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Corpo"
1440 "ration for Assigned Names and Numbers','ICANN | Internet Corporation"
1441 " for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474703A2"
1442 "F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C288102"
1443 "00A15687474703A2F2F7777772E6963616E6E2E636F6D2F120744414146415346');"
1444 "INSERT INTO 'metas' VALUES(14,692,692," LEGACY_PROTO_TIME_VALS(14)
1445 ",1048576,11,'s_ID_14','s_ID"
1446 "_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Proje"
1447 "ct','The WebKit Open Source Project',NULL,NULL,X'C288101A0A126874747"
1448 "03A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2"
1449 "F2F7765626B69742E6F72672F781205504E473259');"
1450 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1451 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1452 "ult -2, cache_guid TEXT , notification_state BLOB);"
1453 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1454 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
1455 "9010788312004066376x-6609234393368420856x',NULL);"
1457 ASSERT_TRUE(connection->CommitTransaction());
1460 void MigrationTest::SetUpVersion77Database(sql::Connection* connection) {
1461 ASSERT_TRUE(connection->is_open());
1462 ASSERT_TRUE(connection->BeginTransaction());
1463 ASSERT_TRUE(connection->Execute(
1464 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1465 "INSERT INTO 'share_version' VALUES('nick@chromium.org',77);"
1466 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1467 "itial_sync_ended BOOLEAN default 0);"
1468 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1469 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1470 "_version bigint default -1,server_version bigint default 0,server_po"
1471 "sition_in_parent bigint default 0,local_external_id bigint default 0"
1472 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1473 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1474 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1475 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1476 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1477 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1478 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1479 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1480 "har,specifics blob,server_specifics blob);"
1481 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1)
1482 ",'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
1483 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
1484 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1485 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1486 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1487 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1488 "14447414447414447');"
1489 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
1490 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1491 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1492 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1493 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1494 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1495 "E2F77656C636F6D652E68746D6C1200');"
1496 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7," META_PROTO_TIMES_VALS(5)
1497 ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','"
1498 "Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E"
1499 "636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E67"
1500 "6F6F676C652E636F6D2F12084147464447415347');"
1501 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
1502 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1503 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1505 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0," META_PROTO_TIMES_VALS(7)
1506 ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Goo"
1507 "gle Chrome','google_chrome',NULL,NULL,NULL);"
1508 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0," META_PROTO_TIMES_VALS(8)
1509 ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmar"
1510 "ks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
1511 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1," META_PROTO_TIMES_VALS(9)
1512 ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar'"
1513 ",'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
1514 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
1515 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1516 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1517 "LL,X'C2881000',X'C2881000');"
1518 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
1519 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1520 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1521 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1522 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1523 "8726F6D69756D2E6F72672F6F7468657212084146414756415346');"
1524 "INSERT INTO 'metas' VALUES(12,685,685,0,9," META_PROTO_TIMES_VALS(12)
1525 ",'s_ID_12','s_ID_6','s_"
1526 "ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookm"
1527 "arks',NULL,NULL,X'C2881000',X'C2881000');"
1528 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
1529 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1530 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1531 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1532 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1533 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1534 "E6963616E6E2E636F6D2F120744414146415346');"
1535 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
1536 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1537 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1538 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1539 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1540 "81205504E473259');"
1541 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1542 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1543 "ult -2, cache_guid TEXT , notification_state BLOB);"
1544 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1545 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
1546 "9010788312004066376x-6609234393368420856x',NULL);"
1548 ASSERT_TRUE(connection->CommitTransaction());
1551 void MigrationTest::SetUpVersion78Database(sql::Connection* connection) {
1552 ASSERT_TRUE(connection->is_open());
1553 ASSERT_TRUE(connection->BeginTransaction());
1554 ASSERT_TRUE(connection->Execute(
1555 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1556 "INSERT INTO 'share_version' VALUES('nick@chromium.org',78);"
1557 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1558 "itial_sync_ended BOOLEAN default 0);"
1559 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1560 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1561 "_version bigint default -1,server_version bigint default 0,server_po"
1562 "sition_in_parent bigint default 0,local_external_id bigint default 0"
1563 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1564 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1565 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1566 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1567 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1568 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1569 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1570 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1571 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
1573 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
1574 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
1575 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
1576 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1577 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1578 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1579 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1580 "14447414447414447',NULL);"
1581 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
1582 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1583 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1584 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1585 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1586 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1587 "E2F77656C636F6D652E68746D6C1200',NULL);"
1588 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
1589 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
1590 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
1591 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
1592 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
1594 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
1595 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1596 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1598 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
1599 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
1600 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
1601 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
1602 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
1603 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
1604 "00',X'C2881000',NULL);"
1605 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
1606 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
1607 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
1608 "000',X'C2881000',NULL);"
1609 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
1610 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1611 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1612 "LL,X'C2881000',X'C2881000',NULL);"
1613 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
1614 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1615 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1616 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1617 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1618 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
1619 "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
1620 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
1621 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
1622 "2881000',X'C2881000',NULL);"
1623 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
1624 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1625 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1626 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1627 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1628 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1629 "E6963616E6E2E636F6D2F120744414146415346',NULL);"
1630 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
1631 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1632 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1633 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1634 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1635 "81205504E473259',NULL);"
1636 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1637 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1638 "ult -2, cache_guid TEXT , notification_state BLOB);"
1639 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1640 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,'"
1641 "9010788312004066376x-6609234393368420856x',NULL);"
1643 ASSERT_TRUE(connection->CommitTransaction());
1646 void MigrationTest::SetUpVersion79Database(sql::Connection* connection) {
1647 ASSERT_TRUE(connection->is_open());
1648 ASSERT_TRUE(connection->BeginTransaction());
1649 ASSERT_TRUE(connection->Execute(
1650 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1651 "INSERT INTO 'share_version' VALUES('nick@chromium.org',79);"
1652 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1653 "itial_sync_ended BOOLEAN default 0);"
1654 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1655 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1656 "_version bigint default -1,server_version bigint default 0,server_po"
1657 "sition_in_parent bigint default 0,local_external_id bigint default 0"
1658 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1659 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1660 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1661 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1662 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1663 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1664 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1665 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1666 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
1668 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
1669 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
1670 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
1671 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1672 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1673 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1674 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1675 "14447414447414447',NULL);"
1676 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
1677 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1678 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1679 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1680 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1681 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1682 "E2F77656C636F6D652E68746D6C1200',NULL);"
1683 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
1684 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
1685 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
1686 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
1687 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
1689 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
1690 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1691 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1693 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
1694 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
1695 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
1696 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
1697 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
1698 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
1699 "00',X'C2881000',NULL);"
1700 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
1701 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
1702 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
1703 "000',X'C2881000',NULL);"
1704 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
1705 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1706 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1707 "LL,X'C2881000',X'C2881000',NULL);"
1708 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
1709 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1710 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1711 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1712 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1713 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
1714 "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
1715 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
1716 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
1717 "2881000',X'C2881000',NULL);"
1718 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
1719 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1720 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1721 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1722 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1723 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1724 "E6963616E6E2E636F6D2F120744414146415346',NULL);"
1725 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
1726 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1727 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1728 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1729 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1730 "81205504E473259',NULL);"
1731 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1732 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1733 "ult -2, cache_guid TEXT , notification_state BLOB);"
1734 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1735 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
1736 "-131078,'9010788312004066376x-6609234393368420856x',NULL);"
1738 ASSERT_TRUE(connection->CommitTransaction());
1741 void MigrationTest::SetUpVersion80Database(sql::Connection* connection) {
1742 ASSERT_TRUE(connection->is_open());
1743 ASSERT_TRUE(connection->BeginTransaction());
1744 ASSERT_TRUE(connection->Execute(
1745 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1746 "INSERT INTO 'share_version' VALUES('nick@chromium.org',80);"
1747 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1748 "itial_sync_ended BOOLEAN default 0);"
1749 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1750 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1751 "_version bigint default -1,server_version bigint default 0,server_po"
1752 "sition_in_parent bigint default 0,local_external_id bigint default 0"
1753 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1754 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1755 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1756 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1757 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1758 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1759 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1760 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1761 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
1763 "INSERT INTO 'metas' VALUES(1,-1,0,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
1764 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL);"
1765 "INSERT INTO 'metas' VALUES(2,669,669,-2097152,4,"
1766 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1767 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1768 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1769 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1770 "14447414447414447',NULL);"
1771 "INSERT INTO 'metas' VALUES(4,681,681,-3145728,3,"
1772 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1773 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1774 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1775 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1776 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1777 "E2F77656C636F6D652E68746D6C1200',NULL);"
1778 "INSERT INTO 'metas' VALUES(5,677,677,1048576,7,"
1779 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
1780 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
1781 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
1782 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
1784 "INSERT INTO 'metas' VALUES(6,694,694,-4194304,6,"
1785 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1786 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1788 "INSERT INTO 'metas' VALUES(7,663,663,1048576,0,"
1789 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
1790 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL);"
1791 "INSERT INTO 'metas' VALUES(8,664,664,1048576,0,"
1792 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
1793 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
1794 "00',X'C2881000',NULL);"
1795 "INSERT INTO 'metas' VALUES(9,665,665,1048576,1,"
1796 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
1797 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
1798 "000',X'C2881000',NULL);"
1799 "INSERT INTO 'metas' VALUES(10,666,666,2097152,2,"
1800 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1801 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1802 "LL,X'C2881000',X'C2881000',NULL);"
1803 "INSERT INTO 'metas' VALUES(11,683,683,-1048576,8,"
1804 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1805 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1806 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1807 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1808 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL);"
1809 "INSERT INTO 'metas' VALUES(12,685,685,0,9,"
1810 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
1811 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
1812 "2881000',X'C2881000',NULL);"
1813 "INSERT INTO 'metas' VALUES(13,687,687,-917504,10,"
1814 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1815 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1816 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1817 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1818 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1819 "E6963616E6E2E636F6D2F120744414146415346',NULL);"
1820 "INSERT INTO 'metas' VALUES(14,692,692,1048576,11,"
1821 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1822 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1823 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1824 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1825 "81205504E473259',NULL);"
1826 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1827 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1828 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
1830 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1831 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
1832 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"
1834 ASSERT_TRUE(connection->CommitTransaction());
1838 // Helper definitions to create the version 81 DB tables.
1841 const int V80_ROW_COUNT = 13;
1842 const int64 V80_POSITIONS[V80_ROW_COUNT] = {
1858 std::string V81_Ordinal(int n) {
1859 return Int64ToNodeOrdinal(V80_POSITIONS[n]).ToInternalValue();
1864 // Unlike the earlier versions, the rows for version 81 are generated
1865 // programmatically to accurately handle unprintable characters for the
1866 // server_ordinal_in_parent field.
1867 void MigrationTest::SetUpVersion81Database(sql::Connection* connection) {
1868 ASSERT_TRUE(connection->is_open());
1869 ASSERT_TRUE(connection->BeginTransaction());
1870 ASSERT_TRUE(connection->Execute(
1871 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1872 "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);"
1873 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1874 "itial_sync_ended BOOLEAN default 0);"
1875 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
1876 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1877 "_version bigint default -1,server_version bigint default 0, "
1878 "local_external_id bigint default 0"
1879 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1880 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1881 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1882 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1883 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1884 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1885 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1886 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1887 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
1888 ", server_ordinal_in_parent blob);"
1889 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1890 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1891 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
1893 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
1894 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
1895 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
1897 const char* insert_stmts[V80_ROW_COUNT] = {
1898 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
1899 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
1900 "INSERT INTO 'metas' VALUES(2,669,669,4,"
1901 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
1902 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
1903 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
1904 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
1905 "14447414447414447',NULL,?);",
1906 "INSERT INTO 'metas' VALUES(4,681,681,3,"
1907 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
1908 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
1909 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
1910 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
1911 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
1912 "E2F77656C636F6D652E68746D6C1200',NULL,?);",
1913 "INSERT INTO 'metas' VALUES(5,677,677,7,"
1914 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
1915 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
1916 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
1917 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
1919 "INSERT INTO 'metas' VALUES(6,694,694,6,"
1920 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
1921 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
1923 "INSERT INTO 'metas' VALUES(7,663,663,0,"
1924 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
1925 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
1926 "INSERT INTO 'metas' VALUES(8,664,664,0,"
1927 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
1928 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
1929 "00',X'C2881000',NULL,?);",
1930 "INSERT INTO 'metas' VALUES(9,665,665,1,"
1931 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
1932 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
1933 "000',X'C2881000',NULL,?);",
1934 "INSERT INTO 'metas' VALUES(10,666,666,2,"
1935 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
1936 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
1937 "LL,X'C2881000',X'C2881000',NULL,?);",
1938 "INSERT INTO 'metas' VALUES(11,683,683,8,"
1939 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
1940 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
1941 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
1942 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
1943 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
1944 "INSERT INTO 'metas' VALUES(12,685,685,9,"
1945 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
1946 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
1947 "2881000',X'C2881000',NULL,?);",
1948 "INSERT INTO 'metas' VALUES(13,687,687,10,"
1949 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
1950 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
1951 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
1952 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
1953 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
1954 "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
1955 "INSERT INTO 'metas' VALUES(14,692,692,11,"
1956 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
1957 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
1958 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
1959 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
1960 "81205504E473259',NULL,?);" };
1962 for (int i = 0; i < V80_ROW_COUNT; i++) {
1963 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
1964 std::string ord = V81_Ordinal(i);
1965 s.BindBlob(0, ord.data(), ord.length());
1966 ASSERT_TRUE(s.Run());
1969 ASSERT_TRUE(connection->CommitTransaction());
1972 void MigrationTest::SetUpVersion82Database(sql::Connection* connection) {
1973 ASSERT_TRUE(connection->is_open());
1974 ASSERT_TRUE(connection->BeginTransaction());
1975 ASSERT_TRUE(connection->Execute(
1976 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
1977 "INSERT INTO 'share_version' VALUES('nick@chromium.org',82);"
1978 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
1979 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
1981 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
1982 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
1983 "_version bigint default -1,server_version bigint default 0, "
1984 "local_external_id bigint default 0"
1985 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
1986 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
1987 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
1988 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
1989 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
1990 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
1991 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
1992 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
1993 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
1994 ", server_ordinal_in_parent blob);"
1995 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
1996 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
1997 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
1999 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2000 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
2001 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
2003 const char* insert_stmts[V80_ROW_COUNT] = {
2004 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
2005 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?);",
2006 "INSERT INTO 'metas' VALUES(2,669,669,4,"
2007 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
2008 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
2009 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
2010 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
2011 "14447414447414447',NULL,?);",
2012 "INSERT INTO 'metas' VALUES(4,681,681,3,"
2013 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
2014 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
2015 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
2016 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
2017 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
2018 "E2F77656C636F6D652E68746D6C1200',NULL,?);",
2019 "INSERT INTO 'metas' VALUES(5,677,677,7,"
2020 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
2021 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
2022 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
2023 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
2025 "INSERT INTO 'metas' VALUES(6,694,694,6,"
2026 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
2027 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
2029 "INSERT INTO 'metas' VALUES(7,663,663,0,"
2030 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
2031 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?);",
2032 "INSERT INTO 'metas' VALUES(8,664,664,0,"
2033 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
2034 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
2035 "00',X'C2881000',NULL,?);",
2036 "INSERT INTO 'metas' VALUES(9,665,665,1,"
2037 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
2038 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
2039 "000',X'C2881000',NULL,?);",
2040 "INSERT INTO 'metas' VALUES(10,666,666,2,"
2041 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
2042 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
2043 "LL,X'C2881000',X'C2881000',NULL,?);",
2044 "INSERT INTO 'metas' VALUES(11,683,683,8,"
2045 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
2046 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
2047 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
2048 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
2049 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?);",
2050 "INSERT INTO 'metas' VALUES(12,685,685,9,"
2051 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
2052 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
2053 "2881000',X'C2881000',NULL,?);",
2054 "INSERT INTO 'metas' VALUES(13,687,687,10,"
2055 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
2056 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
2057 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
2058 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
2059 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
2060 "E6963616E6E2E636F6D2F120744414146415346',NULL,?);",
2061 "INSERT INTO 'metas' VALUES(14,692,692,11,"
2062 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
2063 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
2064 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
2065 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
2066 "81205504E473259',NULL,?);" };
2068 for (int i = 0; i < V80_ROW_COUNT; i++) {
2069 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
2070 std::string ord = V81_Ordinal(i);
2071 s.BindBlob(0, ord.data(), ord.length());
2072 ASSERT_TRUE(s.Run());
2075 ASSERT_TRUE(connection->CommitTransaction());
2078 void MigrationTest::SetUpVersion83Database(sql::Connection* connection) {
2079 ASSERT_TRUE(connection->is_open());
2080 ASSERT_TRUE(connection->BeginTransaction());
2081 ASSERT_TRUE(connection->Execute(
2082 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2083 "INSERT INTO 'share_version' VALUES('nick@chromium.org',83);"
2084 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
2085 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
2087 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
2088 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2089 "_version bigint default -1,server_version bigint default 0, "
2090 "local_external_id bigint default 0"
2091 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
2092 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2093 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
2094 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
2095 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2096 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
2097 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
2098 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
2099 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
2100 ", server_ordinal_in_parent blob, transaction_version bigint default "
2102 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2103 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
2104 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
2106 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2107 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
2108 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
2110 const char* insert_stmts[V80_ROW_COUNT] = {
2111 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
2112 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
2113 "INSERT INTO 'metas' VALUES(2,669,669,4,"
2114 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
2115 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
2116 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
2117 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
2118 "14447414447414447',NULL,?,0);",
2119 "INSERT INTO 'metas' VALUES(4,681,681,3,"
2120 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
2121 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
2122 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
2123 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
2124 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
2125 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
2126 "INSERT INTO 'metas' VALUES(5,677,677,7,"
2127 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
2128 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
2129 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
2130 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
2132 "INSERT INTO 'metas' VALUES(6,694,694,6,"
2133 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
2134 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
2136 "INSERT INTO 'metas' VALUES(7,663,663,0,"
2137 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
2138 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
2140 "INSERT INTO 'metas' VALUES(8,664,664,0,"
2141 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
2142 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
2143 "00',X'C2881000',NULL,?,0);",
2144 "INSERT INTO 'metas' VALUES(9,665,665,1,"
2145 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
2146 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
2147 "000',X'C2881000',NULL,?,0);",
2148 "INSERT INTO 'metas' VALUES(10,666,666,2,"
2149 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
2150 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
2151 "LL,X'C2881000',X'C2881000',NULL,?,0);",
2152 "INSERT INTO 'metas' VALUES(11,683,683,8,"
2153 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
2154 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
2155 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
2156 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
2157 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
2158 "INSERT INTO 'metas' VALUES(12,685,685,9,"
2159 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
2160 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
2161 "2881000',X'C2881000',NULL,?,0);",
2162 "INSERT INTO 'metas' VALUES(13,687,687,10,"
2163 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
2164 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
2165 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
2166 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
2167 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
2168 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
2169 "INSERT INTO 'metas' VALUES(14,692,692,11,"
2170 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
2171 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
2172 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
2173 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
2174 "81205504E473259',NULL,?,0);" };
2176 for (int i = 0; i < V80_ROW_COUNT; i++) {
2177 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
2178 std::string ord = V81_Ordinal(i);
2179 s.BindBlob(0, ord.data(), ord.length());
2180 ASSERT_TRUE(s.Run());
2183 ASSERT_TRUE(connection->CommitTransaction());
2186 void MigrationTest::SetUpVersion84Database(sql::Connection* connection) {
2187 ASSERT_TRUE(connection->is_open());
2188 ASSERT_TRUE(connection->BeginTransaction());
2189 ASSERT_TRUE(connection->Execute(
2190 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2191 "INSERT INTO 'share_version' VALUES('nick@chromium.org',84);"
2192 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in"
2193 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT "
2195 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);"
2196 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2197 "_version bigint default -1,server_version bigint default 0, "
2198 "local_external_id bigint default 0"
2199 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
2200 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2201 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
2202 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
2203 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2204 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
2205 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
2206 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
2207 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
2208 ", server_ordinal_in_parent blob, transaction_version bigint default "
2210 "CREATE TABLE 'deleted_metas'"
2211 "(metahandle bigint primary key ON CONFLICT FAIL,base"
2212 "_version bigint default -1,server_version bigint default 0, "
2213 "local_external_id bigint default 0"
2214 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
2215 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2216 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
2217 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
2218 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2219 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
2220 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
2221 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
2222 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
2223 ", server_ordinal_in_parent blob, transaction_version bigint default "
2225 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2226 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
2227 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
2229 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2230 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
2231 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
2233 const char* insert_stmts[V80_ROW_COUNT] = {
2234 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
2235 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
2236 "INSERT INTO 'metas' VALUES(2,669,669,4,"
2237 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
2238 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
2239 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
2240 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
2241 "14447414447414447',NULL,?,0);",
2242 "INSERT INTO 'metas' VALUES(4,681,681,3,"
2243 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
2244 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
2245 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
2246 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
2247 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
2248 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
2249 "INSERT INTO 'metas' VALUES(5,677,677,7,"
2250 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
2251 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
2252 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
2253 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
2255 "INSERT INTO 'metas' VALUES(6,694,694,6,"
2256 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
2257 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
2259 "INSERT INTO 'metas' VALUES(7,663,663,0,"
2260 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
2261 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
2263 "INSERT INTO 'metas' VALUES(8,664,664,0,"
2264 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
2265 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
2266 "00',X'C2881000',NULL,?,0);",
2267 "INSERT INTO 'metas' VALUES(9,665,665,1,"
2268 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
2269 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
2270 "000',X'C2881000',NULL,?,0);",
2271 "INSERT INTO 'metas' VALUES(10,666,666,2,"
2272 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
2273 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
2274 "LL,X'C2881000',X'C2881000',NULL,?,0);",
2275 "INSERT INTO 'metas' VALUES(11,683,683,8,"
2276 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
2277 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
2278 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
2279 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
2280 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
2281 "INSERT INTO 'metas' VALUES(12,685,685,9,"
2282 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
2283 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
2284 "2881000',X'C2881000',NULL,?,0);",
2285 "INSERT INTO 'metas' VALUES(13,687,687,10,"
2286 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
2287 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
2288 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
2289 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
2290 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
2291 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
2292 "INSERT INTO 'metas' VALUES(14,692,692,11,"
2293 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
2294 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
2295 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
2296 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
2297 "81205504E473259',NULL,?,0);" };
2299 for (int i = 0; i < V80_ROW_COUNT; i++) {
2300 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
2301 std::string ord = V81_Ordinal(i);
2302 s.BindBlob(0, ord.data(), ord.length());
2303 ASSERT_TRUE(s.Run());
2306 ASSERT_TRUE(connection->CommitTransaction());
2309 void MigrationTest::SetUpVersion85Database(sql::Connection* connection) {
2310 ASSERT_TRUE(connection->is_open());
2311 ASSERT_TRUE(connection->BeginTransaction());
2312 ASSERT_TRUE(connection->Execute(
2313 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2314 "INSERT INTO 'share_version' VALUES('nick@chromium.org',85);"
2315 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, "
2316 "transaction_version BIGINT default 0);"
2317 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605', 1);"
2318 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base"
2319 "_version bigint default -1,server_version bigint default 0, "
2320 "local_external_id bigint default 0"
2321 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
2322 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2323 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
2324 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
2325 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2326 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
2327 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
2328 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
2329 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
2330 ", server_ordinal_in_parent blob, transaction_version bigint default "
2332 "CREATE TABLE 'deleted_metas'"
2333 "(metahandle bigint primary key ON CONFLICT FAIL,base"
2334 "_version bigint default -1,server_version bigint default 0, "
2335 "local_external_id bigint default 0"
2336 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d"
2337 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2338 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa"
2339 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul"
2340 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2341 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,"
2342 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu"
2343 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc"
2344 "har,specifics blob,server_specifics blob, base_server_specifics BLOB"
2345 ", server_ordinal_in_parent blob, transaction_version bigint default "
2347 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda"
2348 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa"
2349 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips "
2351 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
2352 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,"
2353 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);"));
2355 const char* insert_stmts[V80_ROW_COUNT] = {
2356 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','"
2357 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);",
2358 "INSERT INTO 'metas' VALUES(2,669,669,4,"
2359 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_"
2360 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1"
2361 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X"
2362 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534"
2363 "14447414447414447',NULL,?,0);",
2364 "INSERT INTO 'metas' VALUES(4,681,681,3,"
2365 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_"
2366 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL"
2367 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
2368 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687"
2369 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656"
2370 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);",
2371 "INSERT INTO 'metas' VALUES(5,677,677,7,"
2372 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_"
2373 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2"
2374 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1"
2375 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N"
2377 "INSERT INTO 'metas' VALUES(6,694,694,6,"
2378 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1"
2379 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'"
2381 "INSERT INTO 'metas' VALUES(7,663,663,0,"
2382 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog"
2383 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);"
2385 "INSERT INTO 'metas' VALUES(8,664,664,0,"
2386 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1"
2387 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810"
2388 "00',X'C2881000',NULL,?,0);",
2389 "INSERT INTO 'metas' VALUES(9,665,665,1,"
2390 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0"
2391 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881"
2392 "000',X'C2881000',NULL,?,0);",
2393 "INSERT INTO 'metas' VALUES(10,666,666,2,"
2394 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',"
2395 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU"
2396 "LL,X'C2881000',X'C2881000',NULL,?,0);",
2397 "INSERT INTO 'metas' VALUES(11,683,683,8,"
2398 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'"
2399 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj"
2400 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756"
2401 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636"
2402 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);",
2403 "INSERT INTO 'metas' VALUES(12,685,685,9,"
2404 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_"
2405 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C"
2406 "2881000',X'C2881000',NULL,?,0);",
2407 "INSERT INTO 'metas' VALUES(13,687,687,10,"
2408 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_"
2409 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names "
2410 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu"
2411 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636"
2412 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772"
2413 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);",
2414 "INSERT INTO 'metas' VALUES(14,692,692,11,"
2415 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'"
2416 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc"
2417 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726"
2418 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7"
2419 "81205504E473259',NULL,?,0);" };
2421 for (int i = 0; i < V80_ROW_COUNT; i++) {
2422 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i]));
2423 std::string ord = V81_Ordinal(i);
2424 s.BindBlob(0, ord.data(), ord.length());
2425 ASSERT_TRUE(s.Run());
2428 ASSERT_TRUE(connection->CommitTransaction());
2431 void MigrationTest::SetUpVersion86Database(sql::Connection* connection) {
2432 ASSERT_TRUE(connection->is_open());
2433 ASSERT_TRUE(connection->BeginTransaction());
2434 ASSERT_TRUE(connection->Execute(
2435 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
2436 "INSERT INTO 'share_version' VALUES('nick@chromium.org',86);"
2437 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB,"
2438 " transaction_version BIGINT default 0);"
2439 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1);"
2440 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,b"
2441 "ase_version bigint default -1,server_version bigint default 0,local_e"
2442 "xternal_id bigint default 0,transaction_version bigint default 0,mtim"
2443 "e bigint default 0,server_mtime bigint default 0,ctime bigint default"
2444 " 0,server_ctime bigint default 0,id varchar(255) default 'r',parent_i"
2445 "d varchar(255) default 'r',server_parent_id varchar(255) default 'r',"
2446 "is_unsynced bit default 0,is_unapplied_update bit default 0,is_del bi"
2447 "t default 0,is_dir bit default 0,server_is_dir bit default 0,server_i"
2448 "s_del bit default 0,non_unique_name varchar,server_non_unique_name va"
2449 "rchar(255),unique_server_tag varchar,unique_client_tag varchar,specif"
2450 "ics blob,server_specifics blob,base_server_specifics blob,server_uniq"
2451 "ue_position blob,unique_position blob,unique_bookmark_tag blob);"
2452 "INSERT INTO 'metas' VALUES(1,-1,0,0,0,"
2453 META_PROTO_TIMES_VALS(1)
2454 ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,"
2455 "X'',X'',NULL,X'',X'',X'');"
2456 "INSERT INTO 'metas' VALUES(6,694,694,6,0,"
2457 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'T"
2458 "he Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000',NULL,X'"
2460 "INSERT INTO 'metas' VALUES(7,663,663,0,0,"
2461 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chro"
2462 "me','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,X'',X'',X'');"
2463 "INSERT INTO 'metas' VALUES(8,664,664,0,0,"
2464 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'B"
2465 "ookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2"
2466 "881000',NULL,X'',X'',X'');"
2467 "INSERT INTO 'metas' VALUES(9,665,665,1,0,"
2468 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'B"
2469 "ookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C288100"
2470 "0',NULL,X'',X'',X'');"
2471 "INSERT INTO 'metas' VALUES(10,666,666,2,0,"
2472 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,"
2473 "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,X'C2881000"
2474 "',X'C2881000',NULL,X'',X'',X'');"
2475 "INSERT INTO 'metas' VALUES(11,683,683,8,0,"
2476 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,"
2477 "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,NU"
2478 "LL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1206"
2479 "414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756D2E6"
2480 "F72672F6F7468657212084146414756415346',NULL,X'',X'',X'');"
2481 "INSERT INTO 'metas' VALUES(12,685,685,9,0,"
2482 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,"
2483 "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',X'C2881000'"
2484 ",NULL,X'',X'',X'');"
2485 "INSERT INTO 'metas' VALUES(13,687,687,10,0,"
2486 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0"
2487 ",'ICANN | Internet Corporation for Assigned Names and Numbers','ICANN"
2488 " | Internet Corporation for Assigned Names and Numbers',NULL,NULL,X'C"
2489 "28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504E47415846"
2490 "3041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
2491 "20744414146415346',NULL,X'',X'',X'');"
2492 "INSERT INTO 'metas' VALUES(14,692,692,11,0,"
2493 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0"
2494 ",'The WebKit Open Source Project','The WebKit Open Source Project',NU"
2495 "LL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E475"
2496 "8',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259"
2497 "',NULL,X'',X'',X'');"
2498 "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT"
2499 " FAIL,base_version bigint default -1,server_version bigint default 0,"
2500 "local_external_id bigint default 0,transaction_version bigint default"
2501 " 0,mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
2502 "default 0,server_ctime bigint default 0,id varchar(255) default 'r',p"
2503 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defau"
2504 "lt 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is"
2505 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0,s"
2506 "erver_is_del bit default 0,non_unique_name varchar,server_non_unique_"
2507 "name varchar(255),unique_server_tag varchar,unique_client_tag varchar"
2508 ",specifics blob,server_specifics blob,base_server_specifics blob,serv"
2509 "er_unique_position blob,unique_position blob,unique_bookmark_tag blob"
2511 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birt"
2512 "hday TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
2513 "fault -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB"
2515 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.or"
2516 "g','c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-13107"
2517 "8,'9010788312004066376x-6609234393368420856x',NULL,NULL);"));
2518 ASSERT_TRUE(connection->CommitTransaction());
2521 TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
2522 sql::Connection connection;
2523 ASSERT_TRUE(connection.OpenInMemory());
2525 SetUpVersion67Database(&connection);
2527 // Columns existing before version 67.
2528 ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
2529 ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
2530 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
2532 scoped_ptr<TestDirectoryBackingStore> dbs(
2533 new TestDirectoryBackingStore(GetUsername(), &connection));
2535 ASSERT_FALSE(dbs->needs_column_refresh_);
2536 ASSERT_TRUE(dbs->MigrateVersion67To68());
2537 ASSERT_EQ(68, dbs->GetVersion());
2538 ASSERT_TRUE(dbs->needs_column_refresh_);
2541 TEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) {
2542 sql::Connection connection;
2543 ASSERT_TRUE(connection.OpenInMemory());
2544 SetUpVersion68Database(&connection);
2547 scoped_ptr<TestDirectoryBackingStore> dbs(
2548 new TestDirectoryBackingStore(GetUsername(), &connection));
2550 ASSERT_FALSE(dbs->needs_column_refresh_);
2551 ASSERT_TRUE(dbs->MigrateVersion68To69());
2552 ASSERT_EQ(69, dbs->GetVersion());
2553 ASSERT_TRUE(dbs->needs_column_refresh_);
2556 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
2557 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
2558 sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name,"
2559 "is_del, is_dir, id, specifics, server_specifics FROM metas "
2560 "WHERE metahandle = 2"));
2561 ASSERT_TRUE(s.Step());
2562 ASSERT_EQ("Deleted Item", s.ColumnString(0));
2563 ASSERT_TRUE(s.ColumnBool(1));
2564 ASSERT_FALSE(s.ColumnBool(2));
2565 ASSERT_EQ("s_ID_2", s.ColumnString(3));
2566 sync_pb::EntitySpecifics specifics;
2567 specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4));
2568 ASSERT_TRUE(specifics.has_bookmark());
2569 ASSERT_EQ("http://www.google.com/", specifics.bookmark().url());
2570 ASSERT_EQ("AASGASGA", specifics.bookmark().favicon());
2571 specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5));
2572 ASSERT_TRUE(specifics.has_bookmark());
2573 ASSERT_EQ("http://www.google.com/2", specifics.bookmark().url());
2574 ASSERT_EQ("ASADGADGADG", specifics.bookmark().favicon());
2575 ASSERT_FALSE(s.Step());
2578 TEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) {
2579 sql::Connection connection;
2580 ASSERT_TRUE(connection.OpenInMemory());
2581 SetUpVersion69Database(&connection);
2583 ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag"));
2584 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag"));
2585 ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag"));
2588 scoped_ptr<TestDirectoryBackingStore> dbs(
2589 new TestDirectoryBackingStore(GetUsername(), &connection));
2591 ASSERT_FALSE(dbs->needs_column_refresh_);
2592 ASSERT_TRUE(dbs->MigrateVersion69To70());
2593 ASSERT_EQ(70, dbs->GetVersion());
2594 ASSERT_TRUE(dbs->needs_column_refresh_);
2597 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
2598 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
2599 sql::Statement s(connection.GetUniqueStatement("SELECT id"
2600 " FROM metas WHERE unique_server_tag = 'google_chrome'"));
2601 ASSERT_TRUE(s.Step());
2602 EXPECT_EQ("s_ID_7", s.ColumnString(0));
2605 TEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) {
2606 sql::Connection connection;
2607 ASSERT_TRUE(connection.OpenInMemory());
2608 SetUpVersion70Database(&connection);
2610 ASSERT_TRUE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
2611 ASSERT_TRUE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
2612 ASSERT_FALSE(connection.DoesTableExist("models"));
2615 scoped_ptr<TestDirectoryBackingStore> dbs(
2616 new TestDirectoryBackingStore(GetUsername(), &connection));
2618 ASSERT_FALSE(dbs->needs_column_refresh_);
2619 ASSERT_TRUE(dbs->MigrateVersion70To71());
2620 ASSERT_EQ(71, dbs->GetVersion());
2621 ASSERT_FALSE(dbs->needs_column_refresh_);
2624 ASSERT_FALSE(connection.DoesColumnExist("share_info", "last_sync_timestamp"));
2625 ASSERT_FALSE(connection.DoesColumnExist("share_info", "initial_sync_ended"));
2626 ASSERT_TRUE(connection.DoesTableExist("models"));
2627 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
2628 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
2629 ASSERT_TRUE(connection.DoesColumnExist("models", "model_id"));
2631 sql::Statement s(connection.GetUniqueStatement("SELECT model_id, "
2632 "initial_sync_ended, last_download_timestamp FROM models"));
2633 ASSERT_TRUE(s.Step());
2634 std::string model_id = s.ColumnString(0);
2635 EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size()))
2636 << "Model ID is expected to be the empty BookmarkSpecifics proto.";
2637 EXPECT_TRUE(s.ColumnBool(1));
2638 EXPECT_EQ(694, s.ColumnInt64(2));
2639 ASSERT_FALSE(s.Step());
2643 TEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) {
2644 sql::Connection connection;
2645 ASSERT_TRUE(connection.OpenInMemory());
2646 SetUpVersion71Database(&connection);
2648 ASSERT_TRUE(connection.DoesTableExist("extended_attributes"));
2651 scoped_ptr<TestDirectoryBackingStore> dbs(
2652 new TestDirectoryBackingStore(GetUsername(), &connection));
2654 ASSERT_FALSE(dbs->needs_column_refresh_);
2655 ASSERT_TRUE(dbs->MigrateVersion71To72());
2656 ASSERT_EQ(72, dbs->GetVersion());
2657 ASSERT_FALSE(dbs->needs_column_refresh_);
2660 ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
2663 TEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) {
2664 sql::Connection connection;
2665 ASSERT_TRUE(connection.OpenInMemory());
2666 SetUpVersion72Database(&connection);
2668 ASSERT_FALSE(connection.DoesColumnExist("share_info", "notification_state"));
2671 scoped_ptr<TestDirectoryBackingStore> dbs(
2672 new TestDirectoryBackingStore(GetUsername(), &connection));
2674 ASSERT_FALSE(dbs->needs_column_refresh_);
2675 ASSERT_TRUE(dbs->MigrateVersion72To73());
2676 ASSERT_EQ(73, dbs->GetVersion());
2677 ASSERT_FALSE(dbs->needs_column_refresh_);
2680 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
2683 TEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
2684 sql::Connection connection;
2685 ASSERT_TRUE(connection.OpenInMemory());
2686 SetUpVersion73Database(&connection);
2689 connection.DoesColumnExist("share_info", "autofill_migration_state"));
2691 connection.DoesColumnExist("share_info",
2692 "bookmarks_added_during_autofill_migration"));
2694 connection.DoesColumnExist("share_info", "autofill_migration_time"));
2696 connection.DoesColumnExist("share_info",
2697 "autofill_entries_added_during_migration"));
2700 connection.DoesColumnExist("share_info",
2701 "autofill_profiles_added_during_migration"));
2704 scoped_ptr<TestDirectoryBackingStore> dbs(
2705 new TestDirectoryBackingStore(GetUsername(), &connection));
2707 ASSERT_FALSE(dbs->needs_column_refresh_);
2708 ASSERT_TRUE(dbs->MigrateVersion73To74());
2709 ASSERT_EQ(74, dbs->GetVersion());
2710 ASSERT_FALSE(dbs->needs_column_refresh_);
2714 connection.DoesColumnExist("share_info", "autofill_migration_state"));
2716 connection.DoesColumnExist("share_info",
2717 "bookmarks_added_during_autofill_migration"));
2719 connection.DoesColumnExist("share_info", "autofill_migration_time"));
2721 connection.DoesColumnExist("share_info",
2722 "autofill_entries_added_during_migration"));
2725 connection.DoesColumnExist("share_info",
2726 "autofill_profiles_added_during_migration"));
2729 TEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
2730 sql::Connection connection;
2731 ASSERT_TRUE(connection.OpenInMemory());
2732 SetUpVersion74Database(&connection);
2734 ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
2735 ASSERT_TRUE(connection.DoesColumnExist("models", "last_download_timestamp"));
2738 scoped_ptr<TestDirectoryBackingStore> dbs(
2739 new TestDirectoryBackingStore(GetUsername(), &connection));
2741 ASSERT_FALSE(dbs->needs_column_refresh_);
2742 ASSERT_TRUE(dbs->MigrateVersion74To75());
2743 ASSERT_EQ(75, dbs->GetVersion());
2744 ASSERT_FALSE(dbs->needs_column_refresh_);
2747 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
2748 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
2751 TEST_F(DirectoryBackingStoreTest, MigrateVersion75To76) {
2752 sql::Connection connection;
2753 ASSERT_TRUE(connection.OpenInMemory());
2754 SetUpVersion75Database(&connection);
2757 connection.DoesColumnExist("share_info", "autofill_migration_state"));
2758 ASSERT_TRUE(connection.DoesColumnExist("share_info",
2759 "bookmarks_added_during_autofill_migration"));
2761 connection.DoesColumnExist("share_info", "autofill_migration_time"));
2762 ASSERT_TRUE(connection.DoesColumnExist("share_info",
2763 "autofill_entries_added_during_migration"));
2764 ASSERT_TRUE(connection.DoesColumnExist("share_info",
2765 "autofill_profiles_added_during_migration"));
2767 scoped_ptr<TestDirectoryBackingStore> dbs(
2768 new TestDirectoryBackingStore(GetUsername(), &connection));
2769 ASSERT_FALSE(dbs->needs_column_refresh_);
2770 ASSERT_TRUE(dbs->MigrateVersion75To76());
2771 ASSERT_EQ(76, dbs->GetVersion());
2772 ASSERT_TRUE(dbs->needs_column_refresh_);
2773 // Cannot actual refresh columns due to version 76 not containing all
2774 // necessary columns.
2777 TEST_F(DirectoryBackingStoreTest, MigrateVersion76To77) {
2778 sql::Connection connection;
2779 ASSERT_TRUE(connection.OpenInMemory());
2780 SetUpVersion76Database(&connection);
2782 scoped_ptr<TestDirectoryBackingStore> dbs(
2783 new TestDirectoryBackingStore(GetUsername(), &connection));
2784 ASSERT_FALSE(dbs->needs_column_refresh_);
2786 EXPECT_EQ(GetExpectedLegacyMetaProtoTimes(INCLUDE_DELETED_ITEMS),
2787 GetMetaProtoTimes(dbs->db_.get()));
2788 // Since the proto times are expected to be in a legacy format, they may not
2789 // be compatible with ProtoTimeToTime, so we don't call ExpectTimes().
2791 ASSERT_TRUE(dbs->MigrateVersion76To77());
2792 ASSERT_EQ(77, dbs->GetVersion());
2794 EXPECT_EQ(GetExpectedMetaProtoTimes(INCLUDE_DELETED_ITEMS),
2795 GetMetaProtoTimes(dbs->db_.get()));
2796 // Cannot actually load entries due to version 77 not having all required
2798 ASSERT_FALSE(dbs->needs_column_refresh_);
2801 TEST_F(DirectoryBackingStoreTest, MigrateVersion77To78) {
2802 sql::Connection connection;
2803 ASSERT_TRUE(connection.OpenInMemory());
2804 SetUpVersion77Database(&connection);
2806 ASSERT_FALSE(connection.DoesColumnExist("metas", "BASE_SERVER_SPECIFICS"));
2809 scoped_ptr<TestDirectoryBackingStore> dbs(
2810 new TestDirectoryBackingStore(GetUsername(), &connection));
2811 ASSERT_FALSE(dbs->needs_column_refresh_);
2812 ASSERT_TRUE(dbs->MigrateVersion77To78());
2813 ASSERT_EQ(78, dbs->GetVersion());
2815 ASSERT_FALSE(dbs->needs_column_refresh_);
2818 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
2821 TEST_F(DirectoryBackingStoreTest, MigrateVersion78To79) {
2822 const int kInitialNextId = -65542;
2824 sql::Connection connection;
2825 ASSERT_TRUE(connection.OpenInMemory());
2826 SetUpVersion78Database(&connection);
2828 // Double-check the original next_id is what we think it is.
2829 sql::Statement s(connection.GetUniqueStatement(
2830 "SELECT next_id FROM share_info"));
2832 ASSERT_EQ(kInitialNextId, s.ColumnInt(0));
2834 scoped_ptr<TestDirectoryBackingStore> dbs(
2835 new TestDirectoryBackingStore(GetUsername(), &connection));
2836 ASSERT_FALSE(dbs->needs_column_refresh_);
2837 ASSERT_TRUE(dbs->MigrateVersion78To79());
2838 ASSERT_EQ(79, dbs->GetVersion());
2839 ASSERT_FALSE(dbs->needs_column_refresh_);
2841 // Ensure the next_id has been incremented.
2842 Directory::MetahandlesMap handles_map;
2843 JournalIndex delete_journals;;
2844 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
2845 Directory::KernelLoadInfo load_info;
2848 ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info));
2849 EXPECT_LE(load_info.kernel_info.next_id, kInitialNextId - 65536);
2852 TEST_F(DirectoryBackingStoreTest, MigrateVersion79To80) {
2853 sql::Connection connection;
2854 ASSERT_TRUE(connection.OpenInMemory());
2855 SetUpVersion79Database(&connection);
2857 scoped_ptr<TestDirectoryBackingStore> dbs(
2858 new TestDirectoryBackingStore(GetUsername(), &connection));
2859 ASSERT_FALSE(dbs->needs_column_refresh_);
2860 ASSERT_TRUE(dbs->MigrateVersion79To80());
2861 ASSERT_EQ(80, dbs->GetVersion());
2862 ASSERT_FALSE(dbs->needs_column_refresh_);
2864 // Ensure the bag_of_chips has been set.
2865 Directory::MetahandlesMap handles_map;
2866 JournalIndex delete_journals;;
2867 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
2868 Directory::KernelLoadInfo load_info;
2870 ASSERT_TRUE(dbs->Load(&handles_map, &delete_journals, &load_info));
2871 // Check that the initial value is the serialization of an empty ChipBag.
2872 sync_pb::ChipBag chip_bag;
2873 std::string serialized_chip_bag;
2874 ASSERT_TRUE(chip_bag.SerializeToString(&serialized_chip_bag));
2875 EXPECT_EQ(serialized_chip_bag, load_info.kernel_info.bag_of_chips);
2878 TEST_F(DirectoryBackingStoreTest, MigrateVersion80To81) {
2879 sql::Connection connection;
2880 ASSERT_TRUE(connection.OpenInMemory());
2881 SetUpVersion80Database(&connection);
2883 sql::Statement s(connection.GetUniqueStatement(
2884 "SELECT metahandle, server_position_in_parent "
2885 "FROM metas WHERE unique_server_tag = 'google_chrome'"));
2886 ASSERT_TRUE(s.Step());
2887 ASSERT_EQ(sql::COLUMN_TYPE_INTEGER, s.ColumnType(1));
2889 scoped_ptr<TestDirectoryBackingStore> dbs(
2890 new TestDirectoryBackingStore(GetUsername(), &connection));
2891 ASSERT_TRUE(dbs->MigrateVersion80To81());
2892 ASSERT_EQ(81, dbs->GetVersion());
2894 // Test that ordinal values are preserved correctly.
2895 sql::Statement new_s(connection.GetUniqueStatement(
2896 "SELECT metahandle, server_ordinal_in_parent "
2897 "FROM metas WHERE unique_server_tag = 'google_chrome'"));
2898 ASSERT_TRUE(new_s.Step());
2899 ASSERT_EQ(sql::COLUMN_TYPE_BLOB, new_s.ColumnType(1));
2901 std::string expected_ordinal = Int64ToNodeOrdinal(1048576).ToInternalValue();
2902 std::string actual_ordinal;
2903 new_s.ColumnBlobAsString(1, &actual_ordinal);
2904 ASSERT_EQ(expected_ordinal, actual_ordinal);
2907 TEST_F(DirectoryBackingStoreTest, MigrateVersion81To82) {
2908 sql::Connection connection;
2909 ASSERT_TRUE(connection.OpenInMemory());
2910 SetUpVersion81Database(&connection);
2911 ASSERT_FALSE(connection.DoesColumnExist("models", "transaction_version"));
2913 scoped_ptr<TestDirectoryBackingStore> dbs(
2914 new TestDirectoryBackingStore(GetUsername(), &connection));
2915 ASSERT_FALSE(dbs->needs_column_refresh_);
2916 ASSERT_TRUE(dbs->MigrateVersion81To82());
2917 ASSERT_EQ(82, dbs->GetVersion());
2918 ASSERT_FALSE(dbs->needs_column_refresh_);
2920 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
2923 TEST_F(DirectoryBackingStoreTest, MigrateVersion82To83) {
2924 sql::Connection connection;
2925 ASSERT_TRUE(connection.OpenInMemory());
2926 SetUpVersion82Database(&connection);
2927 ASSERT_FALSE(connection.DoesColumnExist("metas", "transaction_version"));
2929 scoped_ptr<TestDirectoryBackingStore> dbs(
2930 new TestDirectoryBackingStore(GetUsername(), &connection));
2931 ASSERT_TRUE(dbs->MigrateVersion82To83());
2932 ASSERT_EQ(83, dbs->GetVersion());
2934 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
2937 TEST_F(DirectoryBackingStoreTest, MigrateVersion83To84) {
2938 sql::Connection connection;
2939 ASSERT_TRUE(connection.OpenInMemory());
2940 SetUpVersion83Database(&connection);
2941 ASSERT_FALSE(connection.DoesTableExist("deleted_metas"));
2943 scoped_ptr<TestDirectoryBackingStore> dbs(
2944 new TestDirectoryBackingStore(GetUsername(), &connection));
2945 ASSERT_TRUE(dbs->MigrateVersion83To84());
2946 ASSERT_EQ(84, dbs->GetVersion());
2948 ASSERT_TRUE(connection.DoesTableExist("deleted_metas"));
2951 TEST_F(DirectoryBackingStoreTest, MigrateVersion84To85) {
2952 sql::Connection connection;
2953 ASSERT_TRUE(connection.OpenInMemory());
2954 SetUpVersion84Database(&connection);
2955 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended"));
2957 scoped_ptr<TestDirectoryBackingStore> dbs(
2958 new TestDirectoryBackingStore(GetUsername(), &connection));
2959 ASSERT_TRUE(dbs->MigrateVersion84To85());
2960 ASSERT_EQ(85, dbs->GetVersion());
2961 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended"));
2964 TEST_F(DirectoryBackingStoreTest, MigrateVersion85To86) {
2965 sql::Connection connection;
2966 ASSERT_TRUE(connection.OpenInMemory());
2967 SetUpVersion85Database(&connection);
2968 EXPECT_TRUE(connection.DoesColumnExist("metas", "next_id"));
2969 EXPECT_TRUE(connection.DoesColumnExist("metas", "prev_id"));
2970 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
2971 EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_position"));
2972 EXPECT_FALSE(connection.DoesColumnExist("metas", "server_unique_position"));
2973 EXPECT_FALSE(connection.DoesColumnExist("metas", "unique_bookmark_tag"));
2975 scoped_ptr<TestDirectoryBackingStore> dbs(
2976 new TestDirectoryBackingStore(GetUsername(), &connection));
2977 ASSERT_TRUE(dbs->MigrateVersion85To86());
2978 EXPECT_EQ(86, dbs->GetVersion());
2979 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_position"));
2980 EXPECT_TRUE(connection.DoesColumnExist("metas", "server_unique_position"));
2981 EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_bookmark_tag"));
2982 ASSERT_TRUE(dbs->needs_column_refresh_);
2983 ASSERT_TRUE(dbs->RefreshColumns());
2984 EXPECT_FALSE(connection.DoesColumnExist("metas", "next_id"));
2985 EXPECT_FALSE(connection.DoesColumnExist("metas", "prev_id"));
2986 EXPECT_FALSE(connection.DoesColumnExist("metas", "server_ordinal_in_parent"));
2989 Directory::MetahandlesMap handles_map;
2990 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
2991 dbs->LoadEntries(&handles_map);
2993 // Grab a bookmark and examine it.
2994 Directory::MetahandlesMap::iterator i = handles_map.find(5);
2995 ASSERT_FALSE(i == handles_map.end());
2996 EntryKernel* bm = i->second;
2997 ASSERT_EQ(bm->ref(ID).value(), "s_ID_5");
2999 EXPECT_TRUE(bm->ref(UNIQUE_POSITION).IsValid());
3000 EXPECT_TRUE(bm->ref(SERVER_UNIQUE_POSITION).IsValid());
3001 EXPECT_EQ(UniquePosition::kSuffixLength,
3002 bm->ref(UNIQUE_BOOKMARK_TAG).length());
3004 // Grab a non-bookmark and examine it.
3005 Directory::MetahandlesMap::iterator j = handles_map.find(1);
3007 ASSERT_FALSE(j == handles_map.end());
3008 EntryKernel* root = j->second;
3009 ASSERT_EQ(root->ref(ID).value(), "r");
3011 EXPECT_FALSE(root->ref(UNIQUE_POSITION).IsValid());
3012 EXPECT_FALSE(root->ref(SERVER_UNIQUE_POSITION).IsValid());
3013 EXPECT_TRUE(root->ref(UNIQUE_BOOKMARK_TAG).empty());
3015 // Make sure we didn't mistake the bookmark root node for a real bookmark.
3016 Directory::MetahandlesMap::iterator k = handles_map.find(8);
3017 ASSERT_FALSE(k == handles_map.end());
3018 EntryKernel* bm_root = k->second;
3019 ASSERT_EQ(bm_root->ref(ID).value(), "s_ID_8");
3020 ASSERT_EQ(bm_root->ref(UNIQUE_SERVER_TAG), "google_chrome_bookmarks");
3022 EXPECT_FALSE(bm_root->ref(UNIQUE_POSITION).IsValid());
3023 EXPECT_FALSE(bm_root->ref(SERVER_UNIQUE_POSITION).IsValid());
3024 EXPECT_TRUE(bm_root->ref(UNIQUE_BOOKMARK_TAG).empty());
3026 // Make sure we didn't assign positions to server-created folders, either.
3027 Directory::MetahandlesMap::iterator l = handles_map.find(10);
3028 ASSERT_FALSE(l == handles_map.end());
3029 EntryKernel* perm_folder = l->second;
3030 ASSERT_EQ(perm_folder->ref(ID).value(), "s_ID_10");
3031 ASSERT_EQ(perm_folder->ref(UNIQUE_SERVER_TAG), "other_bookmarks");
3033 EXPECT_FALSE(perm_folder->ref(UNIQUE_POSITION).IsValid());
3034 EXPECT_FALSE(perm_folder->ref(SERVER_UNIQUE_POSITION).IsValid());
3035 EXPECT_TRUE(perm_folder->ref(UNIQUE_BOOKMARK_TAG).empty());
3037 // Make sure that the syncable::Directory and the migration code agree on
3038 // which items should or should not have unique position values. This test
3039 // may become obsolete if the directory's definition of that function
3040 // changes, but, until then, this is a useful test.
3041 for (Directory::MetahandlesMap::iterator it = handles_map.begin();
3042 it != handles_map.end(); it++) {
3043 SCOPED_TRACE(it->second->ref(ID));
3044 if (it->second->ShouldMaintainPosition()) {
3045 EXPECT_TRUE(it->second->ref(UNIQUE_POSITION).IsValid());
3046 EXPECT_TRUE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3047 EXPECT_FALSE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3049 EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid());
3050 EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid());
3051 EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty());
3057 TEST_F(DirectoryBackingStoreTest, DetectInvalidPosition) {
3058 sql::Connection connection;
3059 ASSERT_TRUE(connection.OpenInMemory());
3060 SetUpVersion86Database(&connection);
3062 scoped_ptr<TestDirectoryBackingStore> dbs(
3063 new TestDirectoryBackingStore(GetUsername(), &connection));
3064 ASSERT_EQ(86, dbs->GetVersion());
3066 // Insert row with bad position.
3067 sql::Statement s(connection.GetUniqueStatement(
3068 "INSERT INTO metas "
3069 "( id, metahandle, is_dir, ctime, mtime,"
3070 " unique_position, server_unique_position) "
3071 "VALUES('c-invalid', 9999, 1, 0, 0, 'BAD_POS', 'BAD_POS')"));
3072 ASSERT_TRUE(s.Run());
3074 // Trying to unpack this entry should signal that the DB is corrupted.
3075 Directory::MetahandlesMap handles_map;
3076 JournalIndex delete_journals;;
3077 STLValueDeleter<Directory::MetahandlesMap> deleter(&handles_map);
3078 Directory::KernelLoadInfo kernel_load_info;
3079 ASSERT_EQ(FAILED_DATABASE_CORRUPT,
3080 dbs->Load(&handles_map, &delete_journals, &kernel_load_info));
3083 TEST_P(MigrationTest, ToCurrentVersion) {
3084 sql::Connection connection;
3085 ASSERT_TRUE(connection.OpenInMemory());
3086 switch (GetParam()) {
3088 SetUpVersion67Database(&connection);
3091 SetUpVersion68Database(&connection);
3094 SetUpVersion69Database(&connection);
3097 SetUpVersion70Database(&connection);
3100 SetUpVersion71Database(&connection);
3103 SetUpVersion72Database(&connection);
3106 SetUpVersion73Database(&connection);
3109 SetUpVersion74Database(&connection);
3112 SetUpVersion75Database(&connection);
3115 SetUpVersion76Database(&connection);
3118 SetUpVersion77Database(&connection);
3121 SetUpVersion78Database(&connection);
3124 SetUpVersion79Database(&connection);
3127 SetUpVersion80Database(&connection);
3130 SetUpVersion81Database(&connection);
3133 SetUpVersion82Database(&connection);
3136 SetUpVersion83Database(&connection);
3139 SetUpVersion84Database(&connection);
3142 SetUpVersion85Database(&connection);
3145 SetUpVersion86Database(&connection);
3148 // If you see this error, it may mean that you've increased the
3149 // database version number but you haven't finished adding unit tests
3150 // for the database migration code. You need to need to supply a
3151 // SetUpVersionXXDatabase function with a dump of the test database
3152 // at the old schema. Here's one way to do that:
3153 // 1. Start on a clean tree (with none of your pending schema changes).
3154 // 2. Set a breakpoint in this function and run the unit test.
3155 // 3. Allow this test to run to completion (step out of the call),
3156 // without allowing ~MigrationTest to execute.
3157 // 4. Examine this->temp_dir_ to determine the location of the
3158 // test database (it is currently of the version you need).
3159 // 5. Dump this using the sqlite3 command line tool:
3160 // > .output foo_dump.sql
3162 // 6. Replace the timestamp columns with META_PROTO_TIMES(x) (or
3163 // LEGACY_META_PROTO_TIMES(x) if before Version 77).
3164 FAIL() << "Need to supply database dump for version " << GetParam();
3167 syncable::Directory::KernelLoadInfo dir_info;
3168 Directory::MetahandlesMap handles_map;
3169 JournalIndex delete_journals;;
3170 STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map);
3173 scoped_ptr<TestDirectoryBackingStore> dbs(
3174 new TestDirectoryBackingStore(GetUsername(), &connection));
3175 ASSERT_EQ(OPENED, dbs->Load(&handles_map, &delete_journals, &dir_info));
3176 ASSERT_FALSE(dbs->needs_column_refresh_);
3177 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
3180 // Columns deleted in Version 67.
3181 ASSERT_FALSE(connection.DoesColumnExist("metas", "name"));
3182 ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name"));
3183 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name"));
3185 // Columns added in Version 68.
3186 ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
3187 ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
3189 // Columns deleted in Version 68.
3190 ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object"));
3191 ASSERT_FALSE(connection.DoesColumnExist("metas",
3192 "server_is_bookmark_object"));
3193 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon"));
3194 ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url"));
3195 ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url"));
3197 // Renamed a column in Version 70
3198 ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag"));
3199 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
3200 ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
3202 // Removed extended attributes in Version 72.
3203 ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
3205 // Columns added in Version 73.
3206 ASSERT_TRUE(connection.DoesColumnExist("share_info", "notification_state"));
3208 // Column replaced in version 75.
3209 ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
3210 ASSERT_FALSE(connection.DoesColumnExist("models", "last_download_timestamp"));
3212 // Columns removed in version 76.
3214 connection.DoesColumnExist("share_info", "autofill_migration_state"));
3215 ASSERT_FALSE(connection.DoesColumnExist("share_info",
3216 "bookmarks_added_during_autofill_migration"));
3218 connection.DoesColumnExist("share_info", "autofill_migration_time"));
3219 ASSERT_FALSE(connection.DoesColumnExist("share_info",
3220 "autofill_entries_added_during_migration"));
3221 ASSERT_FALSE(connection.DoesColumnExist("share_info",
3222 "autofill_profiles_added_during_migration"));
3224 // Column added in version 78.
3225 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics"));
3227 // Column added in version 82.
3228 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version"));
3230 // Column added in version 83.
3231 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version"));
3233 // Table added in version 84.
3234 ASSERT_TRUE(connection.DoesTableExist("deleted_metas"));
3236 // Column removed in version 85.
3237 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended"));
3239 // Check download_progress state (v75 migration)
3241 dir_info.kernel_info.download_progress[BOOKMARKS]
3242 .timestamp_token_for_migration());
3244 dir_info.kernel_info.download_progress[BOOKMARKS]
3247 dir_info.kernel_info.download_progress[BOOKMARKS]
3250 dir_info.kernel_info.download_progress[THEMES]
3251 .has_timestamp_token_for_migration());
3253 dir_info.kernel_info.download_progress[THEMES]
3256 dir_info.kernel_info.download_progress[THEMES]
3259 dir_info.kernel_info.download_progress[THEMES]
3263 EXPECT_EQ(GetExpectedMetaProtoTimes(DONT_INCLUDE_DELETED_ITEMS),
3264 GetMetaProtoTimes(&connection));
3265 ExpectTimes(handles_map, GetExpectedMetaTimes());
3267 Directory::MetahandlesMap::iterator it = handles_map.find(1);
3268 ASSERT_TRUE(it != handles_map.end());
3269 ASSERT_EQ(1, it->second->ref(META_HANDLE));
3270 EXPECT_TRUE(it->second->ref(ID).IsRoot());
3272 it = handles_map.find(6);
3273 ASSERT_EQ(6, it->second->ref(META_HANDLE));
3274 EXPECT_TRUE(it->second->ref(IS_DIR));
3275 EXPECT_TRUE(it->second->ref(SERVER_IS_DIR));
3277 it->second->ref(SPECIFICS).bookmark().has_url());
3279 it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3281 it->second->ref(SPECIFICS).bookmark().has_favicon());
3282 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3284 it = handles_map.find(7);
3285 ASSERT_EQ(7, it->second->ref(META_HANDLE));
3286 EXPECT_EQ("google_chrome", it->second->ref(UNIQUE_SERVER_TAG));
3287 EXPECT_FALSE(it->second->ref(SPECIFICS).has_bookmark());
3288 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3290 it = handles_map.find(8);
3291 ASSERT_EQ(8, it->second->ref(META_HANDLE));
3292 EXPECT_EQ("google_chrome_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3293 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3294 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3296 it = handles_map.find(9);
3297 ASSERT_EQ(9, it->second->ref(META_HANDLE));
3298 EXPECT_EQ("bookmark_bar", it->second->ref(UNIQUE_SERVER_TAG));
3299 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3300 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3302 it = handles_map.find(10);
3303 ASSERT_EQ(10, it->second->ref(META_HANDLE));
3304 EXPECT_FALSE(it->second->ref(IS_DEL));
3305 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3306 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3307 EXPECT_FALSE(it->second->ref(SPECIFICS).bookmark().has_url());
3309 it->second->ref(SPECIFICS).bookmark().has_favicon());
3311 it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3312 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3313 EXPECT_EQ("other_bookmarks", it->second->ref(UNIQUE_SERVER_TAG));
3314 EXPECT_EQ("Other Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3315 EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3317 it = handles_map.find(11);
3318 ASSERT_EQ(11, it->second->ref(META_HANDLE));
3319 EXPECT_FALSE(it->second->ref(IS_DEL));
3320 EXPECT_FALSE(it->second->ref(IS_DIR));
3321 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3322 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3323 EXPECT_EQ("http://dev.chromium.org/",
3324 it->second->ref(SPECIFICS).bookmark().url());
3326 it->second->ref(SPECIFICS).bookmark().favicon());
3327 EXPECT_EQ("http://dev.chromium.org/other",
3328 it->second->ref(SERVER_SPECIFICS).bookmark().url());
3329 EXPECT_EQ("AFAGVASF",
3330 it->second->ref(SERVER_SPECIFICS).bookmark().favicon());
3331 EXPECT_EQ("", it->second->ref(UNIQUE_SERVER_TAG));
3332 EXPECT_EQ("Home (The Chromium Projects)", it->second->ref(NON_UNIQUE_NAME));
3333 EXPECT_EQ("Home (The Chromium Projects)",
3334 it->second->ref(SERVER_NON_UNIQUE_NAME));
3336 it = handles_map.find(12);
3337 ASSERT_EQ(12, it->second->ref(META_HANDLE));
3338 EXPECT_FALSE(it->second->ref(IS_DEL));
3339 EXPECT_TRUE(it->second->ref(IS_DIR));
3340 EXPECT_EQ("Extra Bookmarks", it->second->ref(NON_UNIQUE_NAME));
3341 EXPECT_EQ("Extra Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME));
3342 EXPECT_TRUE(it->second->ref(SPECIFICS).has_bookmark());
3343 EXPECT_TRUE(it->second->ref(SERVER_SPECIFICS).has_bookmark());
3345 it->second->ref(SPECIFICS).bookmark().has_url());
3347 it->second->ref(SERVER_SPECIFICS).bookmark().has_url());
3349 it->second->ref(SPECIFICS).bookmark().has_favicon());
3350 EXPECT_FALSE(it->second->ref(SERVER_SPECIFICS).bookmark().has_favicon());
3352 it = handles_map.find(13);
3353 ASSERT_EQ(13, it->second->ref(META_HANDLE));
3355 it = handles_map.find(14);
3356 ASSERT_EQ(14, it->second->ref(META_HANDLE));
3358 ASSERT_EQ(static_cast<size_t>(10), handles_map.size());
3361 INSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest,
3362 testing::Range(67, kCurrentDBVersion + 1));
3364 TEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
3365 ModelTypeSet protocol_types = ProtocolTypes();
3366 for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good();
3368 std::string model_id =
3369 TestDirectoryBackingStore::ModelTypeEnumToModelId(iter.Get());
3370 EXPECT_EQ(iter.Get(),
3371 TestDirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
3378 class OnDiskDirectoryBackingStoreForTest : public OnDiskDirectoryBackingStore {
3380 OnDiskDirectoryBackingStoreForTest(const std::string& dir_name,
3381 const base::FilePath& backing_filepath);
3382 virtual ~OnDiskDirectoryBackingStoreForTest();
3383 bool DidFailFirstOpenAttempt();
3386 virtual void ReportFirstTryOpenFailure() OVERRIDE;
3389 bool first_open_failed_;
3392 OnDiskDirectoryBackingStoreForTest::OnDiskDirectoryBackingStoreForTest(
3393 const std::string& dir_name,
3394 const base::FilePath& backing_filepath) :
3395 OnDiskDirectoryBackingStore(dir_name, backing_filepath),
3396 first_open_failed_(false) { }
3398 OnDiskDirectoryBackingStoreForTest::~OnDiskDirectoryBackingStoreForTest() { }
3400 void OnDiskDirectoryBackingStoreForTest::ReportFirstTryOpenFailure() {
3401 // Do nothing, just like we would in release-mode. In debug mode, we DCHECK.
3402 first_open_failed_ = true;
3405 bool OnDiskDirectoryBackingStoreForTest::DidFailFirstOpenAttempt() {
3406 return first_open_failed_;
3411 // This is a whitebox test intended to exercise the code path where the on-disk
3412 // directory load code decides to delete the current directory and start fresh.
3414 // This is considered "minor" corruption because the database recreation is
3415 // expected to succeed. The alternative, where recreation does not succeed (ie.
3416 // due to read-only file system), is not tested here.
3417 TEST_F(DirectoryBackingStoreTest, MinorCorruption) {
3419 scoped_ptr<OnDiskDirectoryBackingStore> dbs(
3420 new OnDiskDirectoryBackingStore(GetUsername(), GetDatabasePath()));
3421 EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
3424 // Corrupt the root node.
3426 sql::Connection connection;
3427 ASSERT_TRUE(connection.Open(GetDatabasePath()));
3428 ASSERT_TRUE(connection.Execute(
3429 "UPDATE metas SET parent_id='bogus' WHERE id = 'r';"));
3433 scoped_ptr<OnDiskDirectoryBackingStoreForTest> dbs(
3434 new OnDiskDirectoryBackingStoreForTest(GetUsername(),
3435 GetDatabasePath()));
3437 EXPECT_TRUE(LoadAndIgnoreReturnedData(dbs.get()));
3438 EXPECT_TRUE(dbs->DidFailFirstOpenAttempt());
3442 TEST_F(DirectoryBackingStoreTest, DeleteEntries) {
3443 sql::Connection connection;
3444 ASSERT_TRUE(connection.OpenInMemory());
3446 SetUpCurrentDatabaseAndCheckVersion(&connection);
3447 scoped_ptr<TestDirectoryBackingStore> dbs(
3448 new TestDirectoryBackingStore(GetUsername(), &connection));
3449 Directory::MetahandlesMap handles_map;
3450 JournalIndex delete_journals;
3451 Directory::KernelLoadInfo kernel_load_info;
3452 STLValueDeleter<Directory::MetahandlesMap> index_deleter(&handles_map);
3454 dbs->Load(&handles_map, &delete_journals, &kernel_load_info);
3455 size_t initial_size = handles_map.size();
3456 ASSERT_LT(0U, initial_size) << "Test requires handles_map to delete.";
3457 int64 first_to_die = handles_map.begin()->second->ref(META_HANDLE);
3458 MetahandleSet to_delete;
3459 to_delete.insert(first_to_die);
3460 EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE,
3463 STLDeleteValues(&handles_map);
3464 dbs->LoadEntries(&handles_map);
3466 EXPECT_EQ(initial_size - 1, handles_map.size());
3467 bool delete_failed = false;
3468 for (Directory::MetahandlesMap::iterator it = handles_map.begin();
3469 it != handles_map.end(); ++it) {
3470 if (it->first == first_to_die) {
3471 delete_failed = true;
3475 EXPECT_FALSE(delete_failed);
3478 for (Directory::MetahandlesMap::iterator it = handles_map.begin();
3479 it != handles_map.end(); ++it) {
3480 to_delete.insert(it->first);
3483 EXPECT_TRUE(dbs->DeleteEntries(TestDirectoryBackingStore::METAS_TABLE,
3486 STLDeleteValues(&handles_map);
3487 dbs->LoadEntries(&handles_map);
3488 EXPECT_EQ(0U, handles_map.size());
3491 TEST_F(DirectoryBackingStoreTest, GenerateCacheGUID) {
3492 const std::string& guid1 = TestDirectoryBackingStore::GenerateCacheGUID();
3493 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID();
3494 EXPECT_EQ(24U, guid1.size());
3495 EXPECT_EQ(24U, guid2.size());
3496 // In theory this test can fail, but it won't before the universe
3497 // dies of heat death.
3498 EXPECT_NE(guid1, guid2);
3501 } // namespace syncable
3502 } // namespace syncer