Blink roll 25b6bd3a7a131ffe68d809546ad1a20707915cdc:3a503f41ae42e5b79cfcd2ff10e65afde...
[chromium-blink-merge.git] / third_party / sqlite / mac_time_machine.patch
blobbfd113b6d1c52642908412cecbfdc75a86a3c310
1 Index: src/sqliteInt.h
2 ===================================================================
3 --- src/sqliteInt.h (revision 87306)
4 +++ src/sqliteInt.h (working copy)
5 @@ -2522,6 +2522,16 @@
6 #endif
8 /*
9 +** The CoreServices.h and CoreFoundation.h headers are needed for excluding a
10 +** -journal file from Time Machine backups when its associated database has
11 +** previously been excluded by the client code.
12 +*/
13 +#if defined(__APPLE__)
14 +#include <CoreServices/CoreServices.h>
15 +#include <CoreFoundation/CoreFoundation.h>
16 +#endif
18 +/*
19 ** The following macros mimic the standard library functions toupper(),
20 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
21 ** sqlite versions only work for ASCII characters, regardless of locale.
22 Index: src/pager.c
23 ===================================================================
24 --- src/pager.c (revision 87306)
25 +++ src/pager.c (working copy)
26 @@ -5130,7 +5130,21 @@
30 +#if defined(__APPLE__)
32 +** Create and return a CFURLRef given a cstring containing the path to a file.
33 +*/
34 +static CFURLRef create_cfurl_from_cstring(const char* filePath){
35 + CFStringRef urlString = CFStringCreateWithFileSystemRepresentation(
36 + kCFAllocatorDefault, filePath);
37 + CFURLRef urlRef = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
38 + urlString, kCFURLPOSIXPathStyle, FALSE);
39 + CFRelease(urlString);
40 + return urlRef;
42 +#endif
44 +/*
45 ** This function is called at the start of every write transaction.
46 ** There must already be a RESERVED or EXCLUSIVE lock on the database
47 ** file when this routine is called.
48 @@ -5189,6 +5203,24 @@
49 #else
50 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
51 #endif
52 +#if defined(__APPLE__)
53 + /* Set the TimeMachine exclusion metadata for the journal if it has
54 + ** been set for the database. Only do this for unix-type vfs
55 + ** implementations. */
56 + if( rc==SQLITE_OK && pPager->zFilename!=NULL
57 + && strlen(pPager->zFilename)>0
58 + && strncmp(pVfs->zName, "unix", 4)==0
59 + && ( pVfs->zName[4]=='-' || pVfs->zName[4]=='\0' ) ){
60 + CFURLRef database = create_cfurl_from_cstring(pPager->zFilename);
61 + if( CSBackupIsItemExcluded(database, NULL) ){
62 + CFURLRef journal = create_cfurl_from_cstring(pPager->zJournal);
63 + /* Ignore errors from the following exclusion call. */
64 + CSBackupSetItemExcluded(journal, TRUE, FALSE);
65 + CFRelease(journal);
66 + }
67 + CFRelease(database);
68 + }
69 +#endif
71 assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
73 Index: ext/fts3/fts3_porter.c
74 ===================================================================
75 --- ext/fts3/fts3_porter.c (revision 87306)
76 +++ ext/fts3/fts3_porter.c (working copy)
77 @@ -129,7 +129,7 @@
79 ** Vowel or consonant
81 -static const char cType[] = {
82 +static const char vOrCType[] = {
83 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
84 1, 1, 1, 2, 1
86 @@ -153,7 +153,7 @@
87 char x = *z;
88 if( x==0 ) return 0;
89 assert( x>='a' && x<='z' );
90 - j = cType[x-'a'];
91 + j = vOrCType[x-'a'];
92 if( j<2 ) return j;
93 return z[1]==0 || isVowel(z + 1);
95 @@ -162,7 +162,7 @@
96 char x = *z;
97 if( x==0 ) return 0;
98 assert( x>='a' && x<='z' );
99 - j = cType[x-'a'];
100 + j = vOrCType[x-'a'];
101 if( j<2 ) return 1-j;
102 return isConsonant(z + 1);