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

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

Issue 371029: Remove unique naming. (Closed)
Patch Set: Ready and about to go in! Created 11 years, 1 month 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 19 matching lines...) Expand all
30 30
31 using std::string; 31 using std::string;
32 32
33 namespace syncable { 33 namespace syncable {
34 34
35 // This just has to be big enough to hold an UPDATE or INSERT statement that 35 // This just has to be big enough to hold an UPDATE or INSERT statement that
36 // modifies all the columns in the entry table. 36 // modifies all the columns in the entry table.
37 static const string::size_type kUpdateStatementBufferSize = 2048; 37 static const string::size_type kUpdateStatementBufferSize = 2048;
38 38
39 // Increment this version whenever updating DB tables. 39 // Increment this version whenever updating DB tables.
40 static const int32 kCurrentDBVersion = 67; 40 static const int32 kCurrentDBVersion = 68;
41
42 #if OS_WIN
43 // TODO(sync): remove
44 static void PathNameMatch16(sqlite3_context* context, int argc,
45 sqlite3_value** argv) {
46 const PathString pathspec(reinterpret_cast<const PathChar*>
47 (sqlite3_value_text16(argv[0])), sqlite3_value_bytes16(argv[0]) / 2);
48
49 const void* name_text = sqlite3_value_text16(argv[1]);
50 int name_bytes = sqlite3_value_bytes16(argv[1]);
51 // If the text is null, we need to avoid the PathString constructor.
52 if (name_text != NULL) {
53 // Have to copy to append a terminating 0 anyway.
54 const PathString name(reinterpret_cast<const PathChar*>
55 (sqlite3_value_text16(argv[1])),
56 sqlite3_value_bytes16(argv[1]) / 2);
57 sqlite3_result_int(context, PathNameMatch(name, pathspec));
58 } else {
59 sqlite3_result_int(context, PathNameMatch(PathString(), pathspec));
60 }
61 }
62
63 // Sqlite allows setting of the escape character in an ESCAPE clause and
64 // this character is passed in as a third character to the like function.
65 // See: http://www.sqlite.org/lang_expr.html
66 static void PathNameMatch16WithEscape(sqlite3_context* context,
67 int argc, sqlite3_value** argv) {
68 // Never seen this called, but just in case.
69 LOG(FATAL) << "PathNameMatch16WithEscape() not implemented";
70 }
71 #endif
72 41
73 static void RegisterPathNameCollate(sqlite3* dbhandle) { 42 static void RegisterPathNameCollate(sqlite3* dbhandle) {
74 const int collate = SQLITE_UTF8; 43 const int collate = SQLITE_UTF8;
75 CHECK(SQLITE_OK == sqlite3_create_collation(dbhandle, "PATHNAME", collate, 44 CHECK(SQLITE_OK == sqlite3_create_collation(dbhandle, "PATHNAME", collate,
76 NULL, &ComparePathNames16)); 45 NULL, &ComparePathNames16));
77 } 46 }
78 47
79 // Replace the LIKE operator with our own implementation that does file spec
80 // matching like "*.txt".
81 static void RegisterPathNameMatch(sqlite3* dbhandle) {
82 // We only register this on Windows. We use the normal sqlite
83 // matching function on mac/linux.
84 // note that the function PathNameMatch() does a simple ==
85 // comparison on mac, so that would have to be fixed if
86 // we really wanted to use PathNameMatch on mac/linux w/ the
87 // same pattern strings as we do on windows.
88 #if defined(OS_WIN)
89 CHECK(SQLITE_OK == sqlite3_create_function(dbhandle, "like",
90 2, SQLITE_ANY, NULL, &PathNameMatch16, NULL, NULL));
91 CHECK(SQLITE_OK == sqlite3_create_function(dbhandle, "like",
92 3, SQLITE_ANY, NULL, &PathNameMatch16WithEscape, NULL, NULL));
93 #endif // OS_WIN
94 }
95
96 static inline bool IsSqliteErrorOurFault(int result) { 48 static inline bool IsSqliteErrorOurFault(int result) {
97 switch (result) { 49 switch (result) {
98 case SQLITE_MISMATCH: 50 case SQLITE_MISMATCH:
99 case SQLITE_CONSTRAINT: 51 case SQLITE_CONSTRAINT:
100 case SQLITE_MISUSE: 52 case SQLITE_MISUSE:
101 case SQLITE_RANGE: 53 case SQLITE_RANGE:
102 return true; 54 return true;
103 default: 55 default:
104 return false; 56 return false;
105 } 57 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 sqlite3_close(save_dbhandle_); 210 sqlite3_close(save_dbhandle_);
259 save_dbhandle_ = NULL; 211 save_dbhandle_ = NULL;
260 } 212 }
261 } 213 }
262 214
263 bool DirectoryBackingStore::OpenAndConfigureHandleHelper( 215 bool DirectoryBackingStore::OpenAndConfigureHandleHelper(
264 sqlite3** handle) const { 216 sqlite3** handle) const {
265 if (SQLITE_OK == SqliteOpen(backing_filepath_, handle)) { 217 if (SQLITE_OK == SqliteOpen(backing_filepath_, handle)) {
266 sqlite3_busy_timeout(*handle, kDirectoryBackingStoreBusyTimeoutMs); 218 sqlite3_busy_timeout(*handle, kDirectoryBackingStoreBusyTimeoutMs);
267 RegisterPathNameCollate(*handle); 219 RegisterPathNameCollate(*handle);
268 RegisterPathNameMatch(*handle); 220
269 return true; 221 return true;
270 } 222 }
271 return false; 223 return false;
272 } 224 }
273 225
274 DirOpenResult DirectoryBackingStore::Load(MetahandlesIndex* entry_bucket, 226 DirOpenResult DirectoryBackingStore::Load(MetahandlesIndex* entry_bucket,
275 ExtendedAttributes* xattrs_bucket, 227 ExtendedAttributes* xattrs_bucket,
276 Directory::KernelLoadInfo* kernel_load_info) { 228 Directory::KernelLoadInfo* kernel_load_info) {
277 DCHECK(load_dbhandle_ == NULL); 229 DCHECK(load_dbhandle_ == NULL);
278 if (!OpenAndConfigureHandleHelper(&load_dbhandle_)) 230 if (!OpenAndConfigureHandleHelper(&load_dbhandle_))
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 603
652 sqlite3* DirectoryBackingStore::LazyGetSaveHandle() { 604 sqlite3* DirectoryBackingStore::LazyGetSaveHandle() {
653 if (!save_dbhandle_ && !OpenAndConfigureHandleHelper(&save_dbhandle_)) { 605 if (!save_dbhandle_ && !OpenAndConfigureHandleHelper(&save_dbhandle_)) {
654 DCHECK(FALSE) << "Unable to open handle for saving"; 606 DCHECK(FALSE) << "Unable to open handle for saving";
655 return NULL; 607 return NULL;
656 } 608 }
657 return save_dbhandle_; 609 return save_dbhandle_;
658 } 610 }
659 611
660 } // namespace syncable 612 } // namespace syncable
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/verify_updates_command.cc ('k') | chrome/browser/sync/syncable/syncable.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698