-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
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
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
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
-ad3ffe2eec8e8ea2591a78c723d2665735553cb0
\ No newline at end of file
+519fd03b845c9b53df9e5397282df2e99f36a672
\ No newline at end of file
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;
pCol->affinity = sqlite3AffinityType(pCol->zType, &pCol->szEst);
}
p->nCol++;
+ pParse->constraintName.n = 0;
}
/*
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.
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);
%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*}
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). {