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 grammar. 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.
{ if
( pParse
->pReprepare
==0 ) pParse
->explain
= 1; }
152 explain
::= EXPLAIN QUERY PLAN.
{ if
( pParse
->pReprepare
==0 ) 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 grammar. 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.
299 // And "ids" is an identifer-or-string.
301 %token_class ids ID|STRING.
303 // An identifier or a join-keyword
305 %token_class idj ID|INDEXED|JOIN_KW.
307 // The name of a column or table can be any of the following:
313 // A typetoken is really zero or more tokens that form a type name such
314 // as can be found after the column name in a CREATE TABLE statement.
315 // Multiple tokens are concatenated to form the value of the typetoken.
317 %type typetoken
{Token
}
318 typetoken
(A
) ::= .
{A.n
= 0; A.z
= 0;}
319 typetoken
(A
) ::= typename
(A
).
320 typetoken
(A
) ::= typename
(A
) LP
signed RP
(Y
).
{
321 A.n
= (int)(&Y.z
[Y.n
] - A.z
);
323 typetoken
(A
) ::= typename
(A
) LP
signed COMMA
signed RP
(Y
).
{
324 A.n
= (int)(&Y.z
[Y.n
] - A.z
);
326 %type typename
{Token
}
327 typename
(A
) ::= ids
(A
).
328 typename
(A
) ::= typename
(A
) ids
(Y
).
{A.n
=Y.n
+(int)(Y.z
-A.z
);}
330 signed ::= minus_num.
332 // The scanpt non-terminal takes a value which is a pointer to the
333 // input text just past the last token that has been shifted into
334 // the parser. By surrounding some phrase in the grammar with two
335 // scanpt non-terminals, we can capture the input text for that phrase.
338 // something ::= .... scanpt(A) phrase scanpt(Z).
340 // The text that is parsed as "phrase" is a string starting at A
341 // and containing (int)(Z-A) characters. There might be some extra
342 // whitespace on either end of the text, but that can be removed in
343 // post-processing, if needed.
345 %type scanpt
{const char*}
347 assert
( yyLookahead
!=YYNOCODE
);
348 A
= yyLookaheadToken.z
;
351 assert
( yyLookahead
!=YYNOCODE
);
352 A
= yyLookaheadToken
;
355 // "carglist" is a list of additional constraints that come after the
356 // column name and column type in a CREATE TABLE statement.
358 carglist
::= carglist ccons.
360 ccons
::= CONSTRAINT nm
(X
).
{pParse
->constraintName
= X
;}
361 ccons
::= DEFAULT scantok
(A
) term
(X
).
362 {sqlite3AddDefaultValue
(pParse
,X
,A.z
,&A.z
[A.n
]);}
363 ccons
::= DEFAULT LP
(A
) expr
(X
) RP
(Z
).
364 {sqlite3AddDefaultValue
(pParse
,X
,A.z
+1,Z.z
);}
365 ccons
::= DEFAULT PLUS
(A
) scantok
(Z
) term
(X
).
366 {sqlite3AddDefaultValue
(pParse
,X
,A.z
,&Z.z
[Z.n
]);}
367 ccons
::= DEFAULT MINUS
(A
) scantok
(Z
) term
(X
).
{
368 Expr
*p
= sqlite3PExpr
(pParse
, TK_UMINUS
, X
, 0);
369 sqlite3AddDefaultValue
(pParse
,p
,A.z
,&Z.z
[Z.n
]);
371 ccons
::= DEFAULT scantok id
(X
).
{
372 Expr
*p
= tokenExpr
(pParse
, TK_STRING
, X
);
374 sqlite3ExprIdToTrueFalse
(p
);
375 testcase
( p
->op
==TK_TRUEFALSE
&& sqlite3ExprTruthValue
(p
) );
377 sqlite3AddDefaultValue
(pParse
,p
,X.z
,X.z
+X.n
);
380 // In addition to the type name, we also care about the primary key and
381 // UNIQUE constraints.
383 ccons
::= NULL onconf.
384 ccons
::= NOT NULL onconf
(R
).
{sqlite3AddNotNull
(pParse
, R
);}
385 ccons
::= PRIMARY KEY sortorder
(Z
) onconf
(R
) autoinc
(I
).
386 {sqlite3AddPrimaryKey
(pParse
,0,R
,I
,Z
);}
387 ccons
::= UNIQUE onconf
(R
).
{sqlite3CreateIndex
(pParse
,0,0,0,0,R
,0,0,0,0,
388 SQLITE_IDXTYPE_UNIQUE
);}
389 ccons
::= CHECK LP
(A
) expr
(X
) RP
(B
).
{sqlite3AddCheckConstraint
(pParse
,X
,A.z
,B.z
);}
390 ccons
::= REFERENCES nm
(T
) eidlist_opt
(TA
) refargs
(R
).
391 {sqlite3CreateForeignKey
(pParse
,0,&T
,TA
,R
);}
392 ccons
::= defer_subclause
(D
).
{sqlite3DeferForeignKey
(pParse
,D
);}
393 ccons
::= COLLATE ids
(C
).
{sqlite3AddCollateType
(pParse
, &C
);}
394 ccons
::= GENERATED ALWAYS AS generated.
395 ccons
::= AS generated.
396 generated
::= LP expr
(E
) RP.
{sqlite3AddGenerated
(pParse
,E
,0);}
397 generated
::= LP expr
(E
) RP ID
(TYPE
).
{sqlite3AddGenerated
(pParse
,E
,&TYPE
);}
399 // The optional AUTOINCREMENT keyword
401 autoinc
(X
) ::= .
{X
= 0;}
402 autoinc
(X
) ::= AUTOINCR.
{X
= 1;}
404 // The next group of rules parses the arguments to a REFERENCES clause
405 // that determine if the referential integrity checking is deferred or
406 // or immediate and which determine what action to take if a ref-integ
410 refargs
(A
) ::= .
{ A
= OE_None
*0x0101; /* EV: R-19803-45884 */}
411 refargs
(A
) ::= refargs
(A
) refarg
(Y
).
{ A
= (A
& ~Y.mask
) | Y.value
; }
412 %type refarg
{struct {int value
; int mask
;}}
413 refarg
(A
) ::= MATCH nm.
{ A.value
= 0; A.mask
= 0x000000; }
414 refarg
(A
) ::= ON INSERT refact.
{ A.value
= 0; A.mask
= 0x000000; }
415 refarg
(A
) ::= ON DELETE refact
(X
).
{ A.value
= X
; A.mask
= 0x0000ff; }
416 refarg
(A
) ::= ON UPDATE refact
(X
).
{ A.value
= X
<<8; A.mask
= 0x00ff00; }
418 refact
(A
) ::= SET NULL.
{ A
= OE_SetNull
; /* EV: R-33326-45252 */}
419 refact
(A
) ::= SET DEFAULT.
{ A
= OE_SetDflt
; /* EV: R-33326-45252 */}
420 refact
(A
) ::= CASCADE.
{ A
= OE_Cascade
; /* EV: R-33326-45252 */}
421 refact
(A
) ::= RESTRICT.
{ A
= OE_Restrict
; /* EV: R-33326-45252 */}
422 refact
(A
) ::= NO ACTION.
{ A
= OE_None
; /* EV: R-33326-45252 */}
423 %type defer_subclause
{int}
424 defer_subclause
(A
) ::= NOT DEFERRABLE init_deferred_pred_opt.
{A
= 0;}
425 defer_subclause
(A
) ::= DEFERRABLE init_deferred_pred_opt
(X
).
{A
= X
;}
426 %type init_deferred_pred_opt
{int}
427 init_deferred_pred_opt
(A
) ::= .
{A
= 0;}
428 init_deferred_pred_opt
(A
) ::= INITIALLY DEFERRED.
{A
= 1;}
429 init_deferred_pred_opt
(A
) ::= INITIALLY IMMEDIATE.
{A
= 0;}
431 conslist_opt
(A
) ::= .
{A.n
= 0; A.z
= 0;}
432 conslist_opt
(A
) ::= COMMA
(A
) conslist.
433 conslist
::= conslist tconscomma tcons.
435 tconscomma
::= COMMA.
{pParse
->constraintName.n
= 0;}
437 tcons
::= CONSTRAINT nm
(X
).
{pParse
->constraintName
= X
;}
438 tcons
::= PRIMARY KEY LP sortlist
(X
) autoinc
(I
) RP onconf
(R
).
439 {sqlite3AddPrimaryKey
(pParse
,X
,R
,I
,0);}
440 tcons
::= UNIQUE LP sortlist
(X
) RP onconf
(R
).
441 {sqlite3CreateIndex
(pParse
,0,0,0,X
,R
,0,0,0,0,
442 SQLITE_IDXTYPE_UNIQUE
);}
443 tcons
::= CHECK LP
(A
) expr
(E
) RP
(B
) onconf.
444 {sqlite3AddCheckConstraint
(pParse
,E
,A.z
,B.z
);}
445 tcons
::= FOREIGN KEY LP eidlist
(FA
) RP
446 REFERENCES nm
(T
) eidlist_opt
(TA
) refargs
(R
) defer_subclause_opt
(D
).
{
447 sqlite3CreateForeignKey
(pParse
, FA
, &T
, TA
, R
);
448 sqlite3DeferForeignKey
(pParse
, D
);
450 %type defer_subclause_opt
{int}
451 defer_subclause_opt
(A
) ::= .
{A
= 0;}
452 defer_subclause_opt
(A
) ::= defer_subclause
(A
).
454 // The following is a non-standard extension that allows us to declare the
455 // default behavior when there is a constraint conflict.
459 %type resolvetype
{int}
460 onconf
(A
) ::= .
{A
= OE_Default
;}
461 onconf
(A
) ::= ON CONFLICT resolvetype
(X
).
{A
= X
;}
462 orconf
(A
) ::= .
{A
= OE_Default
;}
463 orconf
(A
) ::= OR resolvetype
(X
).
{A
= X
;}
464 resolvetype
(A
) ::= raisetype
(A
).
465 resolvetype
(A
) ::= IGNORE.
{A
= OE_Ignore
;}
466 resolvetype
(A
) ::= REPLACE.
{A
= OE_Replace
;}
468 ////////////////////////// The DROP TABLE /////////////////////////////////////
470 cmd
::= DROP TABLE ifexists
(E
) fullname
(X
).
{
471 sqlite3DropTable
(pParse
, X
, 0, E
);
474 ifexists
(A
) ::= IF EXISTS.
{A
= 1;}
475 ifexists
(A
) ::= .
{A
= 0;}
477 ///////////////////// The CREATE VIEW statement /////////////////////////////
479 %ifndef SQLITE_OMIT_VIEW
480 cmd
::= createkw
(X
) temp
(T
) VIEW ifnotexists
(E
) nm
(Y
) dbnm
(Z
) eidlist_opt
(C
)
482 sqlite3CreateView
(pParse
, &X
, &Y
, &Z
, C
, S
, T
, E
);
484 cmd
::= DROP VIEW ifexists
(E
) fullname
(X
).
{
485 sqlite3DropTable
(pParse
, X
, 1, E
);
487 %endif SQLITE_OMIT_VIEW
489 //////////////////////// The SELECT statement /////////////////////////////////
492 SelectDest dest
= {SRT_Output
, 0, 0, 0, 0, 0, 0};
493 sqlite3Select
(pParse
, X
, &dest
);
494 sqlite3SelectDelete
(pParse
->db
, X
);
497 %type select
{Select
*}
498 %destructor select
{sqlite3SelectDelete
(pParse
->db
, $$
);}
499 %type selectnowith
{Select
*}
500 %destructor selectnowith
{sqlite3SelectDelete
(pParse
->db
, $$
);}
501 %type oneselect
{Select
*}
502 %destructor oneselect
{sqlite3SelectDelete
(pParse
->db
, $$
);}
506 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
507 ** all elements in the list. And make sure list length does not exceed
508 ** SQLITE_LIMIT_COMPOUND_SELECT.
510 static void parserDoubleLinkSelect
(Parse
*pParse
, Select
*p
){
513 Select
*pNext
= 0, *pLoop
= p
;
514 int mxSelect
, cnt
= 1;
516 pLoop
->pNext
= pNext
;
517 pLoop
->selFlags |
= SF_Compound
;
519 pLoop
= pLoop
->pPrior
;
520 if
( pLoop
==0 ) break
;
522 if
( pLoop
->pOrderBy || pLoop
->pLimit
){
523 sqlite3ErrorMsg
(pParse
,"%s clause should come after %s not before",
524 pLoop
->pOrderBy
!=0 ?
"ORDER BY" : "LIMIT",
525 sqlite3SelectOpName
(pNext
->op
));
529 if
( (p
->selFlags
& SF_MultiValue
)==0 &&
530 (mxSelect
= pParse
->db
->aLimit
[SQLITE_LIMIT_COMPOUND_SELECT
])>0 &&
533 sqlite3ErrorMsg
(pParse
, "too many terms in compound SELECT");
538 /* Attach a With object describing the WITH clause to a Select
539 ** object describing the query for which the WITH clause is a prefix.
541 static Select
*attachWithToSelect
(Parse
*pParse
, Select
*pSelect
, With
*pWith
){
543 pSelect
->pWith
= pWith
;
544 parserDoubleLinkSelect
(pParse
, pSelect
);
546 sqlite3WithDelete
(pParse
->db
, pWith
);
552 %ifndef SQLITE_OMIT_CTE
553 select
(A
) ::= WITH wqlist
(W
) selectnowith
(X
).
{A
= attachWithToSelect
(pParse
,X
,W
);}
554 select
(A
) ::= WITH RECURSIVE wqlist
(W
) selectnowith
(X
).
555 {A
= attachWithToSelect
(pParse
,X
,W
);}
556 %endif
/* SQLITE_OMIT_CTE */
557 select
(A
) ::= selectnowith
(A
).
{
560 parserDoubleLinkSelect
(pParse
, p
);
564 selectnowith
(A
) ::= oneselect
(A
).
565 %ifndef SQLITE_OMIT_COMPOUND_SELECT
566 selectnowith
(A
) ::= selectnowith
(A
) multiselect_op
(Y
) oneselect
(Z
).
{
569 if
( pRhs
&& pRhs
->pPrior
){
573 parserDoubleLinkSelect
(pParse
, pRhs
);
574 pFrom
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&x
,pRhs
,0);
575 pRhs
= sqlite3SelectNew
(pParse
,0,pFrom
,0,0,0,0,0,0);
580 if
( ALWAYS
(pLhs
) ) pLhs
->selFlags
&= ~SF_MultiValue
;
581 pRhs
->selFlags
&= ~SF_MultiValue
;
582 if
( Y
!=TK_ALL
) pParse
->hasCompound
= 1;
584 sqlite3SelectDelete
(pParse
->db
, pLhs
);
588 %type multiselect_op
{int}
589 multiselect_op
(A
) ::= UNION
(OP
).
{A
= @OP
; /*A-overwrites-OP*/}
590 multiselect_op
(A
) ::= UNION ALL.
{A
= TK_ALL
;}
591 multiselect_op
(A
) ::= EXCEPT|INTERSECT
(OP
).
{A
= @OP
; /*A-overwrites-OP*/}
592 %endif SQLITE_OMIT_COMPOUND_SELECT
594 oneselect
(A
) ::= SELECT distinct
(D
) selcollist
(W
) from
(X
) where_opt
(Y
)
595 groupby_opt
(P
) having_opt
(Q
)
596 orderby_opt
(Z
) limit_opt
(L
).
{
597 A
= sqlite3SelectNew
(pParse
,W
,X
,Y
,P
,Q
,Z
,D
,L
);
599 %ifndef SQLITE_OMIT_WINDOWFUNC
600 oneselect
(A
) ::= SELECT distinct
(D
) selcollist
(W
) from
(X
) where_opt
(Y
)
601 groupby_opt
(P
) having_opt
(Q
) window_clause
(R
)
602 orderby_opt
(Z
) limit_opt
(L
).
{
603 A
= sqlite3SelectNew
(pParse
,W
,X
,Y
,P
,Q
,Z
,D
,L
);
607 sqlite3WindowListDelete
(pParse
->db
, R
);
613 oneselect
(A
) ::= values
(A
).
615 %type values
{Select
*}
616 %destructor values
{sqlite3SelectDelete
(pParse
->db
, $$
);}
617 values
(A
) ::= VALUES LP nexprlist
(X
) RP.
{
618 A
= sqlite3SelectNew
(pParse
,X
,0,0,0,0,0,SF_Values
,0);
620 values
(A
) ::= values
(A
) COMMA LP nexprlist
(Y
) RP.
{
621 Select
*pRight
, *pLeft
= A
;
622 pRight
= sqlite3SelectNew
(pParse
,Y
,0,0,0,0,0,SF_Values|SF_MultiValue
,0);
623 if
( ALWAYS
(pLeft
) ) pLeft
->selFlags
&= ~SF_MultiValue
;
626 pRight
->pPrior
= pLeft
;
633 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
634 // present and false (0) if it is not.
637 distinct
(A
) ::= DISTINCT.
{A
= SF_Distinct
;}
638 distinct
(A
) ::= ALL.
{A
= SF_All
;}
639 distinct
(A
) ::= .
{A
= 0;}
641 // selcollist is a list of expressions that are to become the return
642 // values of the SELECT statement. The "*" in statements like
643 // "SELECT * FROM ..." is encoded as a special expression with an
644 // opcode of TK_ASTERISK.
646 %type selcollist
{ExprList
*}
647 %destructor selcollist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
648 %type sclp
{ExprList
*}
649 %destructor sclp
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
650 sclp
(A
) ::= selcollist
(A
) COMMA.
651 sclp
(A
) ::= .
{A
= 0;}
652 selcollist
(A
) ::= sclp
(A
) scanpt
(B
) expr
(X
) scanpt
(Z
) as
(Y
).
{
653 A
= sqlite3ExprListAppend
(pParse
, A
, X
);
654 if
( Y.n
>0 ) sqlite3ExprListSetName
(pParse
, A
, &Y
, 1);
655 sqlite3ExprListSetSpan
(pParse
,A
,B
,Z
);
657 selcollist
(A
) ::= sclp
(A
) scanpt STAR
(X
).
{
658 Expr
*p
= sqlite3Expr
(pParse
->db
, TK_ASTERISK
, 0);
659 sqlite3ExprSetErrorOffset
(p
, (int)(X.z
- pParse
->zTail
));
660 A
= sqlite3ExprListAppend
(pParse
, A
, p
);
662 selcollist
(A
) ::= sclp
(A
) scanpt nm
(X
) DOT STAR
(Y
).
{
663 Expr
*pRight
, *pLeft
, *pDot
;
664 pRight
= sqlite3PExpr
(pParse
, TK_ASTERISK
, 0, 0);
665 sqlite3ExprSetErrorOffset
(pRight
, (int)(Y.z
- pParse
->zTail
));
666 pLeft
= tokenExpr
(pParse
, TK_ID
, X
);
667 pDot
= sqlite3PExpr
(pParse
, TK_DOT
, pLeft
, pRight
);
668 A
= sqlite3ExprListAppend
(pParse
,A
, pDot
);
671 // An option "AS <id>" phrase that can follow one of the expressions that
672 // define the result set, or one of the tables in the FROM clause.
675 as
(X
) ::= AS nm
(Y
).
{X
= Y
;}
677 as
(X
) ::= .
{X.n
= 0; X.z
= 0;}
680 %type seltablist
{SrcList
*}
681 %destructor seltablist
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
682 %type stl_prefix
{SrcList
*}
683 %destructor stl_prefix
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
684 %type from
{SrcList
*}
685 %destructor from
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
687 // A complete FROM clause.
689 from
(A
) ::= .
{A
= 0;}
690 from
(A
) ::= FROM seltablist
(X
).
{
692 sqlite3SrcListShiftJoinType
(pParse
,A
);
695 // "seltablist" is a "Select Table List" - the content of the FROM clause
696 // in a SELECT statement. "stl_prefix" is a prefix of this list.
698 stl_prefix
(A
) ::= seltablist
(A
) joinop
(Y
).
{
699 if
( ALWAYS
(A
&& A
->nSrc
>0) ) A
->a
[A
->nSrc
-1].fg.jointype
= (u8
)Y
;
701 stl_prefix
(A
) ::= .
{A
= 0;}
702 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) as
(Z
) on_using
(N
).
{
703 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
705 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) as
(Z
) indexed_by
(I
) on_using
(N
).
{
706 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
707 sqlite3SrcListIndexedBy
(pParse
, A
, &I
);
709 seltablist
(A
) ::= stl_prefix
(A
) nm
(Y
) dbnm
(D
) LP exprlist
(E
) RP as
(Z
) on_using
(N
).
{
710 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,&Y
,&D
,&Z
,0,&N
);
711 sqlite3SrcListFuncArgs
(pParse
, A
, E
);
713 %ifndef SQLITE_OMIT_SUBQUERY
714 seltablist
(A
) ::= stl_prefix
(A
) LP select
(S
) RP as
(Z
) on_using
(N
).
{
715 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,S
,&N
);
717 seltablist
(A
) ::= stl_prefix
(A
) LP seltablist
(F
) RP as
(Z
) on_using
(N
).
{
718 if
( A
==0 && Z.n
==0 && N.pOn
==0 && N.pUsing
==0 ){
720 }else if
( ALWAYS
(F
!=0) && F
->nSrc
==1 ){
721 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,0,&N
);
723 SrcItem
*pNew
= &A
->a
[A
->nSrc
-1];
724 SrcItem
*pOld
= F
->a
;
725 pNew
->zName
= pOld
->zName
;
726 pNew
->zDatabase
= pOld
->zDatabase
;
727 pNew
->pSelect
= pOld
->pSelect
;
728 if
( pNew
->pSelect
&& (pNew
->pSelect
->selFlags
& SF_NestedFrom
)!=0 ){
729 pNew
->fg.isNestedFrom
= 1;
731 if
( pOld
->fg.isTabFunc
){
732 pNew
->u1.pFuncArg
= pOld
->u1.pFuncArg
;
733 pOld
->u1.pFuncArg
= 0;
734 pOld
->fg.isTabFunc
= 0;
735 pNew
->fg.isTabFunc
= 1;
737 pOld
->zName
= pOld
->zDatabase
= 0;
740 sqlite3SrcListDelete
(pParse
->db
, F
);
743 sqlite3SrcListShiftJoinType
(pParse
,F
);
744 pSubquery
= sqlite3SelectNew
(pParse
,0,F
,0,0,0,0,SF_NestedFrom
,0);
745 A
= sqlite3SrcListAppendFromTerm
(pParse
,A
,0,0,&Z
,pSubquery
,&N
);
748 %endif SQLITE_OMIT_SUBQUERY
751 dbnm
(A
) ::= .
{A.z
=0; A.n
=0;}
752 dbnm
(A
) ::= DOT nm
(X
).
{A
= X
;}
754 %type fullname
{SrcList
*}
755 %destructor fullname
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
756 fullname
(A
) ::= nm
(X
).
{
757 A
= sqlite3SrcListAppend
(pParse
,0,&X
,0);
758 if
( IN_RENAME_OBJECT
&& A
) sqlite3RenameTokenMap
(pParse
, A
->a
[0].zName
, &X
);
760 fullname
(A
) ::= nm
(X
) DOT nm
(Y
).
{
761 A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
);
762 if
( IN_RENAME_OBJECT
&& A
) sqlite3RenameTokenMap
(pParse
, A
->a
[0].zName
, &Y
);
765 %type xfullname
{SrcList
*}
766 %destructor xfullname
{sqlite3SrcListDelete
(pParse
->db
, $$
);}
767 xfullname
(A
) ::= nm
(X
).
768 {A
= sqlite3SrcListAppend
(pParse
,0,&X
,0); /*A-overwrites-X*/}
769 xfullname
(A
) ::= nm
(X
) DOT nm
(Y
).
770 {A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
); /*A-overwrites-X*/}
771 xfullname
(A
) ::= nm
(X
) DOT nm
(Y
) AS nm
(Z
).
{
772 A
= sqlite3SrcListAppend
(pParse
,0,&X
,&Y
); /*A-overwrites-X*/
773 if
( A
) A
->a
[0].zAlias
= sqlite3NameFromToken
(pParse
->db
, &Z
);
775 xfullname
(A
) ::= nm
(X
) AS nm
(Z
).
{
776 A
= sqlite3SrcListAppend
(pParse
,0,&X
,0); /*A-overwrites-X*/
777 if
( A
) A
->a
[0].zAlias
= sqlite3NameFromToken
(pParse
->db
, &Z
);
781 joinop
(X
) ::= COMMA|JOIN.
{ X
= JT_INNER
; }
782 joinop
(X
) ::= JOIN_KW
(A
) JOIN.
783 {X
= sqlite3JoinType
(pParse
,&A
,0,0); /*X-overwrites-A*/}
784 joinop
(X
) ::= JOIN_KW
(A
) nm
(B
) JOIN.
785 {X
= sqlite3JoinType
(pParse
,&A
,&B
,0); /*X-overwrites-A*/}
786 joinop
(X
) ::= JOIN_KW
(A
) nm
(B
) nm
(C
) JOIN.
787 {X
= sqlite3JoinType
(pParse
,&A
,&B
,&C
);/*X-overwrites-A*/}
789 // There is a parsing abiguity in an upsert statement that uses a
790 // SELECT on the RHS of a the INSERT:
792 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
795 // When the ON token is encountered, the parser does not know if it is
796 // the beginning of an ON CONFLICT clause, or the beginning of an ON
797 // clause associated with the JOIN. The conflict is resolved in favor
798 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
799 // WHERE clause in between, like this:
801 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
803 // The [AND] and [OR] precedence marks in the rules for on_using cause the
804 // ON in this context to always be interpreted as belonging to the JOIN.
806 %type on_using
{OnOrUsing
}
807 //%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);}
808 on_using
(N
) ::= ON expr
(E
).
{N.pOn
= E
; N.pUsing
= 0;}
809 on_using
(N
) ::= USING LP idlist
(L
) RP.
{N.pOn
= 0; N.pUsing
= L
;}
810 on_using
(N
) ::= .
[OR
] {N.pOn
= 0; N.pUsing
= 0;}
812 // Note that this block abuses the Token type just a little. If there is
813 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
814 // there is an INDEXED BY clause, then the token is populated as per normal,
815 // with z pointing to the token data and n containing the number of bytes
818 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
819 // normally illegal. The sqlite3SrcListIndexedBy() function
820 // recognizes and interprets this as a special case.
822 %type indexed_opt
{Token
}
823 %type indexed_by
{Token
}
824 indexed_opt
(A
) ::= .
{A.z
=0; A.n
=0;}
825 indexed_opt
(A
) ::= indexed_by
(A
).
826 indexed_by
(A
) ::= INDEXED BY nm
(X
).
{A
= X
;}
827 indexed_by
(A
) ::= NOT INDEXED.
{A.z
=0; A.n
=1;}
829 %type orderby_opt
{ExprList
*}
830 %destructor orderby_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
832 // the sortlist non-terminal stores a list of expression where each
833 // expression is optionally followed by ASC or DESC to indicate the
836 %type sortlist
{ExprList
*}
837 %destructor sortlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
839 orderby_opt
(A
) ::= .
{A
= 0;}
840 orderby_opt
(A
) ::= ORDER BY sortlist
(X
).
{A
= X
;}
841 sortlist
(A
) ::= sortlist
(A
) COMMA expr
(Y
) sortorder
(Z
) nulls
(X
).
{
842 A
= sqlite3ExprListAppend
(pParse
,A
,Y
);
843 sqlite3ExprListSetSortOrder
(A
,Z
,X
);
845 sortlist
(A
) ::= expr
(Y
) sortorder
(Z
) nulls
(X
).
{
846 A
= sqlite3ExprListAppend
(pParse
,0,Y
); /*A-overwrites-Y*/
847 sqlite3ExprListSetSortOrder
(A
,Z
,X
);
850 %type sortorder
{int}
852 sortorder
(A
) ::= ASC.
{A
= SQLITE_SO_ASC
;}
853 sortorder
(A
) ::= DESC.
{A
= SQLITE_SO_DESC
;}
854 sortorder
(A
) ::= .
{A
= SQLITE_SO_UNDEFINED
;}
857 nulls
(A
) ::= NULLS FIRST.
{A
= SQLITE_SO_ASC
;}
858 nulls
(A
) ::= NULLS LAST.
{A
= SQLITE_SO_DESC
;}
859 nulls
(A
) ::= .
{A
= SQLITE_SO_UNDEFINED
;}
861 %type groupby_opt
{ExprList
*}
862 %destructor groupby_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
863 groupby_opt
(A
) ::= .
{A
= 0;}
864 groupby_opt
(A
) ::= GROUP BY nexprlist
(X
).
{A
= X
;}
866 %type having_opt
{Expr
*}
867 %destructor having_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
868 having_opt
(A
) ::= .
{A
= 0;}
869 having_opt
(A
) ::= HAVING expr
(X
).
{A
= X
;}
871 %type limit_opt
{Expr
*}
873 // The destructor for limit_opt will never fire in the current grammar.
874 // The limit_opt non-terminal only occurs at the end of a single production
875 // rule for SELECT statements. As soon as the rule that create the
876 // limit_opt non-terminal reduces, the SELECT statement rule will also
877 // reduce. So there is never a limit_opt non-terminal on the stack
878 // except as a transient. So there is never anything to destroy.
880 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
881 limit_opt
(A
) ::= .
{A
= 0;}
882 limit_opt
(A
) ::= LIMIT expr
(X
).
883 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,X
,0);}
884 limit_opt
(A
) ::= LIMIT expr
(X
) OFFSET expr
(Y
).
885 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,X
,Y
);}
886 limit_opt
(A
) ::= LIMIT expr
(X
) COMMA expr
(Y
).
887 {A
= sqlite3PExpr
(pParse
,TK_LIMIT
,Y
,X
);}
889 /////////////////////////// The DELETE statement /////////////////////////////
891 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
892 cmd
::= with DELETE FROM xfullname
(X
) indexed_opt
(I
) where_opt_ret
(W
)
893 orderby_opt
(O
) limit_opt
(L
).
{
894 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
895 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
897 updateDeleteLimitError
(pParse
,O
,L
);
902 sqlite3DeleteFrom
(pParse
,X
,W
,O
,L
);
905 cmd
::= with DELETE FROM xfullname
(X
) indexed_opt
(I
) where_opt_ret
(W
).
{
906 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
907 sqlite3DeleteFrom
(pParse
,X
,W
,0,0);
911 %type where_opt
{Expr
*}
912 %destructor where_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
913 %type where_opt_ret
{Expr
*}
914 %destructor where_opt_ret
{sqlite3ExprDelete
(pParse
->db
, $$
);}
916 where_opt
(A
) ::= .
{A
= 0;}
917 where_opt
(A
) ::= WHERE expr
(X
).
{A
= X
;}
918 where_opt_ret
(A
) ::= .
{A
= 0;}
919 where_opt_ret
(A
) ::= WHERE expr
(X
).
{A
= X
;}
920 where_opt_ret
(A
) ::= RETURNING selcollist
(X
).
921 {sqlite3AddReturning
(pParse
,X
); A
= 0;}
922 where_opt_ret
(A
) ::= WHERE expr
(X
) RETURNING selcollist
(Y
).
923 {sqlite3AddReturning
(pParse
,Y
); A
= X
;}
925 ////////////////////////// The UPDATE command ////////////////////////////////
927 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
928 cmd
::= with UPDATE orconf
(R
) xfullname
(X
) indexed_opt
(I
) SET setlist
(Y
) from
(F
)
929 where_opt_ret
(W
) orderby_opt
(O
) limit_opt
(L
).
{
930 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
932 SrcList
*pFromClause
= F
;
933 if
( pFromClause
->nSrc
>1 ){
936 pSubquery
= sqlite3SelectNew
(pParse
,0,pFromClause
,0,0,0,0,SF_NestedFrom
,0);
939 pFromClause
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&as
,pSubquery
,0);
941 X
= sqlite3SrcListAppendList
(pParse
, X
, pFromClause
);
943 sqlite3ExprListCheckLength
(pParse
,Y
,"set list");
944 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
946 updateDeleteLimitError
(pParse
,O
,L
);
951 sqlite3Update
(pParse
,X
,Y
,W
,R
,O
,L
,0);
954 cmd
::= with UPDATE orconf
(R
) xfullname
(X
) indexed_opt
(I
) SET setlist
(Y
) from
(F
)
956 sqlite3SrcListIndexedBy
(pParse
, X
, &I
);
957 sqlite3ExprListCheckLength
(pParse
,Y
,"set list");
959 SrcList
*pFromClause
= F
;
960 if
( pFromClause
->nSrc
>1 ){
963 pSubquery
= sqlite3SelectNew
(pParse
,0,pFromClause
,0,0,0,0,SF_NestedFrom
,0);
966 pFromClause
= sqlite3SrcListAppendFromTerm
(pParse
,0,0,0,&as
,pSubquery
,0);
968 X
= sqlite3SrcListAppendList
(pParse
, X
, pFromClause
);
970 sqlite3Update
(pParse
,X
,Y
,W
,R
,0,0,0);
976 %type setlist
{ExprList
*}
977 %destructor setlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
979 setlist
(A
) ::= setlist
(A
) COMMA nm
(X
) EQ expr
(Y
).
{
980 A
= sqlite3ExprListAppend
(pParse
, A
, Y
);
981 sqlite3ExprListSetName
(pParse
, A
, &X
, 1);
983 setlist
(A
) ::= setlist
(A
) COMMA LP idlist
(X
) RP EQ expr
(Y
).
{
984 A
= sqlite3ExprListAppendVector
(pParse
, A
, X
, Y
);
986 setlist
(A
) ::= nm
(X
) EQ expr
(Y
).
{
987 A
= sqlite3ExprListAppend
(pParse
, 0, Y
);
988 sqlite3ExprListSetName
(pParse
, A
, &X
, 1);
990 setlist
(A
) ::= LP idlist
(X
) RP EQ expr
(Y
).
{
991 A
= sqlite3ExprListAppendVector
(pParse
, 0, X
, Y
);
994 ////////////////////////// The INSERT command /////////////////////////////////
996 cmd
::= with insert_cmd
(R
) INTO xfullname
(X
) idlist_opt
(F
) select
(S
)
998 sqlite3Insert
(pParse
, X
, S
, F
, R
, U
);
1000 cmd
::= with insert_cmd
(R
) INTO xfullname
(X
) idlist_opt
(F
) DEFAULT VALUES returning.
1002 sqlite3Insert
(pParse
, X
, 0, F
, R
, 0);
1005 %type upsert
{Upsert
*}
1007 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
1008 // there is never a case where the value of the upsert pointer will not
1009 // be destroyed by the cmd action. So comment-out the destructor to
1010 // avoid unreachable code.
1011 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
1012 upsert
(A
) ::= .
{ A
= 0; }
1013 upsert
(A
) ::= RETURNING selcollist
(X
).
{ A
= 0; sqlite3AddReturning
(pParse
,X
); }
1014 upsert
(A
) ::= ON CONFLICT LP sortlist
(T
) RP where_opt
(TW
)
1015 DO UPDATE SET setlist
(Z
) where_opt
(W
) upsert
(N
).
1016 { A
= sqlite3UpsertNew
(pParse
->db
,T
,TW
,Z
,W
,N
);}
1017 upsert
(A
) ::= ON CONFLICT LP sortlist
(T
) RP where_opt
(TW
) DO NOTHING upsert
(N
).
1018 { A
= sqlite3UpsertNew
(pParse
->db
,T
,TW
,0,0,N
); }
1019 upsert
(A
) ::= ON CONFLICT DO NOTHING returning.
1020 { A
= sqlite3UpsertNew
(pParse
->db
,0,0,0,0,0); }
1021 upsert
(A
) ::= ON CONFLICT DO UPDATE SET setlist
(Z
) where_opt
(W
) returning.
1022 { A
= sqlite3UpsertNew
(pParse
->db
,0,0,Z
,W
,0);}
1024 returning
::= RETURNING selcollist
(X
).
{sqlite3AddReturning
(pParse
,X
);}
1027 %type insert_cmd
{int}
1028 insert_cmd
(A
) ::= INSERT orconf
(R
).
{A
= R
;}
1029 insert_cmd
(A
) ::= REPLACE.
{A
= OE_Replace
;}
1031 %type idlist_opt
{IdList
*}
1032 %destructor idlist_opt
{sqlite3IdListDelete
(pParse
->db
, $$
);}
1033 %type idlist
{IdList
*}
1034 %destructor idlist
{sqlite3IdListDelete
(pParse
->db
, $$
);}
1036 idlist_opt
(A
) ::= .
{A
= 0;}
1037 idlist_opt
(A
) ::= LP idlist
(X
) RP.
{A
= X
;}
1038 idlist
(A
) ::= idlist
(A
) COMMA nm
(Y
).
1039 {A
= sqlite3IdListAppend
(pParse
,A
,&Y
);}
1040 idlist
(A
) ::= nm
(Y
).
1041 {A
= sqlite3IdListAppend
(pParse
,0,&Y
); /*A-overwrites-Y*/}
1043 /////////////////////////// Expression Processing /////////////////////////////
1047 %destructor expr
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1049 %destructor term
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1053 /* Construct a new Expr object from a single token */
1054 static Expr
*tokenExpr
(Parse
*pParse
, int op
, Token t
){
1055 Expr
*p
= sqlite3DbMallocRawNN
(pParse
->db
, sizeof
(Expr
)+t.n
+1);
1057 /* memset(p, 0, sizeof(Expr)); */
1061 ExprClearVVAProperties
(p
);
1062 /* p->iAgg = -1; // Not required */
1063 p
->pLeft
= p
->pRight
= 0;
1065 memset
(&p
->x
, 0, sizeof
(p
->x
));
1066 memset
(&p
->y
, 0, sizeof
(p
->y
));
1070 p
->u.zToken
= (char*)&p
[1];
1071 memcpy
(p
->u.zToken
, t.z
, t.n
);
1072 p
->u.zToken
[t.n
] = 0;
1073 p
->w.iOfst
= (int)(t.z
- pParse
->zTail
);
1074 if
( sqlite3Isquote
(p
->u.zToken
[0]) ){
1075 sqlite3DequoteExpr
(p
);
1077 #if SQLITE_MAX_EXPR_DEPTH>0
1080 if
( IN_RENAME_OBJECT
){
1081 return
(Expr
*)sqlite3RenameTokenMap
(pParse
, (void*)p
, &t
);
1089 expr
(A
) ::= term
(A
).
1090 expr
(A
) ::= LP expr
(X
) RP.
{A
= X
;}
1091 expr
(A
) ::= idj
(X
).
{A
=tokenExpr
(pParse
,TK_ID
,X
); /*A-overwrites-X*/}
1092 expr
(A
) ::= nm
(X
) DOT nm
(Y
).
{
1093 Expr
*temp1
= tokenExpr
(pParse
,TK_ID
,X
);
1094 Expr
*temp2
= tokenExpr
(pParse
,TK_ID
,Y
);
1095 A
= sqlite3PExpr
(pParse
, TK_DOT
, temp1
, temp2
);
1097 expr
(A
) ::= nm
(X
) DOT nm
(Y
) DOT nm
(Z
).
{
1098 Expr
*temp1
= tokenExpr
(pParse
,TK_ID
,X
);
1099 Expr
*temp2
= tokenExpr
(pParse
,TK_ID
,Y
);
1100 Expr
*temp3
= tokenExpr
(pParse
,TK_ID
,Z
);
1101 Expr
*temp4
= sqlite3PExpr
(pParse
, TK_DOT
, temp2
, temp3
);
1102 if
( IN_RENAME_OBJECT
){
1103 sqlite3RenameTokenRemap
(pParse
, 0, temp1
);
1105 A
= sqlite3PExpr
(pParse
, TK_DOT
, temp1
, temp4
);
1107 term
(A
) ::= NULL|FLOAT|BLOB
(X
).
{A
=tokenExpr
(pParse
,@X
,X
); /*A-overwrites-X*/}
1108 term
(A
) ::= STRING
(X
).
{A
=tokenExpr
(pParse
,@X
,X
); /*A-overwrites-X*/}
1109 term
(A
) ::= INTEGER
(X
).
{
1110 A
= sqlite3ExprAlloc
(pParse
->db
, TK_INTEGER
, &X
, 1);
1111 if
( A
) A
->w.iOfst
= (int)(X.z
- pParse
->zTail
);
1113 expr
(A
) ::= VARIABLE
(X
).
{
1114 if
( !(X.z
[0]=='#' && sqlite3Isdigit
(X.z
[1])) ){
1116 A
= tokenExpr
(pParse
, TK_VARIABLE
, X
);
1117 sqlite3ExprAssignVarNumber
(pParse
, A
, n
);
1119 /* When doing a nested parse, one can include terms in an expression
1120 ** that look like this: #1 #2 ... These terms refer to registers
1121 ** in the virtual machine. #N is the N-th register. */
1122 Token t
= X
; /*A-overwrites-X*/
1124 if
( pParse
->nested
==0 ){
1125 sqlite3ErrorMsg
(pParse
, "near \"%T\": syntax error", &t
);
1128 A
= sqlite3PExpr
(pParse
, TK_REGISTER
, 0, 0);
1129 if
( A
) sqlite3GetInt32
(&t.z
[1], &A
->iTable
);
1133 expr
(A
) ::= expr
(A
) COLLATE ids
(C
).
{
1134 A
= sqlite3ExprAddCollateToken
(pParse
, A
, &C
, 1);
1136 %ifndef SQLITE_OMIT_CAST
1137 expr
(A
) ::= CAST LP expr
(E
) AS typetoken
(T
) RP.
{
1138 A
= sqlite3ExprAlloc
(pParse
->db
, TK_CAST
, &T
, 1);
1139 sqlite3ExprAttachSubtrees
(pParse
->db
, A
, E
, 0);
1141 %endif SQLITE_OMIT_CAST
1144 expr
(A
) ::= idj
(X
) LP distinct
(D
) exprlist
(Y
) RP.
{
1145 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1147 expr
(A
) ::= idj
(X
) LP distinct
(D
) exprlist
(Y
) ORDER BY sortlist
(O
) RP.
{
1148 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1149 sqlite3ExprAddFunctionOrderBy
(pParse
, A
, O
);
1151 expr
(A
) ::= idj
(X
) LP STAR RP.
{
1152 A
= sqlite3ExprFunction
(pParse
, 0, &X
, 0);
1155 %ifndef SQLITE_OMIT_WINDOWFUNC
1156 expr
(A
) ::= idj
(X
) LP distinct
(D
) exprlist
(Y
) RP filter_over
(Z
).
{
1157 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1158 sqlite3WindowAttach
(pParse
, A
, Z
);
1160 expr
(A
) ::= idj
(X
) LP distinct
(D
) exprlist
(Y
) ORDER BY sortlist
(O
) RP filter_over
(Z
).
{
1161 A
= sqlite3ExprFunction
(pParse
, Y
, &X
, D
);
1162 sqlite3WindowAttach
(pParse
, A
, Z
);
1163 sqlite3ExprAddFunctionOrderBy
(pParse
, A
, O
);
1165 expr
(A
) ::= idj
(X
) LP STAR RP filter_over
(Z
).
{
1166 A
= sqlite3ExprFunction
(pParse
, 0, &X
, 0);
1167 sqlite3WindowAttach
(pParse
, A
, Z
);
1171 term
(A
) ::= CTIME_KW
(OP
).
{
1172 A
= sqlite3ExprFunction
(pParse
, 0, &OP
, 0);
1175 expr
(A
) ::= LP nexprlist
(X
) COMMA expr
(Y
) RP.
{
1176 ExprList
*pList
= sqlite3ExprListAppend
(pParse
, X
, Y
);
1177 A
= sqlite3PExpr
(pParse
, TK_VECTOR
, 0, 0);
1180 if
( ALWAYS
(pList
->nExpr
) ){
1181 A
->flags |
= pList
->a
[0].pExpr
->flags
& EP_Propagate
;
1184 sqlite3ExprListDelete
(pParse
->db
, pList
);
1188 expr
(A
) ::= expr
(A
) AND expr
(Y
).
{A
=sqlite3ExprAnd
(pParse
,A
,Y
);}
1189 expr
(A
) ::= expr
(A
) OR
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1190 expr
(A
) ::= expr
(A
) LT|GT|GE|LE
(OP
) expr
(Y
).
1191 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1192 expr
(A
) ::= expr
(A
) EQ|NE
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1193 expr
(A
) ::= expr
(A
) BITAND|BITOR|LSHIFT|RSHIFT
(OP
) expr
(Y
).
1194 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1195 expr
(A
) ::= expr
(A
) PLUS|MINUS
(OP
) expr
(Y
).
1196 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1197 expr
(A
) ::= expr
(A
) STAR|SLASH|REM
(OP
) expr
(Y
).
1198 {A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1199 expr
(A
) ::= expr
(A
) CONCAT
(OP
) expr
(Y
).
{A
=sqlite3PExpr
(pParse
,@OP
,A
,Y
);}
1200 %type likeop
{Token
}
1201 likeop
(A
) ::= LIKE_KW|MATCH
(A
).
1202 likeop
(A
) ::= NOT LIKE_KW|MATCH
(X
).
{A
=X
; A.n|
=0x80000000; /*A-overwrite-X*/}
1203 expr
(A
) ::= expr
(A
) likeop
(OP
) expr
(Y
).
[LIKE_KW
] {
1205 int bNot
= OP.n
& 0x80000000;
1207 pList
= sqlite3ExprListAppend
(pParse
,0, Y
);
1208 pList
= sqlite3ExprListAppend
(pParse
,pList
, A
);
1209 A
= sqlite3ExprFunction
(pParse
, pList
, &OP
, 0);
1210 if
( bNot
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1211 if
( A
) A
->flags |
= EP_InfixFunc
;
1213 expr
(A
) ::= expr
(A
) likeop
(OP
) expr
(Y
) ESCAPE expr
(E
).
[LIKE_KW
] {
1215 int bNot
= OP.n
& 0x80000000;
1217 pList
= sqlite3ExprListAppend
(pParse
,0, Y
);
1218 pList
= sqlite3ExprListAppend
(pParse
,pList
, A
);
1219 pList
= sqlite3ExprListAppend
(pParse
,pList
, E
);
1220 A
= sqlite3ExprFunction
(pParse
, pList
, &OP
, 0);
1221 if
( bNot
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1222 if
( A
) A
->flags |
= EP_InfixFunc
;
1225 expr
(A
) ::= expr
(A
) ISNULL|NOTNULL
(E
).
{A
= sqlite3PExpr
(pParse
,@E
,A
,0);}
1226 expr
(A
) ::= expr
(A
) NOT NULL.
{A
= sqlite3PExpr
(pParse
,TK_NOTNULL
,A
,0);}
1229 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1230 ** unary TK_ISNULL or TK_NOTNULL expression. */
1231 static void binaryToUnaryIfNull
(Parse
*pParse
, Expr
*pY
, Expr
*pA
, int op
){
1232 sqlite3
*db
= pParse
->db
;
1233 if
( pA
&& pY
&& pY
->op
==TK_NULL
&& !IN_RENAME_OBJECT
){
1235 sqlite3ExprDelete
(db
, pA
->pRight
);
1242 // expr1 IS NOT expr2
1244 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1245 // is any other expression, code as TK_IS or TK_ISNOT.
1247 expr
(A
) ::= expr
(A
) IS expr
(Y
).
{
1248 A
= sqlite3PExpr
(pParse
,TK_IS
,A
,Y
);
1249 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_ISNULL
);
1251 expr
(A
) ::= expr
(A
) IS NOT expr
(Y
).
{
1252 A
= sqlite3PExpr
(pParse
,TK_ISNOT
,A
,Y
);
1253 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_NOTNULL
);
1255 expr
(A
) ::= expr
(A
) IS NOT DISTINCT FROM expr
(Y
).
{
1256 A
= sqlite3PExpr
(pParse
,TK_IS
,A
,Y
);
1257 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_ISNULL
);
1259 expr
(A
) ::= expr
(A
) IS DISTINCT FROM expr
(Y
).
{
1260 A
= sqlite3PExpr
(pParse
,TK_ISNOT
,A
,Y
);
1261 binaryToUnaryIfNull
(pParse
, Y
, A
, TK_NOTNULL
);
1264 expr
(A
) ::= NOT
(B
) expr
(X
).
1265 {A
= sqlite3PExpr
(pParse
, @B
, X
, 0);/*A-overwrites-B*/}
1266 expr
(A
) ::= BITNOT
(B
) expr
(X
).
1267 {A
= sqlite3PExpr
(pParse
, @B
, X
, 0);/*A-overwrites-B*/}
1268 expr
(A
) ::= PLUS|MINUS
(B
) expr
(X
).
[BITNOT
] {
1269 A
= sqlite3PExpr
(pParse
, @B
==TK_PLUS ? TK_UPLUS
: TK_UMINUS
, X
, 0);
1273 expr
(A
) ::= expr
(B
) PTR
(C
) expr
(D
).
{
1274 ExprList
*pList
= sqlite3ExprListAppend
(pParse
, 0, B
);
1275 pList
= sqlite3ExprListAppend
(pParse
, pList
, D
);
1276 A
= sqlite3ExprFunction
(pParse
, pList
, &C
, 0);
1279 %type between_op
{int}
1280 between_op
(A
) ::= BETWEEN.
{A
= 0;}
1281 between_op
(A
) ::= NOT BETWEEN.
{A
= 1;}
1282 expr
(A
) ::= expr
(A
) between_op
(N
) expr
(X
) AND expr
(Y
).
[BETWEEN
] {
1283 ExprList
*pList
= sqlite3ExprListAppend
(pParse
,0, X
);
1284 pList
= sqlite3ExprListAppend
(pParse
,pList
, Y
);
1285 A
= sqlite3PExpr
(pParse
, TK_BETWEEN
, A
, 0);
1289 sqlite3ExprListDelete
(pParse
->db
, pList
);
1291 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1293 %ifndef SQLITE_OMIT_SUBQUERY
1295 in_op
(A
) ::= IN.
{A
= 0;}
1296 in_op
(A
) ::= NOT IN.
{A
= 1;}
1297 expr
(A
) ::= expr
(A
) in_op
(N
) LP exprlist
(Y
) RP.
[IN
] {
1299 /* Expressions of the form
1304 ** simplify to constants 0 (false) and 1 (true), respectively,
1305 ** regardless of the value of expr1.
1307 sqlite3ExprUnmapAndDelete
(pParse
, A
);
1308 A
= sqlite3Expr
(pParse
->db
, TK_STRING
, N ?
"true" : "false");
1309 if
( A
) sqlite3ExprIdToTrueFalse
(A
);
1311 Expr
*pRHS
= Y
->a
[0].pExpr
;
1312 if
( Y
->nExpr
==1 && sqlite3ExprIsConstant
(pRHS
) && A
->op
!=TK_VECTOR
){
1314 sqlite3ExprListDelete
(pParse
->db
, Y
);
1315 pRHS
= sqlite3PExpr
(pParse
, TK_UPLUS
, pRHS
, 0);
1316 A
= sqlite3PExpr
(pParse
, TK_EQ
, A
, pRHS
);
1317 }else if
( Y
->nExpr
==1 && pRHS
->op
==TK_SELECT
){
1318 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1319 sqlite3PExprAddSelect
(pParse
, A
, pRHS
->x.pSelect
);
1320 pRHS
->x.pSelect
= 0;
1321 sqlite3ExprListDelete
(pParse
->db
, Y
);
1323 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1325 sqlite3ExprListDelete
(pParse
->db
, Y
);
1326 }else if
( A
->pLeft
->op
==TK_VECTOR
){
1327 int nExpr
= A
->pLeft
->x.pList
->nExpr
;
1328 Select
*pSelectRHS
= sqlite3ExprListToValues
(pParse
, nExpr
, Y
);
1330 parserDoubleLinkSelect
(pParse
, pSelectRHS
);
1331 sqlite3PExprAddSelect
(pParse
, A
, pSelectRHS
);
1335 sqlite3ExprSetHeightAndFlags
(pParse
, A
);
1338 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1341 expr
(A
) ::= LP select
(X
) RP.
{
1342 A
= sqlite3PExpr
(pParse
, TK_SELECT
, 0, 0);
1343 sqlite3PExprAddSelect
(pParse
, A
, X
);
1345 expr
(A
) ::= expr
(A
) in_op
(N
) LP select
(Y
) RP.
[IN
] {
1346 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1347 sqlite3PExprAddSelect
(pParse
, A
, Y
);
1348 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1350 expr
(A
) ::= expr
(A
) in_op
(N
) nm
(Y
) dbnm
(Z
) paren_exprlist
(E
).
[IN
] {
1351 SrcList
*pSrc
= sqlite3SrcListAppend
(pParse
, 0,&Y
,&Z
);
1352 Select
*pSelect
= sqlite3SelectNew
(pParse
, 0,pSrc
,0,0,0,0,0,0);
1353 if
( E
) sqlite3SrcListFuncArgs
(pParse
, pSelect ? pSrc
: 0, E
);
1354 A
= sqlite3PExpr
(pParse
, TK_IN
, A
, 0);
1355 sqlite3PExprAddSelect
(pParse
, A
, pSelect
);
1356 if
( N
) A
= sqlite3PExpr
(pParse
, TK_NOT
, A
, 0);
1358 expr
(A
) ::= EXISTS LP select
(Y
) RP.
{
1360 p
= A
= sqlite3PExpr
(pParse
, TK_EXISTS
, 0, 0);
1361 sqlite3PExprAddSelect
(pParse
, p
, Y
);
1363 %endif SQLITE_OMIT_SUBQUERY
1365 /* CASE expressions */
1366 expr
(A
) ::= CASE case_operand
(X
) case_exprlist
(Y
) case_else
(Z
) END.
{
1367 A
= sqlite3PExpr
(pParse
, TK_CASE
, X
, 0);
1369 A
->x.pList
= Z ? sqlite3ExprListAppend
(pParse
,Y
,Z
) : Y
;
1370 sqlite3ExprSetHeightAndFlags
(pParse
, A
);
1372 sqlite3ExprListDelete
(pParse
->db
, Y
);
1373 sqlite3ExprDelete
(pParse
->db
, Z
);
1376 %type case_exprlist
{ExprList
*}
1377 %destructor case_exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1378 case_exprlist
(A
) ::= case_exprlist
(A
) WHEN expr
(Y
) THEN expr
(Z
).
{
1379 A
= sqlite3ExprListAppend
(pParse
,A
, Y
);
1380 A
= sqlite3ExprListAppend
(pParse
,A
, Z
);
1382 case_exprlist
(A
) ::= WHEN expr
(Y
) THEN expr
(Z
).
{
1383 A
= sqlite3ExprListAppend
(pParse
,0, Y
);
1384 A
= sqlite3ExprListAppend
(pParse
,A
, Z
);
1386 %type case_else
{Expr
*}
1387 %destructor case_else
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1388 case_else
(A
) ::= ELSE expr
(X
).
{A
= X
;}
1389 case_else
(A
) ::= .
{A
= 0;}
1390 %type case_operand
{Expr
*}
1391 %destructor case_operand
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1392 case_operand
(A
) ::= expr
(A
).
1393 case_operand
(A
) ::= .
{A
= 0;}
1395 %type exprlist
{ExprList
*}
1396 %destructor exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1397 %type nexprlist
{ExprList
*}
1398 %destructor nexprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1400 exprlist
(A
) ::= nexprlist
(A
).
1401 exprlist
(A
) ::= .
{A
= 0;}
1402 nexprlist
(A
) ::= nexprlist
(A
) COMMA expr
(Y
).
1403 {A
= sqlite3ExprListAppend
(pParse
,A
,Y
);}
1404 nexprlist
(A
) ::= expr
(Y
).
1405 {A
= sqlite3ExprListAppend
(pParse
,0,Y
); /*A-overwrites-Y*/}
1407 %ifndef SQLITE_OMIT_SUBQUERY
1408 /* A paren_exprlist is an optional expression list contained inside
1409 ** of parenthesis */
1410 %type paren_exprlist
{ExprList
*}
1411 %destructor paren_exprlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1412 paren_exprlist
(A
) ::= .
{A
= 0;}
1413 paren_exprlist
(A
) ::= LP exprlist
(X
) RP.
{A
= X
;}
1414 %endif SQLITE_OMIT_SUBQUERY
1417 ///////////////////////////// The CREATE INDEX command ///////////////////////
1419 cmd
::= createkw
(S
) uniqueflag
(U
) INDEX ifnotexists
(NE
) nm
(X
) dbnm
(D
)
1420 ON nm
(Y
) LP sortlist
(Z
) RP where_opt
(W
).
{
1421 sqlite3CreateIndex
(pParse
, &X
, &D
,
1422 sqlite3SrcListAppend
(pParse
,0,&Y
,0), Z
, U
,
1423 &S
, W
, SQLITE_SO_ASC
, NE
, SQLITE_IDXTYPE_APPDEF
);
1424 if
( IN_RENAME_OBJECT
&& pParse
->pNewIndex
){
1425 sqlite3RenameTokenMap
(pParse
, pParse
->pNewIndex
->zName
, &Y
);
1429 %type uniqueflag
{int}
1430 uniqueflag
(A
) ::= UNIQUE.
{A
= OE_Abort
;}
1431 uniqueflag
(A
) ::= .
{A
= OE_None
;}
1434 // The eidlist non-terminal (Expression Id List) generates an ExprList
1435 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1436 // This list is stored in an ExprList rather than an IdList so that it
1437 // can be easily sent to sqlite3ColumnsExprList().
1439 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1440 // used for the arguments to an index. That is just an historical accident.
1442 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1443 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1444 // places - places that might have been stored in the sqlite_schema table.
1445 // Those extra features were ignored. But because they might be in some
1446 // (busted) old databases, we need to continue parsing them when loading
1447 // historical schemas.
1449 %type eidlist
{ExprList
*}
1450 %destructor eidlist
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1451 %type eidlist_opt
{ExprList
*}
1452 %destructor eidlist_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1455 /* Add a single new term to an ExprList that is used to store a
1456 ** list of identifiers. Report an error if the ID list contains
1457 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1458 ** error while parsing a legacy schema.
1460 static ExprList
*parserAddExprIdListTerm
(
1467 ExprList
*p
= sqlite3ExprListAppend
(pParse
, pPrior
, 0);
1468 if
( (hasCollate || sortOrder
!=SQLITE_SO_UNDEFINED
)
1469 && pParse
->db
->init.busy
==0
1471 sqlite3ErrorMsg
(pParse
, "syntax error after column name \"%.*s\"",
1472 pIdToken
->n
, pIdToken
->z
);
1474 sqlite3ExprListSetName
(pParse
, p
, pIdToken
, 1);
1479 eidlist_opt
(A
) ::= .
{A
= 0;}
1480 eidlist_opt
(A
) ::= LP eidlist
(X
) RP.
{A
= X
;}
1481 eidlist
(A
) ::= eidlist
(A
) COMMA nm
(Y
) collate
(C
) sortorder
(Z
).
{
1482 A
= parserAddExprIdListTerm
(pParse
, A
, &Y
, C
, Z
);
1484 eidlist
(A
) ::= nm
(Y
) collate
(C
) sortorder
(Z
).
{
1485 A
= parserAddExprIdListTerm
(pParse
, 0, &Y
, C
, Z
); /*A-overwrites-Y*/
1489 collate
(C
) ::= .
{C
= 0;}
1490 collate
(C
) ::= COLLATE ids.
{C
= 1;}
1493 ///////////////////////////// The DROP INDEX command /////////////////////////
1495 cmd
::= DROP INDEX ifexists
(E
) fullname
(X
).
{sqlite3DropIndex
(pParse
, X
, E
);}
1497 ///////////////////////////// The VACUUM command /////////////////////////////
1499 %if
!SQLITE_OMIT_VACUUM
&& !SQLITE_OMIT_ATTACH
1501 %destructor vinto
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1502 cmd
::= VACUUM vinto
(Y
).
{sqlite3Vacuum
(pParse
,0,Y
);}
1503 cmd
::= VACUUM nm
(X
) vinto
(Y
).
{sqlite3Vacuum
(pParse
,&X
,Y
);}
1504 vinto
(A
) ::= INTO expr
(X
).
{A
= X
;}
1505 vinto
(A
) ::= .
{A
= 0;}
1508 ///////////////////////////// The PRAGMA command /////////////////////////////
1510 %ifndef SQLITE_OMIT_PRAGMA
1511 cmd
::= PRAGMA nm
(X
) dbnm
(Z
).
{sqlite3Pragma
(pParse
,&X
,&Z
,0,0);}
1512 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) EQ nmnum
(Y
).
{sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,0);}
1513 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) LP nmnum
(Y
) RP.
{sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,0);}
1514 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) EQ minus_num
(Y
).
1515 {sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,1);}
1516 cmd
::= PRAGMA nm
(X
) dbnm
(Z
) LP minus_num
(Y
) RP.
1517 {sqlite3Pragma
(pParse
,&X
,&Z
,&Y
,1);}
1519 nmnum
(A
) ::= plus_num
(A
).
1522 nmnum
(A
) ::= DELETE
(A
).
1523 nmnum
(A
) ::= DEFAULT
(A
).
1524 %endif SQLITE_OMIT_PRAGMA
1525 %token_class number INTEGER|FLOAT.
1526 plus_num
(A
) ::= PLUS number
(X
).
{A
= X
;}
1527 plus_num
(A
) ::= number
(A
).
1528 minus_num
(A
) ::= MINUS number
(X
).
{A
= X
;}
1529 //////////////////////////// The CREATE TRIGGER command /////////////////////
1531 %ifndef SQLITE_OMIT_TRIGGER
1533 cmd
::= createkw trigger_decl
(A
) BEGIN trigger_cmd_list
(S
) END
(Z
).
{
1536 all.n
= (int)(Z.z
- A.z
) + Z.n
;
1537 sqlite3FinishTrigger
(pParse
, S
, &all
);
1540 trigger_decl
(A
) ::= temp
(T
) TRIGGER ifnotexists
(NOERR
) nm
(B
) dbnm
(Z
)
1541 trigger_time
(C
) trigger_event
(D
)
1542 ON fullname
(E
) foreach_clause when_clause
(G
).
{
1543 sqlite3BeginTrigger
(pParse
, &B
, &Z
, C
, D.a
, D.b
, E
, G
, T
, NOERR
);
1544 A
= (Z.n
==0?B
:Z
); /*A-overwrites-T*/
1547 %type trigger_time
{int}
1548 trigger_time
(A
) ::= BEFORE|AFTER
(X
).
{ A
= @X
; /*A-overwrites-X*/ }
1549 trigger_time
(A
) ::= INSTEAD OF.
{ A
= TK_INSTEAD
;}
1550 trigger_time
(A
) ::= .
{ A
= TK_BEFORE
; }
1552 %type trigger_event
{struct TrigEvent
}
1553 %destructor trigger_event
{sqlite3IdListDelete
(pParse
->db
, $$.b
);}
1554 trigger_event
(A
) ::= DELETE|INSERT
(X
).
{A.a
= @X
; /*A-overwrites-X*/ A.b
= 0;}
1555 trigger_event
(A
) ::= UPDATE
(X
).
{A.a
= @X
; /*A-overwrites-X*/ A.b
= 0;}
1556 trigger_event
(A
) ::= UPDATE OF idlist
(X
).
{A.a
= TK_UPDATE
; A.b
= X
;}
1558 foreach_clause
::= .
1559 foreach_clause
::= FOR EACH ROW.
1561 %type when_clause
{Expr
*}
1562 %destructor when_clause
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1563 when_clause
(A
) ::= .
{ A
= 0; }
1564 when_clause
(A
) ::= WHEN expr
(X
).
{ A
= X
; }
1566 %type trigger_cmd_list
{TriggerStep
*}
1567 %destructor trigger_cmd_list
{sqlite3DeleteTriggerStep
(pParse
->db
, $$
);}
1568 trigger_cmd_list
(A
) ::= trigger_cmd_list
(A
) trigger_cmd
(X
) SEMI.
{
1570 A
->pLast
->pNext
= X
;
1573 trigger_cmd_list
(A
) ::= trigger_cmd
(A
) SEMI.
{
1578 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1579 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1580 // the same database as the table that the trigger fires on.
1584 trnm
(A
) ::= nm DOT nm
(X
).
{
1586 sqlite3ErrorMsg
(pParse
,
1587 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1588 "statements within triggers");
1591 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1592 // statements within triggers. We make a specific error message for this
1593 // since it is an exception to the default grammar rules.
1596 tridxby
::= INDEXED BY nm.
{
1597 sqlite3ErrorMsg
(pParse
,
1598 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1601 tridxby
::= NOT INDEXED.
{
1602 sqlite3ErrorMsg
(pParse
,
1603 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1609 %type trigger_cmd
{TriggerStep
*}
1610 %destructor trigger_cmd
{sqlite3DeleteTriggerStep
(pParse
->db
, $$
);}
1613 UPDATE
(B
) orconf
(R
) trnm
(X
) tridxby SET setlist
(Y
) from
(F
) where_opt
(Z
) scanpt
(E
).
1614 {A
= sqlite3TriggerUpdateStep
(pParse
, &X
, F
, Y
, Z
, R
, B.z
, E
);}
1617 trigger_cmd
(A
) ::= scanpt
(B
) insert_cmd
(R
) INTO
1618 trnm
(X
) idlist_opt
(F
) select
(S
) upsert
(U
) scanpt
(Z
).
{
1619 A
= sqlite3TriggerInsertStep
(pParse
,&X
,F
,S
,R
,U
,B
,Z
);/*A-overwrites-R*/
1622 trigger_cmd
(A
) ::= DELETE
(B
) FROM trnm
(X
) tridxby where_opt
(Y
) scanpt
(E
).
1623 {A
= sqlite3TriggerDeleteStep
(pParse
, &X
, Y
, B.z
, E
);}
1626 trigger_cmd
(A
) ::= scanpt
(B
) select
(X
) scanpt
(E
).
1627 {A
= sqlite3TriggerSelectStep
(pParse
->db
, X
, B
, E
); /*A-overwrites-X*/}
1629 // The special RAISE expression that may occur in trigger programs
1630 expr
(A
) ::= RAISE LP IGNORE RP.
{
1631 A
= sqlite3PExpr
(pParse
, TK_RAISE
, 0, 0);
1633 A
->affExpr
= OE_Ignore
;
1636 expr
(A
) ::= RAISE LP raisetype
(T
) COMMA nm
(Z
) RP.
{
1637 A
= sqlite3ExprAlloc
(pParse
->db
, TK_RAISE
, &Z
, 1);
1639 A
->affExpr
= (char)T
;
1642 %endif
!SQLITE_OMIT_TRIGGER
1644 %type raisetype
{int}
1645 raisetype
(A
) ::= ROLLBACK.
{A
= OE_Rollback
;}
1646 raisetype
(A
) ::= ABORT.
{A
= OE_Abort
;}
1647 raisetype
(A
) ::= FAIL.
{A
= OE_Fail
;}
1650 //////////////////////// DROP TRIGGER statement //////////////////////////////
1651 %ifndef SQLITE_OMIT_TRIGGER
1652 cmd
::= DROP TRIGGER ifexists
(NOERR
) fullname
(X
).
{
1653 sqlite3DropTrigger
(pParse
,X
,NOERR
);
1655 %endif
!SQLITE_OMIT_TRIGGER
1657 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1658 %ifndef SQLITE_OMIT_ATTACH
1659 cmd
::= ATTACH database_kw_opt expr
(F
) AS expr
(D
) key_opt
(K
).
{
1660 sqlite3Attach
(pParse
, F
, D
, K
);
1662 cmd
::= DETACH database_kw_opt expr
(D
).
{
1663 sqlite3Detach
(pParse
, D
);
1666 %type key_opt
{Expr
*}
1667 %destructor key_opt
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1668 key_opt
(A
) ::= .
{ A
= 0; }
1669 key_opt
(A
) ::= KEY expr
(X
).
{ A
= X
; }
1671 database_kw_opt
::= DATABASE.
1672 database_kw_opt
::= .
1673 %endif SQLITE_OMIT_ATTACH
1675 ////////////////////////// REINDEX collation //////////////////////////////////
1676 %ifndef SQLITE_OMIT_REINDEX
1677 cmd
::= REINDEX.
{sqlite3Reindex
(pParse
, 0, 0);}
1678 cmd
::= REINDEX nm
(X
) dbnm
(Y
).
{sqlite3Reindex
(pParse
, &X
, &Y
);}
1679 %endif SQLITE_OMIT_REINDEX
1681 /////////////////////////////////// ANALYZE ///////////////////////////////////
1682 %ifndef SQLITE_OMIT_ANALYZE
1683 cmd
::= ANALYZE.
{sqlite3Analyze
(pParse
, 0, 0);}
1684 cmd
::= ANALYZE nm
(X
) dbnm
(Y
).
{sqlite3Analyze
(pParse
, &X
, &Y
);}
1687 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1688 %ifndef SQLITE_OMIT_ALTERTABLE
1689 %ifndef SQLITE_OMIT_VIRTUALTABLE
1690 cmd
::= ALTER TABLE fullname
(X
) RENAME TO nm
(Z
).
{
1691 sqlite3AlterRenameTable
(pParse
,X
,&Z
);
1693 cmd
::= ALTER TABLE add_column_fullname
1694 ADD kwcolumn_opt columnname
(Y
) carglist.
{
1695 Y.n
= (int)(pParse
->sLastToken.z
-Y.z
) + pParse
->sLastToken.n
;
1696 sqlite3AlterFinishAddColumn
(pParse
, &Y
);
1698 cmd
::= ALTER TABLE fullname
(X
) DROP kwcolumn_opt nm
(Y
).
{
1699 sqlite3AlterDropColumn
(pParse
, X
, &Y
);
1702 add_column_fullname
::= fullname
(X
).
{
1703 disableLookaside
(pParse
);
1704 sqlite3AlterBeginAddColumn
(pParse
, X
);
1706 cmd
::= ALTER TABLE fullname
(X
) RENAME kwcolumn_opt nm
(Y
) TO nm
(Z
).
{
1707 sqlite3AlterRenameColumn
(pParse
, X
, &Y
, &Z
);
1711 kwcolumn_opt
::= COLUMNKW.
1713 %endif SQLITE_OMIT_VIRTUALTABLE
1714 %endif SQLITE_OMIT_ALTERTABLE
1716 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1717 %ifndef SQLITE_OMIT_VIRTUALTABLE
1718 cmd
::= create_vtab.
{sqlite3VtabFinishParse
(pParse
,0);}
1719 cmd
::= create_vtab LP vtabarglist RP
(X
).
{sqlite3VtabFinishParse
(pParse
,&X
);}
1720 create_vtab
::= createkw VIRTUAL TABLE ifnotexists
(E
)
1721 nm
(X
) dbnm
(Y
) USING nm
(Z
).
{
1722 sqlite3VtabBeginParse
(pParse
, &X
, &Y
, &Z
, E
);
1724 vtabarglist
::= vtabarg.
1725 vtabarglist
::= vtabarglist COMMA vtabarg.
1726 vtabarg
::= .
{sqlite3VtabArgInit
(pParse
);}
1727 vtabarg
::= vtabarg vtabargtoken.
1728 vtabargtoken
::= ANY
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1729 vtabargtoken
::= lp anylist RP
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1730 lp
::= LP
(X
).
{sqlite3VtabArgExtend
(pParse
,&X
);}
1732 anylist
::= anylist LP anylist RP.
1733 anylist
::= anylist ANY.
1734 %endif SQLITE_OMIT_VIRTUALTABLE
1737 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1738 %type wqlist
{With
*}
1739 %destructor wqlist
{sqlite3WithDelete
(pParse
->db
, $$
);}
1741 // %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable
1744 %ifndef SQLITE_OMIT_CTE
1745 with
::= WITH wqlist
(W
).
{ sqlite3WithPush
(pParse
, W
, 1); }
1746 with
::= WITH RECURSIVE wqlist
(W
).
{ sqlite3WithPush
(pParse
, W
, 1); }
1749 wqas
(A
) ::= AS.
{A
= M10d_Any
;}
1750 wqas
(A
) ::= AS MATERIALIZED.
{A
= M10d_Yes
;}
1751 wqas
(A
) ::= AS NOT MATERIALIZED.
{A
= M10d_No
;}
1752 wqitem
(A
) ::= nm
(X
) eidlist_opt
(Y
) wqas
(M
) LP select
(Z
) RP.
{
1753 A
= sqlite3CteNew
(pParse
, &X
, Y
, Z
, M
); /*A-overwrites-X*/
1755 wqlist
(A
) ::= wqitem
(X
).
{
1756 A
= sqlite3WithAdd
(pParse
, 0, X
); /*A-overwrites-X*/
1758 wqlist
(A
) ::= wqlist
(A
) COMMA wqitem
(X
).
{
1759 A
= sqlite3WithAdd
(pParse
, A
, X
);
1761 %endif SQLITE_OMIT_CTE
1763 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1764 // These must be at the end of this file. Specifically, the rules that
1765 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1766 // the integer values assigned to these tokens to be larger than all other
1767 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1769 %ifndef SQLITE_OMIT_WINDOWFUNC
1770 %type windowdefn_list
{Window
*}
1771 %destructor windowdefn_list
{sqlite3WindowListDelete
(pParse
->db
, $$
);}
1772 windowdefn_list
(A
) ::= windowdefn
(A
).
1773 windowdefn_list
(A
) ::= windowdefn_list
(Y
) COMMA windowdefn
(Z
).
{
1775 sqlite3WindowChain
(pParse
, Z
, Y
);
1780 %type windowdefn
{Window
*}
1781 %destructor windowdefn
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1782 windowdefn
(A
) ::= nm
(X
) AS LP window
(Y
) RP.
{
1784 Y
->zName
= sqlite3DbStrNDup
(pParse
->db
, X.z
, X.n
);
1789 %type window
{Window
*}
1790 %destructor window
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1792 %type frame_opt
{Window
*}
1793 %destructor frame_opt
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1795 %type part_opt
{ExprList
*}
1796 %destructor part_opt
{sqlite3ExprListDelete
(pParse
->db
, $$
);}
1798 %type filter_clause
{Expr
*}
1799 %destructor filter_clause
{sqlite3ExprDelete
(pParse
->db
, $$
);}
1801 %type over_clause
{Window
*}
1802 %destructor over_clause
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1804 %type filter_over
{Window
*}
1805 %destructor filter_over
{sqlite3WindowDelete
(pParse
->db
, $$
);}
1807 %type range_or_rows
{int}
1809 %type frame_bound
{struct FrameBound
}
1810 %destructor frame_bound
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1811 %type frame_bound_s
{struct FrameBound
}
1812 %destructor frame_bound_s
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1813 %type frame_bound_e
{struct FrameBound
}
1814 %destructor frame_bound_e
{sqlite3ExprDelete
(pParse
->db
, $$.pExpr
);}
1816 window
(A
) ::= PARTITION BY nexprlist
(X
) orderby_opt
(Y
) frame_opt
(Z
).
{
1817 A
= sqlite3WindowAssemble
(pParse
, Z
, X
, Y
, 0);
1819 window
(A
) ::= nm
(W
) PARTITION BY nexprlist
(X
) orderby_opt
(Y
) frame_opt
(Z
).
{
1820 A
= sqlite3WindowAssemble
(pParse
, Z
, X
, Y
, &W
);
1822 window
(A
) ::= ORDER BY sortlist
(Y
) frame_opt
(Z
).
{
1823 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, Y
, 0);
1825 window
(A
) ::= nm
(W
) ORDER BY sortlist
(Y
) frame_opt
(Z
).
{
1826 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, Y
, &W
);
1828 window
(A
) ::= frame_opt
(A
).
1829 window
(A
) ::= nm
(W
) frame_opt
(Z
).
{
1830 A
= sqlite3WindowAssemble
(pParse
, Z
, 0, 0, &W
);
1833 frame_opt
(A
) ::= .
{
1834 A
= sqlite3WindowAlloc
(pParse
, 0, TK_UNBOUNDED
, 0, TK_CURRENT
, 0, 0);
1836 frame_opt
(A
) ::= range_or_rows
(X
) frame_bound_s
(Y
) frame_exclude_opt
(Z
).
{
1837 A
= sqlite3WindowAlloc
(pParse
, X
, Y.eType
, Y.pExpr
, TK_CURRENT
, 0, Z
);
1839 frame_opt
(A
) ::= range_or_rows
(X
) BETWEEN frame_bound_s
(Y
) AND
1840 frame_bound_e
(Z
) frame_exclude_opt
(W
).
{
1841 A
= sqlite3WindowAlloc
(pParse
, X
, Y.eType
, Y.pExpr
, Z.eType
, Z.pExpr
, W
);
1844 range_or_rows
(A
) ::= RANGE|ROWS|GROUPS
(X
).
{A
= @X
; /*A-overwrites-X*/}
1846 frame_bound_s
(A
) ::= frame_bound
(X
).
{A
= X
;}
1847 frame_bound_s
(A
) ::= UNBOUNDED
(X
) PRECEDING.
{A.eType
= @X
; A.pExpr
= 0;}
1848 frame_bound_e
(A
) ::= frame_bound
(X
).
{A
= X
;}
1849 frame_bound_e
(A
) ::= UNBOUNDED
(X
) FOLLOWING.
{A.eType
= @X
; A.pExpr
= 0;}
1851 frame_bound
(A
) ::= expr
(X
) PRECEDING|FOLLOWING
(Y
).
1852 {A.eType
= @Y
; A.pExpr
= X
;}
1853 frame_bound
(A
) ::= CURRENT
(X
) ROW.
{A.eType
= @X
; A.pExpr
= 0;}
1855 %type frame_exclude_opt
{u8
}
1856 frame_exclude_opt
(A
) ::= .
{A
= 0;}
1857 frame_exclude_opt
(A
) ::= EXCLUDE frame_exclude
(X
).
{A
= X
;}
1859 %type frame_exclude
{u8
}
1860 frame_exclude
(A
) ::= NO
(X
) OTHERS.
{A
= @X
; /*A-overwrites-X*/}
1861 frame_exclude
(A
) ::= CURRENT
(X
) ROW.
{A
= @X
; /*A-overwrites-X*/}
1862 frame_exclude
(A
) ::= GROUP|TIES
(X
).
{A
= @X
; /*A-overwrites-X*/}
1865 %type window_clause
{Window
*}
1866 %destructor window_clause
{sqlite3WindowListDelete
(pParse
->db
, $$
);}
1867 window_clause
(A
) ::= WINDOW windowdefn_list
(B
).
{ A
= B
; }
1869 filter_over
(A
) ::= filter_clause
(F
) over_clause
(O
).
{
1873 sqlite3ExprDelete
(pParse
->db
, F
);
1877 filter_over
(A
) ::= over_clause
(O
).
{
1880 filter_over
(A
) ::= filter_clause
(F
).
{
1881 A
= (Window
*)sqlite3DbMallocZero
(pParse
->db
, sizeof
(Window
));
1883 A
->eFrmType
= TK_FILTER
;
1886 sqlite3ExprDelete
(pParse
->db
, F
);
1890 over_clause
(A
) ::= OVER LP window
(Z
) RP.
{
1894 over_clause
(A
) ::= OVER nm
(Z
).
{
1895 A
= (Window
*)sqlite3DbMallocZero
(pParse
->db
, sizeof
(Window
));
1897 A
->zName
= sqlite3DbStrNDup
(pParse
->db
, Z.z
, Z.n
);
1901 filter_clause
(A
) ::= FILTER LP WHERE expr
(X
) RP.
{ A
= X
; }
1902 %endif
/* SQLITE_OMIT_WINDOWFUNC */
1905 ** The code generator needs some extra TK_ token values for tokens that
1906 ** are synthesized and do not actually appear in the grammar:
1909 COLUMN
/* Reference to a table column */
1910 AGG_FUNCTION
/* An aggregate function */
1911 AGG_COLUMN
/* An aggregated column */
1912 TRUEFALSE
/* True or false keyword */
1913 ISNOT
/* Combination of IS and NOT */
1914 FUNCTION
/* A function invocation */
1915 UMINUS
/* Unary minus */
1916 UPLUS
/* Unary plus */
1917 TRUTH
/* IS TRUE or IS FALSE or IS NOT TRUE or IS NOT FALSE */
1918 REGISTER
/* Reference to a VDBE register */
1920 SELECT_COLUMN
/* Choose a single column from a multi-column SELECT */
1921 IF_NULL_ROW
/* the if-null-row operator */
1922 ASTERISK
/* The "*" in count(*) and similar */
1923 SPAN
/* The span operator */
1924 ERROR
/* An expression containing an error */
1926 /* There must be no more than 255 tokens defined above. If this grammar
1927 ** is extended with new rules and tokens, they must either be so few in
1928 ** number that TK_SPAN is no more than 255, or else the new tokens must
1929 ** appear after this line.
1933 # error too many tokens in the grammar
1938 ** The TK_SPACE and TK_ILLEGAL tokens must be the last two tokens. The
1939 ** parser depends on this. Those tokens are not used in any grammar rule.
1940 ** They are only used by the tokenizer. Declare them last so that they
1941 ** are guaranteed to be the last two tokens
1943 %token SPACE ILLEGAL.