summaryrefslogtreecommitdiff
path: root/ext/sqlite/libsqlite/src/tokenize.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sqlite/libsqlite/src/tokenize.c')
-rw-r--r--ext/sqlite/libsqlite/src/tokenize.c37
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 ){