| Index: third_party/sqlite/src/src/complete.c
 | 
| diff --git a/third_party/sqlite/src/src/complete.c b/third_party/sqlite/src/src/complete.c
 | 
| index 8993cfd455410a74c27b025c0474a3cda7ebf845..9e9140085c0046ed3bf6f4485220692dca1743c5 100644
 | 
| --- a/third_party/sqlite/src/src/complete.c
 | 
| +++ b/third_party/sqlite/src/src/complete.c
 | 
| @@ -15,8 +15,6 @@
 | 
|  ** This code used to be part of the tokenizer.c source file.  But by
 | 
|  ** separating it out, the code will be automatically omitted from
 | 
|  ** static links that do not use it.
 | 
| -**
 | 
| -** $Id: complete.c,v 1.8 2009/04/28 04:46:42 drh Exp $
 | 
|  */
 | 
|  #include "sqliteInt.h"
 | 
|  #ifndef SQLITE_OMIT_COMPLETE
 | 
| @@ -26,8 +24,7 @@
 | 
|  */
 | 
|  #ifndef SQLITE_AMALGAMATION
 | 
|  #ifdef SQLITE_ASCII
 | 
| -extern const char sqlite3IsAsciiIdChar[];
 | 
| -#define IdChar(C)  (((c=C)&0x80)!=0 || (c>0x1f && sqlite3IsAsciiIdChar[c-0x20]))
 | 
| +#define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
 | 
|  #endif
 | 
|  #ifdef SQLITE_EBCDIC
 | 
|  extern const char sqlite3IsEbcdicIdChar[];
 | 
| @@ -43,11 +40,13 @@ extern const char sqlite3IsEbcdicIdChar[];
 | 
|  #define tkSEMI    0
 | 
|  #define tkWS      1
 | 
|  #define tkOTHER   2
 | 
| +#ifndef SQLITE_OMIT_TRIGGER
 | 
|  #define tkEXPLAIN 3
 | 
|  #define tkCREATE  4
 | 
|  #define tkTEMP    5
 | 
|  #define tkTRIGGER 6
 | 
|  #define tkEND     7
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** Return TRUE if the given SQL string ends in a semicolon.
 | 
| @@ -56,36 +55,38 @@ extern const char sqlite3IsEbcdicIdChar[];
 | 
|  ** Whenever the CREATE TRIGGER keywords are seen, the statement
 | 
|  ** must end with ";END;".
 | 
|  **
 | 
| -** This implementation uses a state machine with 7 states:
 | 
| +** This implementation uses a state machine with 8 states:
 | 
|  **
 | 
| -**   (0) START     At the beginning or end of an SQL statement.  This routine
 | 
| +**   (0) INVALID   We have not yet seen a non-whitespace character.
 | 
| +**
 | 
| +**   (1) START     At the beginning or end of an SQL statement.  This routine
 | 
|  **                 returns 1 if it ends in the START state and 0 if it ends
 | 
|  **                 in any other state.
 | 
|  **
 | 
| -**   (1) NORMAL    We are in the middle of statement which ends with a single
 | 
| +**   (2) NORMAL    We are in the middle of statement which ends with a single
 | 
|  **                 semicolon.
 | 
|  **
 | 
| -**   (2) EXPLAIN   The keyword EXPLAIN has been seen at the beginning of 
 | 
| +**   (3) EXPLAIN   The keyword EXPLAIN has been seen at the beginning of 
 | 
|  **                 a statement.
 | 
|  **
 | 
| -**   (3) CREATE    The keyword CREATE has been seen at the beginning of a
 | 
| +**   (4) CREATE    The keyword CREATE has been seen at the beginning of a
 | 
|  **                 statement, possibly preceeded by EXPLAIN and/or followed by
 | 
|  **                 TEMP or TEMPORARY
 | 
|  **
 | 
| -**   (4) TRIGGER   We are in the middle of a trigger definition that must be
 | 
| +**   (5) TRIGGER   We are in the middle of a trigger definition that must be
 | 
|  **                 ended by a semicolon, the keyword END, and another semicolon.
 | 
|  **
 | 
| -**   (5) SEMI      We've seen the first semicolon in the ";END;" that occurs at
 | 
| +**   (6) SEMI      We've seen the first semicolon in the ";END;" that occurs at
 | 
|  **                 the end of a trigger definition.
 | 
|  **
 | 
| -**   (6) END       We've seen the ";END" of the ";END;" that occurs at the end
 | 
| +**   (7) END       We've seen the ";END" of the ";END;" that occurs at the end
 | 
|  **                 of a trigger difinition.
 | 
|  **
 | 
|  ** Transitions between states above are determined by tokens extracted
 | 
|  ** from the input.  The following tokens are significant:
 | 
|  **
 | 
|  **   (0) tkSEMI      A semicolon.
 | 
| -**   (1) tkWS        Whitespace
 | 
| +**   (1) tkWS        Whitespace.
 | 
|  **   (2) tkOTHER     Any other SQL token.
 | 
|  **   (3) tkEXPLAIN   The "explain" keyword.
 | 
|  **   (4) tkCREATE    The "create" keyword.
 | 
| @@ -94,6 +95,7 @@ extern const char sqlite3IsEbcdicIdChar[];
 | 
|  **   (7) tkEND       The "end" keyword.
 | 
|  **
 | 
|  ** Whitespace never causes a state transition and is always ignored.
 | 
| +** This means that a SQL string of all whitespace is invalid.
 | 
|  **
 | 
|  ** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed
 | 
|  ** to recognize the end of a trigger can be omitted.  All we have to do
 | 
| @@ -107,26 +109,28 @@ int sqlite3_complete(const char *zSql){
 | 
|    /* A complex statement machine used to detect the end of a CREATE TRIGGER
 | 
|    ** statement.  This is the normal case.
 | 
|    */
 | 
| -  static const u8 trans[7][8] = {
 | 
| +  static const u8 trans[8][8] = {
 | 
|                       /* Token:                                                */
 | 
| -     /* State:       **  SEMI  WS  OTHER EXPLAIN  CREATE  TEMP  TRIGGER  END  */
 | 
| -     /* 0   START: */ {    0,  0,     1,      2,      3,    1,       1,   1,  },
 | 
| -     /* 1  NORMAL: */ {    0,  1,     1,      1,      1,    1,       1,   1,  },
 | 
| -     /* 2 EXPLAIN: */ {    0,  2,     2,      1,      3,    1,       1,   1,  },
 | 
| -     /* 3  CREATE: */ {    0,  3,     1,      1,      1,    3,       4,   1,  },
 | 
| -     /* 4 TRIGGER: */ {    5,  4,     4,      4,      4,    4,       4,   4,  },
 | 
| -     /* 5    SEMI: */ {    5,  5,     4,      4,      4,    4,       4,   6,  },
 | 
| -     /* 6     END: */ {    0,  6,     4,      4,      4,    4,       4,   4,  },
 | 
| +     /* State:       **  SEMI  WS  OTHER  EXPLAIN  CREATE  TEMP  TRIGGER  END */
 | 
| +     /* 0 INVALID: */ {    1,  0,     2,       3,      4,    2,       2,   2, },
 | 
| +     /* 1   START: */ {    1,  1,     2,       3,      4,    2,       2,   2, },
 | 
| +     /* 2  NORMAL: */ {    1,  2,     2,       2,      2,    2,       2,   2, },
 | 
| +     /* 3 EXPLAIN: */ {    1,  3,     3,       2,      4,    2,       2,   2, },
 | 
| +     /* 4  CREATE: */ {    1,  4,     2,       2,      2,    4,       5,   2, },
 | 
| +     /* 5 TRIGGER: */ {    6,  5,     5,       5,      5,    5,       5,   5, },
 | 
| +     /* 6    SEMI: */ {    6,  6,     5,       5,      5,    5,       5,   7, },
 | 
| +     /* 7     END: */ {    1,  7,     5,       5,      5,    5,       5,   5, },
 | 
|    };
 | 
|  #else
 | 
| -  /* If triggers are not suppored by this compile then the statement machine
 | 
| +  /* If triggers are not supported by this compile then the statement machine
 | 
|    ** used to detect the end of a statement is much simplier
 | 
|    */
 | 
| -  static const u8 trans[2][3] = {
 | 
| +  static const u8 trans[3][3] = {
 | 
|                       /* Token:           */
 | 
|       /* State:       **  SEMI  WS  OTHER */
 | 
| -     /* 0   START: */ {    0,  0,     1, },
 | 
| -     /* 1  NORMAL: */ {    0,  1,     1, },
 | 
| +     /* 0 INVALID: */ {    1,  0,     2, },
 | 
| +     /* 1   START: */ {    1,  1,     2, },
 | 
| +     /* 2  NORMAL: */ {    1,  2,     2, },
 | 
|    };
 | 
|  #endif /* SQLITE_OMIT_TRIGGER */
 | 
|  
 | 
| @@ -162,7 +166,7 @@ int sqlite3_complete(const char *zSql){
 | 
|            break;
 | 
|          }
 | 
|          while( *zSql && *zSql!='\n' ){ zSql++; }
 | 
| -        if( *zSql==0 ) return state==0;
 | 
| +        if( *zSql==0 ) return state==1;
 | 
|          token = tkWS;
 | 
|          break;
 | 
|        }
 | 
| @@ -184,7 +188,9 @@ int sqlite3_complete(const char *zSql){
 | 
|          break;
 | 
|        }
 | 
|        default: {
 | 
| -        int c;
 | 
| +#ifdef SQLITE_EBCDIC
 | 
| +        unsigned char c;
 | 
| +#endif
 | 
|          if( IdChar((u8)*zSql) ){
 | 
|            /* Keywords and unquoted identifiers */
 | 
|            int nId;
 | 
| @@ -244,7 +250,7 @@ int sqlite3_complete(const char *zSql){
 | 
|      state = trans[state][token];
 | 
|      zSql++;
 | 
|    }
 | 
| -  return state==0;
 | 
| +  return state==1;
 | 
|  }
 | 
|  
 | 
|  #ifndef SQLITE_OMIT_UTF16
 | 
| 
 |