From: drh Date: Mon, 29 Feb 2016 13:37:21 +0000 (+0000) Subject: Further simplifications to the grammar. X-Git-Tag: version-3.12.0~123^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=986dde705234f9a9e9e60f4d75eb60dd0c94ccf3;p=thirdparty%2Fsqlite.git Further simplifications to the grammar. FossilOrigin-Name: 519fd03b845c9b53df9e5397282df2e99f36a672 --- diff --git a/manifest b/manifest index ca7a05fd5c..d09c8a0810 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index fea3e74ff6..eb7843b3f9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ad3ffe2eec8e8ea2591a78c723d2665735553cb0 \ No newline at end of file +519fd03b845c9b53df9e5397282df2e99f36a672 \ No newline at end of file diff --git a/src/build.c b/src/build.c index a655c9a301..ec8770a454 100644 --- a/src/build.c +++ b/src/build.c @@ -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; } /* diff --git a/src/parse.y b/src/parse.y index b8ae8c8dc1..20492edb80 100644 --- a/src/parse.y +++ b/src/parse.y @@ -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). {