Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: chrome/browser/sync/syncable/directory_backing_store.cc

Issue 5159001: Rest of the autofill work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Autofill code after fixing the lint errors. Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/syncable/directory_backing_store.h" 5 #include "chrome/browser/sync/syncable/directory_backing_store.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_MACOSX) 9 #if defined(OS_MACOSX)
10 #include <CoreFoundation/CoreFoundation.h> 10 #include <CoreFoundation/CoreFoundation.h>
(...skipping 26 matching lines...) Expand all
37 using std::string; 37 using std::string;
38 38
39 namespace syncable { 39 namespace syncable {
40 40
41 // This just has to be big enough to hold an UPDATE or INSERT statement that 41 // This just has to be big enough to hold an UPDATE or INSERT statement that
42 // modifies all the columns in the entry table. 42 // modifies all the columns in the entry table.
43 static const string::size_type kUpdateStatementBufferSize = 2048; 43 static const string::size_type kUpdateStatementBufferSize = 2048;
44 44
45 // Increment this version whenever updating DB tables. 45 // Increment this version whenever updating DB tables.
46 extern const int32 kCurrentDBVersion; // Global visibility for our unittest. 46 extern const int32 kCurrentDBVersion; // Global visibility for our unittest.
47 const int32 kCurrentDBVersion = 73; 47 const int32 kCurrentDBVersion = 74;
48 48
49 namespace { 49 namespace {
50 50
51 int ExecQuery(sqlite3* dbhandle, const char* query) { 51 int ExecQuery(sqlite3* dbhandle, const char* query) {
52 SQLStatement statement; 52 SQLStatement statement;
53 int result = statement.prepare(dbhandle, query); 53 int result = statement.prepare(dbhandle, query);
54 if (SQLITE_OK != result) 54 if (SQLITE_OK != result)
55 return result; 55 return result;
56 do { 56 do {
57 result = statement.step(); 57 result = statement.step();
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 372
373 if (!DeleteEntries(snapshot.metahandles_to_purge)) 373 if (!DeleteEntries(snapshot.metahandles_to_purge))
374 return false; 374 return false;
375 375
376 if (save_info) { 376 if (save_info) {
377 const Directory::PersistedKernelInfo& info = snapshot.kernel_info; 377 const Directory::PersistedKernelInfo& info = snapshot.kernel_info;
378 SQLStatement update; 378 SQLStatement update;
379 update.prepare(dbhandle, "UPDATE share_info " 379 update.prepare(dbhandle, "UPDATE share_info "
380 "SET store_birthday = ?, " 380 "SET store_birthday = ?, "
381 "next_id = ?, " 381 "next_id = ?, "
382 "notification_state = ?"); 382 "notification_state = ?, "
383 "autofill_migration_state = ?, "
384 "bookmarks_added_during_autofill_migration = ?, "
385 "autofill_migration_time = ?, "
386 "autofill_entries_added_during_migration = ?, "
387 "autofill_profiles_added_during_migration = ? ");
383 update.bind_string(0, info.store_birthday); 388 update.bind_string(0, info.store_birthday);
384 update.bind_int64(1, info.next_id); 389 update.bind_int64(1, info.next_id);
385 update.bind_blob(2, info.notification_state.data(), 390 update.bind_blob(2, info.notification_state.data(),
386 info.notification_state.size()); 391 info.notification_state.size());
392 update.bind_int(3, info.autofill_migration_state);
393 update.bind_int(4,
394 info.autofill_migration_debug_info.bookmarks_added_during_migration);
395 update.bind_int64(5,
396 info.autofill_migration_debug_info.autofill_migration_time);
397 update.bind_int(6,
398 info.autofill_migration_debug_info.autofill_entries_added_during_migrati on);
399 update.bind_int(7,
400 info.autofill_migration_debug_info.autofill_profile_added_during_migrati on);
387 401
388 if (!(SQLITE_DONE == update.step() && 402 if (!(SQLITE_DONE == update.step() &&
389 SQLITE_OK == update.reset() && 403 SQLITE_OK == update.reset() &&
390 1 == update.changes())) { 404 1 == update.changes())) {
391 return false; 405 return false;
392 } 406 }
393 407
394 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { 408 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
395 SQLStatement op; 409 SQLStatement op;
396 op.prepare(dbhandle, "INSERT OR REPLACE INTO models (model_id, " 410 op.prepare(dbhandle, "INSERT OR REPLACE INTO models (model_id, "
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 if (MigrateVersion71To72()) 463 if (MigrateVersion71To72())
450 version_on_disk = 72; 464 version_on_disk = 72;
451 } 465 }
452 466
453 // Version 73 added a field for notification state. 467 // Version 73 added a field for notification state.
454 if (version_on_disk == 72) { 468 if (version_on_disk == 72) {
455 if (MigrateVersion72To73()) 469 if (MigrateVersion72To73())
456 version_on_disk = 73; 470 version_on_disk = 73;
457 } 471 }
458 472
473 if (version_on_disk == 73) {
474 if (MigrateVersion73To74())
475 version_on_disk = 74;
476 }
477
459 // If one of the migrations requested it, drop columns that aren't current. 478 // If one of the migrations requested it, drop columns that aren't current.
460 // It's only safe to do this after migrating all the way to the current 479 // It's only safe to do this after migrating all the way to the current
461 // version. 480 // version.
462 if (version_on_disk == kCurrentDBVersion && needs_column_refresh_) { 481 if (version_on_disk == kCurrentDBVersion && needs_column_refresh_) {
463 if (!RefreshColumns()) 482 if (!RefreshColumns())
464 version_on_disk = 0; 483 version_on_disk = 0;
465 } 484 }
466 485
467 // A final, alternative catch-all migration to simply re-sync everything. 486 // A final, alternative catch-all migration to simply re-sync everything.
468 if (version_on_disk != kCurrentDBVersion) { 487 if (version_on_disk != kCurrentDBVersion) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 entry_bucket->insert(kernel); 568 entry_bucket->insert(kernel);
550 } 569 }
551 return SQLITE_DONE == query_result; 570 return SQLITE_DONE == query_result;
552 } 571 }
553 572
554 bool DirectoryBackingStore::LoadInfo(Directory::KernelLoadInfo* info) { 573 bool DirectoryBackingStore::LoadInfo(Directory::KernelLoadInfo* info) {
555 { 574 {
556 SQLStatement query; 575 SQLStatement query;
557 query.prepare(load_dbhandle_, 576 query.prepare(load_dbhandle_,
558 "SELECT store_birthday, next_id, cache_guid, " 577 "SELECT store_birthday, next_id, cache_guid, "
559 "notification_state FROM share_info"); 578 "notification_state, autofill_migration_state, "
579 "bookmarks_added_during_autofill_migration, "
580 "autofill_migration_time, "
581 "autofill_entries_added_during_migration, "
582 "autofill_profiles_added_during_migration "
583 "FROM share_info");
560 if (SQLITE_ROW != query.step()) 584 if (SQLITE_ROW != query.step())
561 return false; 585 return false;
562 info->kernel_info.store_birthday = query.column_string(0); 586 info->kernel_info.store_birthday = query.column_string(0);
563 info->kernel_info.next_id = query.column_int64(1); 587 info->kernel_info.next_id = query.column_int64(1);
564 info->cache_guid = query.column_string(2); 588 info->cache_guid = query.column_string(2);
565 query.column_blob_as_string(3, &info->kernel_info.notification_state); 589 query.column_blob_as_string(3, &info->kernel_info.notification_state);
590 info->kernel_info.autofill_migration_state =
591 static_cast<Directory::PersistedKernelInfo::AutofillMigrationState>
592 (query.column_int(4));
593 syncable::AutofillMigrationDebugInfo& debug_info =
594 info->kernel_info.autofill_migration_debug_info;
595 debug_info.bookmarks_added_during_migration =
596 query.column_int(5);
597 debug_info.autofill_migration_time =
598 query.column_int64(6);
599 debug_info.autofill_entries_added_during_migration =
600 query.column_int(7);
601 debug_info.autofill_profile_added_during_migration =
602 query.column_int(8);
566 } 603 }
567 { 604 {
568 SQLStatement query; 605 SQLStatement query;
569 query.prepare(load_dbhandle_, 606 query.prepare(load_dbhandle_,
570 "SELECT model_id, last_download_timestamp, initial_sync_ended " 607 "SELECT model_id, last_download_timestamp, initial_sync_ended "
571 "FROM models"); 608 "FROM models");
572 while (SQLITE_ROW == query.step()) { 609 while (SQLITE_ROW == query.step()) {
573 string model_id; 610 string model_id;
574 query.column_blob_as_string(0, &model_id); 611 query.column_blob_as_string(0, &model_id);
575 ModelType type = ModelIdToModelTypeEnum(model_id); 612 ModelType type = ModelIdToModelTypeEnum(model_id);
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 bool DirectoryBackingStore::MigrateVersion72To73() { 956 bool DirectoryBackingStore::MigrateVersion72To73() {
920 int result = 957 int result =
921 ExecQuery(load_dbhandle_, 958 ExecQuery(load_dbhandle_,
922 "ALTER TABLE share_info ADD COLUMN notification_state BLOB"); 959 "ALTER TABLE share_info ADD COLUMN notification_state BLOB");
923 if (result != SQLITE_DONE) 960 if (result != SQLITE_DONE)
924 return false; 961 return false;
925 SetVersion(73); 962 SetVersion(73);
926 return true; 963 return true;
927 } 964 }
928 965
966 bool DirectoryBackingStore::MigrateVersion73To74() {
967 int result =
968 ExecQuery(load_dbhandle_,
969 "ALTER TABLE share_info ADD COLUMN autofill_migration_state "
970 "INT default 0");
971 if (result != SQLITE_DONE)
972 return false;
973
974 result =
975 ExecQuery(load_dbhandle_,
976 "ALTER TABLE share_info ADD COLUMN "
977 "bookmarks_added_during_autofill_migration "
978 "INT default 0");
979
980 if (result != SQLITE_DONE)
981 return false;
982
983 result =
984 ExecQuery(load_dbhandle_,
985 "ALTER TABLE share_info ADD COLUMN autofill_migration_time "
986 "INT default 0");
987
988 if (result != SQLITE_DONE)
989 return false;
990
991 result =
992 ExecQuery(load_dbhandle_,
993 "ALTER TABLE share_info ADD COLUMN "
994 "autofill_entries_added_during_migration "
995 "INT default 0");
996
997 if (result != SQLITE_DONE)
998 return false;
999
1000 result =
1001 ExecQuery(load_dbhandle_,
1002 "ALTER TABLE share_info ADD COLUMN "
1003 "autofill_profiles_added_during_migration "
1004 "INT default 0");
1005
1006 if (result != SQLITE_DONE)
1007 return false;
1008
1009 SetVersion(74);
1010 return true;
1011 }
1012
1013
929 int DirectoryBackingStore::CreateTables() { 1014 int DirectoryBackingStore::CreateTables() {
930 VLOG(1) << "First run, creating tables"; 1015 VLOG(1) << "First run, creating tables";
931 // Create two little tables share_version and share_info 1016 // Create two little tables share_version and share_info
932 int result = ExecQuery(load_dbhandle_, 1017 int result = ExecQuery(load_dbhandle_,
933 "CREATE TABLE share_version (" 1018 "CREATE TABLE share_version ("
934 "id VARCHAR(128) primary key, data INT)"); 1019 "id VARCHAR(128) primary key, data INT)");
935 if (result != SQLITE_DONE) 1020 if (result != SQLITE_DONE)
936 return result; 1021 return result;
937 { 1022 {
938 SQLStatement statement; 1023 SQLStatement statement;
(...skipping 14 matching lines...) Expand all
953 { 1038 {
954 SQLStatement statement; 1039 SQLStatement statement;
955 statement.prepare(load_dbhandle_, "INSERT INTO share_info VALUES" 1040 statement.prepare(load_dbhandle_, "INSERT INTO share_info VALUES"
956 "(?, " // id 1041 "(?, " // id
957 "?, " // name 1042 "?, " // name
958 "?, " // store_birthday 1043 "?, " // store_birthday
959 "?, " // db_create_version 1044 "?, " // db_create_version
960 "?, " // db_create_time 1045 "?, " // db_create_time
961 "-2, " // next_id 1046 "-2, " // next_id
962 "?, " // cache_guid 1047 "?, " // cache_guid
963 "?);"); // notification_state 1048 "?, " // autofill_migration_state
1049 "?, " // bookmarks_added
1050 // _during_autofill_migration
1051 "?, " // autofill_migration_time
1052 "?, " // autofill_entries
1053 // _added_during_migration
1054 "?, " // autofill_profiles_added
1055 // _during_migration
1056 "?);"); // notification_state
964 statement.bind_string(0, dir_name_); // id 1057 statement.bind_string(0, dir_name_); // id
965 statement.bind_string(1, dir_name_); // name 1058 statement.bind_string(1, dir_name_); // name
966 statement.bind_string(2, ""); // store_birthday 1059 statement.bind_string(2, ""); // store_birthday
967 statement.bind_string(3, SYNC_ENGINE_VERSION_STRING); // db_create_version 1060 statement.bind_string(3, SYNC_ENGINE_VERSION_STRING); // db_create_version
968 statement.bind_int(4, static_cast<int32>(time(0))); // db_create_time 1061 statement.bind_int(4, static_cast<int32>(time(0))); // db_create_time
969 statement.bind_string(5, GenerateCacheGUID()); // cache_guid 1062 statement.bind_string(5, GenerateCacheGUID()); // cache_guid
970 statement.bind_blob(6, NULL, 0); // notification_state 1063 statement.bind_int(6, 0); // autofill_migration_state
1064 statement.bind_int(7, 0); // autofill_migration_time
1065 statement.bind_int(8, 0); // bookmarks_added_during_autofill_migration
1066 statement.bind_int(9, 0); // autofill_entries_added_during_migration
1067 statement.bind_int(10, 0); // autofill_profiles_added_during_migration
1068 statement.bind_blob(11, NULL, 0); // notification_state
971 result = statement.step(); 1069 result = statement.step();
972 } 1070 }
973 if (result != SQLITE_DONE) 1071 if (result != SQLITE_DONE)
974 return result; 1072 return result;
975 1073
976 result = CreateModelsTable(); 1074 result = CreateModelsTable();
977 if (result != SQLITE_DONE) 1075 if (result != SQLITE_DONE)
978 return result; 1076 return result;
979 // Create the big metas table. 1077 // Create the big metas table.
980 result = CreateMetasTable(false); 1078 result = CreateMetasTable(false);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 // This is the current schema for the ShareInfo table, from version 71 1131 // This is the current schema for the ShareInfo table, from version 71
1034 // onward. If you change the schema, you'll probably want to double-check 1132 // onward. If you change the schema, you'll probably want to double-check
1035 // the use of this function in the v70-v71 migration. 1133 // the use of this function in the v70-v71 migration.
1036 query.append(" (" 1134 query.append(" ("
1037 "id TEXT primary key, " 1135 "id TEXT primary key, "
1038 "name TEXT, " 1136 "name TEXT, "
1039 "store_birthday TEXT, " 1137 "store_birthday TEXT, "
1040 "db_create_version TEXT, " 1138 "db_create_version TEXT, "
1041 "db_create_time INT, " 1139 "db_create_time INT, "
1042 "next_id INT default -2, " 1140 "next_id INT default -2, "
1043 "cache_guid TEXT"); 1141 "cache_guid TEXT, "
1142 "autofill_migration_state INT default 0, "
1143 "bookmarks_added_during_autofill_migration INT default 0, "
1144 "autofill_migration_time INT default 0, "
1145 "autofill_entries_added_during_migration INT default 0, "
1146 "autofill_profiles_added_during_migration INT default 0 "
1147 );
1044 if (with_notification_state) { 1148 if (with_notification_state) {
1045 query.append(", notification_state BLOB"); 1149 query.append(", notification_state BLOB");
1046 } 1150 }
1047 query.append(")"); 1151 query.append(")");
1048 return ExecQuery(load_dbhandle_, query.c_str()); 1152 return ExecQuery(load_dbhandle_, query.c_str());
1049 } 1153 }
1050 1154
1051 } // namespace syncable 1155 } // namespace syncable
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698