5 ** The author disclaims copyright to this source code. In place of
6 ** a legal notice, here is a blessing:
8 ** May you do good and not evil.
9 ** May you find forgiveness for yourself and forgive others.
10 ** May you share freely, never taking more than you give.
12 *************************************************************************
13 ** This file contains SQLite's SQL parser.
15 ** The canonical source code to this file ("parse.y") is a Lemon grammar
16 ** file that specifies the input grammar and actions to take while parsing.
17 ** That input file is processed by Lemon to generate a C-language
18 ** implementation of a parser for the given grammer. You might be reading
19 ** this comment as part of the translated C-code. Edits should be made
20 ** to the original parse.y sources.
24 // All token codes are small integers with #defines that begin with "TK_"
27 // The type of the data attached to each token is Token. This is also the
28 // default type for non-terminals.
33 // An extra argument to the constructor for the parser, which is available
35 %extra_context
{Parse
*pParse
}
37 // This code runs whenever there is a syntax error
40 UNUSED_PARAMETER
(yymajor
); /* Silence some compiler warnings */
42 sqlite3ErrorMsg
(pParse
, "near \"%T\": syntax error", &TOKEN
);
44 sqlite3ErrorMsg
(pParse
, "incomplete input");
48 sqlite3ErrorMsg
(pParse
, "parser stack overflow");
51 // The name of the generated procedure that implements the parser
55 // The following text is included near the beginning of the C source
56 // code file that implements the parser.
59 #include "sqliteInt.h"
62 ** Disable all error recovery processing in the parser push-down
65 #define YYNOERRORRECOVERY 1
68 ** Make yytestcase() the same as testcase()
70 #define yytestcase(X) testcase(X)
73 ** Indicate that sqlite3ParserFree() will never be called with a null
76 #define YYPARSEFREENEVERNULL 1
79 ** In the amalgamation, the parse.c file generated by lemon and the
80 ** tokenize.c file are concatenated. In that case, sqlite3RunParser()
81 ** has access to the the size of the yyParser object and so the parser
82 ** engine can be allocated from stack. In that case, only the
83 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
84 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
87 #ifdef SQLITE_AMALGAMATION
88 # define sqlite3Parser_ENGINEALWAYSONSTACK 1
92 ** Alternative datatype for the argument to the malloc() routine passed
93 ** into sqlite3ParserAlloc(). The default is size_t.
95 #define YYMALLOCARGTYPE u64
98 ** An instance of the following structure describes the event of a
99 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
100 ** TK_DELETE, or TK_INSTEAD. If the event is of the form
104 ** Then the "b" IdList records the list "a,b,c".
106 struct TrigEvent
{ int a
; IdList
* b
; };
108 struct FrameBound
{ int eType
; Expr
*pExpr
; };
111 ** Disable lookaside memory allocation for objects that might be
112 ** shared across database connections.
114 static void disableLookaside
(Parse
*pParse
){
115 sqlite3
*db
= pParse
->db
;
116 pParse
->disableLookaside
++;
120 #if !defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) \
121 && defined
(SQLITE_UDL_CAPABLE_PARSER
)
123 ** Issue an error message if an ORDER BY or LIMIT clause occurs on an
124 ** UPDATE or DELETE statement.
126 static void updateDeleteLimitError
(
132 sqlite3ErrorMsg
(pParse
, "syntax error near \"ORDER BY\"");
134 sqlite3ErrorMsg
(pParse
, "syntax error near \"LIMIT\"");
136 sqlite3ExprListDelete
(pParse
->db
, pOrderBy
);
137 sqlite3ExprDelete
(pParse
->db
, pLimit
);
139 #endif /* SQLITE_ENABLE_UPDATE_DELETE_LIMIT */
143 // Input is a single SQL command
145 cmdlist
::= cmdlist ecmd.
149 %ifndef SQLITE_OMIT_EXPLAIN
150 ecmd
::= explain cmdx SEMI.
{NEVER
-REDUCE
}
151 explain
::= EXPLAIN.
{ pParse
->explain
= 1; }
152 explain
::= EXPLAIN QUERY PLAN.
{ pParse
->explain
= 2; }
153 %endif SQLITE_OMIT_EXPLAIN
154 cmdx
::= cmd.
{ sqlite3FinishCoding
(pParse
); }
156 ///////////////////// Begin and end transactions. ////////////////////////////
159 cmd
::= BEGIN transtype
(Y
) trans_opt.
{sqlite3BeginTransaction
(pParse
, Y
);}
161 trans_opt
::= TRANSACTION.
162 trans_opt
::= TRANSACTION nm.
163 %type transtype
{int}
164 transtype
(A
) ::= .
{A
= TK_DEFERRED
;}
165 transtype
(A
) ::= DEFERRED
(X
).
{A
= @X
; /*A-overwrites-X*/}
166 transtype
(A
) ::= IMMEDIATE
(X
).
{A
= @X
; /*A-overwrites-X*/}
167 transtype
(A
) ::= EXCLUSIVE
(X
).
{A
= @X
; /*A-overwrites-X*/}
168 cmd
::= COMMIT|END
(X
) trans_opt.
{sqlite3EndTransaction
(pParse
,@X
);}
169 cmd
::= ROLLBACK
(X
) trans_opt.
{sqlite3EndTransaction
(pParse
,@X
);}
171 savepoint_opt
::= SAVEPOINT.
173 cmd
::= SAVEPOINT nm
(X
).
{
174 sqlite3Savepoint
(pParse
, SAVEPOINT_BEGIN
, &X
);
176 cmd
::= RELEASE savepoint_opt nm
(X
).
{
177 sqlite3Savepoint
(pParse
, SAVEPOINT_RELEASE
, &X
);
179 cmd
::= ROLLBACK trans_opt TO savepoint_opt nm
(X
).
{
180 sqlite3Savepoint
(pParse
, SAVEPOINT_ROLLBACK
, &X
);
183 ///////////////////// The CREATE TABLE statement ////////////////////////////
185 cmd
::= create_table create_table_args.
186 create_table
::= createkw temp
(T
) TABLE ifnotexists
(E
) nm
(Y
) dbnm
(Z
).
{
187 sqlite3StartTable
(pParse
,&Y
,&Z
,T
,0,0,E
);
189 createkw
(A
) ::= CREATE
(A
).
{disableLookaside
(pParse
);}
191 %type ifnotexists
{int}
192 ifnotexists
(A
) ::= .
{A
= 0;}
193 ifnotexists
(A
) ::= IF NOT EXISTS.
{A
= 1;}
195 %ifndef SQLITE_OMIT_TEMPDB
196 temp
(A
) ::= TEMP.
{A
= pParse
->db
->init.busy
==0;}
197 %endif SQLITE_OMIT_TEMPDB
198 temp
(A
) ::= .
{A
= 0;}
199 create_table_args
::= LP columnlist conslist_opt
(X
) RP
(E
) table_option_set
(F
).
{
200 sqlite3EndTable
(pParse
,&X
,&E
,F
,0);
202 create_table_args
::= AS select
(S
).
{
203 sqlite3EndTable
(pParse
,0,0,0,S
);
204 sqlite3SelectDelete
(pParse
->db
, S
);
206 %type table_option_set
{u32
}
207 %type table_option
{u32
}
208 table_option_set
(A
) ::= .
{A
= 0;}
209 table_option_set
(A
) ::= table_option
(A
).
210 table_option_set
(A
) ::= table_option_set
(X
) COMMA table_option
(Y
).
{A
= X|Y
;}
211 table_option
(A
) ::= WITHOUT nm
(X
).
{
212 if
( X.n
==5 && sqlite3_strnicmp
(X.z
,"rowid",5)==0 ){
213 A
= TF_WithoutRowid | TF_NoVisibleRowid
;
216 sqlite3ErrorMsg
(pParse
, "unknown table option: %.*s", X.n
, X.z
);
219 table_option
(A
) ::= nm
(X
).
{
220 if
( X.n
==6 && sqlite3_strnicmp
(X.z
,"strict",6)==0 ){
224 sqlite3ErrorMsg
(pParse
, "unknown table option: %.*s", X.n
, X.z
);
227 columnlist
::= columnlist COMMA columnname carglist.
228 columnlist
::= columnname carglist.
229 columnname
(A
) ::= nm
(A
) typetoken
(Y
).
{sqlite3AddColumn
(pParse
,A
,Y
);}
231 // Declare some tokens early in order to influence their values, to
232 // improve performance and reduce the executable size. The goal here is
233 // to get the "jump" operations in ISNULL through ESCAPE to have numeric
234 // values that are early enough so that all jump operations are clustered
237 %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
238 %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
239 %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
240 %token GT LE LT GE ESCAPE.
242 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
243 // fallback to ID if they will not parse as their original value.
244 // This obviates the need for the "id" nonterminal.
247 ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
248 CONFLICT DATABASE DEFERRED DESC DETACH DO
249 EACH END EXCLUSIVE EXPLAIN FAIL FOR
250 IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
251 QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS
252 ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
254 %ifdef SQLITE_OMIT_COMPOUND_SELECT
255 EXCEPT INTERSECT UNION
256 %endif SQLITE_OMIT_COMPOUND_SELECT
257 %ifndef SQLITE_OMIT_WINDOWFUNC
258 CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED
259 EXCLUDE GROUPS OTHERS TIES
260 %endif SQLITE_OMIT_WINDOWFUNC
261 %ifndef SQLITE_OMIT_GENERATED_COLUMNS
265 REINDEX RENAME CTIME_KW IF
269 // Define operator precedence early so that this is the first occurrence
270 // of the operator tokens in the grammer. Keeping the operators together
271 // causes them to be assigned integer values that are close together,
272 // which keeps parser tables smaller.
274 // The token values assigned to these symbols is determined by the order
275 // in which lemon first sees them. It must be the case that ISNULL/NOTNULL,
276 // NE/EQ, GT/LE, and GE/LT are separated by only a single value. See
277 // the sqlite3ExprIfFalse() routine for additional information on this
283 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
286 %left BITAND BITOR LSHIFT RSHIFT.
288 %left STAR SLASH REM.
294 // An IDENTIFIER can be a generic identifier, or one of several
295 // keywords. Any non-standard keyword can also be an identifier.
297 %token_class id ID|INDEXED.
300 // And "ids" is an identifer-or-string.
302 %token_class ids ID|STRING.
304 // The name of a column or table can be any of the following:
309 nm
(A
) ::= JOIN_KW
(A
).
311 // A typetoken is really zero or more tokens that form a type name such
312 // as can be found after the column name in a CREATE TABLE statement.
313 // Multiple tokens are concatenated to form the value of the typetoken.
315 %type typetoken
{Token
}
316 typetoken
(A
) ::= .
{A.n
= 0; A.z
= 0;}
317 typetoken
(A
) ::= typename
(A
).
318 typetoken
(A
) ::= typename
(A
) LP
signed RP
(Y
).
{
319 A.n
= (int)(&Y.z
[Y.n
] - A.z
);
321 typetoken
(A
) ::= typename
(A
) LP
signed COMMA
signed RP
(Y
).
{
322 A.n
= (int)(&Y.z
[Y.n
] - A.z
);
324 %type typename
{Token
}
325 typename
(A
) ::= ids
(A
).
326 typename
(A
) ::= typename
(A
) ids
(Y
).
{A.n
=Y.n
+(int)(Y.z
-A.z
);}
328 signed ::= minus_num.
330 // The scanpt non-terminal takes a value which is a pointer to the
331 // input text just past the last token that has been shifted into
332 // the parser. By surrounding some phrase in the grammar with two
333 // scanpt non-terminals, we can capture the input text for that phrase.
336 // something ::= .... scanpt(A) phrase scanpt(Z).
338 // The text that is parsed as "phrase" is a string starting at A
339 // and containing (int)(Z-A) characters. There might be some extra
340 // whitespace on either end of the text, but that can be removed in
341 // post-processing, if needed.
343 %type scanpt
{const char*}
345 assert
( yyLookahead
!=YYNOCODE
);
346 A
= yyLookaheadToken.z
;
349 assert
( yyLookahead
!=YYNOCODE
);
350 A
= yyLookaheadToken
;
353 // "carglist" is a list of additional constraints that come after the
354 // column name and column type in a CREATE TABLE statement.
356 carglist
::= carglist ccons.
358 ccons
::= CONSTRAINT nm
(X
).
{pParse
->constraintName
= X
;}
359 ccons
::= DEFAULT scantok
(A
) term
(X
).
360 {sqlite3AddDefaultValue
(pParse
,X
,A.z
,&A.z
[A.n
]);}
361 ccons
::= DEFAULT LP
(A
) expr
(X
) RP
(Z
).
362 {sqlite3AddDefaultValue
(pParse
,X
,A.z
+1,Z.z
);}
363 ccons
::= DEFAULT PLUS
(A
) scantok
(Z
) term
(X
).
364 {sqlite3AddDefaultValue
(pParse
,X
,A.z
,&Z.z
[Z.n
]);}
365 ccons
::= DEFAULT MINUS
(A
) scantok
(Z
) term
(X
).
{
366 Expr
*p
= sqlite3PExpr
(pParse
, TK_UMINUS
, X
, 0);
367 sqlite3AddDefaultValue
(pParse
,p
,A.z
,&Z.z
[Z.n
]);
369 ccons
::= DEFAULT scantok id
(X
).
{
370 Expr
*p
= tokenExpr
(pParse
, TK_STRING
, X
);
372 sqlite3ExprIdToTrueFalse
(p
);
373 testcase
( p
->op
==TK_TRUEFALSE
&& sqlite3ExprTruthValue
(p
) );
375 sqlite3AddDefaultValue
(pParse
,p
,X.z
,X.z
+X.n
);
378 // In addition to the type name, we also care about the primary key and
379 // UNIQUE constraints.
381 ccons
::= NULL onconf.
382 ccons
::= NOT NULL onconf
(R
).
{sqlite3AddNotNull
(pParse
, R
);}
383 ccons
::= PRIMARY KEY sortorder
(Z
) onconf
(R
) autoinc
(I
).
384 {sqlite3AddPrimaryKey
(pParse
,0,R
,I
,Z
);}
385 ccons
::= UNIQUE onconf
(R
).
{sqlite3CreateIndex
(pParse
,0,0,0,0,R
,0,0,0,0,
386 SQLITE_IDXTYPE_UNIQUE
);}
387 ccons
::= CHECK LP
(A
) expr
(X
) RP
(B
).
{sqlite3AddCheckConstraint
(pParse
,X
,A.z
,B.z
);}
388 ccons
::= REFERENCES nm
(T
) eidlist_opt
(TA
) refargs
(R
).
389 {sqlite3CreateForeignKey
(pParse
,0,&T
,TA
,R
);}
390 ccons
::= defer_subclause
(D
).
{sqlite3DeferForeignKey
(pParse
,D
);}
391 ccons
::= COLLATE ids
(C
).
{sqlite3AddCollateType
(pParse
, &C
);}
392 ccons
::= GENERATED ALWAYS AS generated.
393 ccons
::= AS generated.
394 generated
::= LP expr
(E
) RP.
{sqlite3AddGenerated
(pParse
,E
,0);}
395 generated
::= LP expr
(E
) RP ID
(TYPE
).
{sqlite3AddGenerated
(pParse
,E
,&TYPE
);}
397 // The optional AUTOINCREMENT keyword
399 autoinc
(X
) ::= .
{X
= 0;}
400 autoinc
(X
) ::= AUTOINCR.
{X
= 1;}
402 // The next group of rules parses the arguments to a REFERENCES clause
403 // that determine if the referential integrity checking is deferred or
404 // or immediate and which determine what action to take if a ref-integ
408 refargs
(A
) ::= .
{ A
= OE_None
*0x0101; /* EV: R-19803-45884 */}
409 refargs
(A
) ::= refargs
(A
) refarg
(Y
).
{ A
= (A
& ~Y.mask
) | Y.value
; }
410 %type refarg
{struct {int value
; int mask
;}}
411 refarg
(A
) ::= MATCH nm.
{ A.value
= 0; A.mask
= 0x000000; }
412 refarg
(A
) ::= ON INSERT refact.
{ A.value
= 0; A.mask
= 0x000000; }
413 refarg
(A
) ::= ON DELETE refact
(X
).
{ A.value
= X
; A.mask
= 0x0000ff; }
414 refarg
(A
) ::= ON UPDATE refact
(X
).
{ A.value
= X
<<8; A.mask
= 0x00ff00; }
416 refact
(A
) ::= SET NULL.
{ A
= OE_SetNull
; /* EV: R-33326-45252 */}
417 refact
(A
) ::= SET DEFAULT.
{ A
= OE_SetDflt
; /* EV: R-33326-45252 */}
418 refact
(A
) ::= CASCADE.
{ A
= OE_Cascade
; /* EV: R-33326-45252 */}
419 refact
(A
) ::= RESTRICT.
{ A
= OE_Restrict
; /* EV: R-33326-45252 */}
420 refact
(A
) ::= NO ACTION.
{ A
= OE_None
; /* EV: R-33326-45252 */}
421 %type defer_subclause
{int}
422 defer_subclause
(A
) ::= NOT DEFERRABLE init_deferred_pred_opt.
{A
= 0;}
423 defer_subclause
(A
) ::= DEFERRABLE init_deferred_pred_opt
(X
).
{A
= X
;}
424 %type init_deferred_pred_opt
{int}
425 init_deferred_pred_opt
(A
) ::= .
{A
= 0;}
426 init_deferred_pred_opt
(A
) ::= INITIALLY DEFERRED.
{A
= 1;}
427 init_deferred_pred_opt
(A
) ::= INITIALLY IMMEDIATE.
{A
= 0;}
429 conslist_opt
(A
) ::= .
{A.n
= 0; A.z
= 0;}
430 conslist_opt
(A
) ::= COMMA
(A
) conslist.
431 conslist
::= conslist tconscomma tcons.
433 tconscomma
::= COMMA.
{pParse
->constraintName.n
= 0;}
435 tcons
::= CONSTRAINT nm
(X
).
{pParse
->constraintName
= X
;}
436 tcons
::= PRIMARY KEY LP sortlist
(X
) autoinc
(I
) RP onconf
(R
).
437 {sqlite3AddPrimaryKey
(pParse
,X
,R
,I
,0);}
438 tcons
::= UNIQUE LP sortlist
(X
) RP onconf
(R
).
439 {sqlite3CreateIndex
(pParse
,0,0,0,X
,R
,0,0,0,0,
440 SQLITE_IDXTYPE_UNIQUE
);}
441 tcons
::= CHECK LP
(A
) expr
(E
) RP
(B
) onconf.
442 {sqlite3AddCheckConstraint
(pParse
,E
,A.z
,B.z
);}
443 tcons
::= FOREIGN KEY LP eidlist
(FA
) RP
444 REFERENCES nm
(T
) eidlist_opt
(TA
) refargs
(R
) defer_subclause_opt
(D
).
{
445 sqlite3CreateForeignKey
(pParse
, FA
, &T
, TA
, R
);
446 sqlite3DeferForeignKey
(pParse
, D
);
448 %type defer_subclause_opt
{int}
449 defer_subclause_opt
(A
) ::= .
{A
= 0;}
450 defer_subclause_opt
(A
) ::= defer_subclause
(A
).
452 // The following is a non-standard extension that allows us to declare the
453 // default behavior when there is a constraint conflict.
457 %type resolvetype
{int}
458 onconf
(A
) ::= .
{A
= OE_Default
;}
459 onconf
(A
) ::= ON CONFLICT resolvetype
(X
).
{A
= X
;}
460 orconf
(A
) ::= .
{A
= OE_Default
;}
461 orconf
(A
) ::= OR resolvetype
(X
).
{A
= X
;}
462 resolvetype
(A
) ::= raisetype
(A
).
463 resolvetype
(A
) ::= IGNORE.
{A
= OE_Ignore
;}
464 resolvetype
(A
) ::= REPLACE.
{A
= OE_Replace
;}
466 ////////////////////////// The DROP TABLE /////////////////////////////////////
468 cmd
::= DROP TABLE ifexists
(E
) fullname
(X
).
{
469 sqlite3DropTable
(pParse
, X
, 0, E
);
472 ifexists
(A
) ::= IF EXISTS.
{A
= 1;}
473 ifexists
(A
) ::= .
{A
= 0;}
475 ///////////////////// The CREATE VIEW statement /////////////////////////////
477 %ifndef SQLITE_OMIT_VIEW
478 cmd
::= createkw
(X
) temp
(T
) VIEW ifnotexists
(E
) nm
(Y
) dbnm
(Z
) eidlist_opt
(C
)
480 sqlite3CreateView
(pParse
, &X
, &Y
, &Z
, C
, S
, T
, E
);
482 cmd
::= DROP VIEW ifexists
(E
) fullname
(X
).
{
483 sqlite3DropTable
(pParse
, X
, 1, E
);
485 %endif SQLITE_OMIT_VIEW
487 //////////////////////// The SELECT statement /////////////////////////////////
490 SelectDest dest
= {SRT_Output
, 0, 0, 0, 0, 0, 0};
491 sqlite3Select
(pParse
, X
, &dest
);
492 sqlite3SelectDelete
(pParse
->db
, X
);
495 %type select
{Select
*}
496 %destructor select
{sqlite3SelectDelete
(pParse
->db
, $$
);}
497 %type selectnowith
{Select
*}
498 %destructor selectnowith
{sqlite3SelectDelete
(pParse
->db
, $$
);}
499 %type oneselect
{Select
*}
500 %destructor oneselect
{sqlite3SelectDelete
(pParse
->db
, $$
);}
504 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
505 ** all elements in the list. And make sure list length does not exceed
506 ** SQLITE_LIMIT_COMPOUND_SELECT.
508 static void parserDoubleLinkSelect
(Parse
*pParse
, Select
*p
){
511 Select
*pNext
= 0, *pLoop
= p
;
512 int mxSelect
, cnt
= 1;
514 pLoop
->pNext
= pNext
;
515 pLoop
->selFlags |
= SF_Compound
;
517 pLoop
= pLoop
->pPrior
;
518 if
( pLoop
==0 ) break
;
520 if
( pLoop
->pOrderBy || pLoop
->pLimit
){
521 sqlite3ErrorMsg
(pParse
,"%s clause should come after %s not before",
522 pLoop
->pOrderBy
!=0 ?
"ORDER BY" : "LIMIT",
523 sqlite3SelectOpName
(pNext
->op
));
527 if
( (p
->selFlags
& SF_MultiValue
)==0 &&
528 (mxSelect
= pParse
->db
->aLimit
[SQLITE_LIMIT_COMPOUND_SELECT
])>0 &&
531 sqlite3ErrorMsg
(pParse
, "too many terms in compound SELECT");
536 /* Attach a With object describing the WITH clause to a Select
537 ** object describing the query for which the WITH clause is a prefix.
539 static Select
*attachWithToSelect
(Parse
*pParse
, Select
*pSelect
, With
*pWith
){
541 pSelect
->pWith
= pWith
;
542 parserDoubleLinkSelect
(pParse
, pSelect
);
544 sqlite3WithDelete
(pParse
->db
, pWith
);
550 %ifndef SQLITE_OMIT_CTE
551 select
(A
) ::= WITH wqlist
(W
) selectnowith
(X
).
{A
= attachWithToSelect
(pParse
,X
,W
);}
552 select
(A
) ::= WITH RECURSIVE wqlist
(W
) selectnowith
(X
).
553 {A
= attachWithToSelect
(pParse
,X
,W
);}
554 %endif
/* SQLITE_OMIT_CTE */
555 select
(A
) ::= selectnowith
(X
).
{
558 parserDoubleLinkSelect
(pParse
, p
);
560 A
= p
; /*A-overwrites-X*/
563 selectnowith
(A
) ::= oneselect
(A
).
564 %ifndef SQLITE_OMIT_COMPOUND_SELECT
565 selectnowith
(A
) ::= selectnowith
(A
) multiselect_op
(Y
) oneselect
(Z
).
{
568 if
( pRhs
&& pRhs
->pPrior
){
572 parserDoubleLinkSelect
(pParse
, pRhs
);
573 pFrom
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&x
,pRhs
,0);
574 pRhs
= sqlite3SelectNew
(pParse
,0,pFrom
,0,0,0,0,0,0);
579 if
( ALWAYS
(pLhs
) ) pLhs
->selFlags
&= ~SF_MultiValue
;
580 pRhs
->selFlags
&= ~SF_MultiValue
;
581 if
( Y
!=TK_ALL
) pParse
->hasCompound
= 1;
583 sqlite3SelectDelete
(pParse
->db
, pLhs
);
587 %type multiselect_op
{int}
588 multiselect_op
(A
) ::= UNION
(OP
).
{A
= @OP
; /*A-overwrites-OP*/}
589 multiselect_op
(A
) ::= UNION ALL.
{A
= TK_ALL
;}
590 multiselect_op
(A
) ::= EXCEPT|INTERSECT
(OP
).
{A
= @OP
; /*A-overwrites-OP*/}
591 %endif SQLITE_OMIT_COMPOUND_SELECT
593 oneselect
(A
) ::= SELECT distinct
(D
) selcollist
(W
) from
(X
) where_opt
(Y
)
594 groupby_opt
(P
) having_opt
(Q
)
595 orderby_opt
(Z
) limit_opt
(L
).
{
596 A
= sqlite3SelectNew
(pParse
,W
,X
,Y
,P
,Q
,Z
,D
,L
);
598 %ifndef SQLITE_OMIT_WINDOWFUNC
599 oneselect
(A
) ::= SELECT distinct
(D
) selcollist
(W
) from
(X
) where_opt
(Y
)
600 groupby_opt
(P
) having_opt
(Q
) window_clause
(R
)
601 orderby_opt
(Z
) limit_opt
(L
).
{
602 A
= sqlite3SelectNew
(pParse
,W
,X
,Y
,P
,Q
,Z
,D
,L
);
606 sqlite3WindowListDelete
(pParse
->db
, R
);
612 oneselect
(A
) ::= values
(A
).
614 %type values
{Select
*}
615 %destructor values
{sqlite3SelectDelete
(pParse
->db
, $$
);}
616 values
(A
) ::= VALUES LP nexprlist
(X
) RP.
{
617 A
= sqlite3SelectNew
(pParse
,X
,0,0,0,0,0,SF_Values
,0);
619 values
(A
) ::= values
(A
) COMMA LP nexprlist
(Y
) RP.
{
620 Select
*pRight
, *pLeft
= A
;
621 pRight
= sqlite3SelectNew
(pParse
,Y
,0,0,0,0,0,SF_Values|SF_MultiValue
,0);
622 if
( ALWAYS
(pLeft
) ) pLeft
->selFlags
&= ~SF_MultiValue
;
625 pRight
->pPrior
= pLeft
;
632 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
633 // present and false (0) if it is not.
636 distinct
(A
) ::= DISTINCT.
{A
= SF_Distinct
;}
637 distinct
(A
) ::= ALL.
{A
= SF_All
;}
638 distinct
(A
) ::= .
{A
= 0;}
640 // selcollist is a list of expressions that are to become the return
641 // values of the SELECT statement. The "*" in statements like
642 // "SELECT * FROM ..." is encoded as a special expression with an
643 // opcode of TK_ASTERISK.
645 %type selcollist
{ExprList
*}
646 %destructor selcollist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
647 %type sclp
{ExprList
*}
648 %destructor sclp
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
649 sclp
(A
) ::= selcollist
(A
) COMMA.
650 sclp
(A
) ::= .
{A
= 0;}
651 selcollist
(A
) ::= sclp
(A
) scanpt
(B
) expr
(X
) scanpt
(Z
) as
(Y
).
{
652 A
= sqlite3ExprListAppend
(pParse
, A
, X
);
653 if
( Y.n
>0 ) sqlite3ExprListSetName
(pParse
, A
, &Y
, 1);
654 sqlite3ExprListSetSpan
(pParse
,A
,B
,Z
);
656 selcollist
(A
) ::= sclp
(A
) scanpt STAR.
{
657 Expr
*p
= sqlite3Expr
(pParse
->db
, TK_ASTERISK
, 0);
658 A
= sqlite3ExprListAppend
(pParse
, A
, p
);
660 selcollist
(A
) ::= sclp
(A
) scanpt nm
(X
) DOT STAR.
{
661 Expr
*pRight
= sqlite3PExpr
(pParse
, TK_ASTERISK
, 0, 0);
662 Expr
*pLeft
= tokenExpr
(pParse
, TK_ID
, X
);
663 Expr
*pDot
= sqlite3PExpr
(pParse
, TK_DOT
, pLeft
, pRight
);
664 A
= sqlite3ExprListAppend
(pParse
,A
, pDot
);
667 // An option "AS <id>" phrase that can follow one of the expressions that
668 // define the result set, or one of the tables in the FROM clause.
671 as
(X
) ::= AS nm
(Y
).
{X
= Y
;}
673 as
(X
) ::= .
{X.n
= 0; X.z
= 0;}
676 %type seltablist
{SrcList
*}
677 %destructor seltablist
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
678 %type stl_prefix
{SrcList
*}
679 %destructor stl_prefix
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
680 %type from
{SrcList
*}
681 %destructor from
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
683 // A complete FROM clause.
685 from
(A
) ::= .
{A
= 0;}
686 from
(A
) ::= FROM seltablist
(X
).
{
688 sqlite3SrcListShiftJoinType
(pParse
,A
);
691 // "seltablist" is a "Select Table List" - the content of the FROM clause
692 // in a SELECT statement. "stl_prefix" is a prefix of this list.
694 stl_prefix
(A
) ::= seltablist
(A
) joinop
(Y
).
{
695 if
( ALWAYS
(A
&& A
->nSrc
>0) ) A
->a
[A
->nSrc
-1].fg.jointype
= (u8
)Y
;
697 stl_prefix
(A
) ::= .
{A
= 0;}
698 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) as
(Z
) on_using
(N
).
{
699 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
701 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) as
(Z
) indexed_by
(I
) on_using
(N
).
{
702 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
703 sqlite3SrcListIndexedBy
(pParse
, A
, &I
);
705 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) LP exprlist
(E
) RP as
(Z
) on_using
(N
).
{
706 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
707 sqlite3SrcListFuncArgs
(pParse
, A
, E
);
709 %ifndef SQLITE_OMIT_SUBQUERY
710 seltablist
(A
) ::= stl_prefix
(A
) LP select
(S
) RP as
(Z
) on_using
(N
).
{
711 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,S
,&N
);
713 seltablist
(A
) ::= stl_prefix
(A
) LP seltablist
(F
) RP as
(Z
) on_using
(N
).
{
714 if
( A
==0 && Z.n
==0 && N.pOn
==0 && N.pUsing
==0 ){
716 }else if
( F
->nSrc
==1 ){
717 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,0,&N
);
719 SrcItem
*pNew
= &A
->a
[A
->nSrc
-1];
720 SrcItem
*pOld
= F
->a
;
721 pNew
->zName
= pOld
->zName
;
722 pNew
->zDatabase
= pOld
->zDatabase
;
723 pNew
->pSelect
= pOld
->pSelect
;
724 if
( pNew
->pSelect
&& (pNew
->pSelect
->selFlags
& SF_NestedFrom
)!=0 ){
725 pNew
->fg.isNestedFrom
= 1;
727 if
( pOld
->fg.isTabFunc
){
728 pNew
->u1.pFuncArg
= pOld
->u1.pFuncArg
;
729 pOld
->u1.pFuncArg
= 0;
730 pOld
->fg.isTabFunc
= 0;
731 pNew
->fg.isTabFunc
= 1;
733 pOld
->zName
= pOld
->zDatabase
= 0;
736 sqlite3SrcListDelete
(pParse
->db
, F
);
739 sqlite3SrcListShiftJoinType
(pParse
,F
);
740 pSubquery
= sqlite3SelectNew
(pParse
,0,F
,0,0,0,0,SF_NestedFrom
,0);
741 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,pSubquery
,&N
);
744 %endif SQLITE_OMIT_SUBQUERY
747 dbnm
(A
) ::= .
{A.z
=0; A.n
=0;}
748 dbnm
(A
) ::= DOT nm
(X
).
{A
= X
;}
750 %type fullname
{SrcList
*}
751 %destructor fullname
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
752 fullname
(A
) ::= nm
(X
).
{
753 A
= sqlite3SrcListAppend
(pParse
,0,&X
,0);
754 if
( IN_RENAME_OBJECT
&& A
) sqlite3RenameTokenMap
(pParse
, A
->a
[0].zName
, &X
);
756 fullname
(A
) ::= nm
(X
) DOT nm
(Y
).
{
757 A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
);
758 if
( IN_RENAME_OBJECT
&& A
) sqlite3RenameTokenMap
(pParse
, A
->a
[0].zName
, &Y
);
761 %type xfullname
{SrcList
*}
762 %destructor xfullname
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
763 xfullname
(A
) ::= nm
(X
).
764 {A
= sqlite3SrcListAppend
(pParse
,0,&X
,0); /*A-overwrites-X*/}
765 xfullname
(A
) ::= nm
(X
) DOT nm
(Y
).
766 {A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
); /*A-overwrites-X*/}
767 xfullname
(A
) ::= nm
(X
) DOT nm
(Y
) AS nm
(Z
).
{
768 A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
); /*A-overwrites-X*/
769 if
( A
) A
->a
[0].zAlias
= sqlite3NameFromToken
(pParse
->db
, &Z
);
771 xfullname
(A
) ::= nm
(X
) AS nm
(Z
).
{
772 A
= sqlite3SrcListAppend
(pParse
,0,&X
,0); /*A-overwrites-X*/
773 if
( A
) A
->a
[0].zAlias
= sqlite3NameFromToken
(pParse
->db
, &Z
);
777 joinop
(X
) ::= COMMA|JOIN.
{ X
= JT_INNER
; }
778 joinop
(X
) ::= JOIN_KW
(A
) JOIN.
779 {X
= sqlite3JoinType
(pParse
,&A
,0,0); /*X-overwrites-A*/}
780 joinop
(X
) ::= JOIN_KW
(A
) nm
(B
) JOIN.
781 {X
= sqlite3JoinType
(pParse
,&A
,&B
,0); /*X-overwrites-A*/}
782 joinop
(X
) ::= JOIN_KW
(A
) nm
(B
) nm
(C
) JOIN.
783 {X
= sqlite3JoinType
(pParse
,&A
,&B
,&C
);/*X-overwrites-A*/}
785 // There is a parsing abiguity in an upsert statement that uses a
786 // SELECT on the RHS of a the INSERT:
788 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
791 // When the ON token is encountered, the parser does not know if it is
792 // the beginning of an ON CONFLICT clause, or the beginning of an ON
793 // clause associated with the JOIN. The conflict is resolved in favor
794 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
795 // WHERE clause in between, like this:
797 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
799 // The [AND] and [OR] precedence marks in the rules for on_using cause the
800 // ON in this context to always be interpreted as belonging to the JOIN.
802 %type on_using
{OnOrUsing
}
803 //%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);}
804 on_using
(N
) ::= ON expr
(E
).
{N.pOn
= E
; N.pUsing
= 0;}
805 on_using
(N
) ::= USING LP idlist
(L
) RP.
{N.pOn
= 0; N.pUsing
= L
;}
806 on_using
(N
) ::= .
[OR
] {N.pOn
= 0; N.pUsing
= 0;}
808 // Note that this block abuses the Token type just a little. If there is
809 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
810 // there is an INDEXED BY clause, then the token is populated as per normal,
811 // with z pointing to the token data and n containing the number of bytes
814 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
815 // normally illegal. The sqlite3SrcListIndexedBy() function
816 // recognizes and interprets this as a special case.
818 %type indexed_opt
{Token
}
819 %type indexed_by
{Token
}
820 indexed_opt
(A
) ::= .
{A.z
=0; A.n
=0;}
821 indexed_opt
(A
) ::= indexed_by
(A
).
822 indexed_by
(A
) ::= INDEXED BY nm
(X
).
{A
= X
;}
823 indexed_by
(A
) ::= NOT INDEXED.
{A.z
=0; A.n
=1;}
825 %type orderby_opt
{ExprList
*}
826 %destructor orderby_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
828 // the sortlist non-terminal stores a list of expression where each
829 // expression is optionally followed by ASC or DESC to indicate the
832 %type sortlist
{ExprList
*}
833 %destructor sortlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
835 orderby_opt
(A
) ::= .
{A
= 0;}
836 orderby_opt
(A
) ::= ORDER BY sortlist
(X
).
{A
= X
;}
837 sortlist
(A
) ::= sortlist
(A
) COMMA expr
(Y
) sortorder
(Z
) nulls
(X
).
{
838 A
= sqlite3ExprListAppend
(pParse
,A
,Y
);
839 sqlite3ExprListSetSortOrder
(A
,Z
,X
);
841 sortlist
(A
) ::= expr
(Y
) sortorder
(Z
) nulls
(X
).
{
842 A
= sqlite3ExprListAppend
(pParse
,0,Y
); /*A-overwrites-Y*/
843 sqlite3ExprListSetSortOrder
(A
,Z
,X
);
846 %type sortorder
{int}
848 sortorder
(A
) ::= ASC.
{A
= SQLITE_SO_ASC
;}
849 sortorder
(A
) ::= DESC.
{A
= SQLITE_SO_DESC
;}
850 sortorder
(A
) ::= .
{A
= SQLITE_SO_UNDEFINED
;}
853 nulls
(A
) ::= NULLS FIRST.
{A
= SQLITE_SO_ASC
;}
854 nulls
(A
) ::= NULLS LAST.
{A
= SQLITE_SO_DESC
;}
855 nulls
(A
) ::= .
{A
= SQLITE_SO_UNDEFINED
;}
857 %type groupby_opt
{ExprList
*}
858 %destructor groupby_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
859 groupby_opt
(A
) ::= .
{A
= 0;}
860 groupby_opt
(A
) ::= GROUP BY nexprlist
(X
).
{A
= X
;}
862 %type having_opt
{Expr
*}
863 %destructor having_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
864 having_opt
(A
) ::= .
{A
= 0;}
865 having_opt
(A
) ::= HAVING expr
(X
).
{A
= X
;}
867 %type limit_opt
{Expr
*}
869 // The destructor for limit_opt will never fire in the current grammar.
870 // The limit_opt non-terminal only occurs at the end of a single production
871 // rule for SELECT statements. As soon as the rule that create the
872 // limit_opt non-terminal reduces, the SELECT statement rule will also
873 // reduce. So there is never a limit_opt non-terminal on the stack
874 // except as a transient. So there is never anything to destroy.
876 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
877 limit_opt
(A
) ::= .
{A
= 0;}
878 limit_opt
(A
) ::= LIMIT expr
(X
).
879 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,X
,0);}
880 limit_opt
(A
) ::= LIMIT expr
(X
) OFFSET expr
(Y
).
881 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,X
,Y
);}
882 limit_opt
(A
) ::= LIMIT expr
(X
) COMMA expr
(Y
).
883 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,Y
,X
);}
885 /////////////////////////// The DELETE statement /////////////////////////////
887 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
888 cmd
::= with DELETE FROM xfullname
(X
) indexed_opt
(I
) where_opt_ret
(W
)
889 orderby_opt
(O
) limit_opt
(L
).
{
890 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
891 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
893 updateDeleteLimitError
(pParse
,O
,L
);
898 sqlite3DeleteFrom
(pParse
,X
,W
,O
,L
);
901 cmd
::= with DELETE FROM xfullname
(X
) indexed_opt
(I
) where_opt_ret
(W
).
{
902 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
903 sqlite3DeleteFrom
(pParse
,X
,W
,0,0);
907 %type where_opt
{Expr
*}
908 %destructor where_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
909 %type where_opt_ret
{Expr
*}
910 %destructor where_opt_ret
{sqlite3ExprDelete
(pParse
->db
, $$
);}
912 where_opt
(A
) ::= .
{A
= 0;}
913 where_opt
(A
) ::= WHERE expr
(X
).
{A
= X
;}
914 where_opt_ret
(A
) ::= .
{A
= 0;}
915 where_opt_ret
(A
) ::= WHERE expr
(X
).
{A
= X
;}
916 where_opt_ret
(A
) ::= RETURNING selcollist
(X
).
917 {sqlite3AddReturning
(pParse
,X
); A
= 0;}
918 where_opt_ret
(A
) ::= WHERE expr
(X
) RETURNING selcollist
(Y
).
919 {sqlite3AddReturning
(pParse
,Y
); A
= X
;}
921 ////////////////////////// The UPDATE command ////////////////////////////////
923 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
924 cmd
::= with UPDATE orconf
(R
) xfullname
(X
) indexed_opt
(I
) SET setlist
(Y
) from
(F
)
925 where_opt_ret
(W
) orderby_opt
(O
) limit_opt
(L
).
{
926 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
928 SrcList
*pFromClause
= F
;
929 if
( pFromClause
->nSrc
>1 ){
932 pSubquery
= sqlite3SelectNew
(pParse
,0,pFromClause
,0,0,0,0,SF_NestedFrom
,0);
935 pFromClause
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&as
,pSubquery
,0);
937 X
= sqlite3SrcListAppendList
(pParse
, X
, pFromClause
);
939 sqlite3ExprListCheckLength
(pParse
,Y
,"set list");
940 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
942 updateDeleteLimitError
(pParse
,O
,L
);
947 sqlite3Update
(pParse
,X
,Y
,W
,R
,O
,L
,0);
950 cmd
::= with UPDATE orconf
(R
) xfullname
(X
) indexed_opt
(I
) SET setlist
(Y
) from
(F
)
952 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
953 sqlite3ExprListCheckLength
(pParse
,Y
,"set list");
955 SrcList
*pFromClause
= F
;
956 if
( pFromClause
->nSrc
>1 ){
959 pSubquery
= sqlite3SelectNew
(pParse
,0,pFromClause
,0,0,0,0,SF_NestedFrom
,0);
962 pFromClause
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&as
,pSubquery
,0);
964 X
= sqlite3SrcListAppendList
(pParse
, X
, pFromClause
);
966 sqlite3Update
(pParse
,X
,Y
,W
,R
,0,0,0);
972 %type setlist
{ExprList
*}
973 %destructor setlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
975 setlist
(A
) ::= setlist
(A
) COMMA nm
(X
) EQ expr
(Y
).
{
976 A
= sqlite3ExprListAppend
(pParse
, A
, Y
);
977 sqlite3ExprListSetName
(pParse
, A
, &X
, 1);
979 setlist
(A
) ::= setlist
(A
) COMMA LP idlist
(X
) RP EQ expr
(Y
).
{
980 A
= sqlite3ExprListAppendVector
(pParse
, A
, X
, Y
);
982 setlist
(A
) ::= nm
(X
) EQ expr
(Y
).
{
983 A
= sqlite3ExprListAppend
(pParse
, 0, Y
);
984 sqlite3ExprListSetName
(pParse
, A
, &X
, 1);
986 setlist
(A
) ::= LP idlist
(X
) RP EQ expr
(Y
).
{
987 A
= sqlite3ExprListAppendVector
(pParse
, 0, X
, Y
);
990 ////////////////////////// The INSERT command /////////////////////////////////
992 cmd
::= with insert_cmd
(R
) INTO xfullname
(X
) idlist_opt
(F
) select
(S
)
994 sqlite3Insert
(pParse
, X
, S
, F
, R
, U
);
996 cmd
::= with insert_cmd
(R
) INTO xfullname
(X
) idlist_opt
(F
) DEFAULT VALUES returning.
998 sqlite3Insert
(pParse
, X
, 0, F
, R
, 0);
1001 %type upsert
{Upsert
*}
1003 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
1004 // there is never a case where the value of the upsert pointer will not
1005 // be destroyed by the cmd action. So comment-out the destructor to
1006 // avoid unreachable code.
1007 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
1008 upsert
(A
) ::= .
{ A
= 0; }
1009 upsert
(A
) ::= RETURNING selcollist
(X
).
{ A
= 0; sqlite3AddReturning
(pParse
,X
); }
1010 upsert
(A
) ::= ON CONFLICT LP sortlist
(T
) RP where_opt
(TW
)
1011 DO UPDATE SET setlist
(Z
) where_opt
(W
) upsert
(N
).
1012 { A
= sqlite3UpsertNew
(pParse
->db
,T
,TW
,Z
,W
,N
);}
1013 upsert
(A
) ::= ON CONFLICT LP sortlist
(T
) RP where_opt
(TW
) DO NOTHING upsert
(N
).
1014 { A
= sqlite3UpsertNew
(pParse
->db
,T
,TW
,0,0,N
); }
1015 upsert
(A
) ::= ON CONFLICT DO NOTHING returning.
1016 { A
= sqlite3UpsertNew
(pParse
->db
,0,0,0,0,0); }
1017 upsert
(A
) ::= ON CONFLICT DO UPDATE SET setlist
(Z
) where_opt
(W
) returning.
1018 { A
= sqlite3UpsertNew
(pParse
->db
,0,0,Z
,W
,0);}
1020 returning
::= RETURNING selcollist
(X
).
{sqlite3AddReturning
(pParse
,X
);}
1023 %type insert_cmd
{int}
1024 insert_cmd
(A
) ::= INSERT orconf
(R
).
{A
= R
;}
1025 insert_cmd
(A
) ::= REPLACE.
{A
= OE_Replace
;}
1027 %type idlist_opt
{IdList
*}
1028 %destructor idlist_opt
{sqlite3IdListDelete
(pParse
->db
, $$
);}
1029 %type idlist
{IdList
*}
1030 %destructor idlist
{sqlite3IdListDelete
(pParse
->db
, $$
);}
1032 idlist_opt
(A
) ::= .
{A
= 0;}
1033 idlist_opt
(A
) ::= LP idlist
(X
) RP.
{A
= X
;}
1034 idlist
(A
) ::= idlist
(A
) COMMA nm
(Y
).
1035 {A
= sqlite3IdListAppend
(pParse
,A
,&Y
);}
1036 idlist
(A
) ::= nm
(Y
).
1037 {A
= sqlite3IdListAppend
(pParse
,0,&Y
); /*A-overwrites-Y*/}
1039 /////////////////////////// Expression Processing /////////////////////////////
1043 %destructor expr
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1045 %destructor term
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1049 /* Construct a new Expr object from a single token */
1050 static Expr
*tokenExpr
(Parse
*pParse
, int op
, Token t
){
1051 Expr
*p
= sqlite3DbMallocRawNN
(pParse
->db
, sizeof
(Expr
)+t.n
+1);
1053 /* memset(p, 0, sizeof(Expr)); */
1057 ExprClearVVAProperties
(p
);
1058 /* p->iAgg = -1; // Not required */
1059 p
->pLeft
= p
->pRight
= 0;
1061 memset
(&p
->x
, 0, sizeof
(p
->x
));
1062 memset
(&p
->y
, 0, sizeof
(p
->y
));
1066 p
->u.zToken
= (char*)&p
[1];
1067 memcpy
(p
->u.zToken
, t.z
, t.n
);
1068 p
->u.zToken
[t.n
] = 0;
1069 p
->w.iOfst
= (int)(t.z
- pParse
->zTail
);
1070 if
( sqlite3Isquote
(p
->u.zToken
[0]) ){
1071 sqlite3DequoteExpr
(p
);
1073 #if SQLITE_MAX_EXPR_DEPTH>0
1076 if
( IN_RENAME_OBJECT
){
1077 return
(Expr
*)sqlite3RenameTokenMap
(pParse
, (void*)p
, &t
);
1085 expr
(A
) ::= term
(A
).
1086 expr
(A
) ::= LP expr
(X
) RP.
{A
= X
;}
1087 expr
(A
) ::= id
(X
).
{A
=tokenExpr
(pParse
,TK_ID
,X
); /*A-overwrites-X*/}
1088 expr
(A
) ::= JOIN_KW
(X
).
{A
=tokenExpr
(pParse
,TK_ID
,X
); /*A-overwrites-X*/}
1089 expr
(A
) ::= nm
(X
) DOT nm
(Y
).
{
1090 Expr
*temp1
= tokenExpr
(pParse
,TK_ID
,X
);
1091 Expr
*temp2
= tokenExpr
(pParse
,TK_ID
,Y
);
1092 A
= sqlite3PExpr
(pParse
, TK_DOT
, temp1
, temp2
);
1094 expr
(A
) ::= nm
(X
) DOT nm
(Y
) DOT nm
(Z
).
{
1095 Expr
*temp1
= tokenExpr
(pParse
,TK_ID
,X
);
1096 Expr
*temp2
= tokenExpr
(pParse
,TK_ID
,Y
);
1097 Expr
*temp3
= tokenExpr
(pParse
,TK_ID
,Z
);
1098 Expr
*temp4
= sqlite3PExpr
(pParse
, TK_DOT
, temp2
, temp3
);
1099 if
( IN_RENAME_OBJECT
){
1100 sqlite3RenameTokenRemap
(pParse
, 0, temp1
);
1102 A
= sqlite3PExpr
(pParse
, TK_DOT
, temp1
, temp4
);
1104 term
(A
) ::= NULL|FLOAT|BLOB
(X
).
{A
=tokenExpr
(pParse
,@X
,X
); /*A-overwrites-X*/}
1105 term
(A
) ::= STRING
(X
).
{A
=tokenExpr
(pParse
,@X
,X
); /*A-overwrites-X*/}
1106 term
(A
) ::= INTEGER
(X
).
{
1107 A
= sqlite3ExprAlloc
(pParse
->db
, TK_INTEGER
, &X
, 1);
1108 if
( A
) A
->w.iOfst
= (int)(X.z
- pParse
->zTail
);
1110 expr
(A
) ::= VARIABLE
(X
).
{
1111 if
( !(X.z
[0]=='#' && sqlite3Isdigit
(X.z
[1])) ){
1113 A
= tokenExpr
(pParse
, TK_VARIABLE
, X
);
1114 sqlite3ExprAssignVarNumber
(pParse
, A
, n
);
1116 /* When doing a nested parse, one can include terms in an expression
1117 ** that look like this: #1 #2 ... These terms refer to registers
1118 ** in the virtual machine. #N is the N-th register. */
1119 Token t
= X
; /*A-overwrites-X*/
1121 if
( pParse
->nested
==0 ){
1122 sqlite3ErrorMsg
(pParse
, "near \"%T\": syntax error", &t
);
1125 A
= sqlite3PExpr
(pParse
, TK_REGISTER
, 0, 0);
1126 if
( A
) sqlite3GetInt32
(&t.z
[1], &A
->iTable
);
1130 expr
(A
) ::= expr
(A
) COLLATE ids
(C
).
{
1131 A
= sqlite3ExprAddCollateToken
(pParse
, A
, &C
, 1);
1133 %ifndef SQLITE_OMIT_CAST
1134 expr
(A
) ::= CAST LP expr
(E
) AS typetoken
(T
) RP.
{
1135 A
= sqlite3ExprAlloc
(pParse
->db
, TK_CAST
, &T
, 1);
1136 sqlite3ExprAttachSubtrees
(pParse
->db
, A
, E
, 0);
1138 %endif SQLITE_OMIT_CAST
1141 expr
(A
) ::= id
(X
) LP distinct
(D
) exprlist
(Y
) RP.
{
1142 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1144 expr
(A
) ::= id
(X
) LP STAR RP.
{
1145 A
= sqlite3ExprFunction
(pParse
, 0, &X
, 0);
1148 %ifndef SQLITE_OMIT_WINDOWFUNC
1149 expr
(A
) ::= id
(X
) LP distinct
(D
) exprlist
(Y
) RP filter_over
(Z
).
{
1150 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1151 sqlite3WindowAttach
(pParse
, A
, Z
);
1153 expr
(A
) ::= id
(X
) LP STAR RP filter_over
(Z
).
{
1154 A
= sqlite3ExprFunction
(pParse
, 0, &X
, 0);
1155 sqlite3WindowAttach
(pParse
, A
, Z
);
1159 term
(A
) ::= CTIME_KW
(OP
).
{
1160 A
= sqlite3ExprFunction
(pParse
, 0, &OP
, 0);
1163 expr
(A
) ::= LP nexprlist
(X
) COMMA expr
(Y
) RP.
{
1164 ExprList
*pList
= sqlite3ExprListAppend
(pParse
, X
, Y
);
1165 A
= sqlite3PExpr
(pParse
, TK_VECTOR
, 0, 0);
1168 if
( ALWAYS
(pList
->nExpr
) ){
1169 A
->flags |
= pList
->a
[0].pExpr
->flags
& EP_Propagate
;
1172 sqlite3ExprListDelete
(pParse
->db
, pList
);
1176 expr
(A
) ::= expr
(A
) AND expr
(Y
).
{A
=sqlite3ExprAnd
(pParse
,A
,Y
);}
1177 expr
(A
) ::= expr
(A
) OR
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1178 expr
(A
) ::= expr
(A
) LT|GT|GE|LE
(OP
) expr
(Y
).
1179 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1180 expr
(A
) ::= expr
(A
) EQ|NE
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1181 expr
(A
) ::= expr
(A
) BITAND|BITOR|LSHIFT|RSHIFT
(OP
) expr
(Y
).
1182 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1183 expr
(A
) ::= expr
(A
) PLUS|MINUS
(OP
) expr
(Y
).
1184 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1185 expr
(A
) ::= expr
(A
) STAR|SLASH|REM
(OP
) expr
(Y
).
1186 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1187 expr
(A
) ::= expr
(A
) CONCAT
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1188 %type likeop
{Token
}
1189 likeop
(A
) ::= LIKE_KW|MATCH
(A
).
1190 likeop
(A
) ::= NOT LIKE_KW|MATCH
(X
).
{A
=X
; A.n|
=0x80000000; /*A-overwrite-X*/}
1191 expr
(A
) ::= expr
(A
) likeop
(OP
) expr
(Y
).
[LIKE_KW
] {
1193 int bNot
= OP.n
& 0x80000000;
1195 pList
= sqlite3ExprListAppend
(pParse
,0, Y
);
1196 pList
= sqlite3ExprListAppend
(pParse
,pList
, A
);
1197 A
= sqlite3ExprFunction
(pParse
, pList
, &OP
, 0);
1198 if
( bNot
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1199 if
( A
) A
->flags |
= EP_InfixFunc
;
1201 expr
(A
) ::= expr
(A
) likeop
(OP
) expr
(Y
) ESCAPE expr
(E
).
[LIKE_KW
] {
1203 int bNot
= OP.n
& 0x80000000;
1205 pList
= sqlite3ExprListAppend
(pParse
,0, Y
);
1206 pList
= sqlite3ExprListAppend
(pParse
,pList
, A
);
1207 pList
= sqlite3ExprListAppend
(pParse
,pList
, E
);
1208 A
= sqlite3ExprFunction
(pParse
, pList
, &OP
, 0);
1209 if
( bNot
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1210 if
( A
) A
->flags |
= EP_InfixFunc
;
1213 expr
(A
) ::= expr
(A
) ISNULL|NOTNULL
(E
).
{A
= sqlite3PExpr
(pParse
,@E
,A
,0);}
1214 expr
(A
) ::= expr
(A
) NOT NULL.
{A
= sqlite3PExpr
(pParse
,TK_NOTNULL
,A
,0);}
1217 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1218 ** unary TK_ISNULL or TK_NOTNULL expression. */
1219 static void binaryToUnaryIfNull
(Parse
*pParse
, Expr
*pY
, Expr
*pA
, int op
){
1220 sqlite3
*db
= pParse
->db
;
1221 if
( pA
&& pY
&& pY
->op
==TK_NULL
&& !IN_RENAME_OBJECT
){
1223 sqlite3ExprDelete
(db
, pA
->pRight
);
1230 // expr1 IS NOT expr2
1232 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1233 // is any other expression, code as TK_IS or TK_ISNOT.
1235 expr
(A
) ::= expr
(A
) IS expr
(Y
).
{
1236 A
= sqlite3PExpr
(pParse
,TK_IS
,A
,Y
);
1237 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_ISNULL
);
1239 expr
(A
) ::= expr
(A
) IS NOT expr
(Y
).
{
1240 A
= sqlite3PExpr
(pParse
,TK_ISNOT
,A
,Y
);
1241 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_NOTNULL
);
1243 expr
(A
) ::= expr
(A
) IS NOT DISTINCT FROM expr
(Y
).
{
1244 A
= sqlite3PExpr
(pParse
,TK_IS
,A
,Y
);
1245 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_ISNULL
);
1247 expr
(A
) ::= expr
(A
) IS DISTINCT FROM expr
(Y
).
{
1248 A
= sqlite3PExpr
(pParse
,TK_ISNOT
,A
,Y
);
1249 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_NOTNULL
);
1252 expr
(A
) ::= NOT
(B
) expr
(X
).
1253 {A
= sqlite3PExpr
(pParse
, @B
, X
, 0);/*A-overwrites-B*/}
1254 expr
(A
) ::= BITNOT
(B
) expr
(X
).
1255 {A
= sqlite3PExpr
(pParse
, @B
, X
, 0);/*A-overwrites-B*/}
1256 expr
(A
) ::= PLUS|MINUS
(B
) expr
(X
).
[BITNOT
] {
1257 A
= sqlite3PExpr
(pParse
, @B
==TK_PLUS ? TK_UPLUS
: TK_UMINUS
, X
, 0);
1261 expr
(A
) ::= expr
(B
) PTR
(C
) expr
(D
).
{
1262 ExprList
*pList
= sqlite3ExprListAppend
(pParse
, 0, B
);
1263 pList
= sqlite3ExprListAppend
(pParse
, pList
, D
);
1264 A
= sqlite3ExprFunction
(pParse
, pList
, &C
, 0);
1267 %type between_op
{int}
1268 between_op
(A
) ::= BETWEEN.
{A
= 0;}
1269 between_op
(A
) ::= NOT BETWEEN.
{A
= 1;}
1270 expr
(A
) ::= expr
(A
) between_op
(N
) expr
(X
) AND expr
(Y
).
[BETWEEN
] {
1271 ExprList
*pList
= sqlite3ExprListAppend
(pParse
,0, X
);
1272 pList
= sqlite3ExprListAppend
(pParse
,pList
, Y
);
1273 A
= sqlite3PExpr
(pParse
, TK_BETWEEN
, A
, 0);
1277 sqlite3ExprListDelete
(pParse
->db
, pList
);
1279 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1281 %ifndef SQLITE_OMIT_SUBQUERY
1283 in_op
(A
) ::= IN.
{A
= 0;}
1284 in_op
(A
) ::= NOT IN.
{A
= 1;}
1285 expr
(A
) ::= expr
(A
) in_op
(N
) LP exprlist
(Y
) RP.
[IN
] {
1287 /* Expressions of the form
1292 ** simplify to constants 0 (false) and 1 (true), respectively,
1293 ** regardless of the value of expr1.
1295 sqlite3ExprUnmapAndDelete
(pParse
, A
);
1296 A
= sqlite3Expr
(pParse
->db
, TK_STRING
, N ?
"true" : "false");
1297 if
( A
) sqlite3ExprIdToTrueFalse
(A
);
1299 Expr
*pRHS
= Y
->a
[0].pExpr
;
1300 if
( Y
->nExpr
==1 && sqlite3ExprIsConstant
(pRHS
) && A
->op
!=TK_VECTOR
){
1302 sqlite3ExprListDelete
(pParse
->db
, Y
);
1303 pRHS
= sqlite3PExpr
(pParse
, TK_UPLUS
, pRHS
, 0);
1304 A
= sqlite3PExpr
(pParse
, TK_EQ
, A
, pRHS
);
1306 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1308 sqlite3ExprListDelete
(pParse
->db
, Y
);
1309 }else if
( A
->pLeft
->op
==TK_VECTOR
){
1310 int nExpr
= A
->pLeft
->x.pList
->nExpr
;
1311 Select
*pSelectRHS
= sqlite3ExprListToValues
(pParse
, nExpr
, Y
);
1313 parserDoubleLinkSelect
(pParse
, pSelectRHS
);
1314 sqlite3PExprAddSelect
(pParse
, A
, pSelectRHS
);
1318 sqlite3ExprSetHeightAndFlags
(pParse
, A
);
1321 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1324 expr
(A
) ::= LP select
(X
) RP.
{
1325 A
= sqlite3PExpr
(pParse
, TK_SELECT
, 0, 0);
1326 sqlite3PExprAddSelect
(pParse
, A
, X
);
1328 expr
(A
) ::= expr
(A
) in_op
(N
) LP select
(Y
) RP.
[IN
] {
1329 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1330 sqlite3PExprAddSelect
(pParse
, A
, Y
);
1331 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1333 expr
(A
) ::= expr
(A
) in_op
(N
) nm
(Y
) dbnm
(Z
) paren_exprlist
(E
).
[IN
] {
1334 SrcList
*pSrc
= sqlite3SrcListAppend
(pParse
, 0,&Y
,&Z
);
1335 Select
*pSelect
= sqlite3SelectNew
(pParse
, 0,pSrc
,0,0,0,0,0,0);
1336 if
( E
) sqlite3SrcListFuncArgs
(pParse
, pSelect ? pSrc
: 0, E
);
1337 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1338 sqlite3PExprAddSelect
(pParse
, A
, pSelect
);
1339 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1341 expr
(A
) ::= EXISTS LP select
(Y
) RP.
{
1343 p
= A
= sqlite3PExpr
(pParse
, TK_EXISTS
, 0, 0);
1344 sqlite3PExprAddSelect
(pParse
, p
, Y
);
1346 %endif SQLITE_OMIT_SUBQUERY
1348 /* CASE expressions */
1349 expr
(A
) ::= CASE case_operand
(X
) case_exprlist
(Y
) case_else
(Z
) END.
{
1350 A
= sqlite3PExpr
(pParse
, TK_CASE
, X
, 0);
1352 A
->x.pList
= Z ? sqlite3ExprListAppend
(pParse
,Y
,Z
) : Y
;
1353 sqlite3ExprSetHeightAndFlags
(pParse
, A
);
1355 sqlite3ExprListDelete
(pParse
->db
, Y
);
1356 sqlite3ExprDelete
(pParse
->db
, Z
);
1359 %type case_exprlist
{ExprList
*}
1360 %destructor case_exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1361 case_exprlist
(A
) ::= case_exprlist
(A
) WHEN expr
(Y
) THEN expr
(Z
).
{
1362 A
= sqlite3ExprListAppend
(pParse
,A
, Y
);
1363 A
= sqlite3ExprListAppend
(pParse
,A
, Z
);
1365 case_exprlist
(A
) ::= WHEN expr
(Y
) THEN expr
(Z
).
{
1366 A
= sqlite3ExprListAppend
(pParse
,0, Y
);
1367 A
= sqlite3ExprListAppend
(pParse
,A
, Z
);
1369 %type case_else
{Expr
*}
1370 %destructor case_else
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1371 case_else
(A
) ::= ELSE expr
(X
).
{A
= X
;}
1372 case_else
(A
) ::= .
{A
= 0;}
1373 %type case_operand
{Expr
*}
1374 %destructor case_operand
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1375 case_operand
(A
) ::= expr
(X
).
{A
= X
; /*A-overwrites-X*/}
1376 case_operand
(A
) ::= .
{A
= 0;}
1378 %type exprlist
{ExprList
*}
1379 %destructor exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1380 %type nexprlist
{ExprList
*}
1381 %destructor nexprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1383 exprlist
(A
) ::= nexprlist
(A
).
1384 exprlist
(A
) ::= .
{A
= 0;}
1385 nexprlist
(A
) ::= nexprlist
(A
) COMMA expr
(Y
).
1386 {A
= sqlite3ExprListAppend
(pParse
,A
,Y
);}
1387 nexprlist
(A
) ::= expr
(Y
).
1388 {A
= sqlite3ExprListAppend
(pParse
,0,Y
); /*A-overwrites-Y*/}
1390 %ifndef SQLITE_OMIT_SUBQUERY
1391 /* A paren_exprlist is an optional expression list contained inside
1392 ** of parenthesis */
1393 %type paren_exprlist
{ExprList
*}
1394 %destructor paren_exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1395 paren_exprlist
(A
) ::= .
{A
= 0;}
1396 paren_exprlist
(A
) ::= LP exprlist
(X
) RP.
{A
= X
;}
1397 %endif SQLITE_OMIT_SUBQUERY
1400 ///////////////////////////// The CREATE INDEX command ///////////////////////
1402 cmd
::= createkw
(S
) uniqueflag
(U
) INDEX ifnotexists
(NE
) nm
(X
) dbnm
(D
)
1403 ON nm
(Y
) LP sortlist
(Z
) RP where_opt
(W
).
{
1404 sqlite3CreateIndex
(pParse
, &X
, &D
,
1405 sqlite3SrcListAppend
(pParse
,0,&Y
,0), Z
, U
,
1406 &S
, W
, SQLITE_SO_ASC
, NE
, SQLITE_IDXTYPE_APPDEF
);
1407 if
( IN_RENAME_OBJECT
&& pParse
->pNewIndex
){
1408 sqlite3RenameTokenMap
(pParse
, pParse
->pNewIndex
->zName
, &Y
);
1412 %type uniqueflag
{int}
1413 uniqueflag
(A
) ::= UNIQUE.
{A
= OE_Abort
;}
1414 uniqueflag
(A
) ::= .
{A
= OE_None
;}
1417 // The eidlist non-terminal (Expression Id List) generates an ExprList
1418 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1419 // This list is stored in an ExprList rather than an IdList so that it
1420 // can be easily sent to sqlite3ColumnsExprList().
1422 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1423 // used for the arguments to an index. That is just an historical accident.
1425 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1426 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1427 // places - places that might have been stored in the sqlite_schema table.
1428 // Those extra features were ignored. But because they might be in some
1429 // (busted) old databases, we need to continue parsing them when loading
1430 // historical schemas.
1432 %type eidlist
{ExprList
*}
1433 %destructor eidlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1434 %type eidlist_opt
{ExprList
*}
1435 %destructor eidlist_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1438 /* Add a single new term to an ExprList that is used to store a
1439 ** list of identifiers. Report an error if the ID list contains
1440 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1441 ** error while parsing a legacy schema.
1443 static ExprList
*parserAddExprIdListTerm
(
1450 ExprList
*p
= sqlite3ExprListAppend
(pParse
, pPrior
, 0);
1451 if
( (hasCollate || sortOrder
!=SQLITE_SO_UNDEFINED
)
1452 && pParse
->db
->init.busy
==0
1454 sqlite3ErrorMsg
(pParse
, "syntax error after column name \"%.*s\"",
1455 pIdToken
->n
, pIdToken
->z
);
1457 sqlite3ExprListSetName
(pParse
, p
, pIdToken
, 1);
1462 eidlist_opt
(A
) ::= .
{A
= 0;}
1463 eidlist_opt
(A
) ::= LP eidlist
(X
) RP.
{A
= X
;}
1464 eidlist
(A
) ::= eidlist
(A
) COMMA nm
(Y
) collate
(C
) sortorder
(Z
).
{
1465 A
= parserAddExprIdListTerm
(pParse
, A
, &Y
, C
, Z
);
1467 eidlist
(A
) ::= nm
(Y
) collate
(C
) sortorder
(Z
).
{
1468 A
= parserAddExprIdListTerm
(pParse
, 0, &Y
, C
, Z
); /*A-overwrites-Y*/
1472 collate
(C
) ::= .
{C
= 0;}
1473 collate
(C
) ::= COLLATE ids.
{C
= 1;}
1476 ///////////////////////////// The DROP INDEX command /////////////////////////
1478 cmd
::= DROP INDEX ifexists
(E
) fullname
(X
).
{sqlite3DropIndex
(pParse
, X
, E
);}
1480 ///////////////////////////// The VACUUM command /////////////////////////////
1482 %if
!SQLITE_OMIT_VACUUM
&& !SQLITE_OMIT_ATTACH
1484 %destructor vinto
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1485 cmd
::= VACUUM vinto
(Y
).
{sqlite3Vacuum
(pParse
,0,Y
);}
1486 cmd
::= VACUUM nm
(X
) vinto
(Y
).
{sqlite3Vacuum
(pParse
,&X
,Y
);}
1487 vinto
(A
) ::= INTO expr
(X
).
{A
= X
;}
1488 vinto
(A
) ::= .
{A
= 0;}
1491 ///////////////////////////// The PRAGMA command /////////////////////////////
1493 %ifndef SQLITE_OMIT_PRAGMA
1494 cmd
::= PRAGMA nm
(X
) dbnm
(Z
).
{sqlite3Pragma
(pParse
,&X
,&Z
,0,0);}
1495 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) EQ nmnum
(Y
).
{sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,0);}
1496 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) LP nmnum
(Y
) RP.
{sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,0);}
1497 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) EQ minus_num
(Y
).
1498 {sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,1);}
1499 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) LP minus_num
(Y
) RP.
1500 {sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,1);}
1502 nmnum
(A
) ::= plus_num
(A
).
1505 nmnum
(A
) ::= DELETE
(A
).
1506 nmnum
(A
) ::= DEFAULT
(A
).
1507 %endif SQLITE_OMIT_PRAGMA
1508 %token_class number INTEGER|FLOAT.
1509 plus_num
(A
) ::= PLUS number
(X
).
{A
= X
;}
1510 plus_num
(A
) ::= number
(A
).
1511 minus_num
(A
) ::= MINUS number
(X
).
{A
= X
;}
1512 //////////////////////////// The CREATE TRIGGER command /////////////////////
1514 %ifndef SQLITE_OMIT_TRIGGER
1516 cmd
::= createkw trigger_decl
(A
) BEGIN trigger_cmd_list
(S
) END
(Z
).
{
1519 all.n
= (int)(Z.z
- A.z
) + Z.n
;
1520 sqlite3FinishTrigger
(pParse
, S
, &all
);
1523 trigger_decl
(A
) ::= temp
(T
) TRIGGER ifnotexists
(NOERR
) nm
(B
) dbnm
(Z
)
1524 trigger_time
(C
) trigger_event
(D
)
1525 ON fullname
(E
) foreach_clause when_clause
(G
).
{
1526 sqlite3BeginTrigger
(pParse
, &B
, &Z
, C
, D.a
, D.b
, E
, G
, T
, NOERR
);
1527 A
= (Z.n
==0?B
:Z
); /*A-overwrites-T*/
1530 %type trigger_time
{int}
1531 trigger_time
(A
) ::= BEFORE|AFTER
(X
).
{ A
= @X
; /*A-overwrites-X*/ }
1532 trigger_time
(A
) ::= INSTEAD OF.
{ A
= TK_INSTEAD
;}
1533 trigger_time
(A
) ::= .
{ A
= TK_BEFORE
; }
1535 %type trigger_event
{struct TrigEvent
}
1536 %destructor trigger_event
{sqlite3IdListDelete
(pParse
->db
, $$.b
);}
1537 trigger_event
(A
) ::= DELETE|INSERT
(X
).
{A.a
= @X
; /*A-overwrites-X*/ A.b
= 0;}
1538 trigger_event
(A
) ::= UPDATE
(X
).
{A.a
= @X
; /*A-overwrites-X*/ A.b
= 0;}
1539 trigger_event
(A
) ::= UPDATE OF idlist
(X
).
{A.a
= TK_UPDATE
; A.b
= X
;}
1541 foreach_clause
::= .
1542 foreach_clause
::= FOR EACH ROW.
1544 %type when_clause
{Expr
*}
1545 %destructor when_clause
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1546 when_clause
(A
) ::= .
{ A
= 0; }
1547 when_clause
(A
) ::= WHEN expr
(X
).
{ A
= X
; }
1549 %type trigger_cmd_list
{TriggerStep
*}
1550 %destructor trigger_cmd_list
{sqlite3DeleteTriggerStep
(pParse
->db
, $$
);}
1551 trigger_cmd_list
(A
) ::= trigger_cmd_list
(A
) trigger_cmd
(X
) SEMI.
{
1553 A
->pLast
->pNext
= X
;
1556 trigger_cmd_list
(A
) ::= trigger_cmd
(A
) SEMI.
{
1561 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1562 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1563 // the same database as the table that the trigger fires on.
1567 trnm
(A
) ::= nm DOT nm
(X
).
{
1569 sqlite3ErrorMsg
(pParse
,
1570 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1571 "statements within triggers");
1574 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1575 // statements within triggers. We make a specific error message for this
1576 // since it is an exception to the default grammar rules.
1579 tridxby
::= INDEXED BY nm.
{
1580 sqlite3ErrorMsg
(pParse
,
1581 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1584 tridxby
::= NOT INDEXED.
{
1585 sqlite3ErrorMsg
(pParse
,
1586 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1592 %type trigger_cmd
{TriggerStep
*}
1593 %destructor trigger_cmd
{sqlite3DeleteTriggerStep
(pParse
->db
, $$
);}
1596 UPDATE
(B
) orconf
(R
) trnm
(X
) tridxby SET setlist
(Y
) from
(F
) where_opt
(Z
) scanpt
(E
).
1597 {A
= sqlite3TriggerUpdateStep
(pParse
, &X
, F
, Y
, Z
, R
, B.z
, E
);}
1600 trigger_cmd
(A
) ::= scanpt
(B
) insert_cmd
(R
) INTO
1601 trnm
(X
) idlist_opt
(F
) select
(S
) upsert
(U
) scanpt
(Z
).
{
1602 A
= sqlite3TriggerInsertStep
(pParse
,&X
,F
,S
,R
,U
,B
,Z
);/*A-overwrites-R*/
1605 trigger_cmd
(A
) ::= DELETE
(B
) FROM trnm
(X
) tridxby where_opt
(Y
) scanpt
(E
).
1606 {A
= sqlite3TriggerDeleteStep
(pParse
, &X
, Y
, B.z
, E
);}
1609 trigger_cmd
(A
) ::= scanpt
(B
) select
(X
) scanpt
(E
).
1610 {A
= sqlite3TriggerSelectStep
(pParse
->db
, X
, B
, E
); /*A-overwrites-X*/}
1612 // The special RAISE expression that may occur in trigger programs
1613 expr
(A
) ::= RAISE LP IGNORE RP.
{
1614 A
= sqlite3PExpr
(pParse
, TK_RAISE
, 0, 0);
1616 A
->affExpr
= OE_Ignore
;
1619 expr
(A
) ::= RAISE LP raisetype
(T
) COMMA nm
(Z
) RP.
{
1620 A
= sqlite3ExprAlloc
(pParse
->db
, TK_RAISE
, &Z
, 1);
1622 A
->affExpr
= (char)T
;
1625 %endif
!SQLITE_OMIT_TRIGGER
1627 %type raisetype
{int}
1628 raisetype
(A
) ::= ROLLBACK.
{A
= OE_Rollback
;}
1629 raisetype
(A
) ::= ABORT.
{A
= OE_Abort
;}
1630 raisetype
(A
) ::= FAIL.
{A
= OE_Fail
;}
1633 //////////////////////// DROP TRIGGER statement //////////////////////////////
1634 %ifndef SQLITE_OMIT_TRIGGER
1635 cmd
::= DROP TRIGGER ifexists
(NOERR
) fullname
(X
).
{
1636 sqlite3DropTrigger
(pParse
,X
,NOERR
);
1638 %endif
!SQLITE_OMIT_TRIGGER
1640 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1641 %ifndef SQLITE_OMIT_ATTACH
1642 cmd
::= ATTACH database_kw_opt expr
(F
) AS expr
(D
) key_opt
(K
).
{
1643 sqlite3Attach
(pParse
, F
, D
, K
);
1645 cmd
::= DETACH database_kw_opt expr
(D
).
{
1646 sqlite3Detach
(pParse
, D
);
1649 %type key_opt
{Expr
*}
1650 %destructor key_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1651 key_opt
(A
) ::= .
{ A
= 0; }
1652 key_opt
(A
) ::= KEY expr
(X
).
{ A
= X
; }
1654 database_kw_opt
::= DATABASE.
1655 database_kw_opt
::= .
1656 %endif SQLITE_OMIT_ATTACH
1658 ////////////////////////// REINDEX collation //////////////////////////////////
1659 %ifndef SQLITE_OMIT_REINDEX
1660 cmd
::= REINDEX.
{sqlite3Reindex
(pParse
, 0, 0);}
1661 cmd
::= REINDEX nm
(X
) dbnm
(Y
).
{sqlite3Reindex
(pParse
, &X
, &Y
);}
1662 %endif SQLITE_OMIT_REINDEX
1664 /////////////////////////////////// ANALYZE ///////////////////////////////////
1665 %ifndef SQLITE_OMIT_ANALYZE
1666 cmd
::= ANALYZE.
{sqlite3Analyze
(pParse
, 0, 0);}
1667 cmd
::= ANALYZE nm
(X
) dbnm
(Y
).
{sqlite3Analyze
(pParse
, &X
, &Y
);}
1670 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1671 %ifndef SQLITE_OMIT_ALTERTABLE
1672 %ifndef SQLITE_OMIT_VIRTUALTABLE
1673 cmd
::= ALTER TABLE fullname
(X
) RENAME TO nm
(Z
).
{
1674 sqlite3AlterRenameTable
(pParse
,X
,&Z
);
1676 cmd
::= ALTER TABLE add_column_fullname
1677 ADD kwcolumn_opt columnname
(Y
) carglist.
{
1678 Y.n
= (int)(pParse
->sLastToken.z
-Y.z
) + pParse
->sLastToken.n
;
1679 sqlite3AlterFinishAddColumn
(pParse
, &Y
);
1681 cmd
::= ALTER TABLE fullname
(X
) DROP kwcolumn_opt nm
(Y
).
{
1682 sqlite3AlterDropColumn
(pParse
, X
, &Y
);
1685 add_column_fullname
::= fullname
(X
).
{
1686 disableLookaside
(pParse
);
1687 sqlite3AlterBeginAddColumn
(pParse
, X
);
1689 cmd
::= ALTER TABLE fullname
(X
) RENAME kwcolumn_opt nm
(Y
) TO nm
(Z
).
{
1690 sqlite3AlterRenameColumn
(pParse
, X
, &Y
, &Z
);
1694 kwcolumn_opt
::= COLUMNKW.
1696 %endif SQLITE_OMIT_VIRTUALTABLE
1697 %endif SQLITE_OMIT_ALTERTABLE
1699 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1700 %ifndef SQLITE_OMIT_VIRTUALTABLE
1701 cmd
::= create_vtab.
{sqlite3VtabFinishParse
(pParse
,0);}
1702 cmd
::= create_vtab LP vtabarglist RP
(X
).
{sqlite3VtabFinishParse
(pParse
,&X
);}
1703 create_vtab
::= createkw VIRTUAL TABLE ifnotexists
(E
)
1704 nm
(X
) dbnm
(Y
) USING nm
(Z
).
{
1705 sqlite3VtabBeginParse
(pParse
, &X
, &Y
, &Z
, E
);
1707 vtabarglist
::= vtabarg.
1708 vtabarglist
::= vtabarglist COMMA vtabarg.
1709 vtabarg
::= .
{sqlite3VtabArgInit
(pParse
);}
1710 vtabarg
::= vtabarg vtabargtoken.
1711 vtabargtoken
::= ANY
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1712 vtabargtoken
::= lp anylist RP
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1713 lp
::= LP
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1715 anylist
::= anylist LP anylist RP.
1716 anylist
::= anylist ANY.
1717 %endif SQLITE_OMIT_VIRTUALTABLE
1720 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1721 %type wqlist
{With
*}
1722 %destructor wqlist
{sqlite3WithDelete
(pParse
->db
, $$
);}
1724 // %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable
1727 %ifndef SQLITE_OMIT_CTE
1728 with
::= WITH wqlist
(W
).
{ sqlite3WithPush
(pParse
, W
, 1); }
1729 with
::= WITH RECURSIVE wqlist
(W
).
{ sqlite3WithPush
(pParse
, W
, 1); }
1732 wqas
(A
) ::= AS.
{A
= M10d_Any
;}
1733 wqas
(A
) ::= AS MATERIALIZED.
{A
= M10d_Yes
;}
1734 wqas
(A
) ::= AS NOT MATERIALIZED.
{A
= M10d_No
;}
1735 wqitem
(A
) ::= nm
(X
) eidlist_opt
(Y
) wqas
(M
) LP select
(Z
) RP.
{
1736 A
= sqlite3CteNew
(pParse
, &X
, Y
, Z
, M
); /*A-overwrites-X*/
1738 wqlist
(A
) ::= wqitem
(X
).
{
1739 A
= sqlite3WithAdd
(pParse
, 0, X
); /*A-overwrites-X*/
1741 wqlist
(A
) ::= wqlist
(A
) COMMA wqitem
(X
).
{
1742 A
= sqlite3WithAdd
(pParse
, A
, X
);
1744 %endif SQLITE_OMIT_CTE
1746 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1747 // These must be at the end of this file. Specifically, the rules that
1748 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1749 // the integer values assigned to these tokens to be larger than all other
1750 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1752 %ifndef SQLITE_OMIT_WINDOWFUNC
1753 %type windowdefn_list
{Window
*}
1754 %destructor windowdefn_list
{sqlite3WindowListDelete
(pParse
->db
, $$
);}
1755 windowdefn_list
(A
) ::= windowdefn
(Z
).
{ A
= Z
; }
1756 windowdefn_list
(A
) ::= windowdefn_list
(Y
) COMMA windowdefn
(Z
).
{
1758 sqlite3WindowChain
(pParse
, Z
, Y
);
1763 %type windowdefn
{Window
*}
1764 %destructor windowdefn
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1765 windowdefn
(A
) ::= nm
(X
) AS LP window
(Y
) RP.
{
1767 Y
->zName
= sqlite3DbStrNDup
(pParse
->db
, X.z
, X.n
);
1772 %type window
{Window
*}
1773 %destructor window
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1775 %type frame_opt
{Window
*}
1776 %destructor frame_opt
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1778 %type part_opt
{ExprList
*}
1779 %destructor part_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1781 %type filter_clause
{Expr
*}
1782 %destructor filter_clause
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1784 %type over_clause
{Window
*}
1785 %destructor over_clause
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1787 %type filter_over
{Window
*}
1788 %destructor filter_over
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1790 %type range_or_rows
{int}
1792 %type frame_bound
{struct FrameBound
}
1793 %destructor frame_bound
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1794 %type frame_bound_s
{struct FrameBound
}
1795 %destructor frame_bound_s
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1796 %type frame_bound_e
{struct FrameBound
}
1797 %destructor frame_bound_e
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1799 window
(A
) ::= PARTITION BY nexprlist
(X
) orderby_opt
(Y
) frame_opt
(Z
).
{
1800 A
= sqlite3WindowAssemble
(pParse
, Z
, X
, Y
, 0);
1802 window
(A
) ::= nm
(W
) PARTITION BY nexprlist
(X
) orderby_opt
(Y
) frame_opt
(Z
).
{
1803 A
= sqlite3WindowAssemble
(pParse
, Z
, X
, Y
, &W
);
1805 window
(A
) ::= ORDER BY sortlist
(Y
) frame_opt
(Z
).
{
1806 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, Y
, 0);
1808 window
(A
) ::= nm
(W
) ORDER BY sortlist
(Y
) frame_opt
(Z
).
{
1809 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, Y
, &W
);
1811 window
(A
) ::= frame_opt
(Z
).
{
1814 window
(A
) ::= nm
(W
) frame_opt
(Z
).
{
1815 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, 0, &W
);
1818 frame_opt
(A
) ::= .
{
1819 A
= sqlite3WindowAlloc
(pParse
, 0, TK_UNBOUNDED
, 0, TK_CURRENT
, 0, 0);
1821 frame_opt
(A
) ::= range_or_rows
(X
) frame_bound_s
(Y
) frame_exclude_opt
(Z
).
{
1822 A
= sqlite3WindowAlloc
(pParse
, X
, Y.eType
, Y.pExpr
, TK_CURRENT
, 0, Z
);
1824 frame_opt
(A
) ::= range_or_rows
(X
) BETWEEN frame_bound_s
(Y
) AND
1825 frame_bound_e
(Z
) frame_exclude_opt
(W
).
{
1826 A
= sqlite3WindowAlloc
(pParse
, X
, Y.eType
, Y.pExpr
, Z.eType
, Z.pExpr
, W
);
1829 range_or_rows
(A
) ::= RANGE|ROWS|GROUPS
(X
).
{A
= @X
; /*A-overwrites-X*/}
1831 frame_bound_s
(A
) ::= frame_bound
(X
).
{A
= X
;}
1832 frame_bound_s
(A
) ::= UNBOUNDED
(X
) PRECEDING.
{A.eType
= @X
; A.pExpr
= 0;}
1833 frame_bound_e
(A
) ::= frame_bound
(X
).
{A
= X
;}
1834 frame_bound_e
(A
) ::= UNBOUNDED
(X
) FOLLOWING.
{A.eType
= @X
; A.pExpr
= 0;}
1836 frame_bound
(A
) ::= expr
(X
) PRECEDING|FOLLOWING
(Y
).
1837 {A.eType
= @Y
; A.pExpr
= X
;}
1838 frame_bound
(A
) ::= CURRENT
(X
) ROW.
{A.eType
= @X
; A.pExpr
= 0;}
1840 %type frame_exclude_opt
{u8
}
1841 frame_exclude_opt
(A
) ::= .
{A
= 0;}
1842 frame_exclude_opt
(A
) ::= EXCLUDE frame_exclude
(X
).
{A
= X
;}
1844 %type frame_exclude
{u8
}
1845 frame_exclude
(A
) ::= NO
(X
) OTHERS.
{A
= @X
; /*A-overwrites-X*/}
1846 frame_exclude
(A
) ::= CURRENT
(X
) ROW.
{A
= @X
; /*A-overwrites-X*/}
1847 frame_exclude
(A
) ::= GROUP|TIES
(X
).
{A
= @X
; /*A-overwrites-X*/}
1850 %type window_clause
{Window
*}
1851 %destructor window_clause
{sqlite3WindowListDelete
(pParse
->db
, $$
);}
1852 window_clause
(A
) ::= WINDOW windowdefn_list
(B
).
{ A
= B
; }
1854 filter_over
(A
) ::= filter_clause
(F
) over_clause
(O
).
{
1858 sqlite3ExprDelete
(pParse
->db
, F
);
1862 filter_over
(A
) ::= over_clause
(O
).
{
1865 filter_over
(A
) ::= filter_clause
(F
).
{
1866 A
= (Window
*)sqlite3DbMallocZero
(pParse
->db
, sizeof
(Window
));
1868 A
->eFrmType
= TK_FILTER
;
1871 sqlite3ExprDelete
(pParse
->db
, F
);
1875 over_clause
(A
) ::= OVER LP window
(Z
) RP.
{
1879 over_clause
(A
) ::= OVER nm
(Z
).
{
1880 A
= (Window
*)sqlite3DbMallocZero
(pParse
->db
, sizeof
(Window
));
1882 A
->zName
= sqlite3DbStrNDup
(pParse
->db
, Z.z
, Z.n
);
1886 filter_clause
(A
) ::= FILTER LP WHERE expr
(X
) RP.
{ A
= X
; }
1887 %endif
/* SQLITE_OMIT_WINDOWFUNC */
1890 ** The code generator needs some extra TK_ token values for tokens that
1891 ** are synthesized and do not actually appear in the grammar:
1894 COLUMN
/* Reference to a table column */
1895 AGG_FUNCTION
/* An aggregate function */
1896 AGG_COLUMN
/* An aggregated column */
1897 TRUEFALSE
/* True or false keyword */
1898 ISNOT
/* Combination of IS and NOT */
1899 FUNCTION
/* A function invocation */
1900 UMINUS
/* Unary minus */
1901 UPLUS
/* Unary plus */
1902 TRUTH
/* IS TRUE or IS FALSE or IS NOT TRUE or IS NOT FALSE */
1903 REGISTER
/* Reference to a VDBE register */
1905 SELECT_COLUMN
/* Choose a single column from a multi-column SELECT */
1906 IF_NULL_ROW
/* the if-null-row operator */
1907 ASTERISK
/* The "*" in count(*) and similar */
1908 SPAN
/* The span operator */
1909 ERROR
/* An expression containing an error */
1911 /* There must be no more than 255 tokens defined above. If this grammar
1912 ** is extended with new rules and tokens, they must either be so few in
1913 ** number that TK_SPAN is no more than 255, or else the new tokens must
1914 ** appear after this line.
1918 # error too many tokens in the grammar
1923 ** The TK_SPACE and TK_ILLEGAL tokens must be the last two tokens. The
1924 ** parser depends on this. Those tokens are not used in any grammar rule.
1925 ** They are only used by the tokenizer. Declare them last so that they
1926 ** are guaranteed to be the last two tokens
1928 %token SPACE ILLEGAL.