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

Unified Diff: third_party/sqlite/patches/0004-Exclude-journal-file-from-Time-Machine-if-database-i.patch

Issue 949043002: Add //third_party/sqlite to dirs_to_snapshot, remove net_sql.patch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months 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 side-by-side diff with in-line comments
Download patch
Index: third_party/sqlite/patches/0004-Exclude-journal-file-from-Time-Machine-if-database-i.patch
diff --git a/third_party/sqlite/patches/0004-Exclude-journal-file-from-Time-Machine-if-database-i.patch b/third_party/sqlite/patches/0004-Exclude-journal-file-from-Time-Machine-if-database-i.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b9cf9d517401bc0428cdc2a2620a62461c8f691f
--- /dev/null
+++ b/third_party/sqlite/patches/0004-Exclude-journal-file-from-Time-Machine-if-database-i.patch
@@ -0,0 +1,157 @@
+From edfff157e1d9292bfcce6553b76ee913b53b1aa1 Mon Sep 17 00:00:00 2001
+From: mrossetti <mrossetti@chromium.org>
+Date: Tue, 31 May 2011 23:12:11 +0000
+Subject: [PATCH 04/16] Exclude journal file from Time Machine if database is
+ excluded.
+
+BUG=74053
+
+Original review URL: http://codereview.chromium.org/6990066
+
+TODO(shess): The fts3_porter.c change is due to a conflict with an included
+Apple library. Perhaps move the operative code to a .c file, and firewall
+SQLite from that include.
+
+TODO(shess): Revisit this for -wal mode. http://crbug.com/78507
+---
+ third_party/sqlite/src/Makefile.linux-gcc | 4 ++++
+ third_party/sqlite/src/ext/fts3/fts3_porter.c | 6 ++---
+ third_party/sqlite/src/main.mk | 2 +-
+ third_party/sqlite/src/src/pager.c | 32 +++++++++++++++++++++++++++
+ third_party/sqlite/src/src/sqliteInt.h | 10 +++++++++
+ 5 files changed, 50 insertions(+), 4 deletions(-)
+
+diff --git a/third_party/sqlite/src/Makefile.linux-gcc b/third_party/sqlite/src/Makefile.linux-gcc
+index 6d67ba7..554bf56 100644
+--- a/third_party/sqlite/src/Makefile.linux-gcc
++++ b/third_party/sqlite/src/Makefile.linux-gcc
+@@ -44,7 +44,11 @@ THREADLIB = -lpthread
+ #### Specify any extra libraries needed to access required functions.
+ #
+ #TLIBS = -lrt # fdatasync on Solaris 8
++ifeq ($(shell uname -s),Darwin)
++TLIBS = -framework CoreServices
++else
+ TLIBS = -ldl
++endif
+
+ #### Leave SQLITE_DEBUG undefined for maximum speed. Use SQLITE_DEBUG=1
+ # to check for memory leaks. Use SQLITE_DEBUG=2 to print a log of all
+diff --git a/third_party/sqlite/src/ext/fts3/fts3_porter.c b/third_party/sqlite/src/ext/fts3/fts3_porter.c
+index db175ac..933602a 100644
+--- a/third_party/sqlite/src/ext/fts3/fts3_porter.c
++++ b/third_party/sqlite/src/ext/fts3/fts3_porter.c
+@@ -128,7 +128,7 @@ static int porterClose(sqlite3_tokenizer_cursor *pCursor){
+ /*
+ ** Vowel or consonant
+ */
+-static const char cType[] = {
++static const char vOrCType[] = {
+ 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 2, 1
+ };
+@@ -152,7 +152,7 @@ static int isConsonant(const char *z){
+ char x = *z;
+ if( x==0 ) return 0;
+ assert( x>='a' && x<='z' );
+- j = cType[x-'a'];
++ j = vOrCType[x-'a'];
+ if( j<2 ) return j;
+ return z[1]==0 || isVowel(z + 1);
+ }
+@@ -161,7 +161,7 @@ static int isVowel(const char *z){
+ char x = *z;
+ if( x==0 ) return 0;
+ assert( x>='a' && x<='z' );
+- j = cType[x-'a'];
++ j = vOrCType[x-'a'];
+ if( j<2 ) return 1-j;
+ return isConsonant(z + 1);
+ }
+diff --git a/third_party/sqlite/src/main.mk b/third_party/sqlite/src/main.mk
+index 4a7ac02..dc56b0d 100644
+--- a/third_party/sqlite/src/main.mk
++++ b/third_party/sqlite/src/main.mk
+@@ -591,7 +591,7 @@ TESTFIXTURE_FLAGS += -DSQLITE_SERVER=1 -DSQLITE_PRIVATE="" -DSQLITE_CORE
+ testfixture$(EXE): $(TESTSRC2) libsqlite3.a $(TESTSRC) $(TOP)/src/tclsqlite.c
+ $(TCCX) $(TCL_FLAGS) -DTCLSH=1 $(TESTFIXTURE_FLAGS) \
+ $(TESTSRC) $(TESTSRC2) $(TOP)/src/tclsqlite.c \
+- -o testfixture$(EXE) $(LIBTCL) libsqlite3.a $(THREADLIB)
++ -o testfixture$(EXE) $(LIBTCL) libsqlite3.a $(THREADLIB) $(TLIBS)
+
+ amalgamation-testfixture$(EXE): sqlite3.c $(TESTSRC) $(TOP)/src/tclsqlite.c
+ $(TCCX) $(TCL_FLAGS) -DTCLSH=1 $(TESTFIXTURE_FLAGS) \
+diff --git a/third_party/sqlite/src/src/pager.c b/third_party/sqlite/src/src/pager.c
+index d840a39..34fa50f 100644
+--- a/third_party/sqlite/src/src/pager.c
++++ b/third_party/sqlite/src/src/pager.c
+@@ -5467,6 +5467,20 @@ void sqlite3PagerUnref(DbPage *pPg){
+ if( pPg ) sqlite3PagerUnrefNotNull(pPg);
+ }
+
++#if defined(__APPLE__)
++/*
++** Create and return a CFURLRef given a cstring containing the path to a file.
++*/
++static CFURLRef create_cfurl_from_cstring(const char* filePath){
++ CFStringRef urlString = CFStringCreateWithFileSystemRepresentation(
++ kCFAllocatorDefault, filePath);
++ CFURLRef urlRef = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
++ urlString, kCFURLPOSIXPathStyle, FALSE);
++ CFRelease(urlString);
++ return urlRef;
++}
++#endif
++
+ /*
+ ** This function is called at the start of every write transaction.
+ ** There must already be a RESERVED or EXCLUSIVE lock on the database
+@@ -5531,6 +5545,24 @@ static int pager_open_journal(Pager *pPager){
+ #else
+ rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
+ #endif
++#if defined(__APPLE__)
++ /* Set the TimeMachine exclusion metadata for the journal if it has
++ ** been set for the database. Only do this for unix-type vfs
++ ** implementations. */
++ if( rc==SQLITE_OK && pPager->zFilename!=NULL
++ && strlen(pPager->zFilename)>0
++ && strncmp(pVfs->zName, "unix", 4)==0
++ && ( pVfs->zName[4]=='-' || pVfs->zName[4]=='\0' ) ){
++ CFURLRef database = create_cfurl_from_cstring(pPager->zFilename);
++ if( CSBackupIsItemExcluded(database, NULL) ){
++ CFURLRef journal = create_cfurl_from_cstring(pPager->zJournal);
++ /* Ignore errors from the following exclusion call. */
++ CSBackupSetItemExcluded(journal, TRUE, FALSE);
++ CFRelease(journal);
++ }
++ CFRelease(database);
++ }
++#endif
+ }
+ }
+ assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
+diff --git a/third_party/sqlite/src/src/sqliteInt.h b/third_party/sqlite/src/src/sqliteInt.h
+index 63036c5..9d6a7d8 100644
+--- a/third_party/sqlite/src/src/sqliteInt.h
++++ b/third_party/sqlite/src/src/sqliteInt.h
+@@ -2985,6 +2985,16 @@ int sqlite3CantopenError(int);
+ #endif
+
+ /*
++** The CoreServices.h and CoreFoundation.h headers are needed for excluding a
++** -journal file from Time Machine backups when its associated database has
++** previously been excluded by the client code.
++*/
++#if defined(__APPLE__)
++#include <CoreServices/CoreServices.h>
++#include <CoreFoundation/CoreFoundation.h>
++#endif
++
++/*
+ ** The following macros mimic the standard library functions toupper(),
+ ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
+ ** sqlite versions only work for ASCII characters, regardless of locale.
+--
+2.2.1
+

Powered by Google App Engine
This is Rietveld 408576698