|  | 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); | 
|  | } |