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 ){  | 
