| Index: src/sqliteInt.h |
| =================================================================== |
| --- src/sqliteInt.h (revision 87306) |
| +++ src/sqliteInt.h (working copy) |
| @@ -2522,6 +2522,16 @@ |
| #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. |
| Index: src/pager.c |
| =================================================================== |
| --- src/pager.c (revision 87306) |
| +++ src/pager.c (working copy) |
| @@ -5130,7 +5130,21 @@ |
| } |
| } |
| |
| +#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 |
| ** file when this routine is called. |
| @@ -5189,6 +5203,24 @@ |
| #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 |
| + && memcmp(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) ); |
| } |
| Index: ext/fts3/fts3_porter.c |
| =================================================================== |
| --- ext/fts3/fts3_porter.c (revision 87306) |
| +++ ext/fts3/fts3_porter.c (working copy) |
| @@ -129,7 +129,7 @@ |
| /* |
| ** 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 |
| }; |
| @@ -153,7 +153,7 @@ |
| 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); |
| } |
| @@ -162,7 +162,7 @@ |
| 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); |
| } |