diff options
Diffstat (limited to 'ext/sqlite/libsqlite/src/tokenize.c')
-rw-r--r-- | ext/sqlite/libsqlite/src/tokenize.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/ext/sqlite/libsqlite/src/tokenize.c b/ext/sqlite/libsqlite/src/tokenize.c index f053a75934..34ecd49776 100644 --- a/ext/sqlite/libsqlite/src/tokenize.c +++ b/ext/sqlite/libsqlite/src/tokenize.c @@ -29,8 +29,8 @@ typedef struct Keyword Keyword; struct Keyword { char *zName; /* The keyword name */ - int len; /* Number of characters in the keyword */ - int tokenType; /* The token value for this keyword */ + u16 len; /* Number of characters in the keyword */ + u16 tokenType; /* The token value for this keyword */ Keyword *pNext; /* Next keyword with the same hash */ }; @@ -155,10 +155,11 @@ static Keyword *apHashTable[KEY_HASH_SIZE]; int sqliteKeywordCode(const char *z, int n){ int h; Keyword *p; - if( aKeywordTable[0].len==0 ){ + static char needInit = 1; + if( needInit ){ /* Initialize the keyword hash table */ sqliteOsEnterMutex(); - if( aKeywordTable[0].len==0 ){ + if( needInit ){ int i; int n; n = sizeof(aKeywordTable)/sizeof(aKeywordTable[0]); @@ -169,6 +170,7 @@ int sqliteKeywordCode(const char *z, int n){ aKeywordTable[i].pNext = apHashTable[h]; apHashTable[h] = &aKeywordTable[i]; } + needInit = 0; } sqliteOsLeaveMutex(); } @@ -214,9 +216,8 @@ static const char isIdChar[] = { /* -** Return the length of the token that begins at z[0]. Return -** -1 if the token is (or might be) incomplete. Store the token -** type in *tokenType before returning. +** Return the length of the token that begins at z[0]. +** Store the token type in *tokenType before returning. */ static int sqliteGetToken(const unsigned char *z, int *tokenType){ int i; @@ -227,7 +228,6 @@ static int sqliteGetToken(const unsigned char *z, int *tokenType){ return i; } case '-': { - if( z[1]==0 ) return -1; if( z[1]=='-' ){ for(i=2; z[i] && z[i]!='\n'; i++){} *tokenType = TK_COMMENT; @@ -237,13 +237,8 @@ static int sqliteGetToken(const unsigned char *z, int *tokenType){ return 1; } case '(': { - if( z[1]=='+' && z[2]==')' ){ - *tokenType = TK_ORACLE_OUTER_JOIN; - return 3; - }else{ - *tokenType = TK_LP; - return 1; - } + *tokenType = TK_LP; + return 1; } case ')': { *tokenType = TK_RP; @@ -380,6 +375,10 @@ static int sqliteGetToken(const unsigned char *z, int *tokenType){ *tokenType = TK_ID; return i; } + case '?': { + *tokenType = TK_VARIABLE; + return 1; + } default: { if( !isIdChar[*z] ){ break; @@ -416,13 +415,12 @@ int sqliteRunParser(Parse *pParse, const char *zSql, char **pzErrMsg){ i = 0; pEngine = sqliteParserAlloc((void*(*)(int))malloc); if( pEngine==0 ){ - sqliteSetString(pzErrMsg, "out of memory", 0); + sqliteSetString(pzErrMsg, "out of memory", (char*)0); return 1; } pParse->sLastToken.dyn = 0; pParse->zTail = zSql; while( sqlite_malloc_failed==0 && zSql[i]!=0 ){ - assert( i>=0 ); pParse->sLastToken.z = &zSql[i]; assert( pParse->sLastToken.dyn==0 ); @@ -433,7 +431,7 @@ int sqliteRunParser(Parse *pParse, const char *zSql, char **pzErrMsg){ case TK_COMMENT: { if( (db->flags & SQLITE_Interrupt)!=0 ){ pParse->rc = SQLITE_INTERRUPT; - sqliteSetString(pzErrMsg, "interrupt", 0); + sqliteSetString(pzErrMsg, "interrupt", (char*)0); goto abort_parse; } break; @@ -468,7 +466,8 @@ abort_parse: } sqliteParserFree(pEngine, free); if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){ - sqliteSetString(&pParse->zErrMsg, sqlite_error_string(pParse->rc), 0); + sqliteSetString(&pParse->zErrMsg, sqlite_error_string(pParse->rc), + (char*)0); } if( pParse->zErrMsg ){ if( pzErrMsg && *pzErrMsg==0 ){ |