Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(412)

Unified Diff: third_party/sqlite/src/src/complete.c

Issue 6990047: Import SQLite 3.7.6.3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/sqlite/src/src/callback.c ('k') | third_party/sqlite/src/src/ctime.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « third_party/sqlite/src/src/callback.c ('k') | third_party/sqlite/src/src/ctime.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698