]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove the EXCLUSIVE and CONCURRENT tokens from the tokenizer. Let the
authordrh <drh@noemail.net>
Fri, 4 Sep 2015 16:39:16 +0000 (16:39 +0000)
committerdrh <drh@noemail.net>
Fri, 4 Sep 2015 16:39:16 +0000 (16:39 +0000)
BEGIN statement be followed by an ID, but throw a syntax error if the ID
is anything other than EXCLUSIVE or CONCURRENT.

FossilOrigin-Name: c0bf92eca4d3d4666e8a0476ef30fa8123de1cb0

addopcodes.awk
manifest
manifest.uuid
src/parse.y
tool/mkkeywordhash.c

index dcd31eff8406d6043be28836d87343b4a534f0a6..c5be40b74bcc77d5605e35c48bb63727a2fef983 100644 (file)
@@ -31,4 +31,6 @@ END {
   printf "#define TK_%-29s %4d\n", "UMINUS",          ++max
   printf "#define TK_%-29s %4d\n", "UPLUS",           ++max
   printf "#define TK_%-29s %4d\n", "REGISTER",        ++max
+  printf "#define TK_%-29s %4d\n", "EXCLUSIVE",       ++max
+  printf "#define TK_%-29s %4d\n", "CONCURRENT",      ++max
 }
index 2eb676f458cac23cf9a6e23c92919c110d6dada5..d8ae9b24e46bf46ceaf4efd3b344bf32d409134a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\sperformance\senhancements\sfrom\strunk.\s\sThis\sbranch\snow\sruns\s(slightly)\nfaster\sthan\sthe\s3.8.11.1\srelease,\sthough\sstill\sslightly\sslower\sthan\strunk.
-D 2015-09-03T20:52:44.863
+C Remove\sthe\sEXCLUSIVE\sand\sCONCURRENT\stokens\sfrom\sthe\stokenizer.\s\sLet\sthe\nBEGIN\sstatement\sbe\sfollowed\sby\san\sID,\sbut\sthrow\sa\ssyntax\serror\sif\sthe\sID\nis\sanything\sother\sthan\sEXCLUSIVE\sor\sCONCURRENT.
+D 2015-09-04T16:39:16.988
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in f85066ce844a28b671aaeeff320921cd0ce36239
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -8,7 +8,7 @@ F Makefile.vxworks e1b65dea203f054e71653415bd8f96dcaed47858
 F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
 F VERSION ccfc4d1576dbfdeece0a4372a2e6a2e37d3e7975
 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
-F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
+F addopcodes.awk 694f522754f0a32dc53bc73ccebf02f28ab10a54
 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
@@ -326,7 +326,7 @@ F src/os_win.c 40b3af7a47eb1107d0d69e592bec345a3b7b798a
 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
 F src/pager.c 06e10a0b736ba22df52e0f56fa67a42de41a0445
 F src/pager.h 244606cccd4293a2bc4be20bb37bf730028c5c18
-F src/parse.y 1e645cacb93979c59f2a510ee2c100e769bd5e3c
+F src/parse.y 0dcce0ae4e106cdaad4053f73b3bc2dedca9c6d6
 F src/pcache.c 24be750c79272e0ca7b6e007bc94999700f3e5ef
 F src/pcache.h 9968603796240cdf83da7e7bef76edf90619cea9
 F src/pcache1.c e1529369c047ac645e6a28196f25b7e936c46b82
@@ -1343,7 +1343,7 @@ F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
 F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6
 F tool/mkautoconfamal.sh d1a2da0e15b2ed33d60af35c7e9d483f13a8eb9f
-F tool/mkkeywordhash.c 8d78ea188240bc08ec080adf3af84717f013e69a
+F tool/mkkeywordhash.c ff6fc41e733204e289b38b9cd3808701725c6793
 F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
 F tool/mkpragmatab.tcl 84af2b180484323a2ea22a2279e8bd9e3e1e492e
 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
@@ -1383,7 +1383,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P f8ae9bfd05abc35293ad6bc62ab1bdbe357d964e f00a9e1e998c4bd249a45444dc2d71a7e4903b8b
-R 26478d9405c36063665d5a8b96df78bb
+P c490bfb150c66763226a35e30ba289abbf29906d
+R 1a77cff5bf225c8f1af4050df926d2bd
 U drh
-Z 60e0d06fc5e4f945ca55d9cbf383722d
+Z 4bd187d1d0f74fd2a4074d09ae209a9a
index bf8f7c634e68892fdfd8f863a007765d1923d8c7..9cb3d0d03ef91c6a63d892638557f909a6d3eb76 100644 (file)
@@ -1 +1 @@
-c490bfb150c66763226a35e30ba289abbf29906d
\ No newline at end of file
+c0bf92eca4d3d4666e8a0476ef30fa8123de1cb0
\ No newline at end of file
index 7a05ecab6a932433a99419a9850c43dbfcf01a0d..63bf5e4715d205e7b539645db70d05cfa36a6cbe 100644 (file)
@@ -32,7 +32,7 @@
 %syntax_error {
   UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
   assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
-  sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
+  parserSyntaxError(pParse, &TOKEN);
 }
 %stack_overflow {
   UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */
@@ -94,6 +94,13 @@ struct TrigEvent { int a; IdList * b; };
 */
 struct AttachKey { int type;  Token key; };
 
+/*
+** Generate a syntax error
+*/
+static void parserSyntaxError(Parse *pParse, Token *p){
+  sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", p);
+}
+
 } // end %include
 
 // Input is a single SQL command
@@ -118,10 +125,18 @@ trans_opt ::= TRANSACTION.
 trans_opt ::= TRANSACTION nm.
 %type transtype {int}
 transtype(A) ::= .             {A = TK_DEFERRED;}
-transtype(A) ::= DEFERRED(X).  {A = @X;}
-transtype(A) ::= IMMEDIATE(X). {A = @X;}
-transtype(A) ::= EXCLUSIVE(X). {A = @X;}
-transtype(A) ::= CONCURRENT(X).  {A = @X;}
+transtype(A) ::= DEFERRED(X).         {A = @X;}
+transtype(A) ::= IMMEDIATE(X).        {A = @X;}
+transtype(A) ::= ID(X). {
+   Token *p = &X;
+   if( p->n==9 && sqlite3_strnicmp(p->z,"exclusive",9)==0 ){
+     A = TK_EXCLUSIVE;
+   }else if( p->n==10 && sqlite3_strnicmp(p->z,"concurrent",10)==0 ){
+     A = TK_CONCURRENT;
+   }else{
+     parserSyntaxError(pParse, p);
+   }
+}
 cmd ::= COMMIT trans_opt.      {sqlite3CommitTransaction(pParse);}
 cmd ::= END trans_opt.         {sqlite3CommitTransaction(pParse);}
 cmd ::= ROLLBACK trans_opt.    {sqlite3RollbackTransaction(pParse);}
@@ -203,10 +218,11 @@ columnid(A) ::= nm(X). {
 //
 %fallback ID
   ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
-  CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR
+  CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXPLAIN FAIL FOR
   IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
   QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW
-  ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
+  ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL
+  WITH WITHOUT
 %ifdef SQLITE_OMIT_COMPOUND_SELECT
   EXCEPT INTERSECT UNION
 %endif SQLITE_OMIT_COMPOUND_SELECT
@@ -873,7 +889,7 @@ expr(A) ::= VARIABLE(X).     {
     ** that look like this:   #1 #2 ...  These terms refer to registers
     ** in the virtual machine.  #N is the N-th register. */
     if( pParse->nested==0 ){
-      sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &X);
+      parserSyntaxError(pParse, &X);
       A.pExpr = 0;
     }else{
       A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &X);
index 50585b1d099325e0df04d62f154f9a4249eea790..044ebb6721bdbe02b35a128561ba8a6a0c303fe9 100644 (file)
@@ -171,7 +171,6 @@ static Keyword aKeywordTable[] = {
   { "COLLATE",          "TK_COLLATE",      ALWAYS                 },
   { "COLUMN",           "TK_COLUMNKW",     ALTER                  },
   { "COMMIT",           "TK_COMMIT",       ALWAYS                 },
-  { "CONCURRENT",       "TK_CONCURRENT",   ALWAYS                 },
   { "CONFLICT",         "TK_CONFLICT",     CONFLICT               },
   { "CONSTRAINT",       "TK_CONSTRAINT",   ALWAYS                 },
   { "CREATE",           "TK_CREATE",       ALWAYS                 },
@@ -193,7 +192,6 @@ static Keyword aKeywordTable[] = {
   { "ELSE",             "TK_ELSE",         ALWAYS                 },
   { "ESCAPE",           "TK_ESCAPE",       ALWAYS                 },
   { "EXCEPT",           "TK_EXCEPT",       COMPOUND               },
-  { "EXCLUSIVE",        "TK_EXCLUSIVE",    ALWAYS                 },
   { "EXISTS",           "TK_EXISTS",       ALWAYS                 },
   { "EXPLAIN",          "TK_EXPLAIN",      EXPLAIN                },
   { "FAIL",             "TK_FAIL",         CONFLICT|TRIGGER       },