xref: /sqlite-3.40.0/src/expr.c (revision 049d487e)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains routines used for analyzing expressions and
13 ** for generating VDBE code that evaluates expressions in SQLite.
14 */
15 #include "sqliteInt.h"
16 
17 /*
18 ** Return the 'affinity' of the expression pExpr if any.
19 **
20 ** If pExpr is a column, a reference to a column via an 'AS' alias,
21 ** or a sub-select with a column as the return value, then the
22 ** affinity of that column is returned. Otherwise, 0x00 is returned,
23 ** indicating no affinity for the expression.
24 **
25 ** i.e. the WHERE clause expresssions in the following statements all
26 ** have an affinity:
27 **
28 ** CREATE TABLE t1(a);
29 ** SELECT * FROM t1 WHERE a;
30 ** SELECT a AS b FROM t1 WHERE b;
31 ** SELECT * FROM t1 WHERE (select a from t1);
32 */
33 char sqlite3ExprAffinity(Expr *pExpr){
34   int op;
35   pExpr = sqlite3ExprSkipCollate(pExpr);
36   op = pExpr->op;
37   if( op==TK_SELECT ){
38     assert( pExpr->flags&EP_xIsSelect );
39     return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
40   }
41 #ifndef SQLITE_OMIT_CAST
42   if( op==TK_CAST ){
43     assert( !ExprHasProperty(pExpr, EP_IntValue) );
44     return sqlite3AffinityType(pExpr->u.zToken);
45   }
46 #endif
47   if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER)
48    && pExpr->pTab!=0
49   ){
50     /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
51     ** a TK_COLUMN but was previously evaluated and cached in a register */
52     int j = pExpr->iColumn;
53     if( j<0 ) return SQLITE_AFF_INTEGER;
54     assert( pExpr->pTab && j<pExpr->pTab->nCol );
55     return pExpr->pTab->aCol[j].affinity;
56   }
57   return pExpr->affinity;
58 }
59 
60 /*
61 ** Set the collating sequence for expression pExpr to be the collating
62 ** sequence named by pToken.   Return a pointer to a new Expr node that
63 ** implements the COLLATE operator.
64 **
65 ** If a memory allocation error occurs, that fact is recorded in pParse->db
66 ** and the pExpr parameter is returned unchanged.
67 */
68 Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr *pExpr, Token *pCollName){
69   if( pCollName->n>0 ){
70     Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, 1);
71     if( pNew ){
72       pNew->pLeft = pExpr;
73       pNew->flags |= EP_Collate;
74       pExpr = pNew;
75     }
76   }
77   return pExpr;
78 }
79 Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, const char *zC){
80   Token s;
81   assert( zC!=0 );
82   s.z = zC;
83   s.n = sqlite3Strlen30(s.z);
84   return sqlite3ExprAddCollateToken(pParse, pExpr, &s);
85 }
86 
87 /*
88 ** Skip over any TK_COLLATE and/or TK_AS operators at the root of
89 ** an expression.
90 */
91 Expr *sqlite3ExprSkipCollate(Expr *pExpr){
92   while( pExpr && (pExpr->op==TK_COLLATE || pExpr->op==TK_AS) ){
93     pExpr = pExpr->pLeft;
94   }
95   return pExpr;
96 }
97 
98 /*
99 ** Return the collation sequence for the expression pExpr. If
100 ** there is no defined collating sequence, return NULL.
101 **
102 ** The collating sequence might be determined by a COLLATE operator
103 ** or by the presence of a column with a defined collating sequence.
104 ** COLLATE operators take first precedence.  Left operands take
105 ** precedence over right operands.
106 */
107 CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
108   sqlite3 *db = pParse->db;
109   CollSeq *pColl = 0;
110   Expr *p = pExpr;
111   while( p ){
112     int op = p->op;
113     if( op==TK_CAST || op==TK_UPLUS ){
114       p = p->pLeft;
115       continue;
116     }
117     assert( op!=TK_REGISTER || p->op2!=TK_COLLATE );
118     if( op==TK_COLLATE ){
119       pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken);
120       break;
121     }
122     if( p->pTab!=0
123      && (op==TK_AGG_COLUMN || op==TK_COLUMN
124           || op==TK_REGISTER || op==TK_TRIGGER)
125     ){
126       /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
127       ** a TK_COLUMN but was previously evaluated and cached in a register */
128       int j = p->iColumn;
129       if( j>=0 ){
130         const char *zColl = p->pTab->aCol[j].zColl;
131         pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
132       }
133       break;
134     }
135     if( p->flags & EP_Collate ){
136       if( ALWAYS(p->pLeft) && (p->pLeft->flags & EP_Collate)!=0 ){
137         p = p->pLeft;
138       }else{
139         p = p->pRight;
140       }
141     }else{
142       break;
143     }
144   }
145   if( sqlite3CheckCollSeq(pParse, pColl) ){
146     pColl = 0;
147   }
148   return pColl;
149 }
150 
151 /*
152 ** pExpr is an operand of a comparison operator.  aff2 is the
153 ** type affinity of the other operand.  This routine returns the
154 ** type affinity that should be used for the comparison operator.
155 */
156 char sqlite3CompareAffinity(Expr *pExpr, char aff2){
157   char aff1 = sqlite3ExprAffinity(pExpr);
158   if( aff1 && aff2 ){
159     /* Both sides of the comparison are columns. If one has numeric
160     ** affinity, use that. Otherwise use no affinity.
161     */
162     if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
163       return SQLITE_AFF_NUMERIC;
164     }else{
165       return SQLITE_AFF_NONE;
166     }
167   }else if( !aff1 && !aff2 ){
168     /* Neither side of the comparison is a column.  Compare the
169     ** results directly.
170     */
171     return SQLITE_AFF_NONE;
172   }else{
173     /* One side is a column, the other is not. Use the columns affinity. */
174     assert( aff1==0 || aff2==0 );
175     return (aff1 + aff2);
176   }
177 }
178 
179 /*
180 ** pExpr is a comparison operator.  Return the type affinity that should
181 ** be applied to both operands prior to doing the comparison.
182 */
183 static char comparisonAffinity(Expr *pExpr){
184   char aff;
185   assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
186           pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
187           pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT );
188   assert( pExpr->pLeft );
189   aff = sqlite3ExprAffinity(pExpr->pLeft);
190   if( pExpr->pRight ){
191     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
192   }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
193     aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
194   }else if( !aff ){
195     aff = SQLITE_AFF_NONE;
196   }
197   return aff;
198 }
199 
200 /*
201 ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
202 ** idx_affinity is the affinity of an indexed column. Return true
203 ** if the index with affinity idx_affinity may be used to implement
204 ** the comparison in pExpr.
205 */
206 int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
207   char aff = comparisonAffinity(pExpr);
208   switch( aff ){
209     case SQLITE_AFF_NONE:
210       return 1;
211     case SQLITE_AFF_TEXT:
212       return idx_affinity==SQLITE_AFF_TEXT;
213     default:
214       return sqlite3IsNumericAffinity(idx_affinity);
215   }
216 }
217 
218 /*
219 ** Return the P5 value that should be used for a binary comparison
220 ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
221 */
222 static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
223   u8 aff = (char)sqlite3ExprAffinity(pExpr2);
224   aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull;
225   return aff;
226 }
227 
228 /*
229 ** Return a pointer to the collation sequence that should be used by
230 ** a binary comparison operator comparing pLeft and pRight.
231 **
232 ** If the left hand expression has a collating sequence type, then it is
233 ** used. Otherwise the collation sequence for the right hand expression
234 ** is used, or the default (BINARY) if neither expression has a collating
235 ** type.
236 **
237 ** Argument pRight (but not pLeft) may be a null pointer. In this case,
238 ** it is not considered.
239 */
240 CollSeq *sqlite3BinaryCompareCollSeq(
241   Parse *pParse,
242   Expr *pLeft,
243   Expr *pRight
244 ){
245   CollSeq *pColl;
246   assert( pLeft );
247   if( pLeft->flags & EP_Collate ){
248     pColl = sqlite3ExprCollSeq(pParse, pLeft);
249   }else if( pRight && (pRight->flags & EP_Collate)!=0 ){
250     pColl = sqlite3ExprCollSeq(pParse, pRight);
251   }else{
252     pColl = sqlite3ExprCollSeq(pParse, pLeft);
253     if( !pColl ){
254       pColl = sqlite3ExprCollSeq(pParse, pRight);
255     }
256   }
257   return pColl;
258 }
259 
260 /*
261 ** Generate code for a comparison operator.
262 */
263 static int codeCompare(
264   Parse *pParse,    /* The parsing (and code generating) context */
265   Expr *pLeft,      /* The left operand */
266   Expr *pRight,     /* The right operand */
267   int opcode,       /* The comparison opcode */
268   int in1, int in2, /* Register holding operands */
269   int dest,         /* Jump here if true.  */
270   int jumpIfNull    /* If true, jump if either operand is NULL */
271 ){
272   int p5;
273   int addr;
274   CollSeq *p4;
275 
276   p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
277   p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
278   addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
279                            (void*)p4, P4_COLLSEQ);
280   sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5);
281   return addr;
282 }
283 
284 #if SQLITE_MAX_EXPR_DEPTH>0
285 /*
286 ** Check that argument nHeight is less than or equal to the maximum
287 ** expression depth allowed. If it is not, leave an error message in
288 ** pParse.
289 */
290 int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
291   int rc = SQLITE_OK;
292   int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
293   if( nHeight>mxHeight ){
294     sqlite3ErrorMsg(pParse,
295        "Expression tree is too large (maximum depth %d)", mxHeight
296     );
297     rc = SQLITE_ERROR;
298   }
299   return rc;
300 }
301 
302 /* The following three functions, heightOfExpr(), heightOfExprList()
303 ** and heightOfSelect(), are used to determine the maximum height
304 ** of any expression tree referenced by the structure passed as the
305 ** first argument.
306 **
307 ** If this maximum height is greater than the current value pointed
308 ** to by pnHeight, the second parameter, then set *pnHeight to that
309 ** value.
310 */
311 static void heightOfExpr(Expr *p, int *pnHeight){
312   if( p ){
313     if( p->nHeight>*pnHeight ){
314       *pnHeight = p->nHeight;
315     }
316   }
317 }
318 static void heightOfExprList(ExprList *p, int *pnHeight){
319   if( p ){
320     int i;
321     for(i=0; i<p->nExpr; i++){
322       heightOfExpr(p->a[i].pExpr, pnHeight);
323     }
324   }
325 }
326 static void heightOfSelect(Select *p, int *pnHeight){
327   if( p ){
328     heightOfExpr(p->pWhere, pnHeight);
329     heightOfExpr(p->pHaving, pnHeight);
330     heightOfExpr(p->pLimit, pnHeight);
331     heightOfExpr(p->pOffset, pnHeight);
332     heightOfExprList(p->pEList, pnHeight);
333     heightOfExprList(p->pGroupBy, pnHeight);
334     heightOfExprList(p->pOrderBy, pnHeight);
335     heightOfSelect(p->pPrior, pnHeight);
336   }
337 }
338 
339 /*
340 ** Set the Expr.nHeight variable in the structure passed as an
341 ** argument. An expression with no children, Expr.pList or
342 ** Expr.pSelect member has a height of 1. Any other expression
343 ** has a height equal to the maximum height of any other
344 ** referenced Expr plus one.
345 */
346 static void exprSetHeight(Expr *p){
347   int nHeight = 0;
348   heightOfExpr(p->pLeft, &nHeight);
349   heightOfExpr(p->pRight, &nHeight);
350   if( ExprHasProperty(p, EP_xIsSelect) ){
351     heightOfSelect(p->x.pSelect, &nHeight);
352   }else{
353     heightOfExprList(p->x.pList, &nHeight);
354   }
355   p->nHeight = nHeight + 1;
356 }
357 
358 /*
359 ** Set the Expr.nHeight variable using the exprSetHeight() function. If
360 ** the height is greater than the maximum allowed expression depth,
361 ** leave an error in pParse.
362 */
363 void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
364   exprSetHeight(p);
365   sqlite3ExprCheckHeight(pParse, p->nHeight);
366 }
367 
368 /*
369 ** Return the maximum height of any expression tree referenced
370 ** by the select statement passed as an argument.
371 */
372 int sqlite3SelectExprHeight(Select *p){
373   int nHeight = 0;
374   heightOfSelect(p, &nHeight);
375   return nHeight;
376 }
377 #else
378   #define exprSetHeight(y)
379 #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
380 
381 /*
382 ** This routine is the core allocator for Expr nodes.
383 **
384 ** Construct a new expression node and return a pointer to it.  Memory
385 ** for this node and for the pToken argument is a single allocation
386 ** obtained from sqlite3DbMalloc().  The calling function
387 ** is responsible for making sure the node eventually gets freed.
388 **
389 ** If dequote is true, then the token (if it exists) is dequoted.
390 ** If dequote is false, no dequoting is performance.  The deQuote
391 ** parameter is ignored if pToken is NULL or if the token does not
392 ** appear to be quoted.  If the quotes were of the form "..." (double-quotes)
393 ** then the EP_DblQuoted flag is set on the expression node.
394 **
395 ** Special case:  If op==TK_INTEGER and pToken points to a string that
396 ** can be translated into a 32-bit integer, then the token is not
397 ** stored in u.zToken.  Instead, the integer values is written
398 ** into u.iValue and the EP_IntValue flag is set.  No extra storage
399 ** is allocated to hold the integer text and the dequote flag is ignored.
400 */
401 Expr *sqlite3ExprAlloc(
402   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
403   int op,                 /* Expression opcode */
404   const Token *pToken,    /* Token argument.  Might be NULL */
405   int dequote             /* True to dequote */
406 ){
407   Expr *pNew;
408   int nExtra = 0;
409   int iValue = 0;
410 
411   if( pToken ){
412     if( op!=TK_INTEGER || pToken->z==0
413           || sqlite3GetInt32(pToken->z, &iValue)==0 ){
414       nExtra = pToken->n+1;
415       assert( iValue>=0 );
416     }
417   }
418   pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra);
419   if( pNew ){
420     pNew->op = (u8)op;
421     pNew->iAgg = -1;
422     if( pToken ){
423       if( nExtra==0 ){
424         pNew->flags |= EP_IntValue;
425         pNew->u.iValue = iValue;
426       }else{
427         int c;
428         pNew->u.zToken = (char*)&pNew[1];
429         assert( pToken->z!=0 || pToken->n==0 );
430         if( pToken->n ) memcpy(pNew->u.zToken, pToken->z, pToken->n);
431         pNew->u.zToken[pToken->n] = 0;
432         if( dequote && nExtra>=3
433              && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){
434           sqlite3Dequote(pNew->u.zToken);
435           if( c=='"' ) pNew->flags |= EP_DblQuoted;
436         }
437       }
438     }
439 #if SQLITE_MAX_EXPR_DEPTH>0
440     pNew->nHeight = 1;
441 #endif
442   }
443   return pNew;
444 }
445 
446 /*
447 ** Allocate a new expression node from a zero-terminated token that has
448 ** already been dequoted.
449 */
450 Expr *sqlite3Expr(
451   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
452   int op,                 /* Expression opcode */
453   const char *zToken      /* Token argument.  Might be NULL */
454 ){
455   Token x;
456   x.z = zToken;
457   x.n = zToken ? sqlite3Strlen30(zToken) : 0;
458   return sqlite3ExprAlloc(db, op, &x, 0);
459 }
460 
461 /*
462 ** Attach subtrees pLeft and pRight to the Expr node pRoot.
463 **
464 ** If pRoot==NULL that means that a memory allocation error has occurred.
465 ** In that case, delete the subtrees pLeft and pRight.
466 */
467 void sqlite3ExprAttachSubtrees(
468   sqlite3 *db,
469   Expr *pRoot,
470   Expr *pLeft,
471   Expr *pRight
472 ){
473   if( pRoot==0 ){
474     assert( db->mallocFailed );
475     sqlite3ExprDelete(db, pLeft);
476     sqlite3ExprDelete(db, pRight);
477   }else{
478     if( pRight ){
479       pRoot->pRight = pRight;
480       pRoot->flags |= EP_Collate & pRight->flags;
481     }
482     if( pLeft ){
483       pRoot->pLeft = pLeft;
484       pRoot->flags |= EP_Collate & pLeft->flags;
485     }
486     exprSetHeight(pRoot);
487   }
488 }
489 
490 /*
491 ** Allocate a Expr node which joins as many as two subtrees.
492 **
493 ** One or both of the subtrees can be NULL.  Return a pointer to the new
494 ** Expr node.  Or, if an OOM error occurs, set pParse->db->mallocFailed,
495 ** free the subtrees and return NULL.
496 */
497 Expr *sqlite3PExpr(
498   Parse *pParse,          /* Parsing context */
499   int op,                 /* Expression opcode */
500   Expr *pLeft,            /* Left operand */
501   Expr *pRight,           /* Right operand */
502   const Token *pToken     /* Argument token */
503 ){
504   Expr *p;
505   if( op==TK_AND && pLeft && pRight ){
506     /* Take advantage of short-circuit false optimization for AND */
507     p = sqlite3ExprAnd(pParse->db, pLeft, pRight);
508   }else{
509     p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
510     sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
511   }
512   if( p ) {
513     sqlite3ExprCheckHeight(pParse, p->nHeight);
514   }
515   return p;
516 }
517 
518 /*
519 ** Return 1 if an expression must be FALSE in all cases and 0 if the
520 ** expression might be true.  This is an optimization.  If is OK to
521 ** return 0 here even if the expression really is always false (a
522 ** false negative).  But it is a bug to return 1 if the expression
523 ** might be true in some rare circumstances (a false positive.)
524 **
525 ** Note that if the expression is part of conditional for a
526 ** LEFT JOIN, then we cannot determine at compile-time whether or not
527 ** is it true or false, so always return 0.
528 */
529 static int exprAlwaysFalse(Expr *p){
530   int v = 0;
531   if( ExprHasProperty(p, EP_FromJoin) ) return 0;
532   if( !sqlite3ExprIsInteger(p, &v) ) return 0;
533   return v==0;
534 }
535 
536 /*
537 ** Join two expressions using an AND operator.  If either expression is
538 ** NULL, then just return the other expression.
539 **
540 ** If one side or the other of the AND is known to be false, then instead
541 ** of returning an AND expression, just return a constant expression with
542 ** a value of false.
543 */
544 Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
545   if( pLeft==0 ){
546     return pRight;
547   }else if( pRight==0 ){
548     return pLeft;
549   }else if( exprAlwaysFalse(pLeft) || exprAlwaysFalse(pRight) ){
550     sqlite3ExprDelete(db, pLeft);
551     sqlite3ExprDelete(db, pRight);
552     return sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0);
553   }else{
554     Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
555     sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
556     return pNew;
557   }
558 }
559 
560 /*
561 ** Construct a new expression node for a function with multiple
562 ** arguments.
563 */
564 Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
565   Expr *pNew;
566   sqlite3 *db = pParse->db;
567   assert( pToken );
568   pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1);
569   if( pNew==0 ){
570     sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */
571     return 0;
572   }
573   pNew->x.pList = pList;
574   assert( !ExprHasProperty(pNew, EP_xIsSelect) );
575   sqlite3ExprSetHeight(pParse, pNew);
576   return pNew;
577 }
578 
579 /*
580 ** Assign a variable number to an expression that encodes a wildcard
581 ** in the original SQL statement.
582 **
583 ** Wildcards consisting of a single "?" are assigned the next sequential
584 ** variable number.
585 **
586 ** Wildcards of the form "?nnn" are assigned the number "nnn".  We make
587 ** sure "nnn" is not too be to avoid a denial of service attack when
588 ** the SQL statement comes from an external source.
589 **
590 ** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
591 ** as the previous instance of the same wildcard.  Or if this is the first
592 ** instance of the wildcard, the next sequenial variable number is
593 ** assigned.
594 */
595 void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
596   sqlite3 *db = pParse->db;
597   const char *z;
598 
599   if( pExpr==0 ) return;
600   assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) );
601   z = pExpr->u.zToken;
602   assert( z!=0 );
603   assert( z[0]!=0 );
604   if( z[1]==0 ){
605     /* Wildcard of the form "?".  Assign the next variable number */
606     assert( z[0]=='?' );
607     pExpr->iColumn = (ynVar)(++pParse->nVar);
608   }else{
609     ynVar x = 0;
610     u32 n = sqlite3Strlen30(z);
611     if( z[0]=='?' ){
612       /* Wildcard of the form "?nnn".  Convert "nnn" to an integer and
613       ** use it as the variable number */
614       i64 i;
615       int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8);
616       pExpr->iColumn = x = (ynVar)i;
617       testcase( i==0 );
618       testcase( i==1 );
619       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
620       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
621       if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
622         sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
623             db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
624         x = 0;
625       }
626       if( i>pParse->nVar ){
627         pParse->nVar = (int)i;
628       }
629     }else{
630       /* Wildcards like ":aaa", "$aaa" or "@aaa".  Reuse the same variable
631       ** number as the prior appearance of the same name, or if the name
632       ** has never appeared before, reuse the same variable number
633       */
634       ynVar i;
635       for(i=0; i<pParse->nzVar; i++){
636         if( pParse->azVar[i] && strcmp(pParse->azVar[i],z)==0 ){
637           pExpr->iColumn = x = (ynVar)i+1;
638           break;
639         }
640       }
641       if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
642     }
643     if( x>0 ){
644       if( x>pParse->nzVar ){
645         char **a;
646         a = sqlite3DbRealloc(db, pParse->azVar, x*sizeof(a[0]));
647         if( a==0 ) return;  /* Error reported through db->mallocFailed */
648         pParse->azVar = a;
649         memset(&a[pParse->nzVar], 0, (x-pParse->nzVar)*sizeof(a[0]));
650         pParse->nzVar = x;
651       }
652       if( z[0]!='?' || pParse->azVar[x-1]==0 ){
653         sqlite3DbFree(db, pParse->azVar[x-1]);
654         pParse->azVar[x-1] = sqlite3DbStrNDup(db, z, n);
655       }
656     }
657   }
658   if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
659     sqlite3ErrorMsg(pParse, "too many SQL variables");
660   }
661 }
662 
663 /*
664 ** Recursively delete an expression tree.
665 */
666 void sqlite3ExprDelete(sqlite3 *db, Expr *p){
667   if( p==0 ) return;
668   /* Sanity check: Assert that the IntValue is non-negative if it exists */
669   assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
670   if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
671     sqlite3ExprDelete(db, p->pLeft);
672     sqlite3ExprDelete(db, p->pRight);
673     if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){
674       sqlite3DbFree(db, p->u.zToken);
675     }
676     if( ExprHasProperty(p, EP_xIsSelect) ){
677       sqlite3SelectDelete(db, p->x.pSelect);
678     }else{
679       sqlite3ExprListDelete(db, p->x.pList);
680     }
681   }
682   if( !ExprHasProperty(p, EP_Static) ){
683     sqlite3DbFree(db, p);
684   }
685 }
686 
687 /*
688 ** Return the number of bytes allocated for the expression structure
689 ** passed as the first argument. This is always one of EXPR_FULLSIZE,
690 ** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE.
691 */
692 static int exprStructSize(Expr *p){
693   if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE;
694   if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE;
695   return EXPR_FULLSIZE;
696 }
697 
698 /*
699 ** The dupedExpr*Size() routines each return the number of bytes required
700 ** to store a copy of an expression or expression tree.  They differ in
701 ** how much of the tree is measured.
702 **
703 **     dupedExprStructSize()     Size of only the Expr structure
704 **     dupedExprNodeSize()       Size of Expr + space for token
705 **     dupedExprSize()           Expr + token + subtree components
706 **
707 ***************************************************************************
708 **
709 ** The dupedExprStructSize() function returns two values OR-ed together:
710 ** (1) the space required for a copy of the Expr structure only and
711 ** (2) the EP_xxx flags that indicate what the structure size should be.
712 ** The return values is always one of:
713 **
714 **      EXPR_FULLSIZE
715 **      EXPR_REDUCEDSIZE   | EP_Reduced
716 **      EXPR_TOKENONLYSIZE | EP_TokenOnly
717 **
718 ** The size of the structure can be found by masking the return value
719 ** of this routine with 0xfff.  The flags can be found by masking the
720 ** return value with EP_Reduced|EP_TokenOnly.
721 **
722 ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size
723 ** (unreduced) Expr objects as they or originally constructed by the parser.
724 ** During expression analysis, extra information is computed and moved into
725 ** later parts of teh Expr object and that extra information might get chopped
726 ** off if the expression is reduced.  Note also that it does not work to
727 ** make a EXPRDUP_REDUCE copy of a reduced expression.  It is only legal
728 ** to reduce a pristine expression tree from the parser.  The implementation
729 ** of dupedExprStructSize() contain multiple assert() statements that attempt
730 ** to enforce this constraint.
731 */
732 static int dupedExprStructSize(Expr *p, int flags){
733   int nSize;
734   assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
735   if( 0==(flags&EXPRDUP_REDUCE) ){
736     nSize = EXPR_FULLSIZE;
737   }else{
738     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
739     assert( !ExprHasProperty(p, EP_FromJoin) );
740     assert( (p->flags2 & EP2_MallocedToken)==0 );
741     assert( (p->flags2 & EP2_Irreducible)==0 );
742     if( p->pLeft || p->pRight || p->x.pList ){
743       nSize = EXPR_REDUCEDSIZE | EP_Reduced;
744     }else{
745       nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly;
746     }
747   }
748   return nSize;
749 }
750 
751 /*
752 ** This function returns the space in bytes required to store the copy
753 ** of the Expr structure and a copy of the Expr.u.zToken string (if that
754 ** string is defined.)
755 */
756 static int dupedExprNodeSize(Expr *p, int flags){
757   int nByte = dupedExprStructSize(p, flags) & 0xfff;
758   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
759     nByte += sqlite3Strlen30(p->u.zToken)+1;
760   }
761   return ROUND8(nByte);
762 }
763 
764 /*
765 ** Return the number of bytes required to create a duplicate of the
766 ** expression passed as the first argument. The second argument is a
767 ** mask containing EXPRDUP_XXX flags.
768 **
769 ** The value returned includes space to create a copy of the Expr struct
770 ** itself and the buffer referred to by Expr.u.zToken, if any.
771 **
772 ** If the EXPRDUP_REDUCE flag is set, then the return value includes
773 ** space to duplicate all Expr nodes in the tree formed by Expr.pLeft
774 ** and Expr.pRight variables (but not for any structures pointed to or
775 ** descended from the Expr.x.pList or Expr.x.pSelect variables).
776 */
777 static int dupedExprSize(Expr *p, int flags){
778   int nByte = 0;
779   if( p ){
780     nByte = dupedExprNodeSize(p, flags);
781     if( flags&EXPRDUP_REDUCE ){
782       nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags);
783     }
784   }
785   return nByte;
786 }
787 
788 /*
789 ** This function is similar to sqlite3ExprDup(), except that if pzBuffer
790 ** is not NULL then *pzBuffer is assumed to point to a buffer large enough
791 ** to store the copy of expression p, the copies of p->u.zToken
792 ** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
793 ** if any. Before returning, *pzBuffer is set to the first byte passed the
794 ** portion of the buffer copied into by this function.
795 */
796 static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
797   Expr *pNew = 0;                      /* Value to return */
798   if( p ){
799     const int isReduced = (flags&EXPRDUP_REDUCE);
800     u8 *zAlloc;
801     u32 staticFlag = 0;
802 
803     assert( pzBuffer==0 || isReduced );
804 
805     /* Figure out where to write the new Expr structure. */
806     if( pzBuffer ){
807       zAlloc = *pzBuffer;
808       staticFlag = EP_Static;
809     }else{
810       zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
811     }
812     pNew = (Expr *)zAlloc;
813 
814     if( pNew ){
815       /* Set nNewSize to the size allocated for the structure pointed to
816       ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or
817       ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed
818       ** by the copy of the p->u.zToken string (if any).
819       */
820       const unsigned nStructSize = dupedExprStructSize(p, flags);
821       const int nNewSize = nStructSize & 0xfff;
822       int nToken;
823       if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
824         nToken = sqlite3Strlen30(p->u.zToken) + 1;
825       }else{
826         nToken = 0;
827       }
828       if( isReduced ){
829         assert( ExprHasProperty(p, EP_Reduced)==0 );
830         memcpy(zAlloc, p, nNewSize);
831       }else{
832         int nSize = exprStructSize(p);
833         memcpy(zAlloc, p, nSize);
834         memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
835       }
836 
837       /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
838       pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
839       pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
840       pNew->flags |= staticFlag;
841 
842       /* Copy the p->u.zToken string, if any. */
843       if( nToken ){
844         char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize];
845         memcpy(zToken, p->u.zToken, nToken);
846       }
847 
848       if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){
849         /* Fill in the pNew->x.pSelect or pNew->x.pList member. */
850         if( ExprHasProperty(p, EP_xIsSelect) ){
851           pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced);
852         }else{
853           pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced);
854         }
855       }
856 
857       /* Fill in pNew->pLeft and pNew->pRight. */
858       if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){
859         zAlloc += dupedExprNodeSize(p, flags);
860         if( ExprHasProperty(pNew, EP_Reduced) ){
861           pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc);
862           pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc);
863         }
864         if( pzBuffer ){
865           *pzBuffer = zAlloc;
866         }
867       }else{
868         pNew->flags2 = 0;
869         if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
870           pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0);
871           pNew->pRight = sqlite3ExprDup(db, p->pRight, 0);
872         }
873       }
874 
875     }
876   }
877   return pNew;
878 }
879 
880 /*
881 ** The following group of routines make deep copies of expressions,
882 ** expression lists, ID lists, and select statements.  The copies can
883 ** be deleted (by being passed to their respective ...Delete() routines)
884 ** without effecting the originals.
885 **
886 ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
887 ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded
888 ** by subsequent calls to sqlite*ListAppend() routines.
889 **
890 ** Any tables that the SrcList might point to are not duplicated.
891 **
892 ** The flags parameter contains a combination of the EXPRDUP_XXX flags.
893 ** If the EXPRDUP_REDUCE flag is set, then the structure returned is a
894 ** truncated version of the usual Expr structure that will be stored as
895 ** part of the in-memory representation of the database schema.
896 */
897 Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
898   return exprDup(db, p, flags, 0);
899 }
900 ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
901   ExprList *pNew;
902   struct ExprList_item *pItem, *pOldItem;
903   int i;
904   if( p==0 ) return 0;
905   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
906   if( pNew==0 ) return 0;
907   pNew->iECursor = 0;
908   pNew->nExpr = i = p->nExpr;
909   if( (flags & EXPRDUP_REDUCE)==0 ) for(i=1; i<p->nExpr; i+=i){}
910   pNew->a = pItem = sqlite3DbMallocRaw(db,  i*sizeof(p->a[0]) );
911   if( pItem==0 ){
912     sqlite3DbFree(db, pNew);
913     return 0;
914   }
915   pOldItem = p->a;
916   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
917     Expr *pOldExpr = pOldItem->pExpr;
918     pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags);
919     pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
920     pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
921     pItem->sortOrder = pOldItem->sortOrder;
922     pItem->done = 0;
923     pItem->bSpanIsTab = pOldItem->bSpanIsTab;
924     pItem->iOrderByCol = pOldItem->iOrderByCol;
925     pItem->iAlias = pOldItem->iAlias;
926   }
927   return pNew;
928 }
929 
930 /*
931 ** If cursors, triggers, views and subqueries are all omitted from
932 ** the build, then none of the following routines, except for
933 ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
934 ** called with a NULL argument.
935 */
936 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
937  || !defined(SQLITE_OMIT_SUBQUERY)
938 SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
939   SrcList *pNew;
940   int i;
941   int nByte;
942   if( p==0 ) return 0;
943   nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
944   pNew = sqlite3DbMallocRaw(db, nByte );
945   if( pNew==0 ) return 0;
946   pNew->nSrc = pNew->nAlloc = p->nSrc;
947   for(i=0; i<p->nSrc; i++){
948     struct SrcList_item *pNewItem = &pNew->a[i];
949     struct SrcList_item *pOldItem = &p->a[i];
950     Table *pTab;
951     pNewItem->pSchema = pOldItem->pSchema;
952     pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
953     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
954     pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
955     pNewItem->jointype = pOldItem->jointype;
956     pNewItem->iCursor = pOldItem->iCursor;
957     pNewItem->addrFillSub = pOldItem->addrFillSub;
958     pNewItem->regReturn = pOldItem->regReturn;
959     pNewItem->isCorrelated = pOldItem->isCorrelated;
960     pNewItem->viaCoroutine = pOldItem->viaCoroutine;
961     pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
962     pNewItem->notIndexed = pOldItem->notIndexed;
963     pNewItem->pIndex = pOldItem->pIndex;
964     pTab = pNewItem->pTab = pOldItem->pTab;
965     if( pTab ){
966       pTab->nRef++;
967     }
968     pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
969     pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags);
970     pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
971     pNewItem->colUsed = pOldItem->colUsed;
972   }
973   return pNew;
974 }
975 IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
976   IdList *pNew;
977   int i;
978   if( p==0 ) return 0;
979   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
980   if( pNew==0 ) return 0;
981   pNew->nId = p->nId;
982   pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
983   if( pNew->a==0 ){
984     sqlite3DbFree(db, pNew);
985     return 0;
986   }
987   /* Note that because the size of the allocation for p->a[] is not
988   ** necessarily a power of two, sqlite3IdListAppend() may not be called
989   ** on the duplicate created by this function. */
990   for(i=0; i<p->nId; i++){
991     struct IdList_item *pNewItem = &pNew->a[i];
992     struct IdList_item *pOldItem = &p->a[i];
993     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
994     pNewItem->idx = pOldItem->idx;
995   }
996   return pNew;
997 }
998 Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
999   Select *pNew, *pPrior;
1000   if( p==0 ) return 0;
1001   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
1002   if( pNew==0 ) return 0;
1003   pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
1004   pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
1005   pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags);
1006   pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags);
1007   pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags);
1008   pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags);
1009   pNew->op = p->op;
1010   pNew->pPrior = pPrior = sqlite3SelectDup(db, p->pPrior, flags);
1011   if( pPrior ) pPrior->pNext = pNew;
1012   pNew->pNext = 0;
1013   pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
1014   pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
1015   pNew->iLimit = 0;
1016   pNew->iOffset = 0;
1017   pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
1018   pNew->pRightmost = 0;
1019   pNew->addrOpenEphm[0] = -1;
1020   pNew->addrOpenEphm[1] = -1;
1021   pNew->addrOpenEphm[2] = -1;
1022   return pNew;
1023 }
1024 #else
1025 Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
1026   assert( p==0 );
1027   return 0;
1028 }
1029 #endif
1030 
1031 
1032 /*
1033 ** Add a new element to the end of an expression list.  If pList is
1034 ** initially NULL, then create a new expression list.
1035 **
1036 ** If a memory allocation error occurs, the entire list is freed and
1037 ** NULL is returned.  If non-NULL is returned, then it is guaranteed
1038 ** that the new entry was successfully appended.
1039 */
1040 ExprList *sqlite3ExprListAppend(
1041   Parse *pParse,          /* Parsing context */
1042   ExprList *pList,        /* List to which to append. Might be NULL */
1043   Expr *pExpr             /* Expression to be appended. Might be NULL */
1044 ){
1045   sqlite3 *db = pParse->db;
1046   if( pList==0 ){
1047     pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
1048     if( pList==0 ){
1049       goto no_mem;
1050     }
1051     pList->a = sqlite3DbMallocRaw(db, sizeof(pList->a[0]));
1052     if( pList->a==0 ) goto no_mem;
1053   }else if( (pList->nExpr & (pList->nExpr-1))==0 ){
1054     struct ExprList_item *a;
1055     assert( pList->nExpr>0 );
1056     a = sqlite3DbRealloc(db, pList->a, pList->nExpr*2*sizeof(pList->a[0]));
1057     if( a==0 ){
1058       goto no_mem;
1059     }
1060     pList->a = a;
1061   }
1062   assert( pList->a!=0 );
1063   if( 1 ){
1064     struct ExprList_item *pItem = &pList->a[pList->nExpr++];
1065     memset(pItem, 0, sizeof(*pItem));
1066     pItem->pExpr = pExpr;
1067   }
1068   return pList;
1069 
1070 no_mem:
1071   /* Avoid leaking memory if malloc has failed. */
1072   sqlite3ExprDelete(db, pExpr);
1073   sqlite3ExprListDelete(db, pList);
1074   return 0;
1075 }
1076 
1077 /*
1078 ** Set the ExprList.a[].zName element of the most recently added item
1079 ** on the expression list.
1080 **
1081 ** pList might be NULL following an OOM error.  But pName should never be
1082 ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
1083 ** is set.
1084 */
1085 void sqlite3ExprListSetName(
1086   Parse *pParse,          /* Parsing context */
1087   ExprList *pList,        /* List to which to add the span. */
1088   Token *pName,           /* Name to be added */
1089   int dequote             /* True to cause the name to be dequoted */
1090 ){
1091   assert( pList!=0 || pParse->db->mallocFailed!=0 );
1092   if( pList ){
1093     struct ExprList_item *pItem;
1094     assert( pList->nExpr>0 );
1095     pItem = &pList->a[pList->nExpr-1];
1096     assert( pItem->zName==0 );
1097     pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
1098     if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName);
1099   }
1100 }
1101 
1102 /*
1103 ** Set the ExprList.a[].zSpan element of the most recently added item
1104 ** on the expression list.
1105 **
1106 ** pList might be NULL following an OOM error.  But pSpan should never be
1107 ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
1108 ** is set.
1109 */
1110 void sqlite3ExprListSetSpan(
1111   Parse *pParse,          /* Parsing context */
1112   ExprList *pList,        /* List to which to add the span. */
1113   ExprSpan *pSpan         /* The span to be added */
1114 ){
1115   sqlite3 *db = pParse->db;
1116   assert( pList!=0 || db->mallocFailed!=0 );
1117   if( pList ){
1118     struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
1119     assert( pList->nExpr>0 );
1120     assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
1121     sqlite3DbFree(db, pItem->zSpan);
1122     pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
1123                                     (int)(pSpan->zEnd - pSpan->zStart));
1124   }
1125 }
1126 
1127 /*
1128 ** If the expression list pEList contains more than iLimit elements,
1129 ** leave an error message in pParse.
1130 */
1131 void sqlite3ExprListCheckLength(
1132   Parse *pParse,
1133   ExprList *pEList,
1134   const char *zObject
1135 ){
1136   int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
1137   testcase( pEList && pEList->nExpr==mx );
1138   testcase( pEList && pEList->nExpr==mx+1 );
1139   if( pEList && pEList->nExpr>mx ){
1140     sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
1141   }
1142 }
1143 
1144 /*
1145 ** Delete an entire expression list.
1146 */
1147 void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
1148   int i;
1149   struct ExprList_item *pItem;
1150   if( pList==0 ) return;
1151   assert( pList->a!=0 || pList->nExpr==0 );
1152   for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
1153     sqlite3ExprDelete(db, pItem->pExpr);
1154     sqlite3DbFree(db, pItem->zName);
1155     sqlite3DbFree(db, pItem->zSpan);
1156   }
1157   sqlite3DbFree(db, pList->a);
1158   sqlite3DbFree(db, pList);
1159 }
1160 
1161 /*
1162 ** These routines are Walker callbacks.  Walker.u.pi is a pointer
1163 ** to an integer.  These routines are checking an expression to see
1164 ** if it is a constant.  Set *Walker.u.pi to 0 if the expression is
1165 ** not constant.
1166 **
1167 ** These callback routines are used to implement the following:
1168 **
1169 **     sqlite3ExprIsConstant()
1170 **     sqlite3ExprIsConstantNotJoin()
1171 **     sqlite3ExprIsConstantOrFunction()
1172 **
1173 */
1174 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
1175 
1176   /* If pWalker->u.i is 3 then any term of the expression that comes from
1177   ** the ON or USING clauses of a join disqualifies the expression
1178   ** from being considered constant. */
1179   if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
1180     pWalker->u.i = 0;
1181     return WRC_Abort;
1182   }
1183 
1184   switch( pExpr->op ){
1185     /* Consider functions to be constant if all their arguments are constant
1186     ** and pWalker->u.i==2 */
1187     case TK_FUNCTION:
1188       if( pWalker->u.i==2 ) return 0;
1189       /* Fall through */
1190     case TK_ID:
1191     case TK_COLUMN:
1192     case TK_AGG_FUNCTION:
1193     case TK_AGG_COLUMN:
1194       testcase( pExpr->op==TK_ID );
1195       testcase( pExpr->op==TK_COLUMN );
1196       testcase( pExpr->op==TK_AGG_FUNCTION );
1197       testcase( pExpr->op==TK_AGG_COLUMN );
1198       pWalker->u.i = 0;
1199       return WRC_Abort;
1200     default:
1201       testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
1202       testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
1203       return WRC_Continue;
1204   }
1205 }
1206 static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
1207   UNUSED_PARAMETER(NotUsed);
1208   pWalker->u.i = 0;
1209   return WRC_Abort;
1210 }
1211 static int exprIsConst(Expr *p, int initFlag){
1212   Walker w;
1213   memset(&w, 0, sizeof(w));
1214   w.u.i = initFlag;
1215   w.xExprCallback = exprNodeIsConstant;
1216   w.xSelectCallback = selectNodeIsConstant;
1217   sqlite3WalkExpr(&w, p);
1218   return w.u.i;
1219 }
1220 
1221 /*
1222 ** Walk an expression tree.  Return 1 if the expression is constant
1223 ** and 0 if it involves variables or function calls.
1224 **
1225 ** For the purposes of this function, a double-quoted string (ex: "abc")
1226 ** is considered a variable but a single-quoted string (ex: 'abc') is
1227 ** a constant.
1228 */
1229 int sqlite3ExprIsConstant(Expr *p){
1230   return exprIsConst(p, 1);
1231 }
1232 
1233 /*
1234 ** Walk an expression tree.  Return 1 if the expression is constant
1235 ** that does no originate from the ON or USING clauses of a join.
1236 ** Return 0 if it involves variables or function calls or terms from
1237 ** an ON or USING clause.
1238 */
1239 int sqlite3ExprIsConstantNotJoin(Expr *p){
1240   return exprIsConst(p, 3);
1241 }
1242 
1243 /*
1244 ** Walk an expression tree.  Return 1 if the expression is constant
1245 ** or a function call with constant arguments.  Return and 0 if there
1246 ** are any variables.
1247 **
1248 ** For the purposes of this function, a double-quoted string (ex: "abc")
1249 ** is considered a variable but a single-quoted string (ex: 'abc') is
1250 ** a constant.
1251 */
1252 int sqlite3ExprIsConstantOrFunction(Expr *p){
1253   return exprIsConst(p, 2);
1254 }
1255 
1256 /*
1257 ** If the expression p codes a constant integer that is small enough
1258 ** to fit in a 32-bit integer, return 1 and put the value of the integer
1259 ** in *pValue.  If the expression is not an integer or if it is too big
1260 ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
1261 */
1262 int sqlite3ExprIsInteger(Expr *p, int *pValue){
1263   int rc = 0;
1264 
1265   /* If an expression is an integer literal that fits in a signed 32-bit
1266   ** integer, then the EP_IntValue flag will have already been set */
1267   assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0
1268            || sqlite3GetInt32(p->u.zToken, &rc)==0 );
1269 
1270   if( p->flags & EP_IntValue ){
1271     *pValue = p->u.iValue;
1272     return 1;
1273   }
1274   switch( p->op ){
1275     case TK_UPLUS: {
1276       rc = sqlite3ExprIsInteger(p->pLeft, pValue);
1277       break;
1278     }
1279     case TK_UMINUS: {
1280       int v;
1281       if( sqlite3ExprIsInteger(p->pLeft, &v) ){
1282         *pValue = -v;
1283         rc = 1;
1284       }
1285       break;
1286     }
1287     default: break;
1288   }
1289   return rc;
1290 }
1291 
1292 /*
1293 ** Return FALSE if there is no chance that the expression can be NULL.
1294 **
1295 ** If the expression might be NULL or if the expression is too complex
1296 ** to tell return TRUE.
1297 **
1298 ** This routine is used as an optimization, to skip OP_IsNull opcodes
1299 ** when we know that a value cannot be NULL.  Hence, a false positive
1300 ** (returning TRUE when in fact the expression can never be NULL) might
1301 ** be a small performance hit but is otherwise harmless.  On the other
1302 ** hand, a false negative (returning FALSE when the result could be NULL)
1303 ** will likely result in an incorrect answer.  So when in doubt, return
1304 ** TRUE.
1305 */
1306 int sqlite3ExprCanBeNull(const Expr *p){
1307   u8 op;
1308   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
1309   op = p->op;
1310   if( op==TK_REGISTER ) op = p->op2;
1311   switch( op ){
1312     case TK_INTEGER:
1313     case TK_STRING:
1314     case TK_FLOAT:
1315     case TK_BLOB:
1316       return 0;
1317     default:
1318       return 1;
1319   }
1320 }
1321 
1322 /*
1323 ** Generate an OP_IsNull instruction that tests register iReg and jumps
1324 ** to location iDest if the value in iReg is NULL.  The value in iReg
1325 ** was computed by pExpr.  If we can look at pExpr at compile-time and
1326 ** determine that it can never generate a NULL, then the OP_IsNull operation
1327 ** can be omitted.
1328 */
1329 void sqlite3ExprCodeIsNullJump(
1330   Vdbe *v,            /* The VDBE under construction */
1331   const Expr *pExpr,  /* Only generate OP_IsNull if this expr can be NULL */
1332   int iReg,           /* Test the value in this register for NULL */
1333   int iDest           /* Jump here if the value is null */
1334 ){
1335   if( sqlite3ExprCanBeNull(pExpr) ){
1336     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest);
1337   }
1338 }
1339 
1340 /*
1341 ** Return TRUE if the given expression is a constant which would be
1342 ** unchanged by OP_Affinity with the affinity given in the second
1343 ** argument.
1344 **
1345 ** This routine is used to determine if the OP_Affinity operation
1346 ** can be omitted.  When in doubt return FALSE.  A false negative
1347 ** is harmless.  A false positive, however, can result in the wrong
1348 ** answer.
1349 */
1350 int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){
1351   u8 op;
1352   if( aff==SQLITE_AFF_NONE ) return 1;
1353   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
1354   op = p->op;
1355   if( op==TK_REGISTER ) op = p->op2;
1356   switch( op ){
1357     case TK_INTEGER: {
1358       return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC;
1359     }
1360     case TK_FLOAT: {
1361       return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC;
1362     }
1363     case TK_STRING: {
1364       return aff==SQLITE_AFF_TEXT;
1365     }
1366     case TK_BLOB: {
1367       return 1;
1368     }
1369     case TK_COLUMN: {
1370       assert( p->iTable>=0 );  /* p cannot be part of a CHECK constraint */
1371       return p->iColumn<0
1372           && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC);
1373     }
1374     default: {
1375       return 0;
1376     }
1377   }
1378 }
1379 
1380 /*
1381 ** Return TRUE if the given string is a row-id column name.
1382 */
1383 int sqlite3IsRowid(const char *z){
1384   if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
1385   if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
1386   if( sqlite3StrICmp(z, "OID")==0 ) return 1;
1387   return 0;
1388 }
1389 
1390 /*
1391 ** Return true if we are able to the IN operator optimization on a
1392 ** query of the form
1393 **
1394 **       x IN (SELECT ...)
1395 **
1396 ** Where the SELECT... clause is as specified by the parameter to this
1397 ** routine.
1398 **
1399 ** The Select object passed in has already been preprocessed and no
1400 ** errors have been found.
1401 */
1402 #ifndef SQLITE_OMIT_SUBQUERY
1403 static int isCandidateForInOpt(Select *p){
1404   SrcList *pSrc;
1405   ExprList *pEList;
1406   Table *pTab;
1407   if( p==0 ) return 0;                   /* right-hand side of IN is SELECT */
1408   if( p->pPrior ) return 0;              /* Not a compound SELECT */
1409   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
1410     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
1411     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
1412     return 0; /* No DISTINCT keyword and no aggregate functions */
1413   }
1414   assert( p->pGroupBy==0 );              /* Has no GROUP BY clause */
1415   if( p->pLimit ) return 0;              /* Has no LIMIT clause */
1416   assert( p->pOffset==0 );               /* No LIMIT means no OFFSET */
1417   if( p->pWhere ) return 0;              /* Has no WHERE clause */
1418   pSrc = p->pSrc;
1419   assert( pSrc!=0 );
1420   if( pSrc->nSrc!=1 ) return 0;          /* Single term in FROM clause */
1421   if( pSrc->a[0].pSelect ) return 0;     /* FROM is not a subquery or view */
1422   pTab = pSrc->a[0].pTab;
1423   if( NEVER(pTab==0) ) return 0;
1424   assert( pTab->pSelect==0 );            /* FROM clause is not a view */
1425   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
1426   pEList = p->pEList;
1427   if( pEList->nExpr!=1 ) return 0;       /* One column in the result set */
1428   if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
1429   return 1;
1430 }
1431 #endif /* SQLITE_OMIT_SUBQUERY */
1432 
1433 /*
1434 ** Code an OP_Once instruction and allocate space for its flag. Return the
1435 ** address of the new instruction.
1436 */
1437 int sqlite3CodeOnce(Parse *pParse){
1438   Vdbe *v = sqlite3GetVdbe(pParse);      /* Virtual machine being coded */
1439   return sqlite3VdbeAddOp1(v, OP_Once, pParse->nOnce++);
1440 }
1441 
1442 /*
1443 ** This function is used by the implementation of the IN (...) operator.
1444 ** The pX parameter is the expression on the RHS of the IN operator, which
1445 ** might be either a list of expressions or a subquery.
1446 **
1447 ** The job of this routine is to find or create a b-tree object that can
1448 ** be used either to test for membership in the RHS set or to iterate through
1449 ** all members of the RHS set, skipping duplicates.
1450 **
1451 ** A cursor is opened on the b-tree object that the RHS of the IN operator
1452 ** and pX->iTable is set to the index of that cursor.
1453 **
1454 ** The returned value of this function indicates the b-tree type, as follows:
1455 **
1456 **   IN_INDEX_ROWID      - The cursor was opened on a database table.
1457 **   IN_INDEX_INDEX_ASC  - The cursor was opened on an ascending index.
1458 **   IN_INDEX_INDEX_DESC - The cursor was opened on a descending index.
1459 **   IN_INDEX_EPH        - The cursor was opened on a specially created and
1460 **                         populated epheremal table.
1461 **
1462 ** An existing b-tree might be used if the RHS expression pX is a simple
1463 ** subquery such as:
1464 **
1465 **     SELECT <column> FROM <table>
1466 **
1467 ** If the RHS of the IN operator is a list or a more complex subquery, then
1468 ** an ephemeral table might need to be generated from the RHS and then
1469 ** pX->iTable made to point to the ephermeral table instead of an
1470 ** existing table.
1471 **
1472 ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
1473 ** through the set members, skipping any duplicates. In this case an
1474 ** epheremal table must be used unless the selected <column> is guaranteed
1475 ** to be unique - either because it is an INTEGER PRIMARY KEY or it
1476 ** has a UNIQUE constraint or UNIQUE index.
1477 **
1478 ** If the prNotFound parameter is not 0, then the b-tree will be used
1479 ** for fast set membership tests. In this case an epheremal table must
1480 ** be used unless <column> is an INTEGER PRIMARY KEY or an index can
1481 ** be found with <column> as its left-most column.
1482 **
1483 ** When the b-tree is being used for membership tests, the calling function
1484 ** needs to know whether or not the structure contains an SQL NULL
1485 ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
1486 ** If there is any chance that the (...) might contain a NULL value at
1487 ** runtime, then a register is allocated and the register number written
1488 ** to *prNotFound. If there is no chance that the (...) contains a
1489 ** NULL value, then *prNotFound is left unchanged.
1490 **
1491 ** If a register is allocated and its location stored in *prNotFound, then
1492 ** its initial value is NULL.  If the (...) does not remain constant
1493 ** for the duration of the query (i.e. the SELECT within the (...)
1494 ** is a correlated subquery) then the value of the allocated register is
1495 ** reset to NULL each time the subquery is rerun. This allows the
1496 ** caller to use vdbe code equivalent to the following:
1497 **
1498 **   if( register==NULL ){
1499 **     has_null = <test if data structure contains null>
1500 **     register = 1
1501 **   }
1502 **
1503 ** in order to avoid running the <test if data structure contains null>
1504 ** test more often than is necessary.
1505 */
1506 #ifndef SQLITE_OMIT_SUBQUERY
1507 int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
1508   Select *p;                            /* SELECT to the right of IN operator */
1509   int eType = 0;                        /* Type of RHS table. IN_INDEX_* */
1510   int iTab = pParse->nTab++;            /* Cursor of the RHS table */
1511   int mustBeUnique = (prNotFound==0);   /* True if RHS must be unique */
1512   Vdbe *v = sqlite3GetVdbe(pParse);     /* Virtual machine being coded */
1513 
1514   assert( pX->op==TK_IN );
1515 
1516   /* Check to see if an existing table or index can be used to
1517   ** satisfy the query.  This is preferable to generating a new
1518   ** ephemeral table.
1519   */
1520   p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0);
1521   if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){
1522     sqlite3 *db = pParse->db;              /* Database connection */
1523     Table *pTab;                           /* Table <table>. */
1524     Expr *pExpr;                           /* Expression <column> */
1525     int iCol;                              /* Index of column <column> */
1526     int iDb;                               /* Database idx for pTab */
1527 
1528     assert( p );                        /* Because of isCandidateForInOpt(p) */
1529     assert( p->pEList!=0 );             /* Because of isCandidateForInOpt(p) */
1530     assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */
1531     assert( p->pSrc!=0 );               /* Because of isCandidateForInOpt(p) */
1532     pTab = p->pSrc->a[0].pTab;
1533     pExpr = p->pEList->a[0].pExpr;
1534     iCol = pExpr->iColumn;
1535 
1536     /* Code an OP_VerifyCookie and OP_TableLock for <table>. */
1537     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
1538     sqlite3CodeVerifySchema(pParse, iDb);
1539     sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
1540 
1541     /* This function is only called from two places. In both cases the vdbe
1542     ** has already been allocated. So assume sqlite3GetVdbe() is always
1543     ** successful here.
1544     */
1545     assert(v);
1546     if( iCol<0 ){
1547       int iAddr;
1548 
1549       iAddr = sqlite3CodeOnce(pParse);
1550 
1551       sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
1552       eType = IN_INDEX_ROWID;
1553 
1554       sqlite3VdbeJumpHere(v, iAddr);
1555     }else{
1556       Index *pIdx;                         /* Iterator variable */
1557 
1558       /* The collation sequence used by the comparison. If an index is to
1559       ** be used in place of a temp-table, it must be ordered according
1560       ** to this collation sequence.  */
1561       CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
1562 
1563       /* Check that the affinity that will be used to perform the
1564       ** comparison is the same as the affinity of the column. If
1565       ** it is not, it is not possible to use any index.
1566       */
1567       int affinity_ok = sqlite3IndexAffinityOk(pX, pTab->aCol[iCol].affinity);
1568 
1569       for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
1570         if( (pIdx->aiColumn[0]==iCol)
1571          && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
1572          && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
1573         ){
1574           int iAddr;
1575           char *pKey;
1576 
1577           pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
1578           iAddr = sqlite3CodeOnce(pParse);
1579 
1580           sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
1581                                pKey,P4_KEYINFO_HANDOFF);
1582           VdbeComment((v, "%s", pIdx->zName));
1583           assert( IN_INDEX_INDEX_DESC == IN_INDEX_INDEX_ASC+1 );
1584           eType = IN_INDEX_INDEX_ASC + pIdx->aSortOrder[0];
1585 
1586           sqlite3VdbeJumpHere(v, iAddr);
1587           if( prNotFound && !pTab->aCol[iCol].notNull ){
1588             *prNotFound = ++pParse->nMem;
1589             sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
1590           }
1591         }
1592       }
1593     }
1594   }
1595 
1596   if( eType==0 ){
1597     /* Could not found an existing table or index to use as the RHS b-tree.
1598     ** We will have to generate an ephemeral table to do the job.
1599     */
1600     u32 savedNQueryLoop = pParse->nQueryLoop;
1601     int rMayHaveNull = 0;
1602     eType = IN_INDEX_EPH;
1603     if( prNotFound ){
1604       *prNotFound = rMayHaveNull = ++pParse->nMem;
1605       sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
1606     }else{
1607       testcase( pParse->nQueryLoop>0 );
1608       pParse->nQueryLoop = 0;
1609       if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){
1610         eType = IN_INDEX_ROWID;
1611       }
1612     }
1613     sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
1614     pParse->nQueryLoop = savedNQueryLoop;
1615   }else{
1616     pX->iTable = iTab;
1617   }
1618   return eType;
1619 }
1620 #endif
1621 
1622 /*
1623 ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
1624 ** or IN operators.  Examples:
1625 **
1626 **     (SELECT a FROM b)          -- subquery
1627 **     EXISTS (SELECT a FROM b)   -- EXISTS subquery
1628 **     x IN (4,5,11)              -- IN operator with list on right-hand side
1629 **     x IN (SELECT a FROM b)     -- IN operator with subquery on the right
1630 **
1631 ** The pExpr parameter describes the expression that contains the IN
1632 ** operator or subquery.
1633 **
1634 ** If parameter isRowid is non-zero, then expression pExpr is guaranteed
1635 ** to be of the form "<rowid> IN (?, ?, ?)", where <rowid> is a reference
1636 ** to some integer key column of a table B-Tree. In this case, use an
1637 ** intkey B-Tree to store the set of IN(...) values instead of the usual
1638 ** (slower) variable length keys B-Tree.
1639 **
1640 ** If rMayHaveNull is non-zero, that means that the operation is an IN
1641 ** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
1642 ** Furthermore, the IN is in a WHERE clause and that we really want
1643 ** to iterate over the RHS of the IN operator in order to quickly locate
1644 ** all corresponding LHS elements.  All this routine does is initialize
1645 ** the register given by rMayHaveNull to NULL.  Calling routines will take
1646 ** care of changing this register value to non-NULL if the RHS is NULL-free.
1647 **
1648 ** If rMayHaveNull is zero, that means that the subquery is being used
1649 ** for membership testing only.  There is no need to initialize any
1650 ** registers to indicate the presence or absence of NULLs on the RHS.
1651 **
1652 ** For a SELECT or EXISTS operator, return the register that holds the
1653 ** result.  For IN operators or if an error occurs, the return value is 0.
1654 */
1655 #ifndef SQLITE_OMIT_SUBQUERY
1656 int sqlite3CodeSubselect(
1657   Parse *pParse,          /* Parsing context */
1658   Expr *pExpr,            /* The IN, SELECT, or EXISTS operator */
1659   int rMayHaveNull,       /* Register that records whether NULLs exist in RHS */
1660   int isRowid             /* If true, LHS of IN operator is a rowid */
1661 ){
1662   int testAddr = -1;                      /* One-time test address */
1663   int rReg = 0;                           /* Register storing resulting */
1664   Vdbe *v = sqlite3GetVdbe(pParse);
1665   if( NEVER(v==0) ) return 0;
1666   sqlite3ExprCachePush(pParse);
1667 
1668   /* This code must be run in its entirety every time it is encountered
1669   ** if any of the following is true:
1670   **
1671   **    *  The right-hand side is a correlated subquery
1672   **    *  The right-hand side is an expression list containing variables
1673   **    *  We are inside a trigger
1674   **
1675   ** If all of the above are false, then we can run this code just once
1676   ** save the results, and reuse the same result on subsequent invocations.
1677   */
1678   if( !ExprHasAnyProperty(pExpr, EP_VarSelect) ){
1679     testAddr = sqlite3CodeOnce(pParse);
1680   }
1681 
1682 #ifndef SQLITE_OMIT_EXPLAIN
1683   if( pParse->explain==2 ){
1684     char *zMsg = sqlite3MPrintf(
1685         pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr>=0?"":"CORRELATED ",
1686         pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
1687     );
1688     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
1689   }
1690 #endif
1691 
1692   switch( pExpr->op ){
1693     case TK_IN: {
1694       char affinity;              /* Affinity of the LHS of the IN */
1695       KeyInfo keyInfo;            /* Keyinfo for the generated table */
1696       static u8 sortOrder = 0;    /* Fake aSortOrder for keyInfo */
1697       int addr;                   /* Address of OP_OpenEphemeral instruction */
1698       Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
1699 
1700       if( rMayHaveNull ){
1701         sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
1702       }
1703 
1704       affinity = sqlite3ExprAffinity(pLeft);
1705 
1706       /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
1707       ** expression it is handled the same way.  An ephemeral table is
1708       ** filled with single-field index keys representing the results
1709       ** from the SELECT or the <exprlist>.
1710       **
1711       ** If the 'x' expression is a column value, or the SELECT...
1712       ** statement returns a column value, then the affinity of that
1713       ** column is used to build the index keys. If both 'x' and the
1714       ** SELECT... statement are columns, then numeric affinity is used
1715       ** if either column has NUMERIC or INTEGER affinity. If neither
1716       ** 'x' nor the SELECT... statement are columns, then numeric affinity
1717       ** is used.
1718       */
1719       pExpr->iTable = pParse->nTab++;
1720       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
1721       if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
1722       memset(&keyInfo, 0, sizeof(keyInfo));
1723       keyInfo.nField = 1;
1724       keyInfo.aSortOrder = &sortOrder;
1725 
1726       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
1727         /* Case 1:     expr IN (SELECT ...)
1728         **
1729         ** Generate code to write the results of the select into the temporary
1730         ** table allocated and opened above.
1731         */
1732         SelectDest dest;
1733         ExprList *pEList;
1734 
1735         assert( !isRowid );
1736         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
1737         dest.affSdst = (u8)affinity;
1738         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
1739         pExpr->x.pSelect->iLimit = 0;
1740         if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
1741           return 0;
1742         }
1743         pEList = pExpr->x.pSelect->pEList;
1744         if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){
1745           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
1746               pEList->a[0].pExpr);
1747         }
1748       }else if( ALWAYS(pExpr->x.pList!=0) ){
1749         /* Case 2:     expr IN (exprlist)
1750         **
1751         ** For each expression, build an index key from the evaluation and
1752         ** store it in the temporary table. If <expr> is a column, then use
1753         ** that columns affinity when building index keys. If <expr> is not
1754         ** a column, use numeric affinity.
1755         */
1756         int i;
1757         ExprList *pList = pExpr->x.pList;
1758         struct ExprList_item *pItem;
1759         int r1, r2, r3;
1760 
1761         if( !affinity ){
1762           affinity = SQLITE_AFF_NONE;
1763         }
1764         keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
1765         keyInfo.aSortOrder = &sortOrder;
1766 
1767         /* Loop through each expression in <exprlist>. */
1768         r1 = sqlite3GetTempReg(pParse);
1769         r2 = sqlite3GetTempReg(pParse);
1770         sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
1771         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
1772           Expr *pE2 = pItem->pExpr;
1773           int iValToIns;
1774 
1775           /* If the expression is not constant then we will need to
1776           ** disable the test that was generated above that makes sure
1777           ** this code only executes once.  Because for a non-constant
1778           ** expression we need to rerun this code each time.
1779           */
1780           if( testAddr>=0 && !sqlite3ExprIsConstant(pE2) ){
1781             sqlite3VdbeChangeToNoop(v, testAddr);
1782             testAddr = -1;
1783           }
1784 
1785           /* Evaluate the expression and insert it into the temp table */
1786           if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
1787             sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
1788           }else{
1789             r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
1790             if( isRowid ){
1791               sqlite3VdbeAddOp2(v, OP_MustBeInt, r3,
1792                                 sqlite3VdbeCurrentAddr(v)+2);
1793               sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3);
1794             }else{
1795               sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
1796               sqlite3ExprCacheAffinityChange(pParse, r3, 1);
1797               sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
1798             }
1799           }
1800         }
1801         sqlite3ReleaseTempReg(pParse, r1);
1802         sqlite3ReleaseTempReg(pParse, r2);
1803       }
1804       if( !isRowid ){
1805         sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
1806       }
1807       break;
1808     }
1809 
1810     case TK_EXISTS:
1811     case TK_SELECT:
1812     default: {
1813       /* If this has to be a scalar SELECT.  Generate code to put the
1814       ** value of this select in a memory cell and record the number
1815       ** of the memory cell in iColumn.  If this is an EXISTS, write
1816       ** an integer 0 (not exists) or 1 (exists) into a memory cell
1817       ** and record that memory cell in iColumn.
1818       */
1819       Select *pSel;                         /* SELECT statement to encode */
1820       SelectDest dest;                      /* How to deal with SELECt result */
1821 
1822       testcase( pExpr->op==TK_EXISTS );
1823       testcase( pExpr->op==TK_SELECT );
1824       assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT );
1825 
1826       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
1827       pSel = pExpr->x.pSelect;
1828       sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
1829       if( pExpr->op==TK_SELECT ){
1830         dest.eDest = SRT_Mem;
1831         sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iSDParm);
1832         VdbeComment((v, "Init subquery result"));
1833       }else{
1834         dest.eDest = SRT_Exists;
1835         sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iSDParm);
1836         VdbeComment((v, "Init EXISTS result"));
1837       }
1838       sqlite3ExprDelete(pParse->db, pSel->pLimit);
1839       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
1840                                   &sqlite3IntTokens[1]);
1841       pSel->iLimit = 0;
1842       if( sqlite3Select(pParse, pSel, &dest) ){
1843         return 0;
1844       }
1845       rReg = dest.iSDParm;
1846       ExprSetIrreducible(pExpr);
1847       break;
1848     }
1849   }
1850 
1851   if( testAddr>=0 ){
1852     sqlite3VdbeJumpHere(v, testAddr);
1853   }
1854   sqlite3ExprCachePop(pParse, 1);
1855 
1856   return rReg;
1857 }
1858 #endif /* SQLITE_OMIT_SUBQUERY */
1859 
1860 #ifndef SQLITE_OMIT_SUBQUERY
1861 /*
1862 ** Generate code for an IN expression.
1863 **
1864 **      x IN (SELECT ...)
1865 **      x IN (value, value, ...)
1866 **
1867 ** The left-hand side (LHS) is a scalar expression.  The right-hand side (RHS)
1868 ** is an array of zero or more values.  The expression is true if the LHS is
1869 ** contained within the RHS.  The value of the expression is unknown (NULL)
1870 ** if the LHS is NULL or if the LHS is not contained within the RHS and the
1871 ** RHS contains one or more NULL values.
1872 **
1873 ** This routine generates code will jump to destIfFalse if the LHS is not
1874 ** contained within the RHS.  If due to NULLs we cannot determine if the LHS
1875 ** is contained in the RHS then jump to destIfNull.  If the LHS is contained
1876 ** within the RHS then fall through.
1877 */
1878 static void sqlite3ExprCodeIN(
1879   Parse *pParse,        /* Parsing and code generating context */
1880   Expr *pExpr,          /* The IN expression */
1881   int destIfFalse,      /* Jump here if LHS is not contained in the RHS */
1882   int destIfNull        /* Jump here if the results are unknown due to NULLs */
1883 ){
1884   int rRhsHasNull = 0;  /* Register that is true if RHS contains NULL values */
1885   char affinity;        /* Comparison affinity to use */
1886   int eType;            /* Type of the RHS */
1887   int r1;               /* Temporary use register */
1888   Vdbe *v;              /* Statement under construction */
1889 
1890   /* Compute the RHS.   After this step, the table with cursor
1891   ** pExpr->iTable will contains the values that make up the RHS.
1892   */
1893   v = pParse->pVdbe;
1894   assert( v!=0 );       /* OOM detected prior to this routine */
1895   VdbeNoopComment((v, "begin IN expr"));
1896   eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
1897 
1898   /* Figure out the affinity to use to create a key from the results
1899   ** of the expression. affinityStr stores a static string suitable for
1900   ** P4 of OP_MakeRecord.
1901   */
1902   affinity = comparisonAffinity(pExpr);
1903 
1904   /* Code the LHS, the <expr> from "<expr> IN (...)".
1905   */
1906   sqlite3ExprCachePush(pParse);
1907   r1 = sqlite3GetTempReg(pParse);
1908   sqlite3ExprCode(pParse, pExpr->pLeft, r1);
1909 
1910   /* If the LHS is NULL, then the result is either false or NULL depending
1911   ** on whether the RHS is empty or not, respectively.
1912   */
1913   if( destIfNull==destIfFalse ){
1914     /* Shortcut for the common case where the false and NULL outcomes are
1915     ** the same. */
1916     sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull);
1917   }else{
1918     int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1);
1919     sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
1920     sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
1921     sqlite3VdbeJumpHere(v, addr1);
1922   }
1923 
1924   if( eType==IN_INDEX_ROWID ){
1925     /* In this case, the RHS is the ROWID of table b-tree
1926     */
1927     sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse);
1928     sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
1929   }else{
1930     /* In this case, the RHS is an index b-tree.
1931     */
1932     sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
1933 
1934     /* If the set membership test fails, then the result of the
1935     ** "x IN (...)" expression must be either 0 or NULL. If the set
1936     ** contains no NULL values, then the result is 0. If the set
1937     ** contains one or more NULL values, then the result of the
1938     ** expression is also NULL.
1939     */
1940     if( rRhsHasNull==0 || destIfFalse==destIfNull ){
1941       /* This branch runs if it is known at compile time that the RHS
1942       ** cannot contain NULL values. This happens as the result
1943       ** of a "NOT NULL" constraint in the database schema.
1944       **
1945       ** Also run this branch if NULL is equivalent to FALSE
1946       ** for this particular IN operator.
1947       */
1948       sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
1949 
1950     }else{
1951       /* In this branch, the RHS of the IN might contain a NULL and
1952       ** the presence of a NULL on the RHS makes a difference in the
1953       ** outcome.
1954       */
1955       int j1, j2, j3;
1956 
1957       /* First check to see if the LHS is contained in the RHS.  If so,
1958       ** then the presence of NULLs in the RHS does not matter, so jump
1959       ** over all of the code that follows.
1960       */
1961       j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
1962 
1963       /* Here we begin generating code that runs if the LHS is not
1964       ** contained within the RHS.  Generate additional code that
1965       ** tests the RHS for NULLs.  If the RHS contains a NULL then
1966       ** jump to destIfNull.  If there are no NULLs in the RHS then
1967       ** jump to destIfFalse.
1968       */
1969       j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull);
1970       j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
1971       sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull);
1972       sqlite3VdbeJumpHere(v, j3);
1973       sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1);
1974       sqlite3VdbeJumpHere(v, j2);
1975 
1976       /* Jump to the appropriate target depending on whether or not
1977       ** the RHS contains a NULL
1978       */
1979       sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull);
1980       sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
1981 
1982       /* The OP_Found at the top of this branch jumps here when true,
1983       ** causing the overall IN expression evaluation to fall through.
1984       */
1985       sqlite3VdbeJumpHere(v, j1);
1986     }
1987   }
1988   sqlite3ReleaseTempReg(pParse, r1);
1989   sqlite3ExprCachePop(pParse, 1);
1990   VdbeComment((v, "end IN expr"));
1991 }
1992 #endif /* SQLITE_OMIT_SUBQUERY */
1993 
1994 /*
1995 ** Duplicate an 8-byte value
1996 */
1997 static char *dup8bytes(Vdbe *v, const char *in){
1998   char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
1999   if( out ){
2000     memcpy(out, in, 8);
2001   }
2002   return out;
2003 }
2004 
2005 #ifndef SQLITE_OMIT_FLOATING_POINT
2006 /*
2007 ** Generate an instruction that will put the floating point
2008 ** value described by z[0..n-1] into register iMem.
2009 **
2010 ** The z[] string will probably not be zero-terminated.  But the
2011 ** z[n] character is guaranteed to be something that does not look
2012 ** like the continuation of the number.
2013 */
2014 static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
2015   if( ALWAYS(z!=0) ){
2016     double value;
2017     char *zV;
2018     sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
2019     assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
2020     if( negateFlag ) value = -value;
2021     zV = dup8bytes(v, (char*)&value);
2022     sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
2023   }
2024 }
2025 #endif
2026 
2027 
2028 /*
2029 ** Generate an instruction that will put the integer describe by
2030 ** text z[0..n-1] into register iMem.
2031 **
2032 ** Expr.u.zToken is always UTF8 and zero-terminated.
2033 */
2034 static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
2035   Vdbe *v = pParse->pVdbe;
2036   if( pExpr->flags & EP_IntValue ){
2037     int i = pExpr->u.iValue;
2038     assert( i>=0 );
2039     if( negFlag ) i = -i;
2040     sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
2041   }else{
2042     int c;
2043     i64 value;
2044     const char *z = pExpr->u.zToken;
2045     assert( z!=0 );
2046     c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
2047     if( c==0 || (c==2 && negFlag) ){
2048       char *zV;
2049       if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
2050       zV = dup8bytes(v, (char*)&value);
2051       sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
2052     }else{
2053 #ifdef SQLITE_OMIT_FLOATING_POINT
2054       sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
2055 #else
2056       codeReal(v, z, negFlag, iMem);
2057 #endif
2058     }
2059   }
2060 }
2061 
2062 /*
2063 ** Clear a cache entry.
2064 */
2065 static void cacheEntryClear(Parse *pParse, struct yColCache *p){
2066   if( p->tempReg ){
2067     if( pParse->nTempReg<ArraySize(pParse->aTempReg) ){
2068       pParse->aTempReg[pParse->nTempReg++] = p->iReg;
2069     }
2070     p->tempReg = 0;
2071   }
2072 }
2073 
2074 
2075 /*
2076 ** Record in the column cache that a particular column from a
2077 ** particular table is stored in a particular register.
2078 */
2079 void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){
2080   int i;
2081   int minLru;
2082   int idxLru;
2083   struct yColCache *p;
2084 
2085   assert( iReg>0 );  /* Register numbers are always positive */
2086   assert( iCol>=-1 && iCol<32768 );  /* Finite column numbers */
2087 
2088   /* The SQLITE_ColumnCache flag disables the column cache.  This is used
2089   ** for testing only - to verify that SQLite always gets the same answer
2090   ** with and without the column cache.
2091   */
2092   if( OptimizationDisabled(pParse->db, SQLITE_ColumnCache) ) return;
2093 
2094   /* First replace any existing entry.
2095   **
2096   ** Actually, the way the column cache is currently used, we are guaranteed
2097   ** that the object will never already be in cache.  Verify this guarantee.
2098   */
2099 #ifndef NDEBUG
2100   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2101     assert( p->iReg==0 || p->iTable!=iTab || p->iColumn!=iCol );
2102   }
2103 #endif
2104 
2105   /* Find an empty slot and replace it */
2106   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2107     if( p->iReg==0 ){
2108       p->iLevel = pParse->iCacheLevel;
2109       p->iTable = iTab;
2110       p->iColumn = iCol;
2111       p->iReg = iReg;
2112       p->tempReg = 0;
2113       p->lru = pParse->iCacheCnt++;
2114       return;
2115     }
2116   }
2117 
2118   /* Replace the last recently used */
2119   minLru = 0x7fffffff;
2120   idxLru = -1;
2121   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2122     if( p->lru<minLru ){
2123       idxLru = i;
2124       minLru = p->lru;
2125     }
2126   }
2127   if( ALWAYS(idxLru>=0) ){
2128     p = &pParse->aColCache[idxLru];
2129     p->iLevel = pParse->iCacheLevel;
2130     p->iTable = iTab;
2131     p->iColumn = iCol;
2132     p->iReg = iReg;
2133     p->tempReg = 0;
2134     p->lru = pParse->iCacheCnt++;
2135     return;
2136   }
2137 }
2138 
2139 /*
2140 ** Indicate that registers between iReg..iReg+nReg-1 are being overwritten.
2141 ** Purge the range of registers from the column cache.
2142 */
2143 void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
2144   int i;
2145   int iLast = iReg + nReg - 1;
2146   struct yColCache *p;
2147   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2148     int r = p->iReg;
2149     if( r>=iReg && r<=iLast ){
2150       cacheEntryClear(pParse, p);
2151       p->iReg = 0;
2152     }
2153   }
2154 }
2155 
2156 /*
2157 ** Remember the current column cache context.  Any new entries added
2158 ** added to the column cache after this call are removed when the
2159 ** corresponding pop occurs.
2160 */
2161 void sqlite3ExprCachePush(Parse *pParse){
2162   pParse->iCacheLevel++;
2163 }
2164 
2165 /*
2166 ** Remove from the column cache any entries that were added since the
2167 ** the previous N Push operations.  In other words, restore the cache
2168 ** to the state it was in N Pushes ago.
2169 */
2170 void sqlite3ExprCachePop(Parse *pParse, int N){
2171   int i;
2172   struct yColCache *p;
2173   assert( N>0 );
2174   assert( pParse->iCacheLevel>=N );
2175   pParse->iCacheLevel -= N;
2176   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2177     if( p->iReg && p->iLevel>pParse->iCacheLevel ){
2178       cacheEntryClear(pParse, p);
2179       p->iReg = 0;
2180     }
2181   }
2182 }
2183 
2184 /*
2185 ** When a cached column is reused, make sure that its register is
2186 ** no longer available as a temp register.  ticket #3879:  that same
2187 ** register might be in the cache in multiple places, so be sure to
2188 ** get them all.
2189 */
2190 static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
2191   int i;
2192   struct yColCache *p;
2193   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2194     if( p->iReg==iReg ){
2195       p->tempReg = 0;
2196     }
2197   }
2198 }
2199 
2200 /*
2201 ** Generate code to extract the value of the iCol-th column of a table.
2202 */
2203 void sqlite3ExprCodeGetColumnOfTable(
2204   Vdbe *v,        /* The VDBE under construction */
2205   Table *pTab,    /* The table containing the value */
2206   int iTabCur,    /* The cursor for this table */
2207   int iCol,       /* Index of the column to extract */
2208   int regOut      /* Extract the valud into this register */
2209 ){
2210   if( iCol<0 || iCol==pTab->iPKey ){
2211     sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
2212   }else{
2213     int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
2214     sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut);
2215   }
2216   if( iCol>=0 ){
2217     sqlite3ColumnDefault(v, pTab, iCol, regOut);
2218   }
2219 }
2220 
2221 /*
2222 ** Generate code that will extract the iColumn-th column from
2223 ** table pTab and store the column value in a register.  An effort
2224 ** is made to store the column value in register iReg, but this is
2225 ** not guaranteed.  The location of the column value is returned.
2226 **
2227 ** There must be an open cursor to pTab in iTable when this routine
2228 ** is called.  If iColumn<0 then code is generated that extracts the rowid.
2229 */
2230 int sqlite3ExprCodeGetColumn(
2231   Parse *pParse,   /* Parsing and code generating context */
2232   Table *pTab,     /* Description of the table we are reading from */
2233   int iColumn,     /* Index of the table column */
2234   int iTable,      /* The cursor pointing to the table */
2235   int iReg,        /* Store results here */
2236   u8 p5            /* P5 value for OP_Column */
2237 ){
2238   Vdbe *v = pParse->pVdbe;
2239   int i;
2240   struct yColCache *p;
2241 
2242   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2243     if( p->iReg>0 && p->iTable==iTable && p->iColumn==iColumn ){
2244       p->lru = pParse->iCacheCnt++;
2245       sqlite3ExprCachePinRegister(pParse, p->iReg);
2246       return p->iReg;
2247     }
2248   }
2249   assert( v!=0 );
2250   sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg);
2251   if( p5 ){
2252     sqlite3VdbeChangeP5(v, p5);
2253   }else{
2254     sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg);
2255   }
2256   return iReg;
2257 }
2258 
2259 /*
2260 ** Clear all column cache entries.
2261 */
2262 void sqlite3ExprCacheClear(Parse *pParse){
2263   int i;
2264   struct yColCache *p;
2265 
2266   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2267     if( p->iReg ){
2268       cacheEntryClear(pParse, p);
2269       p->iReg = 0;
2270     }
2271   }
2272 }
2273 
2274 /*
2275 ** Record the fact that an affinity change has occurred on iCount
2276 ** registers starting with iStart.
2277 */
2278 void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
2279   sqlite3ExprCacheRemove(pParse, iStart, iCount);
2280 }
2281 
2282 /*
2283 ** Generate code to move content from registers iFrom...iFrom+nReg-1
2284 ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
2285 */
2286 void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
2287   int i;
2288   struct yColCache *p;
2289   assert( iFrom>=iTo+nReg || iFrom+nReg<=iTo );
2290   sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg-1);
2291   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2292     int x = p->iReg;
2293     if( x>=iFrom && x<iFrom+nReg ){
2294       p->iReg += iTo-iFrom;
2295     }
2296   }
2297 }
2298 
2299 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
2300 /*
2301 ** Return true if any register in the range iFrom..iTo (inclusive)
2302 ** is used as part of the column cache.
2303 **
2304 ** This routine is used within assert() and testcase() macros only
2305 ** and does not appear in a normal build.
2306 */
2307 static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
2308   int i;
2309   struct yColCache *p;
2310   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
2311     int r = p->iReg;
2312     if( r>=iFrom && r<=iTo ) return 1;    /*NO_TEST*/
2313   }
2314   return 0;
2315 }
2316 #endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
2317 
2318 /*
2319 ** Generate code into the current Vdbe to evaluate the given
2320 ** expression.  Attempt to store the results in register "target".
2321 ** Return the register where results are stored.
2322 **
2323 ** With this routine, there is no guarantee that results will
2324 ** be stored in target.  The result might be stored in some other
2325 ** register if it is convenient to do so.  The calling function
2326 ** must check the return code and move the results to the desired
2327 ** register.
2328 */
2329 int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
2330   Vdbe *v = pParse->pVdbe;  /* The VM under construction */
2331   int op;                   /* The opcode being coded */
2332   int inReg = target;       /* Results stored in register inReg */
2333   int regFree1 = 0;         /* If non-zero free this temporary register */
2334   int regFree2 = 0;         /* If non-zero free this temporary register */
2335   int r1, r2, r3, r4;       /* Various register numbers */
2336   sqlite3 *db = pParse->db; /* The database connection */
2337 
2338   assert( target>0 && target<=pParse->nMem );
2339   if( v==0 ){
2340     assert( pParse->db->mallocFailed );
2341     return 0;
2342   }
2343 
2344   if( pExpr==0 ){
2345     op = TK_NULL;
2346   }else{
2347     op = pExpr->op;
2348   }
2349   switch( op ){
2350     case TK_AGG_COLUMN: {
2351       AggInfo *pAggInfo = pExpr->pAggInfo;
2352       struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
2353       if( !pAggInfo->directMode ){
2354         assert( pCol->iMem>0 );
2355         inReg = pCol->iMem;
2356         break;
2357       }else if( pAggInfo->useSortingIdx ){
2358         sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
2359                               pCol->iSorterColumn, target);
2360         break;
2361       }
2362       /* Otherwise, fall thru into the TK_COLUMN case */
2363     }
2364     case TK_COLUMN: {
2365       if( pExpr->iTable<0 ){
2366         /* This only happens when coding check constraints */
2367         assert( pParse->ckBase>0 );
2368         inReg = pExpr->iColumn + pParse->ckBase;
2369       }else{
2370         inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
2371                                  pExpr->iColumn, pExpr->iTable, target,
2372                                  pExpr->op2);
2373       }
2374       break;
2375     }
2376     case TK_INTEGER: {
2377       codeInteger(pParse, pExpr, 0, target);
2378       break;
2379     }
2380 #ifndef SQLITE_OMIT_FLOATING_POINT
2381     case TK_FLOAT: {
2382       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2383       codeReal(v, pExpr->u.zToken, 0, target);
2384       break;
2385     }
2386 #endif
2387     case TK_STRING: {
2388       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2389       sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0);
2390       break;
2391     }
2392     case TK_NULL: {
2393       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
2394       break;
2395     }
2396 #ifndef SQLITE_OMIT_BLOB_LITERAL
2397     case TK_BLOB: {
2398       int n;
2399       const char *z;
2400       char *zBlob;
2401       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2402       assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
2403       assert( pExpr->u.zToken[1]=='\'' );
2404       z = &pExpr->u.zToken[2];
2405       n = sqlite3Strlen30(z) - 1;
2406       assert( z[n]=='\'' );
2407       zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
2408       sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
2409       break;
2410     }
2411 #endif
2412     case TK_VARIABLE: {
2413       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2414       assert( pExpr->u.zToken!=0 );
2415       assert( pExpr->u.zToken[0]!=0 );
2416       sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
2417       if( pExpr->u.zToken[1]!=0 ){
2418         assert( pExpr->u.zToken[0]=='?'
2419              || strcmp(pExpr->u.zToken, pParse->azVar[pExpr->iColumn-1])==0 );
2420         sqlite3VdbeChangeP4(v, -1, pParse->azVar[pExpr->iColumn-1], P4_STATIC);
2421       }
2422       break;
2423     }
2424     case TK_REGISTER: {
2425       inReg = pExpr->iTable;
2426       break;
2427     }
2428     case TK_AS: {
2429       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
2430       break;
2431     }
2432 #ifndef SQLITE_OMIT_CAST
2433     case TK_CAST: {
2434       /* Expressions of the form:   CAST(pLeft AS token) */
2435       int aff, to_op;
2436       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
2437       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2438       aff = sqlite3AffinityType(pExpr->u.zToken);
2439       to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
2440       assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );
2441       assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );
2442       assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
2443       assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );
2444       assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );
2445       testcase( to_op==OP_ToText );
2446       testcase( to_op==OP_ToBlob );
2447       testcase( to_op==OP_ToNumeric );
2448       testcase( to_op==OP_ToInt );
2449       testcase( to_op==OP_ToReal );
2450       if( inReg!=target ){
2451         sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
2452         inReg = target;
2453       }
2454       sqlite3VdbeAddOp1(v, to_op, inReg);
2455       testcase( usedAsColumnCache(pParse, inReg, inReg) );
2456       sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
2457       break;
2458     }
2459 #endif /* SQLITE_OMIT_CAST */
2460     case TK_LT:
2461     case TK_LE:
2462     case TK_GT:
2463     case TK_GE:
2464     case TK_NE:
2465     case TK_EQ: {
2466       assert( TK_LT==OP_Lt );
2467       assert( TK_LE==OP_Le );
2468       assert( TK_GT==OP_Gt );
2469       assert( TK_GE==OP_Ge );
2470       assert( TK_EQ==OP_Eq );
2471       assert( TK_NE==OP_Ne );
2472       testcase( op==TK_LT );
2473       testcase( op==TK_LE );
2474       testcase( op==TK_GT );
2475       testcase( op==TK_GE );
2476       testcase( op==TK_EQ );
2477       testcase( op==TK_NE );
2478       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2479       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
2480       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
2481                   r1, r2, inReg, SQLITE_STOREP2);
2482       testcase( regFree1==0 );
2483       testcase( regFree2==0 );
2484       break;
2485     }
2486     case TK_IS:
2487     case TK_ISNOT: {
2488       testcase( op==TK_IS );
2489       testcase( op==TK_ISNOT );
2490       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2491       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
2492       op = (op==TK_IS) ? TK_EQ : TK_NE;
2493       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
2494                   r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ);
2495       testcase( regFree1==0 );
2496       testcase( regFree2==0 );
2497       break;
2498     }
2499     case TK_AND:
2500     case TK_OR:
2501     case TK_PLUS:
2502     case TK_STAR:
2503     case TK_MINUS:
2504     case TK_REM:
2505     case TK_BITAND:
2506     case TK_BITOR:
2507     case TK_SLASH:
2508     case TK_LSHIFT:
2509     case TK_RSHIFT:
2510     case TK_CONCAT: {
2511       assert( TK_AND==OP_And );
2512       assert( TK_OR==OP_Or );
2513       assert( TK_PLUS==OP_Add );
2514       assert( TK_MINUS==OP_Subtract );
2515       assert( TK_REM==OP_Remainder );
2516       assert( TK_BITAND==OP_BitAnd );
2517       assert( TK_BITOR==OP_BitOr );
2518       assert( TK_SLASH==OP_Divide );
2519       assert( TK_LSHIFT==OP_ShiftLeft );
2520       assert( TK_RSHIFT==OP_ShiftRight );
2521       assert( TK_CONCAT==OP_Concat );
2522       testcase( op==TK_AND );
2523       testcase( op==TK_OR );
2524       testcase( op==TK_PLUS );
2525       testcase( op==TK_MINUS );
2526       testcase( op==TK_REM );
2527       testcase( op==TK_BITAND );
2528       testcase( op==TK_BITOR );
2529       testcase( op==TK_SLASH );
2530       testcase( op==TK_LSHIFT );
2531       testcase( op==TK_RSHIFT );
2532       testcase( op==TK_CONCAT );
2533       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2534       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
2535       sqlite3VdbeAddOp3(v, op, r2, r1, target);
2536       testcase( regFree1==0 );
2537       testcase( regFree2==0 );
2538       break;
2539     }
2540     case TK_UMINUS: {
2541       Expr *pLeft = pExpr->pLeft;
2542       assert( pLeft );
2543       if( pLeft->op==TK_INTEGER ){
2544         codeInteger(pParse, pLeft, 1, target);
2545 #ifndef SQLITE_OMIT_FLOATING_POINT
2546       }else if( pLeft->op==TK_FLOAT ){
2547         assert( !ExprHasProperty(pExpr, EP_IntValue) );
2548         codeReal(v, pLeft->u.zToken, 1, target);
2549 #endif
2550       }else{
2551         regFree1 = r1 = sqlite3GetTempReg(pParse);
2552         sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
2553         r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
2554         sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
2555         testcase( regFree2==0 );
2556       }
2557       inReg = target;
2558       break;
2559     }
2560     case TK_BITNOT:
2561     case TK_NOT: {
2562       assert( TK_BITNOT==OP_BitNot );
2563       assert( TK_NOT==OP_Not );
2564       testcase( op==TK_BITNOT );
2565       testcase( op==TK_NOT );
2566       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2567       testcase( regFree1==0 );
2568       inReg = target;
2569       sqlite3VdbeAddOp2(v, op, r1, inReg);
2570       break;
2571     }
2572     case TK_ISNULL:
2573     case TK_NOTNULL: {
2574       int addr;
2575       assert( TK_ISNULL==OP_IsNull );
2576       assert( TK_NOTNULL==OP_NotNull );
2577       testcase( op==TK_ISNULL );
2578       testcase( op==TK_NOTNULL );
2579       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
2580       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2581       testcase( regFree1==0 );
2582       addr = sqlite3VdbeAddOp1(v, op, r1);
2583       sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
2584       sqlite3VdbeJumpHere(v, addr);
2585       break;
2586     }
2587     case TK_AGG_FUNCTION: {
2588       AggInfo *pInfo = pExpr->pAggInfo;
2589       if( pInfo==0 ){
2590         assert( !ExprHasProperty(pExpr, EP_IntValue) );
2591         sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken);
2592       }else{
2593         inReg = pInfo->aFunc[pExpr->iAgg].iMem;
2594       }
2595       break;
2596     }
2597     case TK_CONST_FUNC:
2598     case TK_FUNCTION: {
2599       ExprList *pFarg;       /* List of function arguments */
2600       int nFarg;             /* Number of function arguments */
2601       FuncDef *pDef;         /* The function definition object */
2602       int nId;               /* Length of the function name in bytes */
2603       const char *zId;       /* The function name */
2604       int constMask = 0;     /* Mask of function arguments that are constant */
2605       int i;                 /* Loop counter */
2606       u8 enc = ENC(db);      /* The text encoding used by this database */
2607       CollSeq *pColl = 0;    /* A collating sequence */
2608 
2609       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
2610       testcase( op==TK_CONST_FUNC );
2611       testcase( op==TK_FUNCTION );
2612       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
2613         pFarg = 0;
2614       }else{
2615         pFarg = pExpr->x.pList;
2616       }
2617       nFarg = pFarg ? pFarg->nExpr : 0;
2618       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2619       zId = pExpr->u.zToken;
2620       nId = sqlite3Strlen30(zId);
2621       pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
2622       if( pDef==0 ){
2623         sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
2624         break;
2625       }
2626 
2627       /* Attempt a direct implementation of the built-in COALESCE() and
2628       ** IFNULL() functions.  This avoids unnecessary evalation of
2629       ** arguments past the first non-NULL argument.
2630       */
2631       if( pDef->flags & SQLITE_FUNC_COALESCE ){
2632         int endCoalesce = sqlite3VdbeMakeLabel(v);
2633         assert( nFarg>=2 );
2634         sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target);
2635         for(i=1; i<nFarg; i++){
2636           sqlite3VdbeAddOp2(v, OP_NotNull, target, endCoalesce);
2637           sqlite3ExprCacheRemove(pParse, target, 1);
2638           sqlite3ExprCachePush(pParse);
2639           sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target);
2640           sqlite3ExprCachePop(pParse, 1);
2641         }
2642         sqlite3VdbeResolveLabel(v, endCoalesce);
2643         break;
2644       }
2645 
2646 
2647       if( pFarg ){
2648         r1 = sqlite3GetTempRange(pParse, nFarg);
2649 
2650         /* For length() and typeof() functions with a column argument,
2651         ** set the P5 parameter to the OP_Column opcode to OPFLAG_LENGTHARG
2652         ** or OPFLAG_TYPEOFARG respectively, to avoid unnecessary data
2653         ** loading.
2654         */
2655         if( (pDef->flags & (SQLITE_FUNC_LENGTH|SQLITE_FUNC_TYPEOF))!=0 ){
2656           u8 exprOp;
2657           assert( nFarg==1 );
2658           assert( pFarg->a[0].pExpr!=0 );
2659           exprOp = pFarg->a[0].pExpr->op;
2660           if( exprOp==TK_COLUMN || exprOp==TK_AGG_COLUMN ){
2661             assert( SQLITE_FUNC_LENGTH==OPFLAG_LENGTHARG );
2662             assert( SQLITE_FUNC_TYPEOF==OPFLAG_TYPEOFARG );
2663             testcase( pDef->flags==SQLITE_FUNC_LENGTH );
2664             pFarg->a[0].pExpr->op2 = pDef->flags;
2665           }
2666         }
2667 
2668         sqlite3ExprCachePush(pParse);     /* Ticket 2ea2425d34be */
2669         sqlite3ExprCodeExprList(pParse, pFarg, r1, 1);
2670         sqlite3ExprCachePop(pParse, 1);   /* Ticket 2ea2425d34be */
2671       }else{
2672         r1 = 0;
2673       }
2674 #ifndef SQLITE_OMIT_VIRTUALTABLE
2675       /* Possibly overload the function if the first argument is
2676       ** a virtual table column.
2677       **
2678       ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
2679       ** second argument, not the first, as the argument to test to
2680       ** see if it is a column in a virtual table.  This is done because
2681       ** the left operand of infix functions (the operand we want to
2682       ** control overloading) ends up as the second argument to the
2683       ** function.  The expression "A glob B" is equivalent to
2684       ** "glob(B,A).  We want to use the A in "A glob B" to test
2685       ** for function overloading.  But we use the B term in "glob(B,A)".
2686       */
2687       if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){
2688         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr);
2689       }else if( nFarg>0 ){
2690         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr);
2691       }
2692 #endif
2693       for(i=0; i<nFarg; i++){
2694         if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
2695           constMask |= (1<<i);
2696         }
2697         if( (pDef->flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){
2698           pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr);
2699         }
2700       }
2701       if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){
2702         if( !pColl ) pColl = db->pDfltColl;
2703         sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
2704       }
2705       sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
2706                         (char*)pDef, P4_FUNCDEF);
2707       sqlite3VdbeChangeP5(v, (u8)nFarg);
2708       if( nFarg ){
2709         sqlite3ReleaseTempRange(pParse, r1, nFarg);
2710       }
2711       break;
2712     }
2713 #ifndef SQLITE_OMIT_SUBQUERY
2714     case TK_EXISTS:
2715     case TK_SELECT: {
2716       testcase( op==TK_EXISTS );
2717       testcase( op==TK_SELECT );
2718       inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0);
2719       break;
2720     }
2721     case TK_IN: {
2722       int destIfFalse = sqlite3VdbeMakeLabel(v);
2723       int destIfNull = sqlite3VdbeMakeLabel(v);
2724       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
2725       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
2726       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
2727       sqlite3VdbeResolveLabel(v, destIfFalse);
2728       sqlite3VdbeAddOp2(v, OP_AddImm, target, 0);
2729       sqlite3VdbeResolveLabel(v, destIfNull);
2730       break;
2731     }
2732 #endif /* SQLITE_OMIT_SUBQUERY */
2733 
2734 
2735     /*
2736     **    x BETWEEN y AND z
2737     **
2738     ** This is equivalent to
2739     **
2740     **    x>=y AND x<=z
2741     **
2742     ** X is stored in pExpr->pLeft.
2743     ** Y is stored in pExpr->pList->a[0].pExpr.
2744     ** Z is stored in pExpr->pList->a[1].pExpr.
2745     */
2746     case TK_BETWEEN: {
2747       Expr *pLeft = pExpr->pLeft;
2748       struct ExprList_item *pLItem = pExpr->x.pList->a;
2749       Expr *pRight = pLItem->pExpr;
2750 
2751       r1 = sqlite3ExprCodeTemp(pParse, pLeft, &regFree1);
2752       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
2753       testcase( regFree1==0 );
2754       testcase( regFree2==0 );
2755       r3 = sqlite3GetTempReg(pParse);
2756       r4 = sqlite3GetTempReg(pParse);
2757       codeCompare(pParse, pLeft, pRight, OP_Ge,
2758                   r1, r2, r3, SQLITE_STOREP2);
2759       pLItem++;
2760       pRight = pLItem->pExpr;
2761       sqlite3ReleaseTempReg(pParse, regFree2);
2762       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
2763       testcase( regFree2==0 );
2764       codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
2765       sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
2766       sqlite3ReleaseTempReg(pParse, r3);
2767       sqlite3ReleaseTempReg(pParse, r4);
2768       break;
2769     }
2770     case TK_COLLATE:
2771     case TK_UPLUS: {
2772       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
2773       break;
2774     }
2775 
2776     case TK_TRIGGER: {
2777       /* If the opcode is TK_TRIGGER, then the expression is a reference
2778       ** to a column in the new.* or old.* pseudo-tables available to
2779       ** trigger programs. In this case Expr.iTable is set to 1 for the
2780       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
2781       ** is set to the column of the pseudo-table to read, or to -1 to
2782       ** read the rowid field.
2783       **
2784       ** The expression is implemented using an OP_Param opcode. The p1
2785       ** parameter is set to 0 for an old.rowid reference, or to (i+1)
2786       ** to reference another column of the old.* pseudo-table, where
2787       ** i is the index of the column. For a new.rowid reference, p1 is
2788       ** set to (n+1), where n is the number of columns in each pseudo-table.
2789       ** For a reference to any other column in the new.* pseudo-table, p1
2790       ** is set to (n+2+i), where n and i are as defined previously. For
2791       ** example, if the table on which triggers are being fired is
2792       ** declared as:
2793       **
2794       **   CREATE TABLE t1(a, b);
2795       **
2796       ** Then p1 is interpreted as follows:
2797       **
2798       **   p1==0   ->    old.rowid     p1==3   ->    new.rowid
2799       **   p1==1   ->    old.a         p1==4   ->    new.a
2800       **   p1==2   ->    old.b         p1==5   ->    new.b
2801       */
2802       Table *pTab = pExpr->pTab;
2803       int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn;
2804 
2805       assert( pExpr->iTable==0 || pExpr->iTable==1 );
2806       assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol );
2807       assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey );
2808       assert( p1>=0 && p1<(pTab->nCol*2+2) );
2809 
2810       sqlite3VdbeAddOp2(v, OP_Param, p1, target);
2811       VdbeComment((v, "%s.%s -> $%d",
2812         (pExpr->iTable ? "new" : "old"),
2813         (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
2814         target
2815       ));
2816 
2817 #ifndef SQLITE_OMIT_FLOATING_POINT
2818       /* If the column has REAL affinity, it may currently be stored as an
2819       ** integer. Use OP_RealAffinity to make sure it is really real.  */
2820       if( pExpr->iColumn>=0
2821        && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
2822       ){
2823         sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
2824       }
2825 #endif
2826       break;
2827     }
2828 
2829 
2830     /*
2831     ** Form A:
2832     **   CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
2833     **
2834     ** Form B:
2835     **   CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
2836     **
2837     ** Form A is can be transformed into the equivalent form B as follows:
2838     **   CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
2839     **        WHEN x=eN THEN rN ELSE y END
2840     **
2841     ** X (if it exists) is in pExpr->pLeft.
2842     ** Y is in pExpr->pRight.  The Y is also optional.  If there is no
2843     ** ELSE clause and no other term matches, then the result of the
2844     ** exprssion is NULL.
2845     ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
2846     **
2847     ** The result of the expression is the Ri for the first matching Ei,
2848     ** or if there is no matching Ei, the ELSE term Y, or if there is
2849     ** no ELSE term, NULL.
2850     */
2851     default: assert( op==TK_CASE ); {
2852       int endLabel;                     /* GOTO label for end of CASE stmt */
2853       int nextCase;                     /* GOTO label for next WHEN clause */
2854       int nExpr;                        /* 2x number of WHEN terms */
2855       int i;                            /* Loop counter */
2856       ExprList *pEList;                 /* List of WHEN terms */
2857       struct ExprList_item *aListelem;  /* Array of WHEN terms */
2858       Expr opCompare;                   /* The X==Ei expression */
2859       Expr cacheX;                      /* Cached expression X */
2860       Expr *pX;                         /* The X expression */
2861       Expr *pTest = 0;                  /* X==Ei (form A) or just Ei (form B) */
2862       VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; )
2863 
2864       assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList );
2865       assert((pExpr->x.pList->nExpr % 2) == 0);
2866       assert(pExpr->x.pList->nExpr > 0);
2867       pEList = pExpr->x.pList;
2868       aListelem = pEList->a;
2869       nExpr = pEList->nExpr;
2870       endLabel = sqlite3VdbeMakeLabel(v);
2871       if( (pX = pExpr->pLeft)!=0 ){
2872         cacheX = *pX;
2873         testcase( pX->op==TK_COLUMN );
2874         testcase( pX->op==TK_REGISTER );
2875         cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
2876         testcase( regFree1==0 );
2877         cacheX.op = TK_REGISTER;
2878         opCompare.op = TK_EQ;
2879         opCompare.pLeft = &cacheX;
2880         pTest = &opCompare;
2881         /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
2882         ** The value in regFree1 might get SCopy-ed into the file result.
2883         ** So make sure that the regFree1 register is not reused for other
2884         ** purposes and possibly overwritten.  */
2885         regFree1 = 0;
2886       }
2887       for(i=0; i<nExpr; i=i+2){
2888         sqlite3ExprCachePush(pParse);
2889         if( pX ){
2890           assert( pTest!=0 );
2891           opCompare.pRight = aListelem[i].pExpr;
2892         }else{
2893           pTest = aListelem[i].pExpr;
2894         }
2895         nextCase = sqlite3VdbeMakeLabel(v);
2896         testcase( pTest->op==TK_COLUMN );
2897         sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
2898         testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
2899         testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
2900         sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
2901         sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
2902         sqlite3ExprCachePop(pParse, 1);
2903         sqlite3VdbeResolveLabel(v, nextCase);
2904       }
2905       if( pExpr->pRight ){
2906         sqlite3ExprCachePush(pParse);
2907         sqlite3ExprCode(pParse, pExpr->pRight, target);
2908         sqlite3ExprCachePop(pParse, 1);
2909       }else{
2910         sqlite3VdbeAddOp2(v, OP_Null, 0, target);
2911       }
2912       assert( db->mallocFailed || pParse->nErr>0
2913            || pParse->iCacheLevel==iCacheLevel );
2914       sqlite3VdbeResolveLabel(v, endLabel);
2915       break;
2916     }
2917 #ifndef SQLITE_OMIT_TRIGGER
2918     case TK_RAISE: {
2919       assert( pExpr->affinity==OE_Rollback
2920            || pExpr->affinity==OE_Abort
2921            || pExpr->affinity==OE_Fail
2922            || pExpr->affinity==OE_Ignore
2923       );
2924       if( !pParse->pTriggerTab ){
2925         sqlite3ErrorMsg(pParse,
2926                        "RAISE() may only be used within a trigger-program");
2927         return 0;
2928       }
2929       if( pExpr->affinity==OE_Abort ){
2930         sqlite3MayAbort(pParse);
2931       }
2932       assert( !ExprHasProperty(pExpr, EP_IntValue) );
2933       if( pExpr->affinity==OE_Ignore ){
2934         sqlite3VdbeAddOp4(
2935             v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0);
2936       }else{
2937         sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_TRIGGER,
2938                               pExpr->affinity, pExpr->u.zToken, 0);
2939       }
2940 
2941       break;
2942     }
2943 #endif
2944   }
2945   sqlite3ReleaseTempReg(pParse, regFree1);
2946   sqlite3ReleaseTempReg(pParse, regFree2);
2947   return inReg;
2948 }
2949 
2950 /*
2951 ** Generate code to evaluate an expression and store the results
2952 ** into a register.  Return the register number where the results
2953 ** are stored.
2954 **
2955 ** If the register is a temporary register that can be deallocated,
2956 ** then write its number into *pReg.  If the result register is not
2957 ** a temporary, then set *pReg to zero.
2958 */
2959 int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
2960   int r1 = sqlite3GetTempReg(pParse);
2961   int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
2962   if( r2==r1 ){
2963     *pReg = r1;
2964   }else{
2965     sqlite3ReleaseTempReg(pParse, r1);
2966     *pReg = 0;
2967   }
2968   return r2;
2969 }
2970 
2971 /*
2972 ** Generate code that will evaluate expression pExpr and store the
2973 ** results in register target.  The results are guaranteed to appear
2974 ** in register target.
2975 */
2976 int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
2977   int inReg;
2978 
2979   assert( target>0 && target<=pParse->nMem );
2980   if( pExpr && pExpr->op==TK_REGISTER ){
2981     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
2982   }else{
2983     inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
2984     assert( pParse->pVdbe || pParse->db->mallocFailed );
2985     if( inReg!=target && pParse->pVdbe ){
2986       sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
2987     }
2988   }
2989   return target;
2990 }
2991 
2992 /*
2993 ** Generate code that evalutes the given expression and puts the result
2994 ** in register target.
2995 **
2996 ** Also make a copy of the expression results into another "cache" register
2997 ** and modify the expression so that the next time it is evaluated,
2998 ** the result is a copy of the cache register.
2999 **
3000 ** This routine is used for expressions that are used multiple
3001 ** times.  They are evaluated once and the results of the expression
3002 ** are reused.
3003 */
3004 int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
3005   Vdbe *v = pParse->pVdbe;
3006   int inReg;
3007   inReg = sqlite3ExprCode(pParse, pExpr, target);
3008   assert( target>0 );
3009   /* This routine is called for terms to INSERT or UPDATE.  And the only
3010   ** other place where expressions can be converted into TK_REGISTER is
3011   ** in WHERE clause processing.  So as currently implemented, there is
3012   ** no way for a TK_REGISTER to exist here.  But it seems prudent to
3013   ** keep the ALWAYS() in case the conditions above change with future
3014   ** modifications or enhancements. */
3015   if( ALWAYS(pExpr->op!=TK_REGISTER) ){
3016     int iMem;
3017     iMem = ++pParse->nMem;
3018     sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
3019     pExpr->iTable = iMem;
3020     pExpr->op2 = pExpr->op;
3021     pExpr->op = TK_REGISTER;
3022   }
3023   return inReg;
3024 }
3025 
3026 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
3027 /*
3028 ** Generate a human-readable explanation of an expression tree.
3029 */
3030 void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
3031   int op;                   /* The opcode being coded */
3032   const char *zBinOp = 0;   /* Binary operator */
3033   const char *zUniOp = 0;   /* Unary operator */
3034   if( pExpr==0 ){
3035     op = TK_NULL;
3036   }else{
3037     op = pExpr->op;
3038   }
3039   switch( op ){
3040     case TK_AGG_COLUMN: {
3041       sqlite3ExplainPrintf(pOut, "AGG{%d:%d}",
3042             pExpr->iTable, pExpr->iColumn);
3043       break;
3044     }
3045     case TK_COLUMN: {
3046       if( pExpr->iTable<0 ){
3047         /* This only happens when coding check constraints */
3048         sqlite3ExplainPrintf(pOut, "COLUMN(%d)", pExpr->iColumn);
3049       }else{
3050         sqlite3ExplainPrintf(pOut, "{%d:%d}",
3051                              pExpr->iTable, pExpr->iColumn);
3052       }
3053       break;
3054     }
3055     case TK_INTEGER: {
3056       if( pExpr->flags & EP_IntValue ){
3057         sqlite3ExplainPrintf(pOut, "%d", pExpr->u.iValue);
3058       }else{
3059         sqlite3ExplainPrintf(pOut, "%s", pExpr->u.zToken);
3060       }
3061       break;
3062     }
3063 #ifndef SQLITE_OMIT_FLOATING_POINT
3064     case TK_FLOAT: {
3065       sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
3066       break;
3067     }
3068 #endif
3069     case TK_STRING: {
3070       sqlite3ExplainPrintf(pOut,"%Q", pExpr->u.zToken);
3071       break;
3072     }
3073     case TK_NULL: {
3074       sqlite3ExplainPrintf(pOut,"NULL");
3075       break;
3076     }
3077 #ifndef SQLITE_OMIT_BLOB_LITERAL
3078     case TK_BLOB: {
3079       sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
3080       break;
3081     }
3082 #endif
3083     case TK_VARIABLE: {
3084       sqlite3ExplainPrintf(pOut,"VARIABLE(%s,%d)",
3085                            pExpr->u.zToken, pExpr->iColumn);
3086       break;
3087     }
3088     case TK_REGISTER: {
3089       sqlite3ExplainPrintf(pOut,"REGISTER(%d)", pExpr->iTable);
3090       break;
3091     }
3092     case TK_AS: {
3093       sqlite3ExplainExpr(pOut, pExpr->pLeft);
3094       break;
3095     }
3096 #ifndef SQLITE_OMIT_CAST
3097     case TK_CAST: {
3098       /* Expressions of the form:   CAST(pLeft AS token) */
3099       const char *zAff = "unk";
3100       switch( sqlite3AffinityType(pExpr->u.zToken) ){
3101         case SQLITE_AFF_TEXT:    zAff = "TEXT";     break;
3102         case SQLITE_AFF_NONE:    zAff = "NONE";     break;
3103         case SQLITE_AFF_NUMERIC: zAff = "NUMERIC";  break;
3104         case SQLITE_AFF_INTEGER: zAff = "INTEGER";  break;
3105         case SQLITE_AFF_REAL:    zAff = "REAL";     break;
3106       }
3107       sqlite3ExplainPrintf(pOut, "CAST-%s(", zAff);
3108       sqlite3ExplainExpr(pOut, pExpr->pLeft);
3109       sqlite3ExplainPrintf(pOut, ")");
3110       break;
3111     }
3112 #endif /* SQLITE_OMIT_CAST */
3113     case TK_LT:      zBinOp = "LT";     break;
3114     case TK_LE:      zBinOp = "LE";     break;
3115     case TK_GT:      zBinOp = "GT";     break;
3116     case TK_GE:      zBinOp = "GE";     break;
3117     case TK_NE:      zBinOp = "NE";     break;
3118     case TK_EQ:      zBinOp = "EQ";     break;
3119     case TK_IS:      zBinOp = "IS";     break;
3120     case TK_ISNOT:   zBinOp = "ISNOT";  break;
3121     case TK_AND:     zBinOp = "AND";    break;
3122     case TK_OR:      zBinOp = "OR";     break;
3123     case TK_PLUS:    zBinOp = "ADD";    break;
3124     case TK_STAR:    zBinOp = "MUL";    break;
3125     case TK_MINUS:   zBinOp = "SUB";    break;
3126     case TK_REM:     zBinOp = "REM";    break;
3127     case TK_BITAND:  zBinOp = "BITAND"; break;
3128     case TK_BITOR:   zBinOp = "BITOR";  break;
3129     case TK_SLASH:   zBinOp = "DIV";    break;
3130     case TK_LSHIFT:  zBinOp = "LSHIFT"; break;
3131     case TK_RSHIFT:  zBinOp = "RSHIFT"; break;
3132     case TK_CONCAT:  zBinOp = "CONCAT"; break;
3133 
3134     case TK_UMINUS:  zUniOp = "UMINUS"; break;
3135     case TK_UPLUS:   zUniOp = "UPLUS";  break;
3136     case TK_BITNOT:  zUniOp = "BITNOT"; break;
3137     case TK_NOT:     zUniOp = "NOT";    break;
3138     case TK_ISNULL:  zUniOp = "ISNULL"; break;
3139     case TK_NOTNULL: zUniOp = "NOTNULL"; break;
3140 
3141     case TK_COLLATE: {
3142       sqlite3ExplainExpr(pOut, pExpr->pLeft);
3143       sqlite3ExplainPrintf(pOut,".COLLATE(%s)",pExpr->u.zToken);
3144       break;
3145     }
3146 
3147     case TK_AGG_FUNCTION:
3148     case TK_CONST_FUNC:
3149     case TK_FUNCTION: {
3150       ExprList *pFarg;       /* List of function arguments */
3151       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
3152         pFarg = 0;
3153       }else{
3154         pFarg = pExpr->x.pList;
3155       }
3156       if( op==TK_AGG_FUNCTION ){
3157         sqlite3ExplainPrintf(pOut, "AGG_FUNCTION%d:%s(",
3158                              pExpr->op2, pExpr->u.zToken);
3159       }else{
3160         sqlite3ExplainPrintf(pOut, "FUNCTION:%s(", pExpr->u.zToken);
3161       }
3162       if( pFarg ){
3163         sqlite3ExplainExprList(pOut, pFarg);
3164       }
3165       sqlite3ExplainPrintf(pOut, ")");
3166       break;
3167     }
3168 #ifndef SQLITE_OMIT_SUBQUERY
3169     case TK_EXISTS: {
3170       sqlite3ExplainPrintf(pOut, "EXISTS(");
3171       sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
3172       sqlite3ExplainPrintf(pOut,")");
3173       break;
3174     }
3175     case TK_SELECT: {
3176       sqlite3ExplainPrintf(pOut, "(");
3177       sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
3178       sqlite3ExplainPrintf(pOut, ")");
3179       break;
3180     }
3181     case TK_IN: {
3182       sqlite3ExplainPrintf(pOut, "IN(");
3183       sqlite3ExplainExpr(pOut, pExpr->pLeft);
3184       sqlite3ExplainPrintf(pOut, ",");
3185       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
3186         sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
3187       }else{
3188         sqlite3ExplainExprList(pOut, pExpr->x.pList);
3189       }
3190       sqlite3ExplainPrintf(pOut, ")");
3191       break;
3192     }
3193 #endif /* SQLITE_OMIT_SUBQUERY */
3194 
3195     /*
3196     **    x BETWEEN y AND z
3197     **
3198     ** This is equivalent to
3199     **
3200     **    x>=y AND x<=z
3201     **
3202     ** X is stored in pExpr->pLeft.
3203     ** Y is stored in pExpr->pList->a[0].pExpr.
3204     ** Z is stored in pExpr->pList->a[1].pExpr.
3205     */
3206     case TK_BETWEEN: {
3207       Expr *pX = pExpr->pLeft;
3208       Expr *pY = pExpr->x.pList->a[0].pExpr;
3209       Expr *pZ = pExpr->x.pList->a[1].pExpr;
3210       sqlite3ExplainPrintf(pOut, "BETWEEN(");
3211       sqlite3ExplainExpr(pOut, pX);
3212       sqlite3ExplainPrintf(pOut, ",");
3213       sqlite3ExplainExpr(pOut, pY);
3214       sqlite3ExplainPrintf(pOut, ",");
3215       sqlite3ExplainExpr(pOut, pZ);
3216       sqlite3ExplainPrintf(pOut, ")");
3217       break;
3218     }
3219     case TK_TRIGGER: {
3220       /* If the opcode is TK_TRIGGER, then the expression is a reference
3221       ** to a column in the new.* or old.* pseudo-tables available to
3222       ** trigger programs. In this case Expr.iTable is set to 1 for the
3223       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
3224       ** is set to the column of the pseudo-table to read, or to -1 to
3225       ** read the rowid field.
3226       */
3227       sqlite3ExplainPrintf(pOut, "%s(%d)",
3228           pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn);
3229       break;
3230     }
3231     case TK_CASE: {
3232       sqlite3ExplainPrintf(pOut, "CASE(");
3233       sqlite3ExplainExpr(pOut, pExpr->pLeft);
3234       sqlite3ExplainPrintf(pOut, ",");
3235       sqlite3ExplainExprList(pOut, pExpr->x.pList);
3236       break;
3237     }
3238 #ifndef SQLITE_OMIT_TRIGGER
3239     case TK_RAISE: {
3240       const char *zType = "unk";
3241       switch( pExpr->affinity ){
3242         case OE_Rollback:   zType = "rollback";  break;
3243         case OE_Abort:      zType = "abort";     break;
3244         case OE_Fail:       zType = "fail";      break;
3245         case OE_Ignore:     zType = "ignore";    break;
3246       }
3247       sqlite3ExplainPrintf(pOut, "RAISE-%s(%s)", zType, pExpr->u.zToken);
3248       break;
3249     }
3250 #endif
3251   }
3252   if( zBinOp ){
3253     sqlite3ExplainPrintf(pOut,"%s(", zBinOp);
3254     sqlite3ExplainExpr(pOut, pExpr->pLeft);
3255     sqlite3ExplainPrintf(pOut,",");
3256     sqlite3ExplainExpr(pOut, pExpr->pRight);
3257     sqlite3ExplainPrintf(pOut,")");
3258   }else if( zUniOp ){
3259     sqlite3ExplainPrintf(pOut,"%s(", zUniOp);
3260     sqlite3ExplainExpr(pOut, pExpr->pLeft);
3261     sqlite3ExplainPrintf(pOut,")");
3262   }
3263 }
3264 #endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */
3265 
3266 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
3267 /*
3268 ** Generate a human-readable explanation of an expression list.
3269 */
3270 void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){
3271   int i;
3272   if( pList==0 || pList->nExpr==0 ){
3273     sqlite3ExplainPrintf(pOut, "(empty-list)");
3274     return;
3275   }else if( pList->nExpr==1 ){
3276     sqlite3ExplainExpr(pOut, pList->a[0].pExpr);
3277   }else{
3278     sqlite3ExplainPush(pOut);
3279     for(i=0; i<pList->nExpr; i++){
3280       sqlite3ExplainPrintf(pOut, "item[%d] = ", i);
3281       sqlite3ExplainPush(pOut);
3282       sqlite3ExplainExpr(pOut, pList->a[i].pExpr);
3283       sqlite3ExplainPop(pOut);
3284       if( pList->a[i].zName ){
3285         sqlite3ExplainPrintf(pOut, " AS %s", pList->a[i].zName);
3286       }
3287       if( pList->a[i].bSpanIsTab ){
3288         sqlite3ExplainPrintf(pOut, " (%s)", pList->a[i].zSpan);
3289       }
3290       if( i<pList->nExpr-1 ){
3291         sqlite3ExplainNL(pOut);
3292       }
3293     }
3294     sqlite3ExplainPop(pOut);
3295   }
3296 }
3297 #endif /* SQLITE_DEBUG */
3298 
3299 /*
3300 ** Return TRUE if pExpr is an constant expression that is appropriate
3301 ** for factoring out of a loop.  Appropriate expressions are:
3302 **
3303 **    *  Any expression that evaluates to two or more opcodes.
3304 **
3305 **    *  Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null,
3306 **       or OP_Variable that does not need to be placed in a
3307 **       specific register.
3308 **
3309 ** There is no point in factoring out single-instruction constant
3310 ** expressions that need to be placed in a particular register.
3311 ** We could factor them out, but then we would end up adding an
3312 ** OP_SCopy instruction to move the value into the correct register
3313 ** later.  We might as well just use the original instruction and
3314 ** avoid the OP_SCopy.
3315 */
3316 static int isAppropriateForFactoring(Expr *p){
3317   if( !sqlite3ExprIsConstantNotJoin(p) ){
3318     return 0;  /* Only constant expressions are appropriate for factoring */
3319   }
3320   if( (p->flags & EP_FixedDest)==0 ){
3321     return 1;  /* Any constant without a fixed destination is appropriate */
3322   }
3323   while( p->op==TK_UPLUS ) p = p->pLeft;
3324   switch( p->op ){
3325 #ifndef SQLITE_OMIT_BLOB_LITERAL
3326     case TK_BLOB:
3327 #endif
3328     case TK_VARIABLE:
3329     case TK_INTEGER:
3330     case TK_FLOAT:
3331     case TK_NULL:
3332     case TK_STRING: {
3333       testcase( p->op==TK_BLOB );
3334       testcase( p->op==TK_VARIABLE );
3335       testcase( p->op==TK_INTEGER );
3336       testcase( p->op==TK_FLOAT );
3337       testcase( p->op==TK_NULL );
3338       testcase( p->op==TK_STRING );
3339       /* Single-instruction constants with a fixed destination are
3340       ** better done in-line.  If we factor them, they will just end
3341       ** up generating an OP_SCopy to move the value to the destination
3342       ** register. */
3343       return 0;
3344     }
3345     case TK_UMINUS: {
3346       if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
3347         return 0;
3348       }
3349       break;
3350     }
3351     default: {
3352       break;
3353     }
3354   }
3355   return 1;
3356 }
3357 
3358 /*
3359 ** If pExpr is a constant expression that is appropriate for
3360 ** factoring out of a loop, then evaluate the expression
3361 ** into a register and convert the expression into a TK_REGISTER
3362 ** expression.
3363 */
3364 static int evalConstExpr(Walker *pWalker, Expr *pExpr){
3365   Parse *pParse = pWalker->pParse;
3366   switch( pExpr->op ){
3367     case TK_IN:
3368     case TK_REGISTER: {
3369       return WRC_Prune;
3370     }
3371     case TK_COLLATE: {
3372       return WRC_Continue;
3373     }
3374     case TK_FUNCTION:
3375     case TK_AGG_FUNCTION:
3376     case TK_CONST_FUNC: {
3377       /* The arguments to a function have a fixed destination.
3378       ** Mark them this way to avoid generated unneeded OP_SCopy
3379       ** instructions.
3380       */
3381       ExprList *pList = pExpr->x.pList;
3382       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
3383       if( pList ){
3384         int i = pList->nExpr;
3385         struct ExprList_item *pItem = pList->a;
3386         for(; i>0; i--, pItem++){
3387           if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest;
3388         }
3389       }
3390       break;
3391     }
3392   }
3393   if( isAppropriateForFactoring(pExpr) ){
3394     int r1 = ++pParse->nMem;
3395     int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
3396     /* If r2!=r1, it means that register r1 is never used.  That is harmless
3397     ** but suboptimal, so we want to know about the situation to fix it.
3398     ** Hence the following assert: */
3399     assert( r2==r1 );
3400     pExpr->op2 = pExpr->op;
3401     pExpr->op = TK_REGISTER;
3402     pExpr->iTable = r2;
3403     return WRC_Prune;
3404   }
3405   return WRC_Continue;
3406 }
3407 
3408 /*
3409 ** Preevaluate constant subexpressions within pExpr and store the
3410 ** results in registers.  Modify pExpr so that the constant subexpresions
3411 ** are TK_REGISTER opcodes that refer to the precomputed values.
3412 **
3413 ** This routine is a no-op if the jump to the cookie-check code has
3414 ** already occur.  Since the cookie-check jump is generated prior to
3415 ** any other serious processing, this check ensures that there is no
3416 ** way to accidently bypass the constant initializations.
3417 **
3418 ** This routine is also a no-op if the SQLITE_FactorOutConst optimization
3419 ** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
3420 ** interface.  This allows test logic to verify that the same answer is
3421 ** obtained for queries regardless of whether or not constants are
3422 ** precomputed into registers or if they are inserted in-line.
3423 */
3424 void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
3425   Walker w;
3426   if( pParse->cookieGoto ) return;
3427   if( OptimizationDisabled(pParse->db, SQLITE_FactorOutConst) ) return;
3428   memset(&w, 0, sizeof(w));
3429   w.xExprCallback = evalConstExpr;
3430   w.pParse = pParse;
3431   sqlite3WalkExpr(&w, pExpr);
3432 }
3433 
3434 
3435 /*
3436 ** Generate code that pushes the value of every element of the given
3437 ** expression list into a sequence of registers beginning at target.
3438 **
3439 ** Return the number of elements evaluated.
3440 */
3441 int sqlite3ExprCodeExprList(
3442   Parse *pParse,     /* Parsing context */
3443   ExprList *pList,   /* The expression list to be coded */
3444   int target,        /* Where to write results */
3445   int doHardCopy     /* Make a hard copy of every element */
3446 ){
3447   struct ExprList_item *pItem;
3448   int i, n;
3449   assert( pList!=0 );
3450   assert( target>0 );
3451   assert( pParse->pVdbe!=0 );  /* Never gets this far otherwise */
3452   n = pList->nExpr;
3453   for(pItem=pList->a, i=0; i<n; i++, pItem++){
3454     Expr *pExpr = pItem->pExpr;
3455     int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
3456     if( inReg!=target+i ){
3457       sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
3458                         inReg, target+i);
3459     }
3460   }
3461   return n;
3462 }
3463 
3464 /*
3465 ** Generate code for a BETWEEN operator.
3466 **
3467 **    x BETWEEN y AND z
3468 **
3469 ** The above is equivalent to
3470 **
3471 **    x>=y AND x<=z
3472 **
3473 ** Code it as such, taking care to do the common subexpression
3474 ** elementation of x.
3475 */
3476 static void exprCodeBetween(
3477   Parse *pParse,    /* Parsing and code generating context */
3478   Expr *pExpr,      /* The BETWEEN expression */
3479   int dest,         /* Jump here if the jump is taken */
3480   int jumpIfTrue,   /* Take the jump if the BETWEEN is true */
3481   int jumpIfNull    /* Take the jump if the BETWEEN is NULL */
3482 ){
3483   Expr exprAnd;     /* The AND operator in  x>=y AND x<=z  */
3484   Expr compLeft;    /* The  x>=y  term */
3485   Expr compRight;   /* The  x<=z  term */
3486   Expr exprX;       /* The  x  subexpression */
3487   int regFree1 = 0; /* Temporary use register */
3488 
3489   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
3490   exprX = *pExpr->pLeft;
3491   exprAnd.op = TK_AND;
3492   exprAnd.pLeft = &compLeft;
3493   exprAnd.pRight = &compRight;
3494   compLeft.op = TK_GE;
3495   compLeft.pLeft = &exprX;
3496   compLeft.pRight = pExpr->x.pList->a[0].pExpr;
3497   compRight.op = TK_LE;
3498   compRight.pLeft = &exprX;
3499   compRight.pRight = pExpr->x.pList->a[1].pExpr;
3500   exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
3501   exprX.op = TK_REGISTER;
3502   if( jumpIfTrue ){
3503     sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
3504   }else{
3505     sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
3506   }
3507   sqlite3ReleaseTempReg(pParse, regFree1);
3508 
3509   /* Ensure adequate test coverage */
3510   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 );
3511   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 );
3512   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 );
3513   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 );
3514   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 );
3515   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 );
3516   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 );
3517   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 );
3518 }
3519 
3520 /*
3521 ** Generate code for a boolean expression such that a jump is made
3522 ** to the label "dest" if the expression is true but execution
3523 ** continues straight thru if the expression is false.
3524 **
3525 ** If the expression evaluates to NULL (neither true nor false), then
3526 ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
3527 **
3528 ** This code depends on the fact that certain token values (ex: TK_EQ)
3529 ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
3530 ** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in
3531 ** the make process cause these values to align.  Assert()s in the code
3532 ** below verify that the numbers are aligned correctly.
3533 */
3534 void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
3535   Vdbe *v = pParse->pVdbe;
3536   int op = 0;
3537   int regFree1 = 0;
3538   int regFree2 = 0;
3539   int r1, r2;
3540 
3541   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
3542   if( NEVER(v==0) )     return;  /* Existence of VDBE checked by caller */
3543   if( NEVER(pExpr==0) ) return;  /* No way this can happen */
3544   op = pExpr->op;
3545   switch( op ){
3546     case TK_AND: {
3547       int d2 = sqlite3VdbeMakeLabel(v);
3548       testcase( jumpIfNull==0 );
3549       sqlite3ExprCachePush(pParse);
3550       sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
3551       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
3552       sqlite3VdbeResolveLabel(v, d2);
3553       sqlite3ExprCachePop(pParse, 1);
3554       break;
3555     }
3556     case TK_OR: {
3557       testcase( jumpIfNull==0 );
3558       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
3559       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
3560       break;
3561     }
3562     case TK_NOT: {
3563       testcase( jumpIfNull==0 );
3564       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
3565       break;
3566     }
3567     case TK_LT:
3568     case TK_LE:
3569     case TK_GT:
3570     case TK_GE:
3571     case TK_NE:
3572     case TK_EQ: {
3573       assert( TK_LT==OP_Lt );
3574       assert( TK_LE==OP_Le );
3575       assert( TK_GT==OP_Gt );
3576       assert( TK_GE==OP_Ge );
3577       assert( TK_EQ==OP_Eq );
3578       assert( TK_NE==OP_Ne );
3579       testcase( op==TK_LT );
3580       testcase( op==TK_LE );
3581       testcase( op==TK_GT );
3582       testcase( op==TK_GE );
3583       testcase( op==TK_EQ );
3584       testcase( op==TK_NE );
3585       testcase( jumpIfNull==0 );
3586       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3587       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
3588       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
3589                   r1, r2, dest, jumpIfNull);
3590       testcase( regFree1==0 );
3591       testcase( regFree2==0 );
3592       break;
3593     }
3594     case TK_IS:
3595     case TK_ISNOT: {
3596       testcase( op==TK_IS );
3597       testcase( op==TK_ISNOT );
3598       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3599       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
3600       op = (op==TK_IS) ? TK_EQ : TK_NE;
3601       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
3602                   r1, r2, dest, SQLITE_NULLEQ);
3603       testcase( regFree1==0 );
3604       testcase( regFree2==0 );
3605       break;
3606     }
3607     case TK_ISNULL:
3608     case TK_NOTNULL: {
3609       assert( TK_ISNULL==OP_IsNull );
3610       assert( TK_NOTNULL==OP_NotNull );
3611       testcase( op==TK_ISNULL );
3612       testcase( op==TK_NOTNULL );
3613       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3614       sqlite3VdbeAddOp2(v, op, r1, dest);
3615       testcase( regFree1==0 );
3616       break;
3617     }
3618     case TK_BETWEEN: {
3619       testcase( jumpIfNull==0 );
3620       exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
3621       break;
3622     }
3623 #ifndef SQLITE_OMIT_SUBQUERY
3624     case TK_IN: {
3625       int destIfFalse = sqlite3VdbeMakeLabel(v);
3626       int destIfNull = jumpIfNull ? dest : destIfFalse;
3627       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
3628       sqlite3VdbeAddOp2(v, OP_Goto, 0, dest);
3629       sqlite3VdbeResolveLabel(v, destIfFalse);
3630       break;
3631     }
3632 #endif
3633     default: {
3634       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
3635       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
3636       testcase( regFree1==0 );
3637       testcase( jumpIfNull==0 );
3638       break;
3639     }
3640   }
3641   sqlite3ReleaseTempReg(pParse, regFree1);
3642   sqlite3ReleaseTempReg(pParse, regFree2);
3643 }
3644 
3645 /*
3646 ** Generate code for a boolean expression such that a jump is made
3647 ** to the label "dest" if the expression is false but execution
3648 ** continues straight thru if the expression is true.
3649 **
3650 ** If the expression evaluates to NULL (neither true nor false) then
3651 ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
3652 ** is 0.
3653 */
3654 void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
3655   Vdbe *v = pParse->pVdbe;
3656   int op = 0;
3657   int regFree1 = 0;
3658   int regFree2 = 0;
3659   int r1, r2;
3660 
3661   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
3662   if( NEVER(v==0) ) return; /* Existence of VDBE checked by caller */
3663   if( pExpr==0 )    return;
3664 
3665   /* The value of pExpr->op and op are related as follows:
3666   **
3667   **       pExpr->op            op
3668   **       ---------          ----------
3669   **       TK_ISNULL          OP_NotNull
3670   **       TK_NOTNULL         OP_IsNull
3671   **       TK_NE              OP_Eq
3672   **       TK_EQ              OP_Ne
3673   **       TK_GT              OP_Le
3674   **       TK_LE              OP_Gt
3675   **       TK_GE              OP_Lt
3676   **       TK_LT              OP_Ge
3677   **
3678   ** For other values of pExpr->op, op is undefined and unused.
3679   ** The value of TK_ and OP_ constants are arranged such that we
3680   ** can compute the mapping above using the following expression.
3681   ** Assert()s verify that the computation is correct.
3682   */
3683   op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
3684 
3685   /* Verify correct alignment of TK_ and OP_ constants
3686   */
3687   assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
3688   assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
3689   assert( pExpr->op!=TK_NE || op==OP_Eq );
3690   assert( pExpr->op!=TK_EQ || op==OP_Ne );
3691   assert( pExpr->op!=TK_LT || op==OP_Ge );
3692   assert( pExpr->op!=TK_LE || op==OP_Gt );
3693   assert( pExpr->op!=TK_GT || op==OP_Le );
3694   assert( pExpr->op!=TK_GE || op==OP_Lt );
3695 
3696   switch( pExpr->op ){
3697     case TK_AND: {
3698       testcase( jumpIfNull==0 );
3699       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
3700       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
3701       break;
3702     }
3703     case TK_OR: {
3704       int d2 = sqlite3VdbeMakeLabel(v);
3705       testcase( jumpIfNull==0 );
3706       sqlite3ExprCachePush(pParse);
3707       sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
3708       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
3709       sqlite3VdbeResolveLabel(v, d2);
3710       sqlite3ExprCachePop(pParse, 1);
3711       break;
3712     }
3713     case TK_NOT: {
3714       testcase( jumpIfNull==0 );
3715       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
3716       break;
3717     }
3718     case TK_LT:
3719     case TK_LE:
3720     case TK_GT:
3721     case TK_GE:
3722     case TK_NE:
3723     case TK_EQ: {
3724       testcase( op==TK_LT );
3725       testcase( op==TK_LE );
3726       testcase( op==TK_GT );
3727       testcase( op==TK_GE );
3728       testcase( op==TK_EQ );
3729       testcase( op==TK_NE );
3730       testcase( jumpIfNull==0 );
3731       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3732       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
3733       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
3734                   r1, r2, dest, jumpIfNull);
3735       testcase( regFree1==0 );
3736       testcase( regFree2==0 );
3737       break;
3738     }
3739     case TK_IS:
3740     case TK_ISNOT: {
3741       testcase( pExpr->op==TK_IS );
3742       testcase( pExpr->op==TK_ISNOT );
3743       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3744       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
3745       op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ;
3746       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
3747                   r1, r2, dest, SQLITE_NULLEQ);
3748       testcase( regFree1==0 );
3749       testcase( regFree2==0 );
3750       break;
3751     }
3752     case TK_ISNULL:
3753     case TK_NOTNULL: {
3754       testcase( op==TK_ISNULL );
3755       testcase( op==TK_NOTNULL );
3756       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
3757       sqlite3VdbeAddOp2(v, op, r1, dest);
3758       testcase( regFree1==0 );
3759       break;
3760     }
3761     case TK_BETWEEN: {
3762       testcase( jumpIfNull==0 );
3763       exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
3764       break;
3765     }
3766 #ifndef SQLITE_OMIT_SUBQUERY
3767     case TK_IN: {
3768       if( jumpIfNull ){
3769         sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
3770       }else{
3771         int destIfNull = sqlite3VdbeMakeLabel(v);
3772         sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull);
3773         sqlite3VdbeResolveLabel(v, destIfNull);
3774       }
3775       break;
3776     }
3777 #endif
3778     default: {
3779       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
3780       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
3781       testcase( regFree1==0 );
3782       testcase( jumpIfNull==0 );
3783       break;
3784     }
3785   }
3786   sqlite3ReleaseTempReg(pParse, regFree1);
3787   sqlite3ReleaseTempReg(pParse, regFree2);
3788 }
3789 
3790 /*
3791 ** Do a deep comparison of two expression trees.  Return 0 if the two
3792 ** expressions are completely identical.  Return 1 if they differ only
3793 ** by a COLLATE operator at the top level.  Return 2 if there are differences
3794 ** other than the top-level COLLATE operator.
3795 **
3796 ** Sometimes this routine will return 2 even if the two expressions
3797 ** really are equivalent.  If we cannot prove that the expressions are
3798 ** identical, we return 2 just to be safe.  So if this routine
3799 ** returns 2, then you do not really know for certain if the two
3800 ** expressions are the same.  But if you get a 0 or 1 return, then you
3801 ** can be sure the expressions are the same.  In the places where
3802 ** this routine is used, it does not hurt to get an extra 2 - that
3803 ** just might result in some slightly slower code.  But returning
3804 ** an incorrect 0 or 1 could lead to a malfunction.
3805 */
3806 int sqlite3ExprCompare(Expr *pA, Expr *pB){
3807   if( pA==0||pB==0 ){
3808     return pB==pA ? 0 : 2;
3809   }
3810   assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) );
3811   assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) );
3812   if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){
3813     return 2;
3814   }
3815   if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2;
3816   if( pA->op!=pB->op ){
3817     if( pA->op==TK_COLLATE && sqlite3ExprCompare(pA->pLeft, pB)<2 ){
3818       return 1;
3819     }
3820     if( pB->op==TK_COLLATE && sqlite3ExprCompare(pA, pB->pLeft)<2 ){
3821       return 1;
3822     }
3823     return 2;
3824   }
3825   if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2;
3826   if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2;
3827   if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2;
3828   if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
3829   if( ExprHasProperty(pA, EP_IntValue) ){
3830     if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
3831       return 2;
3832     }
3833   }else if( pA->op!=TK_COLUMN && ALWAYS(pA->op!=TK_AGG_COLUMN) && pA->u.zToken){
3834     if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
3835     if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){
3836       return pA->op==TK_COLLATE ? 1 : 2;
3837     }
3838   }
3839   return 0;
3840 }
3841 
3842 /*
3843 ** Compare two ExprList objects.  Return 0 if they are identical and
3844 ** non-zero if they differ in any way.
3845 **
3846 ** This routine might return non-zero for equivalent ExprLists.  The
3847 ** only consequence will be disabled optimizations.  But this routine
3848 ** must never return 0 if the two ExprList objects are different, or
3849 ** a malfunction will result.
3850 **
3851 ** Two NULL pointers are considered to be the same.  But a NULL pointer
3852 ** always differs from a non-NULL pointer.
3853 */
3854 int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){
3855   int i;
3856   if( pA==0 && pB==0 ) return 0;
3857   if( pA==0 || pB==0 ) return 1;
3858   if( pA->nExpr!=pB->nExpr ) return 1;
3859   for(i=0; i<pA->nExpr; i++){
3860     Expr *pExprA = pA->a[i].pExpr;
3861     Expr *pExprB = pB->a[i].pExpr;
3862     if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
3863     if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
3864   }
3865   return 0;
3866 }
3867 
3868 /*
3869 ** An instance of the following structure is used by the tree walker
3870 ** to count references to table columns in the arguments of an
3871 ** aggregate function, in order to implement the
3872 ** sqlite3FunctionThisSrc() routine.
3873 */
3874 struct SrcCount {
3875   SrcList *pSrc;   /* One particular FROM clause in a nested query */
3876   int nThis;       /* Number of references to columns in pSrcList */
3877   int nOther;      /* Number of references to columns in other FROM clauses */
3878 };
3879 
3880 /*
3881 ** Count the number of references to columns.
3882 */
3883 static int exprSrcCount(Walker *pWalker, Expr *pExpr){
3884   /* The NEVER() on the second term is because sqlite3FunctionUsesThisSrc()
3885   ** is always called before sqlite3ExprAnalyzeAggregates() and so the
3886   ** TK_COLUMNs have not yet been converted into TK_AGG_COLUMN.  If
3887   ** sqlite3FunctionUsesThisSrc() is used differently in the future, the
3888   ** NEVER() will need to be removed. */
3889   if( pExpr->op==TK_COLUMN || NEVER(pExpr->op==TK_AGG_COLUMN) ){
3890     int i;
3891     struct SrcCount *p = pWalker->u.pSrcCount;
3892     SrcList *pSrc = p->pSrc;
3893     for(i=0; i<pSrc->nSrc; i++){
3894       if( pExpr->iTable==pSrc->a[i].iCursor ) break;
3895     }
3896     if( i<pSrc->nSrc ){
3897       p->nThis++;
3898     }else{
3899       p->nOther++;
3900     }
3901   }
3902   return WRC_Continue;
3903 }
3904 
3905 /*
3906 ** Determine if any of the arguments to the pExpr Function reference
3907 ** pSrcList.  Return true if they do.  Also return true if the function
3908 ** has no arguments or has only constant arguments.  Return false if pExpr
3909 ** references columns but not columns of tables found in pSrcList.
3910 */
3911 int sqlite3FunctionUsesThisSrc(Expr *pExpr, SrcList *pSrcList){
3912   Walker w;
3913   struct SrcCount cnt;
3914   assert( pExpr->op==TK_AGG_FUNCTION );
3915   memset(&w, 0, sizeof(w));
3916   w.xExprCallback = exprSrcCount;
3917   w.u.pSrcCount = &cnt;
3918   cnt.pSrc = pSrcList;
3919   cnt.nThis = 0;
3920   cnt.nOther = 0;
3921   sqlite3WalkExprList(&w, pExpr->x.pList);
3922   return cnt.nThis>0 || cnt.nOther==0;
3923 }
3924 
3925 /*
3926 ** Add a new element to the pAggInfo->aCol[] array.  Return the index of
3927 ** the new element.  Return a negative number if malloc fails.
3928 */
3929 static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
3930   int i;
3931   pInfo->aCol = sqlite3ArrayAllocate(
3932        db,
3933        pInfo->aCol,
3934        sizeof(pInfo->aCol[0]),
3935        &pInfo->nColumn,
3936        &i
3937   );
3938   return i;
3939 }
3940 
3941 /*
3942 ** Add a new element to the pAggInfo->aFunc[] array.  Return the index of
3943 ** the new element.  Return a negative number if malloc fails.
3944 */
3945 static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
3946   int i;
3947   pInfo->aFunc = sqlite3ArrayAllocate(
3948        db,
3949        pInfo->aFunc,
3950        sizeof(pInfo->aFunc[0]),
3951        &pInfo->nFunc,
3952        &i
3953   );
3954   return i;
3955 }
3956 
3957 /*
3958 ** This is the xExprCallback for a tree walker.  It is used to
3959 ** implement sqlite3ExprAnalyzeAggregates().  See sqlite3ExprAnalyzeAggregates
3960 ** for additional information.
3961 */
3962 static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
3963   int i;
3964   NameContext *pNC = pWalker->u.pNC;
3965   Parse *pParse = pNC->pParse;
3966   SrcList *pSrcList = pNC->pSrcList;
3967   AggInfo *pAggInfo = pNC->pAggInfo;
3968 
3969   switch( pExpr->op ){
3970     case TK_AGG_COLUMN:
3971     case TK_COLUMN: {
3972       testcase( pExpr->op==TK_AGG_COLUMN );
3973       testcase( pExpr->op==TK_COLUMN );
3974       /* Check to see if the column is in one of the tables in the FROM
3975       ** clause of the aggregate query */
3976       if( ALWAYS(pSrcList!=0) ){
3977         struct SrcList_item *pItem = pSrcList->a;
3978         for(i=0; i<pSrcList->nSrc; i++, pItem++){
3979           struct AggInfo_col *pCol;
3980           assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
3981           if( pExpr->iTable==pItem->iCursor ){
3982             /* If we reach this point, it means that pExpr refers to a table
3983             ** that is in the FROM clause of the aggregate query.
3984             **
3985             ** Make an entry for the column in pAggInfo->aCol[] if there
3986             ** is not an entry there already.
3987             */
3988             int k;
3989             pCol = pAggInfo->aCol;
3990             for(k=0; k<pAggInfo->nColumn; k++, pCol++){
3991               if( pCol->iTable==pExpr->iTable &&
3992                   pCol->iColumn==pExpr->iColumn ){
3993                 break;
3994               }
3995             }
3996             if( (k>=pAggInfo->nColumn)
3997              && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
3998             ){
3999               pCol = &pAggInfo->aCol[k];
4000               pCol->pTab = pExpr->pTab;
4001               pCol->iTable = pExpr->iTable;
4002               pCol->iColumn = pExpr->iColumn;
4003               pCol->iMem = ++pParse->nMem;
4004               pCol->iSorterColumn = -1;
4005               pCol->pExpr = pExpr;
4006               if( pAggInfo->pGroupBy ){
4007                 int j, n;
4008                 ExprList *pGB = pAggInfo->pGroupBy;
4009                 struct ExprList_item *pTerm = pGB->a;
4010                 n = pGB->nExpr;
4011                 for(j=0; j<n; j++, pTerm++){
4012                   Expr *pE = pTerm->pExpr;
4013                   if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
4014                       pE->iColumn==pExpr->iColumn ){
4015                     pCol->iSorterColumn = j;
4016                     break;
4017                   }
4018                 }
4019               }
4020               if( pCol->iSorterColumn<0 ){
4021                 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
4022               }
4023             }
4024             /* There is now an entry for pExpr in pAggInfo->aCol[] (either
4025             ** because it was there before or because we just created it).
4026             ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
4027             ** pAggInfo->aCol[] entry.
4028             */
4029             ExprSetIrreducible(pExpr);
4030             pExpr->pAggInfo = pAggInfo;
4031             pExpr->op = TK_AGG_COLUMN;
4032             pExpr->iAgg = (i16)k;
4033             break;
4034           } /* endif pExpr->iTable==pItem->iCursor */
4035         } /* end loop over pSrcList */
4036       }
4037       return WRC_Prune;
4038     }
4039     case TK_AGG_FUNCTION: {
4040       if( (pNC->ncFlags & NC_InAggFunc)==0
4041        && pWalker->walkerDepth==pExpr->op2
4042       ){
4043         /* Check to see if pExpr is a duplicate of another aggregate
4044         ** function that is already in the pAggInfo structure
4045         */
4046         struct AggInfo_func *pItem = pAggInfo->aFunc;
4047         for(i=0; i<pAggInfo->nFunc; i++, pItem++){
4048           if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){
4049             break;
4050           }
4051         }
4052         if( i>=pAggInfo->nFunc ){
4053           /* pExpr is original.  Make a new entry in pAggInfo->aFunc[]
4054           */
4055           u8 enc = ENC(pParse->db);
4056           i = addAggInfoFunc(pParse->db, pAggInfo);
4057           if( i>=0 ){
4058             assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
4059             pItem = &pAggInfo->aFunc[i];
4060             pItem->pExpr = pExpr;
4061             pItem->iMem = ++pParse->nMem;
4062             assert( !ExprHasProperty(pExpr, EP_IntValue) );
4063             pItem->pFunc = sqlite3FindFunction(pParse->db,
4064                    pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken),
4065                    pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
4066             if( pExpr->flags & EP_Distinct ){
4067               pItem->iDistinct = pParse->nTab++;
4068             }else{
4069               pItem->iDistinct = -1;
4070             }
4071           }
4072         }
4073         /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
4074         */
4075         assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
4076         ExprSetIrreducible(pExpr);
4077         pExpr->iAgg = (i16)i;
4078         pExpr->pAggInfo = pAggInfo;
4079         return WRC_Prune;
4080       }else{
4081         return WRC_Continue;
4082       }
4083     }
4084   }
4085   return WRC_Continue;
4086 }
4087 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
4088   UNUSED_PARAMETER(pWalker);
4089   UNUSED_PARAMETER(pSelect);
4090   return WRC_Continue;
4091 }
4092 
4093 /*
4094 ** Analyze the pExpr expression looking for aggregate functions and
4095 ** for variables that need to be added to AggInfo object that pNC->pAggInfo
4096 ** points to.  Additional entries are made on the AggInfo object as
4097 ** necessary.
4098 **
4099 ** This routine should only be called after the expression has been
4100 ** analyzed by sqlite3ResolveExprNames().
4101 */
4102 void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
4103   Walker w;
4104   memset(&w, 0, sizeof(w));
4105   w.xExprCallback = analyzeAggregate;
4106   w.xSelectCallback = analyzeAggregatesInSelect;
4107   w.u.pNC = pNC;
4108   assert( pNC->pSrcList!=0 );
4109   sqlite3WalkExpr(&w, pExpr);
4110 }
4111 
4112 /*
4113 ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
4114 ** expression list.  Return the number of errors.
4115 **
4116 ** If an error is found, the analysis is cut short.
4117 */
4118 void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
4119   struct ExprList_item *pItem;
4120   int i;
4121   if( pList ){
4122     for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
4123       sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
4124     }
4125   }
4126 }
4127 
4128 /*
4129 ** Allocate a single new register for use to hold some intermediate result.
4130 */
4131 int sqlite3GetTempReg(Parse *pParse){
4132   if( pParse->nTempReg==0 ){
4133     return ++pParse->nMem;
4134   }
4135   return pParse->aTempReg[--pParse->nTempReg];
4136 }
4137 
4138 /*
4139 ** Deallocate a register, making available for reuse for some other
4140 ** purpose.
4141 **
4142 ** If a register is currently being used by the column cache, then
4143 ** the dallocation is deferred until the column cache line that uses
4144 ** the register becomes stale.
4145 */
4146 void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
4147   if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
4148     int i;
4149     struct yColCache *p;
4150     for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
4151       if( p->iReg==iReg ){
4152         p->tempReg = 1;
4153         return;
4154       }
4155     }
4156     pParse->aTempReg[pParse->nTempReg++] = iReg;
4157   }
4158 }
4159 
4160 /*
4161 ** Allocate or deallocate a block of nReg consecutive registers
4162 */
4163 int sqlite3GetTempRange(Parse *pParse, int nReg){
4164   int i, n;
4165   i = pParse->iRangeReg;
4166   n = pParse->nRangeReg;
4167   if( nReg<=n ){
4168     assert( !usedAsColumnCache(pParse, i, i+n-1) );
4169     pParse->iRangeReg += nReg;
4170     pParse->nRangeReg -= nReg;
4171   }else{
4172     i = pParse->nMem+1;
4173     pParse->nMem += nReg;
4174   }
4175   return i;
4176 }
4177 void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
4178   sqlite3ExprCacheRemove(pParse, iReg, nReg);
4179   if( nReg>pParse->nRangeReg ){
4180     pParse->nRangeReg = nReg;
4181     pParse->iRangeReg = iReg;
4182   }
4183 }
4184 
4185 /*
4186 ** Mark all temporary registers as being unavailable for reuse.
4187 */
4188 void sqlite3ClearTempRegCache(Parse *pParse){
4189   pParse->nTempReg = 0;
4190   pParse->nRangeReg = 0;
4191 }
4192