xref: /PHP-5.3/ext/sqlite/libsqlite/src/parse.y (revision e563b4ea)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains SQLite's grammar for SQL.  Process this file
13 ** using the lemon parser generator to generate C code that runs
14 ** the parser.  Lemon will also generate a header file containing
15 ** numeric codes for all of the tokens.
16 **
17 ** @(#) $Id$
18 */
19 %token_prefix TK_
20 %token_type {Token}
21 %default_type {Token}
22 %extra_argument {Parse *pParse}
23 %syntax_error {
24   if( pParse->zErrMsg==0 ){
25     if( TOKEN.z[0] ){
26       sqliteErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
27     }else{
28       sqliteErrorMsg(pParse, "incomplete SQL statement");
29     }
30   }
31 }
32 %name sqliteParser
33 %include {
34 #include "sqliteInt.h"
35 #include "parse.h"
36 
37 /*
38 ** An instance of this structure holds information about the
39 ** LIMIT clause of a SELECT statement.
40 */
41 struct LimitVal {
42   int limit;    /* The LIMIT value.  -1 if there is no limit */
43   int offset;   /* The OFFSET.  0 if there is none */
44 };
45 
46 /*
47 ** An instance of the following structure describes the event of a
48 ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
49 ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
50 **
51 **      UPDATE ON (a,b,c)
52 **
53 ** Then the "b" IdList records the list "a,b,c".
54 */
55 struct TrigEvent { int a; IdList * b; };
56 
57 } // end %include
58 
59 // These are extra tokens used by the lexer but never seen by the
60 // parser.  We put them in a rule so that the parser generator will
61 // add them to the parse.h output file.
62 //
63 %nonassoc END_OF_FILE ILLEGAL SPACE UNCLOSED_STRING COMMENT FUNCTION
64           COLUMN AGG_FUNCTION.
65 
66 // Input is a single SQL command
67 input ::= cmdlist.
68 cmdlist ::= cmdlist ecmd.
69 cmdlist ::= ecmd.
70 ecmd ::= explain cmdx SEMI.
71 ecmd ::= SEMI.
72 cmdx ::= cmd.           { sqliteExec(pParse); }
73 explain ::= EXPLAIN.    { sqliteBeginParse(pParse, 1); }
74 explain ::= .           { sqliteBeginParse(pParse, 0); }
75 
76 ///////////////////// Begin and end transactions. ////////////////////////////
77 //
78 
onconf(R)79 cmd ::= BEGIN trans_opt onconf(R).  {sqliteBeginTransaction(pParse,R);}
80 trans_opt ::= .
81 trans_opt ::= TRANSACTION.
82 trans_opt ::= TRANSACTION nm.
83 cmd ::= COMMIT trans_opt.      {sqliteCommitTransaction(pParse);}
84 cmd ::= END trans_opt.         {sqliteCommitTransaction(pParse);}
85 cmd ::= ROLLBACK trans_opt.    {sqliteRollbackTransaction(pParse);}
86 
87 ///////////////////// The CREATE TABLE statement ////////////////////////////
88 //
89 cmd ::= create_table create_table_args.
CREATE(X)90 create_table ::= CREATE(X) temp(T) TABLE nm(Y). {
91    sqliteStartTable(pParse,&X,&Y,T,0);
92 }
93 %type temp {int}
temp(A)94 temp(A) ::= TEMP.  {A = 1;}
temp(A)95 temp(A) ::= .      {A = 0;}
RP(X)96 create_table_args ::= LP columnlist conslist_opt RP(X). {
97   sqliteEndTable(pParse,&X,0);
98 }
select(S)99 create_table_args ::= AS select(S). {
100   sqliteEndTable(pParse,0,S);
101   sqliteSelectDelete(S);
102 }
103 columnlist ::= columnlist COMMA column.
104 columnlist ::= column.
105 
106 // About the only information used for a column is the name of the
107 // column.  The type is always just "text".  But the code will accept
108 // an elaborate typename.  Perhaps someday we'll do something with it.
109 //
110 column ::= columnid type carglist.
nm(X)111 columnid ::= nm(X).                {sqliteAddColumn(pParse,&X);}
112 
113 // An IDENTIFIER can be a generic identifier, or one of several
114 // keywords.  Any non-standard keyword can also be an identifier.
115 //
116 %type id {Token}
id(A)117 id(A) ::= ID(X).         {A = X;}
118 
119 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
120 // fallback to ID if they will not parse as their original value.
121 // This obviates the need for the "id" nonterminal.
122 //
123 %fallback ID
124   ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT
125   COPY DATABASE DEFERRED DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR
126   GLOB IGNORE IMMEDIATE INITIALLY INSTEAD LIKE MATCH KEY
127   OF OFFSET PRAGMA RAISE REPLACE RESTRICT ROW STATEMENT
128   TEMP TRIGGER VACUUM VIEW.
129 
130 // Define operator precedence early so that this is the first occurance
131 // of the operator tokens in the grammer.  Keeping the operators together
132 // causes them to be assigned integer values that are close together,
133 // which keeps parser tables smaller.
134 //
135 %left OR.
136 %left AND.
137 %right NOT.
138 %left EQ NE ISNULL NOTNULL IS LIKE GLOB BETWEEN IN.
139 %left GT GE LT LE.
140 %left BITAND BITOR LSHIFT RSHIFT.
141 %left PLUS MINUS.
142 %left STAR SLASH REM.
143 %left CONCAT.
144 %right UMINUS UPLUS BITNOT.
145 
146 // And "ids" is an identifer-or-string.
147 //
148 %type ids {Token}
ids(A)149 ids(A) ::= ID(X).        {A = X;}
ids(A)150 ids(A) ::= STRING(X).    {A = X;}
151 
152 // The name of a column or table can be any of the following:
153 //
154 %type nm {Token}
nm(A)155 nm(A) ::= ID(X).         {A = X;}
nm(A)156 nm(A) ::= STRING(X).     {A = X;}
nm(A)157 nm(A) ::= JOIN_KW(X).    {A = X;}
158 
159 type ::= .
typename(X)160 type ::= typename(X).                    {sqliteAddColumnType(pParse,&X,&X);}
typename(X)161 type ::= typename(X) LP signed RP(Y).    {sqliteAddColumnType(pParse,&X,&Y);}
typename(X)162 type ::= typename(X) LP signed COMMA signed RP(Y).
163                                          {sqliteAddColumnType(pParse,&X,&Y);}
164 %type typename {Token}
typename(A)165 typename(A) ::= ids(X).           {A = X;}
typename(A)166 typename(A) ::= typename(X) ids.  {A = X;}
167 %type signed {int}
INTEGER(X)168 signed(A) ::= INTEGER(X).         { A = atoi(X.z); }
INTEGER(X)169 signed(A) ::= PLUS INTEGER(X).    { A = atoi(X.z); }
INTEGER(X)170 signed(A) ::= MINUS INTEGER(X).   { A = -atoi(X.z); }
171 carglist ::= carglist carg.
172 carglist ::= .
173 carg ::= CONSTRAINT nm ccons.
174 carg ::= ccons.
STRING(X)175 carg ::= DEFAULT STRING(X).          {sqliteAddDefaultValue(pParse,&X,0);}
ID(X)176 carg ::= DEFAULT ID(X).              {sqliteAddDefaultValue(pParse,&X,0);}
INTEGER(X)177 carg ::= DEFAULT INTEGER(X).         {sqliteAddDefaultValue(pParse,&X,0);}
INTEGER(X)178 carg ::= DEFAULT PLUS INTEGER(X).    {sqliteAddDefaultValue(pParse,&X,0);}
INTEGER(X)179 carg ::= DEFAULT MINUS INTEGER(X).   {sqliteAddDefaultValue(pParse,&X,1);}
FLOAT(X)180 carg ::= DEFAULT FLOAT(X).           {sqliteAddDefaultValue(pParse,&X,0);}
FLOAT(X)181 carg ::= DEFAULT PLUS FLOAT(X).      {sqliteAddDefaultValue(pParse,&X,0);}
FLOAT(X)182 carg ::= DEFAULT MINUS FLOAT(X).     {sqliteAddDefaultValue(pParse,&X,1);}
183 carg ::= DEFAULT NULL.
184 
185 // In addition to the type name, we also care about the primary key and
186 // UNIQUE constraints.
187 //
188 ccons ::= NULL onconf.
onconf(R)189 ccons ::= NOT NULL onconf(R).               {sqliteAddNotNull(pParse, R);}
onconf(R)190 ccons ::= PRIMARY KEY sortorder onconf(R).  {sqliteAddPrimaryKey(pParse,0,R);}
onconf(R)191 ccons ::= UNIQUE onconf(R).           {sqliteCreateIndex(pParse,0,0,0,R,0,0);}
192 ccons ::= CHECK LP expr RP onconf.
nm(T)193 ccons ::= REFERENCES nm(T) idxlist_opt(TA) refargs(R).
194                                 {sqliteCreateForeignKey(pParse,0,&T,TA,R);}
defer_subclause(D)195 ccons ::= defer_subclause(D).   {sqliteDeferForeignKey(pParse,D);}
id(C)196 ccons ::= COLLATE id(C).  {
197    sqliteAddCollateType(pParse, sqliteCollateType(C.z, C.n));
198 }
199 
200 // The next group of rules parses the arguments to a REFERENCES clause
201 // that determine if the referential integrity checking is deferred or
202 // or immediate and which determine what action to take if a ref-integ
203 // check fails.
204 //
205 %type refargs {int}
refargs(A)206 refargs(A) ::= .                     { A = OE_Restrict * 0x010101; }
refargs(A)207 refargs(A) ::= refargs(X) refarg(Y). { A = (X & Y.mask) | Y.value; }
208 %type refarg {struct {int value; int mask;}}
209 refarg(A) ::= MATCH nm.              { A.value = 0;     A.mask = 0x000000; }
210 refarg(A) ::= ON DELETE refact(X).   { A.value = X;     A.mask = 0x0000ff; }
211 refarg(A) ::= ON UPDATE refact(X).   { A.value = X<<8;  A.mask = 0x00ff00; }
212 refarg(A) ::= ON INSERT refact(X).   { A.value = X<<16; A.mask = 0xff0000; }
213 %type refact {int}
214 refact(A) ::= SET NULL.              { A = OE_SetNull; }
215 refact(A) ::= SET DEFAULT.           { A = OE_SetDflt; }
216 refact(A) ::= CASCADE.               { A = OE_Cascade; }
217 refact(A) ::= RESTRICT.              { A = OE_Restrict; }
218 %type defer_subclause {int}
219 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt(X).  {A = X;}
220 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X).      {A = X;}
221 %type init_deferred_pred_opt {int}
222 init_deferred_pred_opt(A) ::= .                       {A = 0;}
223 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED.     {A = 1;}
224 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE.    {A = 0;}
225 
226 // For the time being, the only constraint we care about is the primary
227 // key and UNIQUE.  Both create indices.
228 //
229 conslist_opt ::= .
230 conslist_opt ::= COMMA conslist.
231 conslist ::= conslist COMMA tcons.
232 conslist ::= conslist tcons.
233 conslist ::= tcons.
234 tcons ::= CONSTRAINT nm.
235 tcons ::= PRIMARY KEY LP idxlist(X) RP onconf(R).
236                                              {sqliteAddPrimaryKey(pParse,X,R);}
237 tcons ::= UNIQUE LP idxlist(X) RP onconf(R).
238                                        {sqliteCreateIndex(pParse,0,0,X,R,0,0);}
239 tcons ::= CHECK expr onconf.
240 tcons ::= FOREIGN KEY LP idxlist(FA) RP
241           REFERENCES nm(T) idxlist_opt(TA) refargs(R) defer_subclause_opt(D). {
242     sqliteCreateForeignKey(pParse, FA, &T, TA, R);
243     sqliteDeferForeignKey(pParse, D);
244 }
245 %type defer_subclause_opt {int}
246 defer_subclause_opt(A) ::= .                    {A = 0;}
247 defer_subclause_opt(A) ::= defer_subclause(X).  {A = X;}
248 
249 // The following is a non-standard extension that allows us to declare the
250 // default behavior when there is a constraint conflict.
251 //
252 %type onconf {int}
253 %type orconf {int}
254 %type resolvetype {int}
255 onconf(A) ::= .                              { A = OE_Default; }
256 onconf(A) ::= ON CONFLICT resolvetype(X).    { A = X; }
257 orconf(A) ::= .                              { A = OE_Default; }
258 orconf(A) ::= OR resolvetype(X).             { A = X; }
259 resolvetype(A) ::= ROLLBACK.                 { A = OE_Rollback; }
260 resolvetype(A) ::= ABORT.                    { A = OE_Abort; }
261 resolvetype(A) ::= FAIL.                     { A = OE_Fail; }
262 resolvetype(A) ::= IGNORE.                   { A = OE_Ignore; }
263 resolvetype(A) ::= REPLACE.                  { A = OE_Replace; }
264 
265 ////////////////////////// The DROP TABLE /////////////////////////////////////
266 //
267 cmd ::= DROP TABLE nm(X).          {sqliteDropTable(pParse,&X,0);}
268 
269 ///////////////////// The CREATE VIEW statement /////////////////////////////
270 //
271 cmd ::= CREATE(X) temp(T) VIEW nm(Y) AS select(S). {
272   sqliteCreateView(pParse, &X, &Y, S, T);
273 }
274 cmd ::= DROP VIEW nm(X). {
275   sqliteDropTable(pParse, &X, 1);
276 }
277 
278 //////////////////////// The SELECT statement /////////////////////////////////
279 //
280 cmd ::= select(X).  {
281   sqliteSelect(pParse, X, SRT_Callback, 0, 0, 0, 0);
282   sqliteSelectDelete(X);
283 }
284 
285 %type select {Select*}
286 %destructor select {sqliteSelectDelete($$);}
287 %type oneselect {Select*}
288 %destructor oneselect {sqliteSelectDelete($$);}
289 
290 select(A) ::= oneselect(X).                      {A = X;}
291 select(A) ::= select(X) multiselect_op(Y) oneselect(Z).  {
292   if( Z ){
293     Z->op = Y;
294     Z->pPrior = X;
295   }
296   A = Z;
297 }
298 %type multiselect_op {int}
299 multiselect_op(A) ::= UNION.      {A = TK_UNION;}
300 multiselect_op(A) ::= UNION ALL.  {A = TK_ALL;}
301 multiselect_op(A) ::= INTERSECT.  {A = TK_INTERSECT;}
302 multiselect_op(A) ::= EXCEPT.     {A = TK_EXCEPT;}
303 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
304                  groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
305   A = sqliteSelectNew(W,X,Y,P,Q,Z,D,L.limit,L.offset);
306 }
307 
308 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
309 // present and false (0) if it is not.
310 //
311 %type distinct {int}
312 distinct(A) ::= DISTINCT.   {A = 1;}
313 distinct(A) ::= ALL.        {A = 0;}
314 distinct(A) ::= .           {A = 0;}
315 
316 // selcollist is a list of expressions that are to become the return
317 // values of the SELECT statement.  The "*" in statements like
318 // "SELECT * FROM ..." is encoded as a special expression with an
319 // opcode of TK_ALL.
320 //
321 %type selcollist {ExprList*}
322 %destructor selcollist {sqliteExprListDelete($$);}
323 %type sclp {ExprList*}
324 %destructor sclp {sqliteExprListDelete($$);}
325 sclp(A) ::= selcollist(X) COMMA.             {A = X;}
326 sclp(A) ::= .                                {A = 0;}
327 selcollist(A) ::= sclp(P) expr(X) as(Y).     {
328    A = sqliteExprListAppend(P,X,Y.n?&Y:0);
329 }
330 selcollist(A) ::= sclp(P) STAR. {
331   A = sqliteExprListAppend(P, sqliteExpr(TK_ALL, 0, 0, 0), 0);
332 }
333 selcollist(A) ::= sclp(P) nm(X) DOT STAR. {
334   Expr *pRight = sqliteExpr(TK_ALL, 0, 0, 0);
335   Expr *pLeft = sqliteExpr(TK_ID, 0, 0, &X);
336   A = sqliteExprListAppend(P, sqliteExpr(TK_DOT, pLeft, pRight, 0), 0);
337 }
338 
339 // An option "AS <id>" phrase that can follow one of the expressions that
340 // define the result set, or one of the tables in the FROM clause.
341 //
342 %type as {Token}
343 as(X) ::= AS nm(Y).    { X = Y; }
344 as(X) ::= ids(Y).      { X = Y; }
345 as(X) ::= .            { X.n = 0; }
346 
347 
348 %type seltablist {SrcList*}
349 %destructor seltablist {sqliteSrcListDelete($$);}
350 %type stl_prefix {SrcList*}
351 %destructor stl_prefix {sqliteSrcListDelete($$);}
352 %type from {SrcList*}
353 %destructor from {sqliteSrcListDelete($$);}
354 
355 // A complete FROM clause.
356 //
357 from(A) ::= .                                 {A = sqliteMalloc(sizeof(*A));}
358 from(A) ::= FROM seltablist(X).               {A = X;}
359 
360 // "seltablist" is a "Select Table List" - the content of the FROM clause
361 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
362 //
363 stl_prefix(A) ::= seltablist(X) joinop(Y).    {
364    A = X;
365    if( A && A->nSrc>0 ) A->a[A->nSrc-1].jointype = Y;
366 }
367 stl_prefix(A) ::= .                           {A = 0;}
368 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) on_opt(N) using_opt(U). {
369   A = sqliteSrcListAppend(X,&Y,&D);
370   if( Z.n ) sqliteSrcListAddAlias(A,&Z);
371   if( N ){
372     if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }
373     else { sqliteExprDelete(N); }
374   }
375   if( U ){
376     if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }
377     else { sqliteIdListDelete(U); }
378   }
379 }
380 seltablist(A) ::= stl_prefix(X) LP seltablist_paren(S) RP
381                   as(Z) on_opt(N) using_opt(U). {
382   A = sqliteSrcListAppend(X,0,0);
383   A->a[A->nSrc-1].pSelect = S;
384   if( Z.n ) sqliteSrcListAddAlias(A,&Z);
385   if( N ){
386     if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }
387     else { sqliteExprDelete(N); }
388   }
389   if( U ){
390     if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }
391     else { sqliteIdListDelete(U); }
392   }
393 }
394 
395 // A seltablist_paren nonterminal represents anything in a FROM that
396 // is contained inside parentheses.  This can be either a subquery or
397 // a grouping of table and subqueries.
398 //
399 %type seltablist_paren {Select*}
400 %destructor seltablist_paren {sqliteSelectDelete($$);}
401 seltablist_paren(A) ::= select(S).      {A = S;}
402 seltablist_paren(A) ::= seltablist(F).  {
403    A = sqliteSelectNew(0,F,0,0,0,0,0,-1,0);
404 }
405 
406 %type dbnm {Token}
407 dbnm(A) ::= .          {A.z=0; A.n=0;}
408 dbnm(A) ::= DOT nm(X). {A = X;}
409 
410 %type joinop {int}
411 %type joinop2 {int}
412 joinop(X) ::= COMMA.                   { X = JT_INNER; }
413 joinop(X) ::= JOIN.                    { X = JT_INNER; }
414 joinop(X) ::= JOIN_KW(A) JOIN.         { X = sqliteJoinType(pParse,&A,0,0); }
415 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.   { X = sqliteJoinType(pParse,&A,&B,0); }
416 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
417                                        { X = sqliteJoinType(pParse,&A,&B,&C); }
418 
419 %type on_opt {Expr*}
420 %destructor on_opt {sqliteExprDelete($$);}
421 on_opt(N) ::= ON expr(E).   {N = E;}
422 on_opt(N) ::= .             {N = 0;}
423 
424 %type using_opt {IdList*}
425 %destructor using_opt {sqliteIdListDelete($$);}
426 using_opt(U) ::= USING LP idxlist(L) RP.  {U = L;}
427 using_opt(U) ::= .                        {U = 0;}
428 
429 
430 %type orderby_opt {ExprList*}
431 %destructor orderby_opt {sqliteExprListDelete($$);}
432 %type sortlist {ExprList*}
433 %destructor sortlist {sqliteExprListDelete($$);}
434 %type sortitem {Expr*}
435 %destructor sortitem {sqliteExprDelete($$);}
436 
437 orderby_opt(A) ::= .                          {A = 0;}
438 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
439 sortlist(A) ::= sortlist(X) COMMA sortitem(Y) collate(C) sortorder(Z). {
440   A = sqliteExprListAppend(X,Y,0);
441   if( A ) A->a[A->nExpr-1].sortOrder = C+Z;
442 }
443 sortlist(A) ::= sortitem(Y) collate(C) sortorder(Z). {
444   A = sqliteExprListAppend(0,Y,0);
445   if( A ) A->a[0].sortOrder = C+Z;
446 }
447 sortitem(A) ::= expr(X).   {A = X;}
448 
449 %type sortorder {int}
450 %type collate {int}
451 
452 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
453 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
454 sortorder(A) ::= .              {A = SQLITE_SO_ASC;}
455 collate(C) ::= .                {C = SQLITE_SO_UNK;}
456 collate(C) ::= COLLATE id(X).   {C = sqliteCollateType(X.z, X.n);}
457 
458 %type groupby_opt {ExprList*}
459 %destructor groupby_opt {sqliteExprListDelete($$);}
460 groupby_opt(A) ::= .                      {A = 0;}
461 groupby_opt(A) ::= GROUP BY exprlist(X).  {A = X;}
462 
463 %type having_opt {Expr*}
464 %destructor having_opt {sqliteExprDelete($$);}
465 having_opt(A) ::= .                {A = 0;}
466 having_opt(A) ::= HAVING expr(X).  {A = X;}
467 
468 %type limit_opt {struct LimitVal}
469 limit_opt(A) ::= .                     {A.limit = -1; A.offset = 0;}
470 limit_opt(A) ::= LIMIT signed(X).      {A.limit = X; A.offset = 0;}
471 limit_opt(A) ::= LIMIT signed(X) OFFSET signed(Y).
472                                        {A.limit = X; A.offset = Y;}
473 limit_opt(A) ::= LIMIT signed(X) COMMA signed(Y).
474                                        {A.limit = Y; A.offset = X;}
475 
476 /////////////////////////// The DELETE statement /////////////////////////////
477 //
478 cmd ::= DELETE FROM nm(X) dbnm(D) where_opt(Y). {
479    sqliteDeleteFrom(pParse, sqliteSrcListAppend(0,&X,&D), Y);
480 }
481 
482 %type where_opt {Expr*}
483 %destructor where_opt {sqliteExprDelete($$);}
484 
485 where_opt(A) ::= .                    {A = 0;}
486 where_opt(A) ::= WHERE expr(X).       {A = X;}
487 
488 %type setlist {ExprList*}
489 %destructor setlist {sqliteExprListDelete($$);}
490 
491 ////////////////////////// The UPDATE command ////////////////////////////////
492 //
493 cmd ::= UPDATE orconf(R) nm(X) dbnm(D) SET setlist(Y) where_opt(Z).
494     {sqliteUpdate(pParse,sqliteSrcListAppend(0,&X,&D),Y,Z,R);}
495 
496 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y).
497     {A = sqliteExprListAppend(Z,Y,&X);}
498 setlist(A) ::= nm(X) EQ expr(Y).   {A = sqliteExprListAppend(0,Y,&X);}
499 
500 ////////////////////////// The INSERT command /////////////////////////////////
501 //
502 cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F)
503         VALUES LP itemlist(Y) RP.
504             {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), Y, 0, F, R);}
505 cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F) select(S).
506             {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), 0, S, F, R);}
507 
508 %type insert_cmd {int}
509 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
510 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
511 
512 
513 %type itemlist {ExprList*}
514 %destructor itemlist {sqliteExprListDelete($$);}
515 
516 itemlist(A) ::= itemlist(X) COMMA expr(Y).  {A = sqliteExprListAppend(X,Y,0);}
517 itemlist(A) ::= expr(X).                    {A = sqliteExprListAppend(0,X,0);}
518 
519 %type inscollist_opt {IdList*}
520 %destructor inscollist_opt {sqliteIdListDelete($$);}
521 %type inscollist {IdList*}
522 %destructor inscollist {sqliteIdListDelete($$);}
523 
524 inscollist_opt(A) ::= .                       {A = 0;}
525 inscollist_opt(A) ::= LP inscollist(X) RP.    {A = X;}
526 inscollist(A) ::= inscollist(X) COMMA nm(Y).  {A = sqliteIdListAppend(X,&Y);}
527 inscollist(A) ::= nm(Y).                      {A = sqliteIdListAppend(0,&Y);}
528 
529 /////////////////////////// Expression Processing /////////////////////////////
530 //
531 
532 %type expr {Expr*}
533 %destructor expr {sqliteExprDelete($$);}
534 
535 expr(A) ::= LP(B) expr(X) RP(E). {A = X; sqliteExprSpan(A,&B,&E); }
536 expr(A) ::= NULL(X).             {A = sqliteExpr(TK_NULL, 0, 0, &X);}
537 expr(A) ::= ID(X).               {A = sqliteExpr(TK_ID, 0, 0, &X);}
538 expr(A) ::= JOIN_KW(X).          {A = sqliteExpr(TK_ID, 0, 0, &X);}
539 expr(A) ::= nm(X) DOT nm(Y). {
540   Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);
541   Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);
542   A = sqliteExpr(TK_DOT, temp1, temp2, 0);
543 }
544 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
545   Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);
546   Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);
547   Expr *temp3 = sqliteExpr(TK_ID, 0, 0, &Z);
548   Expr *temp4 = sqliteExpr(TK_DOT, temp2, temp3, 0);
549   A = sqliteExpr(TK_DOT, temp1, temp4, 0);
550 }
551 expr(A) ::= INTEGER(X).      {A = sqliteExpr(TK_INTEGER, 0, 0, &X);}
552 expr(A) ::= FLOAT(X).        {A = sqliteExpr(TK_FLOAT, 0, 0, &X);}
553 expr(A) ::= STRING(X).       {A = sqliteExpr(TK_STRING, 0, 0, &X);}
554 expr(A) ::= VARIABLE(X).     {
555   A = sqliteExpr(TK_VARIABLE, 0, 0, &X);
556   if( A ) A->iTable = ++pParse->nVar;
557 }
558 expr(A) ::= ID(X) LP exprlist(Y) RP(E). {
559   A = sqliteExprFunction(Y, &X);
560   sqliteExprSpan(A,&X,&E);
561 }
562 expr(A) ::= ID(X) LP STAR RP(E). {
563   A = sqliteExprFunction(0, &X);
564   sqliteExprSpan(A,&X,&E);
565 }
566 expr(A) ::= expr(X) AND expr(Y).   {A = sqliteExpr(TK_AND, X, Y, 0);}
567 expr(A) ::= expr(X) OR expr(Y).    {A = sqliteExpr(TK_OR, X, Y, 0);}
568 expr(A) ::= expr(X) LT expr(Y).    {A = sqliteExpr(TK_LT, X, Y, 0);}
569 expr(A) ::= expr(X) GT expr(Y).    {A = sqliteExpr(TK_GT, X, Y, 0);}
570 expr(A) ::= expr(X) LE expr(Y).    {A = sqliteExpr(TK_LE, X, Y, 0);}
571 expr(A) ::= expr(X) GE expr(Y).    {A = sqliteExpr(TK_GE, X, Y, 0);}
572 expr(A) ::= expr(X) NE expr(Y).    {A = sqliteExpr(TK_NE, X, Y, 0);}
573 expr(A) ::= expr(X) EQ expr(Y).    {A = sqliteExpr(TK_EQ, X, Y, 0);}
574 expr(A) ::= expr(X) BITAND expr(Y). {A = sqliteExpr(TK_BITAND, X, Y, 0);}
575 expr(A) ::= expr(X) BITOR expr(Y).  {A = sqliteExpr(TK_BITOR, X, Y, 0);}
576 expr(A) ::= expr(X) LSHIFT expr(Y). {A = sqliteExpr(TK_LSHIFT, X, Y, 0);}
577 expr(A) ::= expr(X) RSHIFT expr(Y). {A = sqliteExpr(TK_RSHIFT, X, Y, 0);}
578 expr(A) ::= expr(X) likeop(OP) expr(Y).  [LIKE]  {
579   ExprList *pList = sqliteExprListAppend(0, Y, 0);
580   pList = sqliteExprListAppend(pList, X, 0);
581   A = sqliteExprFunction(pList, 0);
582   if( A ) A->op = OP;
583   sqliteExprSpan(A, &X->span, &Y->span);
584 }
585 expr(A) ::= expr(X) NOT likeop(OP) expr(Y). [LIKE] {
586   ExprList *pList = sqliteExprListAppend(0, Y, 0);
587   pList = sqliteExprListAppend(pList, X, 0);
588   A = sqliteExprFunction(pList, 0);
589   if( A ) A->op = OP;
590   A = sqliteExpr(TK_NOT, A, 0, 0);
591   sqliteExprSpan(A,&X->span,&Y->span);
592 }
593 %type likeop {int}
594 likeop(A) ::= LIKE. {A = TK_LIKE;}
595 likeop(A) ::= GLOB. {A = TK_GLOB;}
596 expr(A) ::= expr(X) PLUS expr(Y).  {A = sqliteExpr(TK_PLUS, X, Y, 0);}
597 expr(A) ::= expr(X) MINUS expr(Y). {A = sqliteExpr(TK_MINUS, X, Y, 0);}
598 expr(A) ::= expr(X) STAR expr(Y).  {A = sqliteExpr(TK_STAR, X, Y, 0);}
599 expr(A) ::= expr(X) SLASH expr(Y). {A = sqliteExpr(TK_SLASH, X, Y, 0);}
600 expr(A) ::= expr(X) REM expr(Y).   {A = sqliteExpr(TK_REM, X, Y, 0);}
601 expr(A) ::= expr(X) CONCAT expr(Y). {A = sqliteExpr(TK_CONCAT, X, Y, 0);}
602 expr(A) ::= expr(X) ISNULL(E). {
603   A = sqliteExpr(TK_ISNULL, X, 0, 0);
604   sqliteExprSpan(A,&X->span,&E);
605 }
606 expr(A) ::= expr(X) IS NULL(E). {
607   A = sqliteExpr(TK_ISNULL, X, 0, 0);
608   sqliteExprSpan(A,&X->span,&E);
609 }
610 expr(A) ::= expr(X) NOTNULL(E). {
611   A = sqliteExpr(TK_NOTNULL, X, 0, 0);
612   sqliteExprSpan(A,&X->span,&E);
613 }
614 expr(A) ::= expr(X) NOT NULL(E). {
615   A = sqliteExpr(TK_NOTNULL, X, 0, 0);
616   sqliteExprSpan(A,&X->span,&E);
617 }
618 expr(A) ::= expr(X) IS NOT NULL(E). {
619   A = sqliteExpr(TK_NOTNULL, X, 0, 0);
620   sqliteExprSpan(A,&X->span,&E);
621 }
622 expr(A) ::= NOT(B) expr(X). {
623   A = sqliteExpr(TK_NOT, X, 0, 0);
624   sqliteExprSpan(A,&B,&X->span);
625 }
626 expr(A) ::= BITNOT(B) expr(X). {
627   A = sqliteExpr(TK_BITNOT, X, 0, 0);
628   sqliteExprSpan(A,&B,&X->span);
629 }
630 expr(A) ::= MINUS(B) expr(X). [UMINUS] {
631   A = sqliteExpr(TK_UMINUS, X, 0, 0);
632   sqliteExprSpan(A,&B,&X->span);
633 }
634 expr(A) ::= PLUS(B) expr(X). [UPLUS] {
635   A = sqliteExpr(TK_UPLUS, X, 0, 0);
636   sqliteExprSpan(A,&B,&X->span);
637 }
638 expr(A) ::= LP(B) select(X) RP(E). {
639   A = sqliteExpr(TK_SELECT, 0, 0, 0);
640   if( A ) A->pSelect = X;
641   sqliteExprSpan(A,&B,&E);
642 }
643 expr(A) ::= expr(W) BETWEEN expr(X) AND expr(Y). {
644   ExprList *pList = sqliteExprListAppend(0, X, 0);
645   pList = sqliteExprListAppend(pList, Y, 0);
646   A = sqliteExpr(TK_BETWEEN, W, 0, 0);
647   if( A ) A->pList = pList;
648   sqliteExprSpan(A,&W->span,&Y->span);
649 }
650 expr(A) ::= expr(W) NOT BETWEEN expr(X) AND expr(Y). {
651   ExprList *pList = sqliteExprListAppend(0, X, 0);
652   pList = sqliteExprListAppend(pList, Y, 0);
653   A = sqliteExpr(TK_BETWEEN, W, 0, 0);
654   if( A ) A->pList = pList;
655   A = sqliteExpr(TK_NOT, A, 0, 0);
656   sqliteExprSpan(A,&W->span,&Y->span);
657 }
658 expr(A) ::= expr(X) IN LP exprlist(Y) RP(E).  {
659   A = sqliteExpr(TK_IN, X, 0, 0);
660   if( A ) A->pList = Y;
661   sqliteExprSpan(A,&X->span,&E);
662 }
663 expr(A) ::= expr(X) IN LP select(Y) RP(E).  {
664   A = sqliteExpr(TK_IN, X, 0, 0);
665   if( A ) A->pSelect = Y;
666   sqliteExprSpan(A,&X->span,&E);
667 }
668 expr(A) ::= expr(X) NOT IN LP exprlist(Y) RP(E).  {
669   A = sqliteExpr(TK_IN, X, 0, 0);
670   if( A ) A->pList = Y;
671   A = sqliteExpr(TK_NOT, A, 0, 0);
672   sqliteExprSpan(A,&X->span,&E);
673 }
674 expr(A) ::= expr(X) NOT IN LP select(Y) RP(E).  {
675   A = sqliteExpr(TK_IN, X, 0, 0);
676   if( A ) A->pSelect = Y;
677   A = sqliteExpr(TK_NOT, A, 0, 0);
678   sqliteExprSpan(A,&X->span,&E);
679 }
680 expr(A) ::= expr(X) IN nm(Y) dbnm(D). {
681   SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
682   A = sqliteExpr(TK_IN, X, 0, 0);
683   if( A ) A->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
684   sqliteExprSpan(A,&X->span,D.z?&D:&Y);
685 }
686 expr(A) ::= expr(X) NOT IN nm(Y) dbnm(D). {
687   SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
688   A = sqliteExpr(TK_IN, X, 0, 0);
689   if( A ) A->pSelect = sqliteSelectNew(0,pSrc,0,0,0,0,0,-1,0);
690   A = sqliteExpr(TK_NOT, A, 0, 0);
691   sqliteExprSpan(A,&X->span,D.z?&D:&Y);
692 }
693 
694 
695 /* CASE expressions */
696 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
697   A = sqliteExpr(TK_CASE, X, Z, 0);
698   if( A ) A->pList = Y;
699   sqliteExprSpan(A, &C, &E);
700 }
701 %type case_exprlist {ExprList*}
702 %destructor case_exprlist {sqliteExprListDelete($$);}
703 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {
704   A = sqliteExprListAppend(X, Y, 0);
705   A = sqliteExprListAppend(A, Z, 0);
706 }
707 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
708   A = sqliteExprListAppend(0, Y, 0);
709   A = sqliteExprListAppend(A, Z, 0);
710 }
711 %type case_else {Expr*}
712 case_else(A) ::=  ELSE expr(X).         {A = X;}
713 case_else(A) ::=  .                     {A = 0;}
714 %type case_operand {Expr*}
715 case_operand(A) ::= expr(X).            {A = X;}
716 case_operand(A) ::= .                   {A = 0;}
717 
718 %type exprlist {ExprList*}
719 %destructor exprlist {sqliteExprListDelete($$);}
720 %type expritem {Expr*}
721 %destructor expritem {sqliteExprDelete($$);}
722 
723 exprlist(A) ::= exprlist(X) COMMA expritem(Y).
724    {A = sqliteExprListAppend(X,Y,0);}
725 exprlist(A) ::= expritem(X).            {A = sqliteExprListAppend(0,X,0);}
726 expritem(A) ::= expr(X).                {A = X;}
727 expritem(A) ::= .                       {A = 0;}
728 
729 ///////////////////////////// The CREATE INDEX command ///////////////////////
730 //
731 cmd ::= CREATE(S) uniqueflag(U) INDEX nm(X)
732         ON nm(Y) dbnm(D) LP idxlist(Z) RP(E) onconf(R). {
733   SrcList *pSrc = sqliteSrcListAppend(0, &Y, &D);
734   if( U!=OE_None ) U = R;
735   if( U==OE_Default) U = OE_Abort;
736   sqliteCreateIndex(pParse, &X, pSrc, Z, U, &S, &E);
737 }
738 
739 %type uniqueflag {int}
740 uniqueflag(A) ::= UNIQUE.  { A = OE_Abort; }
741 uniqueflag(A) ::= .        { A = OE_None; }
742 
743 %type idxlist {IdList*}
744 %destructor idxlist {sqliteIdListDelete($$);}
745 %type idxlist_opt {IdList*}
746 %destructor idxlist_opt {sqliteIdListDelete($$);}
747 %type idxitem {Token}
748 
749 idxlist_opt(A) ::= .                         {A = 0;}
750 idxlist_opt(A) ::= LP idxlist(X) RP.         {A = X;}
751 idxlist(A) ::= idxlist(X) COMMA idxitem(Y).  {A = sqliteIdListAppend(X,&Y);}
752 idxlist(A) ::= idxitem(Y).                   {A = sqliteIdListAppend(0,&Y);}
753 idxitem(A) ::= nm(X) sortorder.              {A = X;}
754 
755 ///////////////////////////// The DROP INDEX command /////////////////////////
756 //
757 
758 cmd ::= DROP INDEX nm(X) dbnm(Y).   {
759   sqliteDropIndex(pParse, sqliteSrcListAppend(0,&X,&Y));
760 }
761 
762 
763 ///////////////////////////// The COPY command ///////////////////////////////
764 //
765 cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y) USING DELIMITERS STRING(Z).
766     {sqliteCopy(pParse,sqliteSrcListAppend(0,&X,&D),&Y,&Z,R);}
767 cmd ::= COPY orconf(R) nm(X) dbnm(D) FROM nm(Y).
768     {sqliteCopy(pParse,sqliteSrcListAppend(0,&X,&D),&Y,0,R);}
769 
770 ///////////////////////////// The VACUUM command /////////////////////////////
771 //
772 cmd ::= VACUUM.                {sqliteVacuum(pParse,0);}
773 cmd ::= VACUUM nm(X).         {sqliteVacuum(pParse,&X);}
774 
775 ///////////////////////////// The PRAGMA command /////////////////////////////
776 //
777 cmd ::= PRAGMA ids(X) EQ nm(Y).         {sqlitePragma(pParse,&X,&Y,0);}
778 cmd ::= PRAGMA ids(X) EQ ON(Y).          {sqlitePragma(pParse,&X,&Y,0);}
779 cmd ::= PRAGMA ids(X) EQ plus_num(Y).    {sqlitePragma(pParse,&X,&Y,0);}
780 cmd ::= PRAGMA ids(X) EQ minus_num(Y).   {sqlitePragma(pParse,&X,&Y,1);}
781 cmd ::= PRAGMA ids(X) LP nm(Y) RP.      {sqlitePragma(pParse,&X,&Y,0);}
782 cmd ::= PRAGMA ids(X).                   {sqlitePragma(pParse,&X,&X,0);}
783 plus_num(A) ::= plus_opt number(X).   {A = X;}
784 minus_num(A) ::= MINUS number(X).     {A = X;}
785 number(A) ::= INTEGER(X).  {A = X;}
786 number(A) ::= FLOAT(X).    {A = X;}
787 plus_opt ::= PLUS.
788 plus_opt ::= .
789 
790 //////////////////////////// The CREATE TRIGGER command /////////////////////
791 
792 cmd ::= CREATE(A) trigger_decl BEGIN trigger_cmd_list(S) END(Z). {
793   Token all;
794   all.z = A.z;
795   all.n = (Z.z - A.z) + Z.n;
796   sqliteFinishTrigger(pParse, S, &all);
797 }
798 
799 trigger_decl ::= temp(T) TRIGGER nm(B) trigger_time(C) trigger_event(D)
800                  ON nm(E) dbnm(DB) foreach_clause(F) when_clause(G). {
801   SrcList *pTab = sqliteSrcListAppend(0, &E, &DB);
802   sqliteBeginTrigger(pParse, &B, C, D.a, D.b, pTab, F, G, T);
803 }
804 
805 %type trigger_time  {int}
806 trigger_time(A) ::= BEFORE.      { A = TK_BEFORE; }
807 trigger_time(A) ::= AFTER.       { A = TK_AFTER;  }
808 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
809 trigger_time(A) ::= .            { A = TK_BEFORE; }
810 
811 %type trigger_event {struct TrigEvent}
812 %destructor trigger_event {sqliteIdListDelete($$.b);}
813 trigger_event(A) ::= DELETE. { A.a = TK_DELETE; A.b = 0; }
814 trigger_event(A) ::= INSERT. { A.a = TK_INSERT; A.b = 0; }
815 trigger_event(A) ::= UPDATE. { A.a = TK_UPDATE; A.b = 0;}
816 trigger_event(A) ::= UPDATE OF inscollist(X). {A.a = TK_UPDATE; A.b = X; }
817 
818 %type foreach_clause {int}
819 foreach_clause(A) ::= .                   { A = TK_ROW; }
820 foreach_clause(A) ::= FOR EACH ROW.       { A = TK_ROW; }
821 foreach_clause(A) ::= FOR EACH STATEMENT. { A = TK_STATEMENT; }
822 
823 %type when_clause {Expr *}
824 when_clause(A) ::= .             { A = 0; }
825 when_clause(A) ::= WHEN expr(X). { A = X; }
826 
827 %type trigger_cmd_list {TriggerStep *}
828 %destructor trigger_cmd_list {sqliteDeleteTriggerStep($$);}
829 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). {
830   X->pNext = Y;
831   A = X;
832 }
833 trigger_cmd_list(A) ::= . { A = 0; }
834 
835 %type trigger_cmd {TriggerStep *}
836 %destructor trigger_cmd {sqliteDeleteTriggerStep($$);}
837 // UPDATE
838 trigger_cmd(A) ::= UPDATE orconf(R) nm(X) SET setlist(Y) where_opt(Z).
839                { A = sqliteTriggerUpdateStep(&X, Y, Z, R); }
840 
841 // INSERT
842 trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F)
843   VALUES LP itemlist(Y) RP.
844 {A = sqliteTriggerInsertStep(&X, F, Y, 0, R);}
845 
846 trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F) select(S).
847                {A = sqliteTriggerInsertStep(&X, F, 0, S, R);}
848 
849 // DELETE
850 trigger_cmd(A) ::= DELETE FROM nm(X) where_opt(Y).
851                {A = sqliteTriggerDeleteStep(&X, Y);}
852 
853 // SELECT
854 trigger_cmd(A) ::= select(X).  {A = sqliteTriggerSelectStep(X); }
855 
856 // The special RAISE expression that may occur in trigger programs
857 expr(A) ::= RAISE(X) LP IGNORE RP(Y).  {
858   A = sqliteExpr(TK_RAISE, 0, 0, 0);
859   A->iColumn = OE_Ignore;
860   sqliteExprSpan(A, &X, &Y);
861 }
862 expr(A) ::= RAISE(X) LP ROLLBACK COMMA nm(Z) RP(Y).  {
863   A = sqliteExpr(TK_RAISE, 0, 0, &Z);
864   A->iColumn = OE_Rollback;
865   sqliteExprSpan(A, &X, &Y);
866 }
867 expr(A) ::= RAISE(X) LP ABORT COMMA nm(Z) RP(Y).  {
868   A = sqliteExpr(TK_RAISE, 0, 0, &Z);
869   A->iColumn = OE_Abort;
870   sqliteExprSpan(A, &X, &Y);
871 }
872 expr(A) ::= RAISE(X) LP FAIL COMMA nm(Z) RP(Y).  {
873   A = sqliteExpr(TK_RAISE, 0, 0, &Z);
874   A->iColumn = OE_Fail;
875   sqliteExprSpan(A, &X, &Y);
876 }
877 
878 ////////////////////////  DROP TRIGGER statement //////////////////////////////
879 cmd ::= DROP TRIGGER nm(X) dbnm(D). {
880   sqliteDropTrigger(pParse,sqliteSrcListAppend(0,&X,&D));
881 }
882 
883 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
884 cmd ::= ATTACH database_kw_opt ids(F) AS nm(D) key_opt(K). {
885   sqliteAttach(pParse, &F, &D, &K);
886 }
887 %type key_opt {Token}
888 key_opt(A) ::= USING ids(X).  { A = X; }
889 key_opt(A) ::= .              { A.z = 0; A.n = 0; }
890 
891 database_kw_opt ::= DATABASE.
892 database_kw_opt ::= .
893 
894 //////////////////////// DETACH DATABASE name /////////////////////////////////
895 cmd ::= DETACH database_kw_opt nm(D). {
896   sqliteDetach(pParse, &D);
897 }
898