]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Further simplifications to the grammar.
authordrh <drh@noemail.net>
Mon, 29 Feb 2016 13:37:21 +0000 (13:37 +0000)
committerdrh <drh@noemail.net>
Mon, 29 Feb 2016 13:37:21 +0000 (13:37 +0000)
FossilOrigin-Name: 519fd03b845c9b53df9e5397282df2e99f36a672

manifest
manifest.uuid
src/build.c
src/parse.y

index ca7a05fd5c42a85f38d275ee38e31a692b589253..d09c8a08109308ffbfa5ba36da1d569bd6eb774a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Update\sthe\sparser\sso\sthat\sit\spulls\sout\sthe\scolumn\sname\sand\stype\sall\sin\sone\ngo,\srather\sthan\susing\sseparate\sreductions.
-D 2016-02-27T23:25:36.278
+C Further\ssimplifications\sto\sthe\sgrammar.
+D 2016-02-29T13:37:21.189
 F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 4f319afb7c049d40aff7af6e8c4e7cc2ba18e079
@@ -295,7 +295,7 @@ F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
 F src/btree.c 7bb920c473c277380fcb3e8a8ee28ce1a48e0abc
 F src/btree.h a5008b9afe56e8e54ade6c436a910f112defcca9
 F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
-F src/build.c 8bde0b1cf0bfd94562398d31592b6b8b2b6ba719
+F src/build.c 5a3e2c884c7fd30f1cc46424fc1f816cc1218f5d
 F src/callback.c 2e76147783386374bf01b227f752c81ec872d730
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
@@ -338,7 +338,7 @@ F src/os_win.c f0d7aa603eb6262143d7169a222aea07c4fca91d
 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
 F src/pager.c d034c69b958c01289eb8070cbf902e1a68cd7e0b
 F src/pager.h e1d38a2f14849e219df0f91f8323504d134c8a56
-F src/parse.y 3a29fc291600c48827ea94d5c630972db33e0b81
+F src/parse.y 5ea8c81c5c41b27887f41b4a7e1c58470d7d3821
 F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df
 F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
 F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
@@ -1451,10 +1451,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P d8c94a46dfa94930732c2de2aa79675c5087d36e
-R 08160a7958aa5578e4603f69af85b704
-T *branch * schema-storage
-T *sym-schema-storage *
-T -sym-trunk *
+P ad3ffe2eec8e8ea2591a78c723d2665735553cb0
+R 4784b7c67e30974242406c3dce382bf0
 U drh
-Z 64cdb714f146eadb7f54fce29197df77
+Z 37a93f7c979e487a92cbbe58a4d1f8f4
index fea3e74ff681195479efe07cac22a54214eda0e0..eb7843b3f9a5dc54ceeb2257bbe24b0842aaf14a 100644 (file)
@@ -1 +1 @@
-ad3ffe2eec8e8ea2591a78c723d2665735553cb0
\ No newline at end of file
+519fd03b845c9b53df9e5397282df2e99f36a672
\ No newline at end of file
index a655c9a301fdbda19a9b1bcf977834c71c1f2606..ec8770a454dc6fbf5cb5105c0c9175237ae64823 100644 (file)
@@ -1074,7 +1074,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
   pCol->zName = z;
   sqlite3ColumnPropertiesFromName(p, pCol);
  
-  if( pType==0 ){
+  if( pType->n==0 ){
     /* If there is no type specified, columns have the default affinity
     ** 'BLOB'. */
     pCol->affinity = SQLITE_AFF_BLOB;
@@ -1084,6 +1084,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
     pCol->affinity = sqlite3AffinityType(pCol->zType, &pCol->szEst);
   }
   p->nCol++;
+  pParse->constraintName.n = 0;
 }
 
 /*
index b8ae8c8dc1083ca62ad9c8b3266f6b20eeb38dff..20492edb80ecf60d94a3df71444533767eaf414d 100644 (file)
@@ -190,20 +190,9 @@ table_options(A) ::= WITHOUT nm(X). {
     sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
   }
 }
-columnlist ::= columnlist COMMA column.
-columnlist ::= column.
-
-// A "column" is a complete description of a single column in a
-// CREATE TABLE statement.  This includes the column name, its
-// datatype, and other keywords such as PRIMARY KEY, UNIQUE, REFERENCES,
-// NOT NULL and so forth.
-//
-column(A) ::= columnname(A) carglist. {
-  A.n = (int)(pParse->sLastToken.z-A.z) + pParse->sLastToken.n;
-}
+columnlist ::= columnlist COMMA columnname carglist.
+columnlist ::= columnname carglist.
 columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
-columnname(A) ::= nm(A).              {sqlite3AddColumn(pParse,&A,0);}
-
 
 // An IDENTIFIER can be a generic identifier, or one of several
 // keywords.  Any non-standard keyword can also be an identifier.
@@ -262,11 +251,12 @@ nm(A) ::= id(A).
 nm(A) ::= STRING(A).
 nm(A) ::= JOIN_KW(A).
 
-// A typetoken is really one or more tokens that form a type name such
+// A typetoken is really zero or more tokens that form a type name such
 // as can be found after the column name in a CREATE TABLE statement.
 // Multiple tokens are concatenated to form the value of the typetoken.
 //
 %type typetoken {Token}
+typetoken(A) ::= .   {A.n = 0; A.z = 0;}
 typetoken(A) ::= typename(A).
 typetoken(A) ::= typename(A) LP signed RP(Y). {
   A.n = (int)(&Y.z[Y.n] - A.z);
@@ -576,7 +566,7 @@ selcollist(A) ::= sclp(A) nm(X) DOT STAR(Y). {
 %type as {Token}
 as(X) ::= AS nm(Y).    {X = Y;}
 as(X) ::= ids(X).
-as(X) ::= .            {X.n = 0;}
+as(X) ::= .            {X.n = 0; X.z = 0;}
 
 
 %type seltablist {SrcList*}
@@ -1495,7 +1485,9 @@ cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
   sqlite3AlterRenameTable(pParse,X,&Z);
 }
-cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {
+cmd ::= ALTER TABLE add_column_fullname
+        ADD kwcolumn_opt columnname(Y) carglist. {
+  Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
   sqlite3AlterFinishAddColumn(pParse, &Y);
 }
 add_column_fullname ::= fullname(X). {