Updates to the sqlite3_file_control() documentation. No changes to code.
[sqlite.git] / src / parse.y
blobe780f8c3ab2ca987febac6a8726657e8d28d7344
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
12 ** This file contains SQLite's grammar for SQL. Process this file
13 ** using the lemon parser generator to generate C code that runs
14 ** the parser. Lemon will also generate a header file containing
15 ** numeric codes for all of the tokens.
18 // All token codes are small integers with #defines that begin with "TK_"
19 %token_prefix TK_
21 // The type of the data attached to each token is Token. This is also the
22 // default type for non-terminals.
24 %token_type {Token}
25 %default_type {Token}
27 // The generated parser function takes a 4th argument as follows:
28 %extra_argument {Parse *pParse}
30 // This code runs whenever there is a syntax error
32 %syntax_error {
33 UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */
34 assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */
35 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
37 %stack_overflow {
38 sqlite3ErrorMsg(pParse, "parser stack overflow");
41 // The name of the generated procedure that implements the parser
42 // is as follows:
43 %name sqlite3Parser
45 // The following text is included near the beginning of the C source
46 // code file that implements the parser.
48 %include {
49 #include "sqliteInt.h"
52 ** Disable all error recovery processing in the parser push-down
53 ** automaton.
55 #define YYNOERRORRECOVERY 1
58 ** Make yytestcase() the same as testcase()
60 #define yytestcase(X) testcase(X)
63 ** Indicate that sqlite3ParserFree() will never be called with a null
64 ** pointer.
66 #define YYPARSEFREENEVERNULL 1
69 ** In the amalgamation, the parse.c file generated by lemon and the
70 ** tokenize.c file are concatenated. In that case, sqlite3RunParser()
71 ** has access to the the size of the yyParser object and so the parser
72 ** engine can be allocated from stack. In that case, only the
73 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
74 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
75 ** omitted.
77 #ifdef SQLITE_AMALGAMATION
78 # define sqlite3Parser_ENGINEALWAYSONSTACK 1
79 #endif
82 ** Alternative datatype for the argument to the malloc() routine passed
83 ** into sqlite3ParserAlloc(). The default is size_t.
85 #define YYMALLOCARGTYPE u64
88 ** An instance of the following structure describes the event of a
89 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
90 ** TK_DELETE, or TK_INSTEAD. If the event is of the form
92 ** UPDATE ON (a,b,c)
94 ** Then the "b" IdList records the list "a,b,c".
96 struct TrigEvent { int a; IdList * b; };
99 ** Disable lookaside memory allocation for objects that might be
100 ** shared across database connections.
102 static void disableLookaside(Parse *pParse){
103 pParse->disableLookaside++;
104 pParse->db->lookaside.bDisable++;
107 } // end %include
109 // Input is a single SQL command
110 input ::= cmdlist.
111 cmdlist ::= cmdlist ecmd.
112 cmdlist ::= ecmd.
113 ecmd ::= SEMI.
114 ecmd ::= explain cmdx SEMI.
115 explain ::= .
116 %ifndef SQLITE_OMIT_EXPLAIN
117 explain ::= EXPLAIN. { pParse->explain = 1; }
118 explain ::= EXPLAIN QUERY PLAN. { pParse->explain = 2; }
119 %endif SQLITE_OMIT_EXPLAIN
120 cmdx ::= cmd. { sqlite3FinishCoding(pParse); }
122 ///////////////////// Begin and end transactions. ////////////////////////////
125 cmd ::= BEGIN transtype(Y) trans_opt. {sqlite3BeginTransaction(pParse, Y);}
126 trans_opt ::= .
127 trans_opt ::= TRANSACTION.
128 trans_opt ::= TRANSACTION nm.
129 %type transtype {int}
130 transtype(A) ::= . {A = TK_DEFERRED;}
131 transtype(A) ::= DEFERRED(X). {A = @X; /*A-overwrites-X*/}
132 transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/}
133 transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/}
134 cmd ::= COMMIT|END(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
135 cmd ::= ROLLBACK(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
137 savepoint_opt ::= SAVEPOINT.
138 savepoint_opt ::= .
139 cmd ::= SAVEPOINT nm(X). {
140 sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
142 cmd ::= RELEASE savepoint_opt nm(X). {
143 sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
145 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
146 sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
149 ///////////////////// The CREATE TABLE statement ////////////////////////////
151 cmd ::= create_table create_table_args.
152 create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
153 sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
155 createkw(A) ::= CREATE(A). {disableLookaside(pParse);}
157 %type ifnotexists {int}
158 ifnotexists(A) ::= . {A = 0;}
159 ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
160 %type temp {int}
161 %ifndef SQLITE_OMIT_TEMPDB
162 temp(A) ::= TEMP. {A = 1;}
163 %endif SQLITE_OMIT_TEMPDB
164 temp(A) ::= . {A = 0;}
165 create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_options(F). {
166 sqlite3EndTable(pParse,&X,&E,F,0);
168 create_table_args ::= AS select(S). {
169 sqlite3EndTable(pParse,0,0,0,S);
170 sqlite3SelectDelete(pParse->db, S);
172 %type table_options {int}
173 table_options(A) ::= . {A = 0;}
174 table_options(A) ::= WITHOUT nm(X). {
175 if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
176 A = TF_WithoutRowid | TF_NoVisibleRowid;
177 }else{
178 A = 0;
179 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
182 columnlist ::= columnlist COMMA columnname carglist.
183 columnlist ::= columnname carglist.
184 columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
186 // Declare some tokens early in order to influence their values, to
187 // improve performance and reduce the executable size. The goal here is
188 // to get the "jump" operations in ISNULL through ESCAPE to have numeric
189 // values that are early enough so that all jump operations are clustered
190 // at the beginning, but also so that the comparison tokens NE through GE
191 // are as large as possible so that they are near to FUNCTION, which is a
192 // token synthesized by addopcodes.tcl.
194 %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
195 %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
196 %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
197 %token GT LE LT GE ESCAPE.
199 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
200 // fallback to ID if they will not parse as their original value.
201 // This obviates the need for the "id" nonterminal.
203 %fallback ID
204 ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
205 CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR
206 IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
207 QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW
208 ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
209 %ifdef SQLITE_OMIT_COMPOUND_SELECT
210 EXCEPT INTERSECT UNION
211 %endif SQLITE_OMIT_COMPOUND_SELECT
212 REINDEX RENAME CTIME_KW IF
214 %wildcard ANY.
216 // Define operator precedence early so that this is the first occurrence
217 // of the operator tokens in the grammer. Keeping the operators together
218 // causes them to be assigned integer values that are close together,
219 // which keeps parser tables smaller.
221 // The token values assigned to these symbols is determined by the order
222 // in which lemon first sees them. It must be the case that ISNULL/NOTNULL,
223 // NE/EQ, GT/LE, and GE/LT are separated by only a single value. See
224 // the sqlite3ExprIfFalse() routine for additional information on this
225 // constraint.
227 %left OR.
228 %left AND.
229 %right NOT.
230 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
231 %left GT LE LT GE.
232 %right ESCAPE.
233 %left BITAND BITOR LSHIFT RSHIFT.
234 %left PLUS MINUS.
235 %left STAR SLASH REM.
236 %left CONCAT.
237 %left COLLATE.
238 %right BITNOT.
240 // An IDENTIFIER can be a generic identifier, or one of several
241 // keywords. Any non-standard keyword can also be an identifier.
243 %token_class id ID|INDEXED.
246 // And "ids" is an identifer-or-string.
248 %token_class ids ID|STRING.
250 // The name of a column or table can be any of the following:
252 %type nm {Token}
253 nm(A) ::= id(A).
254 nm(A) ::= STRING(A).
255 nm(A) ::= JOIN_KW(A).
257 // A typetoken is really zero or more tokens that form a type name such
258 // as can be found after the column name in a CREATE TABLE statement.
259 // Multiple tokens are concatenated to form the value of the typetoken.
261 %type typetoken {Token}
262 typetoken(A) ::= . {A.n = 0; A.z = 0;}
263 typetoken(A) ::= typename(A).
264 typetoken(A) ::= typename(A) LP signed RP(Y). {
265 A.n = (int)(&Y.z[Y.n] - A.z);
267 typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
268 A.n = (int)(&Y.z[Y.n] - A.z);
270 %type typename {Token}
271 typename(A) ::= ids(A).
272 typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
273 signed ::= plus_num.
274 signed ::= minus_num.
276 // The scanpt non-terminal takes a value which is a pointer to the
277 // input text just past the last token that has been shifted into
278 // the parser. By surrounding some phrase in the grammar with two
279 // scanpt non-terminals, we can capture the input text for that phrase.
280 // For example:
282 // something ::= .... scanpt(A) phrase scanpt(Z).
284 // The text that is parsed as "phrase" is a string starting at A
285 // and containing (int)(Z-A) characters. There might be some extra
286 // whitespace on either end of the text, but that can be removed in
287 // post-processing, if needed.
289 %type scanpt {const char*}
290 scanpt(A) ::= . {
291 assert( yyLookahead!=YYNOCODE );
292 A = yyLookaheadToken.z;
295 // "carglist" is a list of additional constraints that come after the
296 // column name and column type in a CREATE TABLE statement.
298 carglist ::= carglist ccons.
299 carglist ::= .
300 ccons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
301 ccons ::= DEFAULT scanpt(A) term(X) scanpt(Z).
302 {sqlite3AddDefaultValue(pParse,X,A,Z);}
303 ccons ::= DEFAULT LP(A) expr(X) RP(Z).
304 {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);}
305 ccons ::= DEFAULT PLUS(A) term(X) scanpt(Z).
306 {sqlite3AddDefaultValue(pParse,X,A.z,Z);}
307 ccons ::= DEFAULT MINUS(A) term(X) scanpt(Z). {
308 Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0);
309 sqlite3AddDefaultValue(pParse,p,A.z,Z);
311 ccons ::= DEFAULT scanpt id(X). {
312 Expr *p = tokenExpr(pParse, TK_STRING, X);
313 sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n);
316 // In addition to the type name, we also care about the primary key and
317 // UNIQUE constraints.
319 ccons ::= NULL onconf.
320 ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);}
321 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
322 {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
323 ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
324 SQLITE_IDXTYPE_UNIQUE);}
325 ccons ::= CHECK LP expr(X) RP. {sqlite3AddCheckConstraint(pParse,X);}
326 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
327 {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
328 ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);}
329 ccons ::= COLLATE ids(C). {sqlite3AddCollateType(pParse, &C);}
331 // The optional AUTOINCREMENT keyword
332 %type autoinc {int}
333 autoinc(X) ::= . {X = 0;}
334 autoinc(X) ::= AUTOINCR. {X = 1;}
336 // The next group of rules parses the arguments to a REFERENCES clause
337 // that determine if the referential integrity checking is deferred or
338 // or immediate and which determine what action to take if a ref-integ
339 // check fails.
341 %type refargs {int}
342 refargs(A) ::= . { A = OE_None*0x0101; /* EV: R-19803-45884 */}
343 refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
344 %type refarg {struct {int value; int mask;}}
345 refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; }
346 refarg(A) ::= ON INSERT refact. { A.value = 0; A.mask = 0x000000; }
347 refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; }
348 refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; }
349 %type refact {int}
350 refact(A) ::= SET NULL. { A = OE_SetNull; /* EV: R-33326-45252 */}
351 refact(A) ::= SET DEFAULT. { A = OE_SetDflt; /* EV: R-33326-45252 */}
352 refact(A) ::= CASCADE. { A = OE_Cascade; /* EV: R-33326-45252 */}
353 refact(A) ::= RESTRICT. { A = OE_Restrict; /* EV: R-33326-45252 */}
354 refact(A) ::= NO ACTION. { A = OE_None; /* EV: R-33326-45252 */}
355 %type defer_subclause {int}
356 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt. {A = 0;}
357 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;}
358 %type init_deferred_pred_opt {int}
359 init_deferred_pred_opt(A) ::= . {A = 0;}
360 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;}
361 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;}
363 conslist_opt(A) ::= . {A.n = 0; A.z = 0;}
364 conslist_opt(A) ::= COMMA(A) conslist.
365 conslist ::= conslist tconscomma tcons.
366 conslist ::= tcons.
367 tconscomma ::= COMMA. {pParse->constraintName.n = 0;}
368 tconscomma ::= .
369 tcons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
370 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
371 {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
372 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
373 {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
374 SQLITE_IDXTYPE_UNIQUE);}
375 tcons ::= CHECK LP expr(E) RP onconf.
376 {sqlite3AddCheckConstraint(pParse,E);}
377 tcons ::= FOREIGN KEY LP eidlist(FA) RP
378 REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
379 sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
380 sqlite3DeferForeignKey(pParse, D);
382 %type defer_subclause_opt {int}
383 defer_subclause_opt(A) ::= . {A = 0;}
384 defer_subclause_opt(A) ::= defer_subclause(A).
386 // The following is a non-standard extension that allows us to declare the
387 // default behavior when there is a constraint conflict.
389 %type onconf {int}
390 %type orconf {int}
391 %type resolvetype {int}
392 onconf(A) ::= . {A = OE_Default;}
393 onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;}
394 orconf(A) ::= . {A = OE_Default;}
395 orconf(A) ::= OR resolvetype(X). {A = X;}
396 resolvetype(A) ::= raisetype(A).
397 resolvetype(A) ::= IGNORE. {A = OE_Ignore;}
398 resolvetype(A) ::= REPLACE. {A = OE_Replace;}
400 ////////////////////////// The DROP TABLE /////////////////////////////////////
402 cmd ::= DROP TABLE ifexists(E) fullname(X). {
403 sqlite3DropTable(pParse, X, 0, E);
405 %type ifexists {int}
406 ifexists(A) ::= IF EXISTS. {A = 1;}
407 ifexists(A) ::= . {A = 0;}
409 ///////////////////// The CREATE VIEW statement /////////////////////////////
411 %ifndef SQLITE_OMIT_VIEW
412 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
413 AS select(S). {
414 sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
416 cmd ::= DROP VIEW ifexists(E) fullname(X). {
417 sqlite3DropTable(pParse, X, 1, E);
419 %endif SQLITE_OMIT_VIEW
421 //////////////////////// The SELECT statement /////////////////////////////////
423 cmd ::= select(X). {
424 SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
425 sqlite3Select(pParse, X, &dest);
426 sqlite3SelectDelete(pParse->db, X);
429 %type select {Select*}
430 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
431 %type selectnowith {Select*}
432 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
433 %type oneselect {Select*}
434 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
436 %include {
438 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
439 ** all elements in the list. And make sure list length does not exceed
440 ** SQLITE_LIMIT_COMPOUND_SELECT.
442 static void parserDoubleLinkSelect(Parse *pParse, Select *p){
443 if( p->pPrior ){
444 Select *pNext = 0, *pLoop;
445 int mxSelect, cnt = 0;
446 for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
447 pLoop->pNext = pNext;
448 pLoop->selFlags |= SF_Compound;
450 if( (p->selFlags & SF_MultiValue)==0 &&
451 (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
452 cnt>mxSelect
454 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
460 select(A) ::= with(W) selectnowith(X). {
461 Select *p = X;
462 if( p ){
463 p->pWith = W;
464 parserDoubleLinkSelect(pParse, p);
465 }else{
466 sqlite3WithDelete(pParse->db, W);
468 A = p; /*A-overwrites-W*/
471 selectnowith(A) ::= oneselect(A).
472 %ifndef SQLITE_OMIT_COMPOUND_SELECT
473 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
474 Select *pRhs = Z;
475 Select *pLhs = A;
476 if( pRhs && pRhs->pPrior ){
477 SrcList *pFrom;
478 Token x;
479 x.n = 0;
480 parserDoubleLinkSelect(pParse, pRhs);
481 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
482 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
484 if( pRhs ){
485 pRhs->op = (u8)Y;
486 pRhs->pPrior = pLhs;
487 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
488 pRhs->selFlags &= ~SF_MultiValue;
489 if( Y!=TK_ALL ) pParse->hasCompound = 1;
490 }else{
491 sqlite3SelectDelete(pParse->db, pLhs);
493 A = pRhs;
495 %type multiselect_op {int}
496 multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
497 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
498 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
499 %endif SQLITE_OMIT_COMPOUND_SELECT
500 oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
501 groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
502 #if SELECTTRACE_ENABLED
503 Token s = S; /*A-overwrites-S*/
504 #endif
505 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
506 #if SELECTTRACE_ENABLED
507 /* Populate the Select.zSelName[] string that is used to help with
508 ** query planner debugging, to differentiate between multiple Select
509 ** objects in a complex query.
511 ** If the SELECT keyword is immediately followed by a C-style comment
512 ** then extract the first few alphanumeric characters from within that
513 ** comment to be the zSelName value. Otherwise, the label is #N where
514 ** is an integer that is incremented with each SELECT statement seen.
516 if( A!=0 ){
517 const char *z = s.z+6;
518 int i;
519 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "#%d",
520 ++pParse->nSelect);
521 while( z[0]==' ' ) z++;
522 if( z[0]=='/' && z[1]=='*' ){
523 z += 2;
524 while( z[0]==' ' ) z++;
525 for(i=0; sqlite3Isalnum(z[i]); i++){}
526 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z);
529 #endif /* SELECTRACE_ENABLED */
531 oneselect(A) ::= values(A).
533 %type values {Select*}
534 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
535 values(A) ::= VALUES LP nexprlist(X) RP. {
536 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
538 values(A) ::= values(A) COMMA LP exprlist(Y) RP. {
539 Select *pRight, *pLeft = A;
540 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
541 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
542 if( pRight ){
543 pRight->op = TK_ALL;
544 pRight->pPrior = pLeft;
545 A = pRight;
546 }else{
547 A = pLeft;
551 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
552 // present and false (0) if it is not.
554 %type distinct {int}
555 distinct(A) ::= DISTINCT. {A = SF_Distinct;}
556 distinct(A) ::= ALL. {A = SF_All;}
557 distinct(A) ::= . {A = 0;}
559 // selcollist is a list of expressions that are to become the return
560 // values of the SELECT statement. The "*" in statements like
561 // "SELECT * FROM ..." is encoded as a special expression with an
562 // opcode of TK_ASTERISK.
564 %type selcollist {ExprList*}
565 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
566 %type sclp {ExprList*}
567 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
568 sclp(A) ::= selcollist(A) COMMA.
569 sclp(A) ::= . {A = 0;}
570 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). {
571 A = sqlite3ExprListAppend(pParse, A, X);
572 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
573 sqlite3ExprListSetSpan(pParse,A,B,Z);
575 selcollist(A) ::= sclp(A) scanpt STAR. {
576 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
577 A = sqlite3ExprListAppend(pParse, A, p);
579 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
580 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
581 Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
582 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
583 A = sqlite3ExprListAppend(pParse,A, pDot);
586 // An option "AS <id>" phrase that can follow one of the expressions that
587 // define the result set, or one of the tables in the FROM clause.
589 %type as {Token}
590 as(X) ::= AS nm(Y). {X = Y;}
591 as(X) ::= ids(X).
592 as(X) ::= . {X.n = 0; X.z = 0;}
595 %type seltablist {SrcList*}
596 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
597 %type stl_prefix {SrcList*}
598 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
599 %type from {SrcList*}
600 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
602 // A complete FROM clause.
604 from(A) ::= . {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
605 from(A) ::= FROM seltablist(X). {
606 A = X;
607 sqlite3SrcListShiftJoinType(A);
610 // "seltablist" is a "Select Table List" - the content of the FROM clause
611 // in a SELECT statement. "stl_prefix" is a prefix of this list.
613 stl_prefix(A) ::= seltablist(A) joinop(Y). {
614 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
616 stl_prefix(A) ::= . {A = 0;}
617 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I)
618 on_opt(N) using_opt(U). {
619 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
620 sqlite3SrcListIndexedBy(pParse, A, &I);
622 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
623 on_opt(N) using_opt(U). {
624 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
625 sqlite3SrcListFuncArgs(pParse, A, E);
627 %ifndef SQLITE_OMIT_SUBQUERY
628 seltablist(A) ::= stl_prefix(A) LP select(S) RP
629 as(Z) on_opt(N) using_opt(U). {
630 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U);
632 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP
633 as(Z) on_opt(N) using_opt(U). {
634 if( A==0 && Z.n==0 && N==0 && U==0 ){
635 A = F;
636 }else if( F->nSrc==1 ){
637 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U);
638 if( A ){
639 struct SrcList_item *pNew = &A->a[A->nSrc-1];
640 struct SrcList_item *pOld = F->a;
641 pNew->zName = pOld->zName;
642 pNew->zDatabase = pOld->zDatabase;
643 pNew->pSelect = pOld->pSelect;
644 pOld->zName = pOld->zDatabase = 0;
645 pOld->pSelect = 0;
647 sqlite3SrcListDelete(pParse->db, F);
648 }else{
649 Select *pSubquery;
650 sqlite3SrcListShiftJoinType(F);
651 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
652 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U);
655 %endif SQLITE_OMIT_SUBQUERY
657 %type dbnm {Token}
658 dbnm(A) ::= . {A.z=0; A.n=0;}
659 dbnm(A) ::= DOT nm(X). {A = X;}
661 %type fullname {SrcList*}
662 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
663 fullname(A) ::= nm(X) dbnm(Y).
664 {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
666 %type joinop {int}
667 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; }
668 joinop(X) ::= JOIN_KW(A) JOIN.
669 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/}
670 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
671 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
672 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
673 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
675 %type on_opt {Expr*}
676 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
677 on_opt(N) ::= ON expr(E). {N = E;}
678 on_opt(N) ::= . {N = 0;}
680 // Note that this block abuses the Token type just a little. If there is
681 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
682 // there is an INDEXED BY clause, then the token is populated as per normal,
683 // with z pointing to the token data and n containing the number of bytes
684 // in the token.
686 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
687 // normally illegal. The sqlite3SrcListIndexedBy() function
688 // recognizes and interprets this as a special case.
690 %type indexed_opt {Token}
691 indexed_opt(A) ::= . {A.z=0; A.n=0;}
692 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
693 indexed_opt(A) ::= NOT INDEXED. {A.z=0; A.n=1;}
695 %type using_opt {IdList*}
696 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
697 using_opt(U) ::= USING LP idlist(L) RP. {U = L;}
698 using_opt(U) ::= . {U = 0;}
701 %type orderby_opt {ExprList*}
702 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
704 // the sortlist non-terminal stores a list of expression where each
705 // expression is optionally followed by ASC or DESC to indicate the
706 // sort order.
708 %type sortlist {ExprList*}
709 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
711 orderby_opt(A) ::= . {A = 0;}
712 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
713 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). {
714 A = sqlite3ExprListAppend(pParse,A,Y);
715 sqlite3ExprListSetSortOrder(A,Z);
717 sortlist(A) ::= expr(Y) sortorder(Z). {
718 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
719 sqlite3ExprListSetSortOrder(A,Z);
722 %type sortorder {int}
724 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
725 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
726 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;}
728 %type groupby_opt {ExprList*}
729 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
730 groupby_opt(A) ::= . {A = 0;}
731 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
733 %type having_opt {Expr*}
734 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
735 having_opt(A) ::= . {A = 0;}
736 having_opt(A) ::= HAVING expr(X). {A = X;}
738 %type limit_opt {Expr*}
740 // The destructor for limit_opt will never fire in the current grammar.
741 // The limit_opt non-terminal only occurs at the end of a single production
742 // rule for SELECT statements. As soon as the rule that create the
743 // limit_opt non-terminal reduces, the SELECT statement rule will also
744 // reduce. So there is never a limit_opt non-terminal on the stack
745 // except as a transient. So there is never anything to destroy.
747 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
748 limit_opt(A) ::= . {A = 0;}
749 limit_opt(A) ::= LIMIT expr(X).
750 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
751 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
752 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
753 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
754 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
756 /////////////////////////// The DELETE statement /////////////////////////////
758 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
759 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W)
760 orderby_opt(O) limit_opt(L). {
761 sqlite3WithPush(pParse, C, 1);
762 sqlite3SrcListIndexedBy(pParse, X, &I);
763 sqlite3DeleteFrom(pParse,X,W,O,L);
765 %endif
766 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
767 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
768 sqlite3WithPush(pParse, C, 1);
769 sqlite3SrcListIndexedBy(pParse, X, &I);
770 sqlite3DeleteFrom(pParse,X,W,0,0);
772 %endif
774 %type where_opt {Expr*}
775 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
777 where_opt(A) ::= . {A = 0;}
778 where_opt(A) ::= WHERE expr(X). {A = X;}
780 ////////////////////////// The UPDATE command ////////////////////////////////
782 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
783 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
784 where_opt(W) orderby_opt(O) limit_opt(L). {
785 sqlite3WithPush(pParse, C, 1);
786 sqlite3SrcListIndexedBy(pParse, X, &I);
787 sqlite3ExprListCheckLength(pParse,Y,"set list");
788 sqlite3Update(pParse,X,Y,W,R,O,L);
790 %endif
791 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
792 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
793 where_opt(W). {
794 sqlite3WithPush(pParse, C, 1);
795 sqlite3SrcListIndexedBy(pParse, X, &I);
796 sqlite3ExprListCheckLength(pParse,Y,"set list");
797 sqlite3Update(pParse,X,Y,W,R,0,0);
799 %endif
801 %type setlist {ExprList*}
802 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
804 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
805 A = sqlite3ExprListAppend(pParse, A, Y);
806 sqlite3ExprListSetName(pParse, A, &X, 1);
808 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
809 A = sqlite3ExprListAppendVector(pParse, A, X, Y);
811 setlist(A) ::= nm(X) EQ expr(Y). {
812 A = sqlite3ExprListAppend(pParse, 0, Y);
813 sqlite3ExprListSetName(pParse, A, &X, 1);
815 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
816 A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
819 ////////////////////////// The INSERT command /////////////////////////////////
821 cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). {
822 sqlite3WithPush(pParse, W, 1);
823 sqlite3Insert(pParse, X, S, F, R);
825 cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
827 sqlite3WithPush(pParse, W, 1);
828 sqlite3Insert(pParse, X, 0, F, R);
831 %type insert_cmd {int}
832 insert_cmd(A) ::= INSERT orconf(R). {A = R;}
833 insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
835 %type idlist_opt {IdList*}
836 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
837 %type idlist {IdList*}
838 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
840 idlist_opt(A) ::= . {A = 0;}
841 idlist_opt(A) ::= LP idlist(X) RP. {A = X;}
842 idlist(A) ::= idlist(A) COMMA nm(Y).
843 {A = sqlite3IdListAppend(pParse->db,A,&Y);}
844 idlist(A) ::= nm(Y).
845 {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/}
847 /////////////////////////// Expression Processing /////////////////////////////
850 %type expr {Expr*}
851 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
852 %type term {Expr*}
853 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
855 %include {
857 /* Construct a new Expr object from a single identifier. Use the
858 ** new Expr to populate pOut. Set the span of pOut to be the identifier
859 ** that created the expression.
861 static Expr *tokenExpr(Parse *pParse, int op, Token t){
862 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
863 if( p ){
864 memset(p, 0, sizeof(Expr));
865 p->op = (u8)op;
866 p->flags = EP_Leaf;
867 p->iAgg = -1;
868 p->u.zToken = (char*)&p[1];
869 memcpy(p->u.zToken, t.z, t.n);
870 p->u.zToken[t.n] = 0;
871 if( sqlite3Isquote(p->u.zToken[0]) ){
872 if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
873 sqlite3Dequote(p->u.zToken);
875 #if SQLITE_MAX_EXPR_DEPTH>0
876 p->nHeight = 1;
877 #endif
879 return p;
883 expr(A) ::= term(A).
884 expr(A) ::= LP expr(X) RP. {A = X;}
885 expr(A) ::= id(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
886 expr(A) ::= JOIN_KW(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
887 expr(A) ::= nm(X) DOT nm(Y). {
888 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
889 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
890 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
892 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
893 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
894 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
895 Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1);
896 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
897 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
899 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
900 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
901 term(A) ::= INTEGER(X). {
902 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
904 expr(A) ::= VARIABLE(X). {
905 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
906 u32 n = X.n;
907 A = tokenExpr(pParse, TK_VARIABLE, X);
908 sqlite3ExprAssignVarNumber(pParse, A, n);
909 }else{
910 /* When doing a nested parse, one can include terms in an expression
911 ** that look like this: #1 #2 ... These terms refer to registers
912 ** in the virtual machine. #N is the N-th register. */
913 Token t = X; /*A-overwrites-X*/
914 assert( t.n>=2 );
915 if( pParse->nested==0 ){
916 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
917 A = 0;
918 }else{
919 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
920 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
924 expr(A) ::= expr(A) COLLATE ids(C). {
925 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
927 %ifndef SQLITE_OMIT_CAST
928 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
929 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
930 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
932 %endif SQLITE_OMIT_CAST
933 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP. {
934 if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
935 sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
937 A = sqlite3ExprFunction(pParse, Y, &X);
938 if( D==SF_Distinct && A ){
939 A->flags |= EP_Distinct;
942 expr(A) ::= id(X) LP STAR RP. {
943 A = sqlite3ExprFunction(pParse, 0, &X);
945 term(A) ::= CTIME_KW(OP). {
946 A = sqlite3ExprFunction(pParse, 0, &OP);
949 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
950 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
951 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
952 if( A ){
953 A->x.pList = pList;
954 }else{
955 sqlite3ExprListDelete(pParse->db, pList);
959 expr(A) ::= expr(A) AND(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
960 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
961 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
962 {A=sqlite3PExpr(pParse,@OP,A,Y);}
963 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
964 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
965 {A=sqlite3PExpr(pParse,@OP,A,Y);}
966 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
967 {A=sqlite3PExpr(pParse,@OP,A,Y);}
968 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
969 {A=sqlite3PExpr(pParse,@OP,A,Y);}
970 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
971 %type likeop {Token}
972 likeop(A) ::= LIKE_KW|MATCH(A).
973 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
974 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] {
975 ExprList *pList;
976 int bNot = OP.n & 0x80000000;
977 OP.n &= 0x7fffffff;
978 pList = sqlite3ExprListAppend(pParse,0, Y);
979 pList = sqlite3ExprListAppend(pParse,pList, A);
980 A = sqlite3ExprFunction(pParse, pList, &OP);
981 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
982 if( A ) A->flags |= EP_InfixFunc;
984 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] {
985 ExprList *pList;
986 int bNot = OP.n & 0x80000000;
987 OP.n &= 0x7fffffff;
988 pList = sqlite3ExprListAppend(pParse,0, Y);
989 pList = sqlite3ExprListAppend(pParse,pList, A);
990 pList = sqlite3ExprListAppend(pParse,pList, E);
991 A = sqlite3ExprFunction(pParse, pList, &OP);
992 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
993 if( A ) A->flags |= EP_InfixFunc;
996 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);}
997 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
999 %include {
1000 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1001 ** unary TK_ISNULL or TK_NOTNULL expression. */
1002 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1003 sqlite3 *db = pParse->db;
1004 if( pA && pY && pY->op==TK_NULL ){
1005 pA->op = (u8)op;
1006 sqlite3ExprDelete(db, pA->pRight);
1007 pA->pRight = 0;
1012 // expr1 IS expr2
1013 // expr1 IS NOT expr2
1015 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1016 // is any other expression, code as TK_IS or TK_ISNOT.
1018 expr(A) ::= expr(A) IS expr(Y). {
1019 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1020 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1022 expr(A) ::= expr(A) IS NOT expr(Y). {
1023 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1024 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1027 expr(A) ::= NOT(B) expr(X).
1028 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1029 expr(A) ::= BITNOT(B) expr(X).
1030 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1031 expr(A) ::= MINUS expr(X). [BITNOT]
1032 {A = sqlite3PExpr(pParse, TK_UMINUS, X, 0);}
1033 expr(A) ::= PLUS expr(X). [BITNOT]
1034 {A = sqlite3PExpr(pParse, TK_UPLUS, X, 0);}
1036 %type between_op {int}
1037 between_op(A) ::= BETWEEN. {A = 0;}
1038 between_op(A) ::= NOT BETWEEN. {A = 1;}
1039 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1040 ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1041 pList = sqlite3ExprListAppend(pParse,pList, Y);
1042 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1043 if( A ){
1044 A->x.pList = pList;
1045 }else{
1046 sqlite3ExprListDelete(pParse->db, pList);
1048 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1050 %ifndef SQLITE_OMIT_SUBQUERY
1051 %type in_op {int}
1052 in_op(A) ::= IN. {A = 0;}
1053 in_op(A) ::= NOT IN. {A = 1;}
1054 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1055 if( Y==0 ){
1056 /* Expressions of the form
1058 ** expr1 IN ()
1059 ** expr1 NOT IN ()
1061 ** simplify to constants 0 (false) and 1 (true), respectively,
1062 ** regardless of the value of expr1.
1064 sqlite3ExprDelete(pParse->db, A);
1065 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1);
1066 }else if( Y->nExpr==1 ){
1067 /* Expressions of the form:
1069 ** expr1 IN (?1)
1070 ** expr1 NOT IN (?2)
1072 ** with exactly one value on the RHS can be simplified to something
1073 ** like this:
1075 ** expr1 == ?1
1076 ** expr1 <> ?2
1078 ** But, the RHS of the == or <> is marked with the EP_Generic flag
1079 ** so that it may not contribute to the computation of comparison
1080 ** affinity or the collating sequence to use for comparison. Otherwise,
1081 ** the semantics would be subtly different from IN or NOT IN.
1083 Expr *pRHS = Y->a[0].pExpr;
1084 Y->a[0].pExpr = 0;
1085 sqlite3ExprListDelete(pParse->db, Y);
1086 /* pRHS cannot be NULL because a malloc error would have been detected
1087 ** before now and control would have never reached this point */
1088 if( ALWAYS(pRHS) ){
1089 pRHS->flags &= ~EP_Collate;
1090 pRHS->flags |= EP_Generic;
1092 A = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A, pRHS);
1093 }else{
1094 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1095 if( A ){
1096 A->x.pList = Y;
1097 sqlite3ExprSetHeightAndFlags(pParse, A);
1098 }else{
1099 sqlite3ExprListDelete(pParse->db, Y);
1101 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1104 expr(A) ::= LP select(X) RP. {
1105 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1106 sqlite3PExprAddSelect(pParse, A, X);
1108 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] {
1109 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1110 sqlite3PExprAddSelect(pParse, A, Y);
1111 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1113 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1114 SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1115 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1116 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1117 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1118 sqlite3PExprAddSelect(pParse, A, pSelect);
1119 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1121 expr(A) ::= EXISTS LP select(Y) RP. {
1122 Expr *p;
1123 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1124 sqlite3PExprAddSelect(pParse, p, Y);
1126 %endif SQLITE_OMIT_SUBQUERY
1128 /* CASE expressions */
1129 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1130 A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1131 if( A ){
1132 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1133 sqlite3ExprSetHeightAndFlags(pParse, A);
1134 }else{
1135 sqlite3ExprListDelete(pParse->db, Y);
1136 sqlite3ExprDelete(pParse->db, Z);
1139 %type case_exprlist {ExprList*}
1140 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1141 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1142 A = sqlite3ExprListAppend(pParse,A, Y);
1143 A = sqlite3ExprListAppend(pParse,A, Z);
1145 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1146 A = sqlite3ExprListAppend(pParse,0, Y);
1147 A = sqlite3ExprListAppend(pParse,A, Z);
1149 %type case_else {Expr*}
1150 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1151 case_else(A) ::= ELSE expr(X). {A = X;}
1152 case_else(A) ::= . {A = 0;}
1153 %type case_operand {Expr*}
1154 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1155 case_operand(A) ::= expr(X). {A = X; /*A-overwrites-X*/}
1156 case_operand(A) ::= . {A = 0;}
1158 %type exprlist {ExprList*}
1159 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1160 %type nexprlist {ExprList*}
1161 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1163 exprlist(A) ::= nexprlist(A).
1164 exprlist(A) ::= . {A = 0;}
1165 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1166 {A = sqlite3ExprListAppend(pParse,A,Y);}
1167 nexprlist(A) ::= expr(Y).
1168 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1170 %ifndef SQLITE_OMIT_SUBQUERY
1171 /* A paren_exprlist is an optional expression list contained inside
1172 ** of parenthesis */
1173 %type paren_exprlist {ExprList*}
1174 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1175 paren_exprlist(A) ::= . {A = 0;}
1176 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;}
1177 %endif SQLITE_OMIT_SUBQUERY
1180 ///////////////////////////// The CREATE INDEX command ///////////////////////
1182 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1183 ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1184 sqlite3CreateIndex(pParse, &X, &D,
1185 sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1186 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1189 %type uniqueflag {int}
1190 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;}
1191 uniqueflag(A) ::= . {A = OE_None;}
1194 // The eidlist non-terminal (Expression Id List) generates an ExprList
1195 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1196 // This list is stored in an ExprList rather than an IdList so that it
1197 // can be easily sent to sqlite3ColumnsExprList().
1199 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1200 // used for the arguments to an index. That is just an historical accident.
1202 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1203 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1204 // places - places that might have been stored in the sqlite_master schema.
1205 // Those extra features were ignored. But because they might be in some
1206 // (busted) old databases, we need to continue parsing them when loading
1207 // historical schemas.
1209 %type eidlist {ExprList*}
1210 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1211 %type eidlist_opt {ExprList*}
1212 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1214 %include {
1215 /* Add a single new term to an ExprList that is used to store a
1216 ** list of identifiers. Report an error if the ID list contains
1217 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1218 ** error while parsing a legacy schema.
1220 static ExprList *parserAddExprIdListTerm(
1221 Parse *pParse,
1222 ExprList *pPrior,
1223 Token *pIdToken,
1224 int hasCollate,
1225 int sortOrder
1227 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1228 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1229 && pParse->db->init.busy==0
1231 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1232 pIdToken->n, pIdToken->z);
1234 sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1235 return p;
1237 } // end %include
1239 eidlist_opt(A) ::= . {A = 0;}
1240 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;}
1241 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). {
1242 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1244 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1245 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1248 %type collate {int}
1249 collate(C) ::= . {C = 0;}
1250 collate(C) ::= COLLATE ids. {C = 1;}
1253 ///////////////////////////// The DROP INDEX command /////////////////////////
1255 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);}
1257 ///////////////////////////// The VACUUM command /////////////////////////////
1259 %ifndef SQLITE_OMIT_VACUUM
1260 %ifndef SQLITE_OMIT_ATTACH
1261 cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);}
1262 cmd ::= VACUUM nm(X). {sqlite3Vacuum(pParse,&X);}
1263 %endif SQLITE_OMIT_ATTACH
1264 %endif SQLITE_OMIT_VACUUM
1266 ///////////////////////////// The PRAGMA command /////////////////////////////
1268 %ifndef SQLITE_OMIT_PRAGMA
1269 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);}
1270 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1271 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1272 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1273 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1274 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1275 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1277 nmnum(A) ::= plus_num(A).
1278 nmnum(A) ::= nm(A).
1279 nmnum(A) ::= ON(A).
1280 nmnum(A) ::= DELETE(A).
1281 nmnum(A) ::= DEFAULT(A).
1282 %endif SQLITE_OMIT_PRAGMA
1283 %token_class number INTEGER|FLOAT.
1284 plus_num(A) ::= PLUS number(X). {A = X;}
1285 plus_num(A) ::= number(A).
1286 minus_num(A) ::= MINUS number(X). {A = X;}
1287 //////////////////////////// The CREATE TRIGGER command /////////////////////
1289 %ifndef SQLITE_OMIT_TRIGGER
1291 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1292 Token all;
1293 all.z = A.z;
1294 all.n = (int)(Z.z - A.z) + Z.n;
1295 sqlite3FinishTrigger(pParse, S, &all);
1298 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1299 trigger_time(C) trigger_event(D)
1300 ON fullname(E) foreach_clause when_clause(G). {
1301 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1302 A = (Z.n==0?B:Z); /*A-overwrites-T*/
1305 %type trigger_time {int}
1306 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ }
1307 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
1308 trigger_time(A) ::= . { A = TK_BEFORE; }
1310 %type trigger_event {struct TrigEvent}
1311 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1312 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1313 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1314 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1316 foreach_clause ::= .
1317 foreach_clause ::= FOR EACH ROW.
1319 %type when_clause {Expr*}
1320 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1321 when_clause(A) ::= . { A = 0; }
1322 when_clause(A) ::= WHEN expr(X). { A = X; }
1324 %type trigger_cmd_list {TriggerStep*}
1325 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1326 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1327 assert( A!=0 );
1328 A->pLast->pNext = X;
1329 A->pLast = X;
1331 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1332 assert( A!=0 );
1333 A->pLast = A;
1336 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1337 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1338 // the same database as the table that the trigger fires on.
1340 %type trnm {Token}
1341 trnm(A) ::= nm(A).
1342 trnm(A) ::= nm DOT nm(X). {
1343 A = X;
1344 sqlite3ErrorMsg(pParse,
1345 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1346 "statements within triggers");
1349 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1350 // statements within triggers. We make a specific error message for this
1351 // since it is an exception to the default grammar rules.
1353 tridxby ::= .
1354 tridxby ::= INDEXED BY nm. {
1355 sqlite3ErrorMsg(pParse,
1356 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1357 "within triggers");
1359 tridxby ::= NOT INDEXED. {
1360 sqlite3ErrorMsg(pParse,
1361 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1362 "within triggers");
1367 %type trigger_cmd {TriggerStep*}
1368 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1369 // UPDATE
1370 trigger_cmd(A) ::=
1371 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E).
1372 {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);}
1374 // INSERT
1375 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1376 trnm(X) idlist_opt(F) select(S) scanpt(Z).
1377 {A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,B,Z);/*A-overwrites-R*/}
1379 // DELETE
1380 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1381 {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);}
1383 // SELECT
1384 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1385 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1387 // The special RAISE expression that may occur in trigger programs
1388 expr(A) ::= RAISE LP IGNORE RP. {
1389 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1390 if( A ){
1391 A->affinity = OE_Ignore;
1394 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. {
1395 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1396 if( A ) {
1397 A->affinity = (char)T;
1400 %endif !SQLITE_OMIT_TRIGGER
1402 %type raisetype {int}
1403 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;}
1404 raisetype(A) ::= ABORT. {A = OE_Abort;}
1405 raisetype(A) ::= FAIL. {A = OE_Fail;}
1408 //////////////////////// DROP TRIGGER statement //////////////////////////////
1409 %ifndef SQLITE_OMIT_TRIGGER
1410 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1411 sqlite3DropTrigger(pParse,X,NOERR);
1413 %endif !SQLITE_OMIT_TRIGGER
1415 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1416 %ifndef SQLITE_OMIT_ATTACH
1417 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1418 sqlite3Attach(pParse, F, D, K);
1420 cmd ::= DETACH database_kw_opt expr(D). {
1421 sqlite3Detach(pParse, D);
1424 %type key_opt {Expr*}
1425 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1426 key_opt(A) ::= . { A = 0; }
1427 key_opt(A) ::= KEY expr(X). { A = X; }
1429 database_kw_opt ::= DATABASE.
1430 database_kw_opt ::= .
1431 %endif SQLITE_OMIT_ATTACH
1433 ////////////////////////// REINDEX collation //////////////////////////////////
1434 %ifndef SQLITE_OMIT_REINDEX
1435 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);}
1436 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);}
1437 %endif SQLITE_OMIT_REINDEX
1439 /////////////////////////////////// ANALYZE ///////////////////////////////////
1440 %ifndef SQLITE_OMIT_ANALYZE
1441 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);}
1442 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);}
1443 %endif
1445 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1446 %ifndef SQLITE_OMIT_ALTERTABLE
1447 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1448 sqlite3AlterRenameTable(pParse,X,&Z);
1450 cmd ::= ALTER TABLE add_column_fullname
1451 ADD kwcolumn_opt columnname(Y) carglist. {
1452 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1453 sqlite3AlterFinishAddColumn(pParse, &Y);
1455 add_column_fullname ::= fullname(X). {
1456 disableLookaside(pParse);
1457 sqlite3AlterBeginAddColumn(pParse, X);
1459 kwcolumn_opt ::= .
1460 kwcolumn_opt ::= COLUMNKW.
1461 %endif SQLITE_OMIT_ALTERTABLE
1463 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1464 %ifndef SQLITE_OMIT_VIRTUALTABLE
1465 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);}
1466 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);}
1467 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1468 nm(X) dbnm(Y) USING nm(Z). {
1469 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1471 vtabarglist ::= vtabarg.
1472 vtabarglist ::= vtabarglist COMMA vtabarg.
1473 vtabarg ::= . {sqlite3VtabArgInit(pParse);}
1474 vtabarg ::= vtabarg vtabargtoken.
1475 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);}
1476 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);}
1477 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);}
1478 anylist ::= .
1479 anylist ::= anylist LP anylist RP.
1480 anylist ::= anylist ANY.
1481 %endif SQLITE_OMIT_VIRTUALTABLE
1484 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1485 %type with {With*}
1486 %type wqlist {With*}
1487 %destructor with {sqlite3WithDelete(pParse->db, $$);}
1488 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1490 with(A) ::= . {A = 0;}
1491 %ifndef SQLITE_OMIT_CTE
1492 with(A) ::= WITH wqlist(W). { A = W; }
1493 with(A) ::= WITH RECURSIVE wqlist(W). { A = W; }
1495 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1496 A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/
1498 wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1499 A = sqlite3WithAdd(pParse, A, &X, Y, Z);
1501 %endif SQLITE_OMIT_CTE