xref: /sqlite-3.40.0/src/expr.c (revision 1c826650)
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 ** $Id: expr.c,v 1.392 2008/08/29 02:14:03 drh Exp $
16 */
17 #include "sqliteInt.h"
18 #include <ctype.h>
19 
20 /*
21 ** Return the 'affinity' of the expression pExpr if any.
22 **
23 ** If pExpr is a column, a reference to a column via an 'AS' alias,
24 ** or a sub-select with a column as the return value, then the
25 ** affinity of that column is returned. Otherwise, 0x00 is returned,
26 ** indicating no affinity for the expression.
27 **
28 ** i.e. the WHERE clause expresssions in the following statements all
29 ** have an affinity:
30 **
31 ** CREATE TABLE t1(a);
32 ** SELECT * FROM t1 WHERE a;
33 ** SELECT a AS b FROM t1 WHERE b;
34 ** SELECT * FROM t1 WHERE (select a from t1);
35 */
36 char sqlite3ExprAffinity(Expr *pExpr){
37   int op = pExpr->op;
38   if( op==TK_SELECT ){
39     return sqlite3ExprAffinity(pExpr->pSelect->pEList->a[0].pExpr);
40   }
41 #ifndef SQLITE_OMIT_CAST
42   if( op==TK_CAST ){
43     return sqlite3AffinityType(&pExpr->token);
44   }
45 #endif
46   if( (op==TK_COLUMN || op==TK_REGISTER) && pExpr->pTab!=0 ){
47     /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
48     ** a TK_COLUMN but was previously evaluated and cached in a register */
49     int j = pExpr->iColumn;
50     if( j<0 ) return SQLITE_AFF_INTEGER;
51     assert( pExpr->pTab && j<pExpr->pTab->nCol );
52     return pExpr->pTab->aCol[j].affinity;
53   }
54   return pExpr->affinity;
55 }
56 
57 /*
58 ** Set the collating sequence for expression pExpr to be the collating
59 ** sequence named by pToken.   Return a pointer to the revised expression.
60 ** The collating sequence is marked as "explicit" using the EP_ExpCollate
61 ** flag.  An explicit collating sequence will override implicit
62 ** collating sequences.
63 */
64 Expr *sqlite3ExprSetColl(Parse *pParse, Expr *pExpr, Token *pCollName){
65   char *zColl = 0;            /* Dequoted name of collation sequence */
66   CollSeq *pColl;
67   sqlite3 *db = pParse->db;
68   zColl = sqlite3NameFromToken(db, pCollName);
69   if( pExpr && zColl ){
70     pColl = sqlite3LocateCollSeq(pParse, zColl, -1);
71     if( pColl ){
72       pExpr->pColl = pColl;
73       pExpr->flags |= EP_ExpCollate;
74     }
75   }
76   sqlite3DbFree(db, zColl);
77   return pExpr;
78 }
79 
80 /*
81 ** Return the default collation sequence for the expression pExpr. If
82 ** there is no default collation type, return 0.
83 */
84 CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
85   CollSeq *pColl = 0;
86   Expr *p = pExpr;
87   while( p ){
88     int op;
89     pColl = p->pColl;
90     if( pColl ) break;
91     op = p->op;
92     if( (op==TK_COLUMN || op==TK_REGISTER) && p->pTab!=0 ){
93       /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
94       ** a TK_COLUMN but was previously evaluated and cached in a register */
95       const char *zColl;
96       int j = p->iColumn;
97       if( j>=0 ){
98         sqlite3 *db = pParse->db;
99         zColl = p->pTab->aCol[j].zColl;
100         pColl = sqlite3FindCollSeq(db, ENC(db), zColl, -1, 0);
101         pExpr->pColl = pColl;
102       }
103       break;
104     }
105     if( op!=TK_CAST && op!=TK_UPLUS ){
106       break;
107     }
108     p = p->pLeft;
109   }
110   if( sqlite3CheckCollSeq(pParse, pColl) ){
111     pColl = 0;
112   }
113   return pColl;
114 }
115 
116 /*
117 ** pExpr is an operand of a comparison operator.  aff2 is the
118 ** type affinity of the other operand.  This routine returns the
119 ** type affinity that should be used for the comparison operator.
120 */
121 char sqlite3CompareAffinity(Expr *pExpr, char aff2){
122   char aff1 = sqlite3ExprAffinity(pExpr);
123   if( aff1 && aff2 ){
124     /* Both sides of the comparison are columns. If one has numeric
125     ** affinity, use that. Otherwise use no affinity.
126     */
127     if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
128       return SQLITE_AFF_NUMERIC;
129     }else{
130       return SQLITE_AFF_NONE;
131     }
132   }else if( !aff1 && !aff2 ){
133     /* Neither side of the comparison is a column.  Compare the
134     ** results directly.
135     */
136     return SQLITE_AFF_NONE;
137   }else{
138     /* One side is a column, the other is not. Use the columns affinity. */
139     assert( aff1==0 || aff2==0 );
140     return (aff1 + aff2);
141   }
142 }
143 
144 /*
145 ** pExpr is a comparison operator.  Return the type affinity that should
146 ** be applied to both operands prior to doing the comparison.
147 */
148 static char comparisonAffinity(Expr *pExpr){
149   char aff;
150   assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
151           pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
152           pExpr->op==TK_NE );
153   assert( pExpr->pLeft );
154   aff = sqlite3ExprAffinity(pExpr->pLeft);
155   if( pExpr->pRight ){
156     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
157   }
158   else if( pExpr->pSelect ){
159     aff = sqlite3CompareAffinity(pExpr->pSelect->pEList->a[0].pExpr, aff);
160   }
161   else if( !aff ){
162     aff = SQLITE_AFF_NONE;
163   }
164   return aff;
165 }
166 
167 /*
168 ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
169 ** idx_affinity is the affinity of an indexed column. Return true
170 ** if the index with affinity idx_affinity may be used to implement
171 ** the comparison in pExpr.
172 */
173 int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
174   char aff = comparisonAffinity(pExpr);
175   switch( aff ){
176     case SQLITE_AFF_NONE:
177       return 1;
178     case SQLITE_AFF_TEXT:
179       return idx_affinity==SQLITE_AFF_TEXT;
180     default:
181       return sqlite3IsNumericAffinity(idx_affinity);
182   }
183 }
184 
185 /*
186 ** Return the P5 value that should be used for a binary comparison
187 ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
188 */
189 static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
190   u8 aff = (char)sqlite3ExprAffinity(pExpr2);
191   aff = sqlite3CompareAffinity(pExpr1, aff) | jumpIfNull;
192   return aff;
193 }
194 
195 /*
196 ** Return a pointer to the collation sequence that should be used by
197 ** a binary comparison operator comparing pLeft and pRight.
198 **
199 ** If the left hand expression has a collating sequence type, then it is
200 ** used. Otherwise the collation sequence for the right hand expression
201 ** is used, or the default (BINARY) if neither expression has a collating
202 ** type.
203 **
204 ** Argument pRight (but not pLeft) may be a null pointer. In this case,
205 ** it is not considered.
206 */
207 CollSeq *sqlite3BinaryCompareCollSeq(
208   Parse *pParse,
209   Expr *pLeft,
210   Expr *pRight
211 ){
212   CollSeq *pColl;
213   assert( pLeft );
214   if( pLeft->flags & EP_ExpCollate ){
215     assert( pLeft->pColl );
216     pColl = pLeft->pColl;
217   }else if( pRight && pRight->flags & EP_ExpCollate ){
218     assert( pRight->pColl );
219     pColl = pRight->pColl;
220   }else{
221     pColl = sqlite3ExprCollSeq(pParse, pLeft);
222     if( !pColl ){
223       pColl = sqlite3ExprCollSeq(pParse, pRight);
224     }
225   }
226   return pColl;
227 }
228 
229 /*
230 ** Generate the operands for a comparison operation.  Before
231 ** generating the code for each operand, set the EP_AnyAff
232 ** flag on the expression so that it will be able to used a
233 ** cached column value that has previously undergone an
234 ** affinity change.
235 */
236 static void codeCompareOperands(
237   Parse *pParse,    /* Parsing and code generating context */
238   Expr *pLeft,      /* The left operand */
239   int *pRegLeft,    /* Register where left operand is stored */
240   int *pFreeLeft,   /* Free this register when done */
241   Expr *pRight,     /* The right operand */
242   int *pRegRight,   /* Register where right operand is stored */
243   int *pFreeRight   /* Write temp register for right operand there */
244 ){
245   while( pLeft->op==TK_UPLUS ) pLeft = pLeft->pLeft;
246   pLeft->flags |= EP_AnyAff;
247   *pRegLeft = sqlite3ExprCodeTemp(pParse, pLeft, pFreeLeft);
248   while( pRight->op==TK_UPLUS ) pRight = pRight->pLeft;
249   pRight->flags |= EP_AnyAff;
250   *pRegRight = sqlite3ExprCodeTemp(pParse, pRight, pFreeRight);
251 }
252 
253 /*
254 ** Generate code for a comparison operator.
255 */
256 static int codeCompare(
257   Parse *pParse,    /* The parsing (and code generating) context */
258   Expr *pLeft,      /* The left operand */
259   Expr *pRight,     /* The right operand */
260   int opcode,       /* The comparison opcode */
261   int in1, int in2, /* Register holding operands */
262   int dest,         /* Jump here if true.  */
263   int jumpIfNull    /* If true, jump if either operand is NULL */
264 ){
265   int p5;
266   int addr;
267   CollSeq *p4;
268 
269   p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
270   p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
271   addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
272                            (void*)p4, P4_COLLSEQ);
273   sqlite3VdbeChangeP5(pParse->pVdbe, p5);
274   if( (p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_NONE ){
275     sqlite3ExprCacheAffinityChange(pParse, in1, 1);
276     sqlite3ExprCacheAffinityChange(pParse, in2, 1);
277   }
278   return addr;
279 }
280 
281 #if SQLITE_MAX_EXPR_DEPTH>0
282 /*
283 ** Check that argument nHeight is less than or equal to the maximum
284 ** expression depth allowed. If it is not, leave an error message in
285 ** pParse.
286 */
287 int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
288   int rc = SQLITE_OK;
289   int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
290   if( nHeight>mxHeight ){
291     sqlite3ErrorMsg(pParse,
292        "Expression tree is too large (maximum depth %d)", mxHeight
293     );
294     rc = SQLITE_ERROR;
295   }
296   return rc;
297 }
298 
299 /* The following three functions, heightOfExpr(), heightOfExprList()
300 ** and heightOfSelect(), are used to determine the maximum height
301 ** of any expression tree referenced by the structure passed as the
302 ** first argument.
303 **
304 ** If this maximum height is greater than the current value pointed
305 ** to by pnHeight, the second parameter, then set *pnHeight to that
306 ** value.
307 */
308 static void heightOfExpr(Expr *p, int *pnHeight){
309   if( p ){
310     if( p->nHeight>*pnHeight ){
311       *pnHeight = p->nHeight;
312     }
313   }
314 }
315 static void heightOfExprList(ExprList *p, int *pnHeight){
316   if( p ){
317     int i;
318     for(i=0; i<p->nExpr; i++){
319       heightOfExpr(p->a[i].pExpr, pnHeight);
320     }
321   }
322 }
323 static void heightOfSelect(Select *p, int *pnHeight){
324   if( p ){
325     heightOfExpr(p->pWhere, pnHeight);
326     heightOfExpr(p->pHaving, pnHeight);
327     heightOfExpr(p->pLimit, pnHeight);
328     heightOfExpr(p->pOffset, pnHeight);
329     heightOfExprList(p->pEList, pnHeight);
330     heightOfExprList(p->pGroupBy, pnHeight);
331     heightOfExprList(p->pOrderBy, pnHeight);
332     heightOfSelect(p->pPrior, pnHeight);
333   }
334 }
335 
336 /*
337 ** Set the Expr.nHeight variable in the structure passed as an
338 ** argument. An expression with no children, Expr.pList or
339 ** Expr.pSelect member has a height of 1. Any other expression
340 ** has a height equal to the maximum height of any other
341 ** referenced Expr plus one.
342 */
343 static void exprSetHeight(Expr *p){
344   int nHeight = 0;
345   heightOfExpr(p->pLeft, &nHeight);
346   heightOfExpr(p->pRight, &nHeight);
347   heightOfExprList(p->pList, &nHeight);
348   heightOfSelect(p->pSelect, &nHeight);
349   p->nHeight = nHeight + 1;
350 }
351 
352 /*
353 ** Set the Expr.nHeight variable using the exprSetHeight() function. If
354 ** the height is greater than the maximum allowed expression depth,
355 ** leave an error in pParse.
356 */
357 void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
358   exprSetHeight(p);
359   sqlite3ExprCheckHeight(pParse, p->nHeight);
360 }
361 
362 /*
363 ** Return the maximum height of any expression tree referenced
364 ** by the select statement passed as an argument.
365 */
366 int sqlite3SelectExprHeight(Select *p){
367   int nHeight = 0;
368   heightOfSelect(p, &nHeight);
369   return nHeight;
370 }
371 #else
372   #define exprSetHeight(y)
373 #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
374 
375 /*
376 ** Construct a new expression node and return a pointer to it.  Memory
377 ** for this node is obtained from sqlite3_malloc().  The calling function
378 ** is responsible for making sure the node eventually gets freed.
379 */
380 Expr *sqlite3Expr(
381   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
382   int op,                 /* Expression opcode */
383   Expr *pLeft,            /* Left operand */
384   Expr *pRight,           /* Right operand */
385   const Token *pToken     /* Argument token */
386 ){
387   Expr *pNew;
388   pNew = sqlite3DbMallocZero(db, sizeof(Expr));
389   if( pNew==0 ){
390     /* When malloc fails, delete pLeft and pRight. Expressions passed to
391     ** this function must always be allocated with sqlite3Expr() for this
392     ** reason.
393     */
394     sqlite3ExprDelete(db, pLeft);
395     sqlite3ExprDelete(db, pRight);
396     return 0;
397   }
398   pNew->op = op;
399   pNew->pLeft = pLeft;
400   pNew->pRight = pRight;
401   pNew->iAgg = -1;
402   pNew->span.z = (u8*)"";
403   if( pToken ){
404     assert( pToken->dyn==0 );
405     pNew->span = pNew->token = *pToken;
406   }else if( pLeft ){
407     if( pRight ){
408       if( pRight->span.dyn==0 && pLeft->span.dyn==0 ){
409         sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
410       }
411       if( pRight->flags & EP_ExpCollate ){
412         pNew->flags |= EP_ExpCollate;
413         pNew->pColl = pRight->pColl;
414       }
415     }
416     if( pLeft->flags & EP_ExpCollate ){
417       pNew->flags |= EP_ExpCollate;
418       pNew->pColl = pLeft->pColl;
419     }
420   }
421 
422   exprSetHeight(pNew);
423   return pNew;
424 }
425 
426 /*
427 ** Works like sqlite3Expr() except that it takes an extra Parse*
428 ** argument and notifies the associated connection object if malloc fails.
429 */
430 Expr *sqlite3PExpr(
431   Parse *pParse,          /* Parsing context */
432   int op,                 /* Expression opcode */
433   Expr *pLeft,            /* Left operand */
434   Expr *pRight,           /* Right operand */
435   const Token *pToken     /* Argument token */
436 ){
437   Expr *p = sqlite3Expr(pParse->db, op, pLeft, pRight, pToken);
438   if( p ){
439     sqlite3ExprCheckHeight(pParse, p->nHeight);
440   }
441   return p;
442 }
443 
444 /*
445 ** When doing a nested parse, you can include terms in an expression
446 ** that look like this:   #1 #2 ...  These terms refer to registers
447 ** in the virtual machine.  #N is the N-th register.
448 **
449 ** This routine is called by the parser to deal with on of those terms.
450 ** It immediately generates code to store the value in a memory location.
451 ** The returns an expression that will code to extract the value from
452 ** that memory location as needed.
453 */
454 Expr *sqlite3RegisterExpr(Parse *pParse, Token *pToken){
455   Vdbe *v = pParse->pVdbe;
456   Expr *p;
457   if( pParse->nested==0 ){
458     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", pToken);
459     return sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
460   }
461   if( v==0 ) return 0;
462   p = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, pToken);
463   if( p==0 ){
464     return 0;  /* Malloc failed */
465   }
466   p->iTable = atoi((char*)&pToken->z[1]);
467   return p;
468 }
469 
470 /*
471 ** Join two expressions using an AND operator.  If either expression is
472 ** NULL, then just return the other expression.
473 */
474 Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
475   if( pLeft==0 ){
476     return pRight;
477   }else if( pRight==0 ){
478     return pLeft;
479   }else{
480     return sqlite3Expr(db, TK_AND, pLeft, pRight, 0);
481   }
482 }
483 
484 /*
485 ** Set the Expr.span field of the given expression to span all
486 ** text between the two given tokens.  Both tokens must be pointing
487 ** at the same string.
488 */
489 void sqlite3ExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
490   assert( pRight!=0 );
491   assert( pLeft!=0 );
492   if( pExpr ){
493     pExpr->span.z = pLeft->z;
494     pExpr->span.n = pRight->n + (pRight->z - pLeft->z);
495   }
496 }
497 
498 /*
499 ** Construct a new expression node for a function with multiple
500 ** arguments.
501 */
502 Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
503   Expr *pNew;
504   sqlite3 *db = pParse->db;
505   assert( pToken );
506   pNew = sqlite3DbMallocZero(db, sizeof(Expr) );
507   if( pNew==0 ){
508     sqlite3ExprListDelete(db, pList); /* Avoid leaking memory when malloc fails */
509     return 0;
510   }
511   pNew->op = TK_FUNCTION;
512   pNew->pList = pList;
513   assert( pToken->dyn==0 );
514   pNew->token = *pToken;
515   pNew->span = pNew->token;
516 
517   sqlite3ExprSetHeight(pParse, pNew);
518   return pNew;
519 }
520 
521 /*
522 ** Assign a variable number to an expression that encodes a wildcard
523 ** in the original SQL statement.
524 **
525 ** Wildcards consisting of a single "?" are assigned the next sequential
526 ** variable number.
527 **
528 ** Wildcards of the form "?nnn" are assigned the number "nnn".  We make
529 ** sure "nnn" is not too be to avoid a denial of service attack when
530 ** the SQL statement comes from an external source.
531 **
532 ** Wildcards of the form ":aaa" or "$aaa" are assigned the same number
533 ** as the previous instance of the same wildcard.  Or if this is the first
534 ** instance of the wildcard, the next sequenial variable number is
535 ** assigned.
536 */
537 void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
538   Token *pToken;
539   sqlite3 *db = pParse->db;
540 
541   if( pExpr==0 ) return;
542   pToken = &pExpr->token;
543   assert( pToken->n>=1 );
544   assert( pToken->z!=0 );
545   assert( pToken->z[0]!=0 );
546   if( pToken->n==1 ){
547     /* Wildcard of the form "?".  Assign the next variable number */
548     pExpr->iTable = ++pParse->nVar;
549   }else if( pToken->z[0]=='?' ){
550     /* Wildcard of the form "?nnn".  Convert "nnn" to an integer and
551     ** use it as the variable number */
552     int i;
553     pExpr->iTable = i = atoi((char*)&pToken->z[1]);
554     testcase( i==0 );
555     testcase( i==1 );
556     testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
557     testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
558     if( i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
559       sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
560           db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
561     }
562     if( i>pParse->nVar ){
563       pParse->nVar = i;
564     }
565   }else{
566     /* Wildcards of the form ":aaa" or "$aaa".  Reuse the same variable
567     ** number as the prior appearance of the same name, or if the name
568     ** has never appeared before, reuse the same variable number
569     */
570     int i, n;
571     n = pToken->n;
572     for(i=0; i<pParse->nVarExpr; i++){
573       Expr *pE;
574       if( (pE = pParse->apVarExpr[i])!=0
575           && pE->token.n==n
576           && memcmp(pE->token.z, pToken->z, n)==0 ){
577         pExpr->iTable = pE->iTable;
578         break;
579       }
580     }
581     if( i>=pParse->nVarExpr ){
582       pExpr->iTable = ++pParse->nVar;
583       if( pParse->nVarExpr>=pParse->nVarExprAlloc-1 ){
584         pParse->nVarExprAlloc += pParse->nVarExprAlloc + 10;
585         pParse->apVarExpr =
586             sqlite3DbReallocOrFree(
587               db,
588               pParse->apVarExpr,
589               pParse->nVarExprAlloc*sizeof(pParse->apVarExpr[0])
590             );
591       }
592       if( !db->mallocFailed ){
593         assert( pParse->apVarExpr!=0 );
594         pParse->apVarExpr[pParse->nVarExpr++] = pExpr;
595       }
596     }
597   }
598   if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
599     sqlite3ErrorMsg(pParse, "too many SQL variables");
600   }
601 }
602 
603 /*
604 ** Recursively delete an expression tree.
605 */
606 void sqlite3ExprDelete(sqlite3 *db, Expr *p){
607   if( p==0 ) return;
608   if( p->span.dyn ) sqlite3DbFree(db, (char*)p->span.z);
609   if( p->token.dyn ) sqlite3DbFree(db, (char*)p->token.z);
610   sqlite3ExprDelete(db, p->pLeft);
611   sqlite3ExprDelete(db, p->pRight);
612   sqlite3ExprListDelete(db, p->pList);
613   sqlite3SelectDelete(db, p->pSelect);
614   sqlite3DbFree(db, p);
615 }
616 
617 /*
618 ** The Expr.token field might be a string literal that is quoted.
619 ** If so, remove the quotation marks.
620 */
621 void sqlite3DequoteExpr(sqlite3 *db, Expr *p){
622   if( ExprHasAnyProperty(p, EP_Dequoted) ){
623     return;
624   }
625   ExprSetProperty(p, EP_Dequoted);
626   if( p->token.dyn==0 ){
627     sqlite3TokenCopy(db, &p->token, &p->token);
628   }
629   sqlite3Dequote((char*)p->token.z);
630 }
631 
632 /*
633 ** The following group of routines make deep copies of expressions,
634 ** expression lists, ID lists, and select statements.  The copies can
635 ** be deleted (by being passed to their respective ...Delete() routines)
636 ** without effecting the originals.
637 **
638 ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
639 ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded
640 ** by subsequent calls to sqlite*ListAppend() routines.
641 **
642 ** Any tables that the SrcList might point to are not duplicated.
643 */
644 Expr *sqlite3ExprDup(sqlite3 *db, Expr *p){
645   Expr *pNew;
646   if( p==0 ) return 0;
647   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
648   if( pNew==0 ) return 0;
649   memcpy(pNew, p, sizeof(*pNew));
650   if( p->token.z!=0 ){
651     pNew->token.z = (u8*)sqlite3DbStrNDup(db, (char*)p->token.z, p->token.n);
652     pNew->token.dyn = 1;
653   }else{
654     assert( pNew->token.z==0 );
655   }
656   pNew->span.z = 0;
657   pNew->pLeft = sqlite3ExprDup(db, p->pLeft);
658   pNew->pRight = sqlite3ExprDup(db, p->pRight);
659   pNew->pList = sqlite3ExprListDup(db, p->pList);
660   pNew->pSelect = sqlite3SelectDup(db, p->pSelect);
661   return pNew;
662 }
663 void sqlite3TokenCopy(sqlite3 *db, Token *pTo, Token *pFrom){
664   if( pTo->dyn ) sqlite3DbFree(db, (char*)pTo->z);
665   if( pFrom->z ){
666     pTo->n = pFrom->n;
667     pTo->z = (u8*)sqlite3DbStrNDup(db, (char*)pFrom->z, pFrom->n);
668     pTo->dyn = 1;
669   }else{
670     pTo->z = 0;
671   }
672 }
673 ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p){
674   ExprList *pNew;
675   struct ExprList_item *pItem, *pOldItem;
676   int i;
677   if( p==0 ) return 0;
678   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
679   if( pNew==0 ) return 0;
680   pNew->iECursor = 0;
681   pNew->nExpr = pNew->nAlloc = p->nExpr;
682   pNew->a = pItem = sqlite3DbMallocRaw(db,  p->nExpr*sizeof(p->a[0]) );
683   if( pItem==0 ){
684     sqlite3DbFree(db, pNew);
685     return 0;
686   }
687   pOldItem = p->a;
688   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
689     Expr *pNewExpr, *pOldExpr;
690     pItem->pExpr = pNewExpr = sqlite3ExprDup(db, pOldExpr = pOldItem->pExpr);
691     if( pOldExpr->span.z!=0 && pNewExpr ){
692       /* Always make a copy of the span for top-level expressions in the
693       ** expression list.  The logic in SELECT processing that determines
694       ** the names of columns in the result set needs this information */
695       sqlite3TokenCopy(db, &pNewExpr->span, &pOldExpr->span);
696     }
697     assert( pNewExpr==0 || pNewExpr->span.z!=0
698             || pOldExpr->span.z==0
699             || db->mallocFailed );
700     pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
701     pItem->sortOrder = pOldItem->sortOrder;
702     pItem->done = 0;
703     pItem->iCol = pOldItem->iCol;
704     pItem->iAlias = pOldItem->iAlias;
705   }
706   return pNew;
707 }
708 
709 /*
710 ** If cursors, triggers, views and subqueries are all omitted from
711 ** the build, then none of the following routines, except for
712 ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
713 ** called with a NULL argument.
714 */
715 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
716  || !defined(SQLITE_OMIT_SUBQUERY)
717 SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p){
718   SrcList *pNew;
719   int i;
720   int nByte;
721   if( p==0 ) return 0;
722   nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
723   pNew = sqlite3DbMallocRaw(db, nByte );
724   if( pNew==0 ) return 0;
725   pNew->nSrc = pNew->nAlloc = p->nSrc;
726   for(i=0; i<p->nSrc; i++){
727     struct SrcList_item *pNewItem = &pNew->a[i];
728     struct SrcList_item *pOldItem = &p->a[i];
729     Table *pTab;
730     pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
731     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
732     pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
733     pNewItem->jointype = pOldItem->jointype;
734     pNewItem->iCursor = pOldItem->iCursor;
735     pNewItem->isPopulated = pOldItem->isPopulated;
736     pTab = pNewItem->pTab = pOldItem->pTab;
737     if( pTab ){
738       pTab->nRef++;
739     }
740     pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect);
741     pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn);
742     pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
743     pNewItem->colUsed = pOldItem->colUsed;
744   }
745   return pNew;
746 }
747 IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
748   IdList *pNew;
749   int i;
750   if( p==0 ) return 0;
751   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
752   if( pNew==0 ) return 0;
753   pNew->nId = pNew->nAlloc = p->nId;
754   pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
755   if( pNew->a==0 ){
756     sqlite3DbFree(db, pNew);
757     return 0;
758   }
759   for(i=0; i<p->nId; i++){
760     struct IdList_item *pNewItem = &pNew->a[i];
761     struct IdList_item *pOldItem = &p->a[i];
762     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
763     pNewItem->idx = pOldItem->idx;
764   }
765   return pNew;
766 }
767 Select *sqlite3SelectDup(sqlite3 *db, Select *p){
768   Select *pNew;
769   if( p==0 ) return 0;
770   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
771   if( pNew==0 ) return 0;
772   pNew->pEList = sqlite3ExprListDup(db, p->pEList);
773   pNew->pSrc = sqlite3SrcListDup(db, p->pSrc);
774   pNew->pWhere = sqlite3ExprDup(db, p->pWhere);
775   pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy);
776   pNew->pHaving = sqlite3ExprDup(db, p->pHaving);
777   pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy);
778   pNew->op = p->op;
779   pNew->pPrior = sqlite3SelectDup(db, p->pPrior);
780   pNew->pLimit = sqlite3ExprDup(db, p->pLimit);
781   pNew->pOffset = sqlite3ExprDup(db, p->pOffset);
782   pNew->iLimit = 0;
783   pNew->iOffset = 0;
784   pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
785   pNew->pRightmost = 0;
786   pNew->addrOpenEphm[0] = -1;
787   pNew->addrOpenEphm[1] = -1;
788   pNew->addrOpenEphm[2] = -1;
789   return pNew;
790 }
791 #else
792 Select *sqlite3SelectDup(sqlite3 *db, Select *p){
793   assert( p==0 );
794   return 0;
795 }
796 #endif
797 
798 
799 /*
800 ** Add a new element to the end of an expression list.  If pList is
801 ** initially NULL, then create a new expression list.
802 */
803 ExprList *sqlite3ExprListAppend(
804   Parse *pParse,          /* Parsing context */
805   ExprList *pList,        /* List to which to append. Might be NULL */
806   Expr *pExpr,            /* Expression to be appended */
807   Token *pName            /* AS keyword for the expression */
808 ){
809   sqlite3 *db = pParse->db;
810   if( pList==0 ){
811     pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
812     if( pList==0 ){
813       goto no_mem;
814     }
815     assert( pList->nAlloc==0 );
816   }
817   if( pList->nAlloc<=pList->nExpr ){
818     struct ExprList_item *a;
819     int n = pList->nAlloc*2 + 4;
820     a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0]));
821     if( a==0 ){
822       goto no_mem;
823     }
824     pList->a = a;
825     pList->nAlloc = n;
826   }
827   assert( pList->a!=0 );
828   if( pExpr || pName ){
829     struct ExprList_item *pItem = &pList->a[pList->nExpr++];
830     memset(pItem, 0, sizeof(*pItem));
831     pItem->zName = sqlite3NameFromToken(db, pName);
832     pItem->pExpr = pExpr;
833     pItem->iAlias = 0;
834   }
835   return pList;
836 
837 no_mem:
838   /* Avoid leaking memory if malloc has failed. */
839   sqlite3ExprDelete(db, pExpr);
840   sqlite3ExprListDelete(db, pList);
841   return 0;
842 }
843 
844 /*
845 ** If the expression list pEList contains more than iLimit elements,
846 ** leave an error message in pParse.
847 */
848 void sqlite3ExprListCheckLength(
849   Parse *pParse,
850   ExprList *pEList,
851   const char *zObject
852 ){
853   int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
854   testcase( pEList && pEList->nExpr==mx );
855   testcase( pEList && pEList->nExpr==mx+1 );
856   if( pEList && pEList->nExpr>mx ){
857     sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
858   }
859 }
860 
861 /*
862 ** Delete an entire expression list.
863 */
864 void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
865   int i;
866   struct ExprList_item *pItem;
867   if( pList==0 ) return;
868   assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
869   assert( pList->nExpr<=pList->nAlloc );
870   for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
871     sqlite3ExprDelete(db, pItem->pExpr);
872     sqlite3DbFree(db, pItem->zName);
873   }
874   sqlite3DbFree(db, pList->a);
875   sqlite3DbFree(db, pList);
876 }
877 
878 /*
879 ** These routines are Walker callbacks.  Walker.u.pi is a pointer
880 ** to an integer.  These routines are checking an expression to see
881 ** if it is a constant.  Set *Walker.u.pi to 0 if the expression is
882 ** not constant.
883 **
884 ** These callback routines are used to implement the following:
885 **
886 **     sqlite3ExprIsConstant()
887 **     sqlite3ExprIsConstantNotJoin()
888 **     sqlite3ExprIsConstantOrFunction()
889 **
890 */
891 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
892 
893   /* If pWalker->u.i is 3 then any term of the expression that comes from
894   ** the ON or USING clauses of a join disqualifies the expression
895   ** from being considered constant. */
896   if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
897     pWalker->u.i = 0;
898     return WRC_Abort;
899   }
900 
901   switch( pExpr->op ){
902     /* Consider functions to be constant if all their arguments are constant
903     ** and pWalker->u.i==2 */
904     case TK_FUNCTION:
905       if( pWalker->u.i==2 ) return 0;
906       /* Fall through */
907     case TK_ID:
908     case TK_COLUMN:
909     case TK_DOT:
910     case TK_AGG_FUNCTION:
911     case TK_AGG_COLUMN:
912 #ifndef SQLITE_OMIT_SUBQUERY
913     case TK_SELECT:
914     case TK_EXISTS:
915       testcase( pExpr->op==TK_SELECT );
916       testcase( pExpr->op==TK_EXISTS );
917 #endif
918       testcase( pExpr->op==TK_ID );
919       testcase( pExpr->op==TK_COLUMN );
920       testcase( pExpr->op==TK_DOT );
921       testcase( pExpr->op==TK_AGG_FUNCTION );
922       testcase( pExpr->op==TK_AGG_COLUMN );
923       pWalker->u.i = 0;
924       return WRC_Abort;
925     default:
926       return WRC_Continue;
927   }
928 }
929 static int selectNodeIsConstant(Walker *pWalker, Select *pSelect){
930   pWalker->u.i = 0;
931   return WRC_Abort;
932 }
933 static int exprIsConst(Expr *p, int initFlag){
934   Walker w;
935   w.u.i = initFlag;
936   w.xExprCallback = exprNodeIsConstant;
937   w.xSelectCallback = selectNodeIsConstant;
938   sqlite3WalkExpr(&w, p);
939   return w.u.i;
940 }
941 
942 /*
943 ** Walk an expression tree.  Return 1 if the expression is constant
944 ** and 0 if it involves variables or function calls.
945 **
946 ** For the purposes of this function, a double-quoted string (ex: "abc")
947 ** is considered a variable but a single-quoted string (ex: 'abc') is
948 ** a constant.
949 */
950 int sqlite3ExprIsConstant(Expr *p){
951   return exprIsConst(p, 1);
952 }
953 
954 /*
955 ** Walk an expression tree.  Return 1 if the expression is constant
956 ** that does no originate from the ON or USING clauses of a join.
957 ** Return 0 if it involves variables or function calls or terms from
958 ** an ON or USING clause.
959 */
960 int sqlite3ExprIsConstantNotJoin(Expr *p){
961   return exprIsConst(p, 3);
962 }
963 
964 /*
965 ** Walk an expression tree.  Return 1 if the expression is constant
966 ** or a function call with constant arguments.  Return and 0 if there
967 ** are any variables.
968 **
969 ** For the purposes of this function, a double-quoted string (ex: "abc")
970 ** is considered a variable but a single-quoted string (ex: 'abc') is
971 ** a constant.
972 */
973 int sqlite3ExprIsConstantOrFunction(Expr *p){
974   return exprIsConst(p, 2);
975 }
976 
977 /*
978 ** If the expression p codes a constant integer that is small enough
979 ** to fit in a 32-bit integer, return 1 and put the value of the integer
980 ** in *pValue.  If the expression is not an integer or if it is too big
981 ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
982 */
983 int sqlite3ExprIsInteger(Expr *p, int *pValue){
984   int rc = 0;
985   if( p->flags & EP_IntValue ){
986     *pValue = p->iTable;
987     return 1;
988   }
989   switch( p->op ){
990     case TK_INTEGER: {
991       rc = sqlite3GetInt32((char*)p->token.z, pValue);
992       break;
993     }
994     case TK_UPLUS: {
995       rc = sqlite3ExprIsInteger(p->pLeft, pValue);
996       break;
997     }
998     case TK_UMINUS: {
999       int v;
1000       if( sqlite3ExprIsInteger(p->pLeft, &v) ){
1001         *pValue = -v;
1002         rc = 1;
1003       }
1004       break;
1005     }
1006     default: break;
1007   }
1008   if( rc ){
1009     p->op = TK_INTEGER;
1010     p->flags |= EP_IntValue;
1011     p->iTable = *pValue;
1012   }
1013   return rc;
1014 }
1015 
1016 /*
1017 ** Return TRUE if the given string is a row-id column name.
1018 */
1019 int sqlite3IsRowid(const char *z){
1020   if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
1021   if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
1022   if( sqlite3StrICmp(z, "OID")==0 ) return 1;
1023   return 0;
1024 }
1025 
1026 #ifdef SQLITE_TEST
1027   int sqlite3_enable_in_opt = 1;
1028 #else
1029   #define sqlite3_enable_in_opt 1
1030 #endif
1031 
1032 /*
1033 ** Return true if the IN operator optimization is enabled and
1034 ** the SELECT statement p exists and is of the
1035 ** simple form:
1036 **
1037 **     SELECT <column> FROM <table>
1038 **
1039 ** If this is the case, it may be possible to use an existing table
1040 ** or index instead of generating an epheremal table.
1041 */
1042 #ifndef SQLITE_OMIT_SUBQUERY
1043 static int isCandidateForInOpt(Select *p){
1044   SrcList *pSrc;
1045   ExprList *pEList;
1046   Table *pTab;
1047   if( !sqlite3_enable_in_opt ) return 0; /* IN optimization must be enabled */
1048   if( p==0 ) return 0;                   /* right-hand side of IN is SELECT */
1049   if( p->pPrior ) return 0;              /* Not a compound SELECT */
1050   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
1051       return 0; /* No DISTINCT keyword and no aggregate functions */
1052   }
1053   if( p->pGroupBy ) return 0;            /* Has no GROUP BY clause */
1054   if( p->pLimit ) return 0;              /* Has no LIMIT clause */
1055   if( p->pOffset ) return 0;
1056   if( p->pWhere ) return 0;              /* Has no WHERE clause */
1057   pSrc = p->pSrc;
1058   if( pSrc==0 ) return 0;                /* A single table in the FROM clause */
1059   if( pSrc->nSrc!=1 ) return 0;
1060   if( pSrc->a[0].pSelect ) return 0;     /* FROM clause is not a subquery */
1061   pTab = pSrc->a[0].pTab;
1062   if( pTab==0 ) return 0;
1063   if( pTab->pSelect ) return 0;          /* FROM clause is not a view */
1064   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
1065   pEList = p->pEList;
1066   if( pEList->nExpr!=1 ) return 0;       /* One column in the result set */
1067   if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
1068   return 1;
1069 }
1070 #endif /* SQLITE_OMIT_SUBQUERY */
1071 
1072 /*
1073 ** This function is used by the implementation of the IN (...) operator.
1074 ** It's job is to find or create a b-tree structure that may be used
1075 ** either to test for membership of the (...) set or to iterate through
1076 ** its members, skipping duplicates.
1077 **
1078 ** The cursor opened on the structure (database table, database index
1079 ** or ephermal table) is stored in pX->iTable before this function returns.
1080 ** The returned value indicates the structure type, as follows:
1081 **
1082 **   IN_INDEX_ROWID - The cursor was opened on a database table.
1083 **   IN_INDEX_INDEX - The cursor was opened on a database index.
1084 **   IN_INDEX_EPH -   The cursor was opened on a specially created and
1085 **                    populated epheremal table.
1086 **
1087 ** An existing structure may only be used if the SELECT is of the simple
1088 ** form:
1089 **
1090 **     SELECT <column> FROM <table>
1091 **
1092 ** If prNotFound parameter is 0, then the structure will be used to iterate
1093 ** through the set members, skipping any duplicates. In this case an
1094 ** epheremal table must be used unless the selected <column> is guaranteed
1095 ** to be unique - either because it is an INTEGER PRIMARY KEY or it
1096 ** is unique by virtue of a constraint or implicit index.
1097 **
1098 ** If the prNotFound parameter is not 0, then the structure will be used
1099 ** for fast set membership tests. In this case an epheremal table must
1100 ** be used unless <column> is an INTEGER PRIMARY KEY or an index can
1101 ** be found with <column> as its left-most column.
1102 **
1103 ** When the structure is being used for set membership tests, the user
1104 ** needs to know whether or not the structure contains an SQL NULL
1105 ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
1106 ** If there is a chance that the structure may contain a NULL value at
1107 ** runtime, then a register is allocated and the register number written
1108 ** to *prNotFound. If there is no chance that the structure contains a
1109 ** NULL value, then *prNotFound is left unchanged.
1110 **
1111 ** If a register is allocated and its location stored in *prNotFound, then
1112 ** its initial value is NULL. If the structure does not remain constant
1113 ** for the duration of the query (i.e. the set is a correlated sub-select),
1114 ** the value of the allocated register is reset to NULL each time the
1115 ** structure is repopulated. This allows the caller to use vdbe code
1116 ** equivalent to the following:
1117 **
1118 **   if( register==NULL ){
1119 **     has_null = <test if data structure contains null>
1120 **     register = 1
1121 **   }
1122 **
1123 ** in order to avoid running the <test if data structure contains null>
1124 ** test more often than is necessary.
1125 */
1126 #ifndef SQLITE_OMIT_SUBQUERY
1127 int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
1128   Select *p;
1129   int eType = 0;
1130   int iTab = pParse->nTab++;
1131   int mustBeUnique = !prNotFound;
1132 
1133   /* The follwing if(...) expression is true if the SELECT is of the
1134   ** simple form:
1135   **
1136   **     SELECT <column> FROM <table>
1137   **
1138   ** If this is the case, it may be possible to use an existing table
1139   ** or index instead of generating an epheremal table.
1140   */
1141   p = pX->pSelect;
1142   if( isCandidateForInOpt(p) ){
1143     sqlite3 *db = pParse->db;
1144     Index *pIdx;
1145     Expr *pExpr = p->pEList->a[0].pExpr;
1146     int iCol = pExpr->iColumn;
1147     Vdbe *v = sqlite3GetVdbe(pParse);
1148 
1149     /* This function is only called from two places. In both cases the vdbe
1150     ** has already been allocated. So assume sqlite3GetVdbe() is always
1151     ** successful here.
1152     */
1153     assert(v);
1154     if( iCol<0 ){
1155       int iMem = ++pParse->nMem;
1156       int iAddr;
1157       Table *pTab = p->pSrc->a[0].pTab;
1158       int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
1159       sqlite3VdbeUsesBtree(v, iDb);
1160 
1161       iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
1162       sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
1163 
1164       sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
1165       eType = IN_INDEX_ROWID;
1166 
1167       sqlite3VdbeJumpHere(v, iAddr);
1168     }else{
1169       /* The collation sequence used by the comparison. If an index is to
1170       ** be used in place of a temp-table, it must be ordered according
1171       ** to this collation sequence.
1172       */
1173       CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
1174 
1175       /* Check that the affinity that will be used to perform the
1176       ** comparison is the same as the affinity of the column. If
1177       ** it is not, it is not possible to use any index.
1178       */
1179       Table *pTab = p->pSrc->a[0].pTab;
1180       char aff = comparisonAffinity(pX);
1181       int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);
1182 
1183       for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
1184         if( (pIdx->aiColumn[0]==iCol)
1185          && (pReq==sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], -1, 0))
1186          && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
1187         ){
1188           int iDb;
1189           int iMem = ++pParse->nMem;
1190           int iAddr;
1191           char *pKey;
1192 
1193           pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
1194           iDb = sqlite3SchemaToIndex(db, pIdx->pSchema);
1195           sqlite3VdbeUsesBtree(v, iDb);
1196 
1197           iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
1198           sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
1199 
1200           sqlite3VdbeAddOp2(v, OP_SetNumColumns, 0, pIdx->nColumn);
1201           sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
1202                                pKey,P4_KEYINFO_HANDOFF);
1203           VdbeComment((v, "%s", pIdx->zName));
1204           eType = IN_INDEX_INDEX;
1205 
1206           sqlite3VdbeJumpHere(v, iAddr);
1207           if( prNotFound && !pTab->aCol[iCol].notNull ){
1208             *prNotFound = ++pParse->nMem;
1209           }
1210         }
1211       }
1212     }
1213   }
1214 
1215   if( eType==0 ){
1216     int rMayHaveNull = 0;
1217     if( prNotFound ){
1218       *prNotFound = rMayHaveNull = ++pParse->nMem;
1219     }
1220     sqlite3CodeSubselect(pParse, pX, rMayHaveNull);
1221     eType = IN_INDEX_EPH;
1222   }else{
1223     pX->iTable = iTab;
1224   }
1225   return eType;
1226 }
1227 #endif
1228 
1229 /*
1230 ** Generate code for scalar subqueries used as an expression
1231 ** and IN operators.  Examples:
1232 **
1233 **     (SELECT a FROM b)          -- subquery
1234 **     EXISTS (SELECT a FROM b)   -- EXISTS subquery
1235 **     x IN (4,5,11)              -- IN operator with list on right-hand side
1236 **     x IN (SELECT a FROM b)     -- IN operator with subquery on the right
1237 **
1238 ** The pExpr parameter describes the expression that contains the IN
1239 ** operator or subquery.
1240 */
1241 #ifndef SQLITE_OMIT_SUBQUERY
1242 void sqlite3CodeSubselect(Parse *pParse, Expr *pExpr, int rMayHaveNull){
1243   int testAddr = 0;                       /* One-time test address */
1244   Vdbe *v = sqlite3GetVdbe(pParse);
1245   if( v==0 ) return;
1246 
1247 
1248   /* This code must be run in its entirety every time it is encountered
1249   ** if any of the following is true:
1250   **
1251   **    *  The right-hand side is a correlated subquery
1252   **    *  The right-hand side is an expression list containing variables
1253   **    *  We are inside a trigger
1254   **
1255   ** If all of the above are false, then we can run this code just once
1256   ** save the results, and reuse the same result on subsequent invocations.
1257   */
1258   if( !ExprHasAnyProperty(pExpr, EP_VarSelect) && !pParse->trigStack ){
1259     int mem = ++pParse->nMem;
1260     sqlite3VdbeAddOp1(v, OP_If, mem);
1261     testAddr = sqlite3VdbeAddOp2(v, OP_Integer, 1, mem);
1262     assert( testAddr>0 || pParse->db->mallocFailed );
1263   }
1264 
1265   switch( pExpr->op ){
1266     case TK_IN: {
1267       char affinity;
1268       KeyInfo keyInfo;
1269       int addr;        /* Address of OP_OpenEphemeral instruction */
1270 
1271       if( rMayHaveNull ){
1272         sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
1273       }
1274 
1275       affinity = sqlite3ExprAffinity(pExpr->pLeft);
1276 
1277       /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
1278       ** expression it is handled the same way. A virtual table is
1279       ** filled with single-field index keys representing the results
1280       ** from the SELECT or the <exprlist>.
1281       **
1282       ** If the 'x' expression is a column value, or the SELECT...
1283       ** statement returns a column value, then the affinity of that
1284       ** column is used to build the index keys. If both 'x' and the
1285       ** SELECT... statement are columns, then numeric affinity is used
1286       ** if either column has NUMERIC or INTEGER affinity. If neither
1287       ** 'x' nor the SELECT... statement are columns, then numeric affinity
1288       ** is used.
1289       */
1290       pExpr->iTable = pParse->nTab++;
1291       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, 1);
1292       memset(&keyInfo, 0, sizeof(keyInfo));
1293       keyInfo.nField = 1;
1294 
1295       if( pExpr->pSelect ){
1296         /* Case 1:     expr IN (SELECT ...)
1297         **
1298         ** Generate code to write the results of the select into the temporary
1299         ** table allocated and opened above.
1300         */
1301         SelectDest dest;
1302         ExprList *pEList;
1303 
1304         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
1305         dest.affinity = (int)affinity;
1306         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
1307         if( sqlite3Select(pParse, pExpr->pSelect, &dest) ){
1308           return;
1309         }
1310         pEList = pExpr->pSelect->pEList;
1311         if( pEList && pEList->nExpr>0 ){
1312           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
1313               pEList->a[0].pExpr);
1314         }
1315       }else if( pExpr->pList ){
1316         /* Case 2:     expr IN (exprlist)
1317         **
1318         ** For each expression, build an index key from the evaluation and
1319         ** store it in the temporary table. If <expr> is a column, then use
1320         ** that columns affinity when building index keys. If <expr> is not
1321         ** a column, use numeric affinity.
1322         */
1323         int i;
1324         ExprList *pList = pExpr->pList;
1325         struct ExprList_item *pItem;
1326         int r1, r2, r3;
1327 
1328         if( !affinity ){
1329           affinity = SQLITE_AFF_NONE;
1330         }
1331         keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
1332 
1333         /* Loop through each expression in <exprlist>. */
1334         r1 = sqlite3GetTempReg(pParse);
1335         r2 = sqlite3GetTempReg(pParse);
1336         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
1337           Expr *pE2 = pItem->pExpr;
1338 
1339           /* If the expression is not constant then we will need to
1340           ** disable the test that was generated above that makes sure
1341           ** this code only executes once.  Because for a non-constant
1342           ** expression we need to rerun this code each time.
1343           */
1344           if( testAddr && !sqlite3ExprIsConstant(pE2) ){
1345             sqlite3VdbeChangeToNoop(v, testAddr-1, 2);
1346             testAddr = 0;
1347           }
1348 
1349           /* Evaluate the expression and insert it into the temp table */
1350           pParse->disableColCache++;
1351           r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
1352           assert( pParse->disableColCache>0 );
1353           pParse->disableColCache--;
1354           sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
1355           sqlite3ExprCacheAffinityChange(pParse, r3, 1);
1356           sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
1357         }
1358         sqlite3ReleaseTempReg(pParse, r1);
1359         sqlite3ReleaseTempReg(pParse, r2);
1360       }
1361       sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
1362       break;
1363     }
1364 
1365     case TK_EXISTS:
1366     case TK_SELECT: {
1367       /* This has to be a scalar SELECT.  Generate code to put the
1368       ** value of this select in a memory cell and record the number
1369       ** of the memory cell in iColumn.
1370       */
1371       static const Token one = { (u8*)"1", 0, 1 };
1372       Select *pSel;
1373       SelectDest dest;
1374 
1375       pSel = pExpr->pSelect;
1376       sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
1377       if( pExpr->op==TK_SELECT ){
1378         dest.eDest = SRT_Mem;
1379         sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm);
1380         VdbeComment((v, "Init subquery result"));
1381       }else{
1382         dest.eDest = SRT_Exists;
1383         sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm);
1384         VdbeComment((v, "Init EXISTS result"));
1385       }
1386       sqlite3ExprDelete(pParse->db, pSel->pLimit);
1387       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &one);
1388       if( sqlite3Select(pParse, pSel, &dest) ){
1389         return;
1390       }
1391       pExpr->iColumn = dest.iParm;
1392       break;
1393     }
1394   }
1395 
1396   if( testAddr ){
1397     sqlite3VdbeJumpHere(v, testAddr-1);
1398   }
1399 
1400   return;
1401 }
1402 #endif /* SQLITE_OMIT_SUBQUERY */
1403 
1404 /*
1405 ** Duplicate an 8-byte value
1406 */
1407 static char *dup8bytes(Vdbe *v, const char *in){
1408   char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
1409   if( out ){
1410     memcpy(out, in, 8);
1411   }
1412   return out;
1413 }
1414 
1415 /*
1416 ** Generate an instruction that will put the floating point
1417 ** value described by z[0..n-1] into register iMem.
1418 **
1419 ** The z[] string will probably not be zero-terminated.  But the
1420 ** z[n] character is guaranteed to be something that does not look
1421 ** like the continuation of the number.
1422 */
1423 static void codeReal(Vdbe *v, const char *z, int n, int negateFlag, int iMem){
1424   assert( z || v==0 || sqlite3VdbeDb(v)->mallocFailed );
1425   if( z ){
1426     double value;
1427     char *zV;
1428     assert( !isdigit(z[n]) );
1429     sqlite3AtoF(z, &value);
1430     if( sqlite3IsNaN(value) ){
1431       sqlite3VdbeAddOp2(v, OP_Null, 0, iMem);
1432     }else{
1433       if( negateFlag ) value = -value;
1434       zV = dup8bytes(v, (char*)&value);
1435       sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
1436     }
1437   }
1438 }
1439 
1440 
1441 /*
1442 ** Generate an instruction that will put the integer describe by
1443 ** text z[0..n-1] into register iMem.
1444 **
1445 ** The z[] string will probably not be zero-terminated.  But the
1446 ** z[n] character is guaranteed to be something that does not look
1447 ** like the continuation of the number.
1448 */
1449 static void codeInteger(Vdbe *v, Expr *pExpr, int negFlag, int iMem){
1450   const char *z;
1451   if( pExpr->flags & EP_IntValue ){
1452     int i = pExpr->iTable;
1453     if( negFlag ) i = -i;
1454     sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
1455   }else if( (z = (char*)pExpr->token.z)!=0 ){
1456     int i;
1457     int n = pExpr->token.n;
1458     assert( !isdigit(z[n]) );
1459     if( sqlite3GetInt32(z, &i) ){
1460       if( negFlag ) i = -i;
1461       sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
1462     }else if( sqlite3FitsIn64Bits(z, negFlag) ){
1463       i64 value;
1464       char *zV;
1465       sqlite3Atoi64(z, &value);
1466       if( negFlag ) value = -value;
1467       zV = dup8bytes(v, (char*)&value);
1468       sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
1469     }else{
1470       codeReal(v, z, n, negFlag, iMem);
1471     }
1472   }
1473 }
1474 
1475 
1476 /*
1477 ** Generate code that will extract the iColumn-th column from
1478 ** table pTab and store the column value in a register.  An effort
1479 ** is made to store the column value in register iReg, but this is
1480 ** not guaranteed.  The location of the column value is returned.
1481 **
1482 ** There must be an open cursor to pTab in iTable when this routine
1483 ** is called.  If iColumn<0 then code is generated that extracts the rowid.
1484 **
1485 ** This routine might attempt to reuse the value of the column that
1486 ** has already been loaded into a register.  The value will always
1487 ** be used if it has not undergone any affinity changes.  But if
1488 ** an affinity change has occurred, then the cached value will only be
1489 ** used if allowAffChng is true.
1490 */
1491 int sqlite3ExprCodeGetColumn(
1492   Parse *pParse,   /* Parsing and code generating context */
1493   Table *pTab,     /* Description of the table we are reading from */
1494   int iColumn,     /* Index of the table column */
1495   int iTable,      /* The cursor pointing to the table */
1496   int iReg,        /* Store results here */
1497   int allowAffChng /* True if prior affinity changes are OK */
1498 ){
1499   Vdbe *v = pParse->pVdbe;
1500   int i;
1501   struct yColCache *p;
1502 
1503   for(i=0, p=pParse->aColCache; i<pParse->nColCache; i++, p++){
1504     if( p->iTable==iTable && p->iColumn==iColumn
1505            && (!p->affChange || allowAffChng) ){
1506 #if 0
1507       sqlite3VdbeAddOp0(v, OP_Noop);
1508       VdbeComment((v, "OPT: tab%d.col%d -> r%d", iTable, iColumn, p->iReg));
1509 #endif
1510       return p->iReg;
1511     }
1512   }
1513   assert( v!=0 );
1514   if( iColumn<0 ){
1515     int op = (pTab && IsVirtual(pTab)) ? OP_VRowid : OP_Rowid;
1516     sqlite3VdbeAddOp2(v, op, iTable, iReg);
1517   }else if( pTab==0 ){
1518     sqlite3VdbeAddOp3(v, OP_Column, iTable, iColumn, iReg);
1519   }else{
1520     int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
1521     sqlite3VdbeAddOp3(v, op, iTable, iColumn, iReg);
1522     sqlite3ColumnDefault(v, pTab, iColumn);
1523 #ifndef SQLITE_OMIT_FLOATING_POINT
1524     if( pTab->aCol[iColumn].affinity==SQLITE_AFF_REAL ){
1525       sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
1526     }
1527 #endif
1528   }
1529   if( pParse->disableColCache==0 ){
1530     i = pParse->iColCache;
1531     p = &pParse->aColCache[i];
1532     p->iTable = iTable;
1533     p->iColumn = iColumn;
1534     p->iReg = iReg;
1535     p->affChange = 0;
1536     i++;
1537     if( i>=ArraySize(pParse->aColCache) ) i = 0;
1538     if( i>pParse->nColCache ) pParse->nColCache = i;
1539     pParse->iColCache = i;
1540   }
1541   return iReg;
1542 }
1543 
1544 /*
1545 ** Clear all column cache entries associated with the vdbe
1546 ** cursor with cursor number iTable.
1547 */
1548 void sqlite3ExprClearColumnCache(Parse *pParse, int iTable){
1549   if( iTable<0 ){
1550     pParse->nColCache = 0;
1551     pParse->iColCache = 0;
1552   }else{
1553     int i;
1554     for(i=0; i<pParse->nColCache; i++){
1555       if( pParse->aColCache[i].iTable==iTable ){
1556         testcase( i==pParse->nColCache-1 );
1557         pParse->aColCache[i] = pParse->aColCache[--pParse->nColCache];
1558         pParse->iColCache = pParse->nColCache;
1559       }
1560     }
1561   }
1562 }
1563 
1564 /*
1565 ** Record the fact that an affinity change has occurred on iCount
1566 ** registers starting with iStart.
1567 */
1568 void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
1569   int iEnd = iStart + iCount - 1;
1570   int i;
1571   for(i=0; i<pParse->nColCache; i++){
1572     int r = pParse->aColCache[i].iReg;
1573     if( r>=iStart && r<=iEnd ){
1574       pParse->aColCache[i].affChange = 1;
1575     }
1576   }
1577 }
1578 
1579 /*
1580 ** Generate code to move content from registers iFrom...iFrom+nReg-1
1581 ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
1582 */
1583 void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
1584   int i;
1585   if( iFrom==iTo ) return;
1586   sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
1587   for(i=0; i<pParse->nColCache; i++){
1588     int x = pParse->aColCache[i].iReg;
1589     if( x>=iFrom && x<iFrom+nReg ){
1590       pParse->aColCache[i].iReg += iTo-iFrom;
1591     }
1592   }
1593 }
1594 
1595 /*
1596 ** Generate code to copy content from registers iFrom...iFrom+nReg-1
1597 ** over to iTo..iTo+nReg-1.
1598 */
1599 void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){
1600   int i;
1601   if( iFrom==iTo ) return;
1602   for(i=0; i<nReg; i++){
1603     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, iFrom+i, iTo+i);
1604   }
1605 }
1606 
1607 /*
1608 ** Return true if any register in the range iFrom..iTo (inclusive)
1609 ** is used as part of the column cache.
1610 */
1611 static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
1612   int i;
1613   for(i=0; i<pParse->nColCache; i++){
1614     int r = pParse->aColCache[i].iReg;
1615     if( r>=iFrom && r<=iTo ) return 1;
1616   }
1617   return 0;
1618 }
1619 
1620 /*
1621 ** Theres is a value in register iCurrent.  We ultimately want
1622 ** the value to be in register iTarget.  It might be that
1623 ** iCurrent and iTarget are the same register.
1624 **
1625 ** We are going to modify the value, so we need to make sure it
1626 ** is not a cached register.  If iCurrent is a cached register,
1627 ** then try to move the value over to iTarget.  If iTarget is a
1628 ** cached register, then clear the corresponding cache line.
1629 **
1630 ** Return the register that the value ends up in.
1631 */
1632 int sqlite3ExprWritableRegister(Parse *pParse, int iCurrent, int iTarget){
1633   int i;
1634   assert( pParse->pVdbe!=0 );
1635   if( !usedAsColumnCache(pParse, iCurrent, iCurrent) ){
1636     return iCurrent;
1637   }
1638   if( iCurrent!=iTarget ){
1639     sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, iCurrent, iTarget);
1640   }
1641   for(i=0; i<pParse->nColCache; i++){
1642     if( pParse->aColCache[i].iReg==iTarget ){
1643       pParse->aColCache[i] = pParse->aColCache[--pParse->nColCache];
1644       pParse->iColCache = pParse->nColCache;
1645     }
1646   }
1647   return iTarget;
1648 }
1649 
1650 /*
1651 ** If the last instruction coded is an ephemeral copy of any of
1652 ** the registers in the nReg registers beginning with iReg, then
1653 ** convert the last instruction from OP_SCopy to OP_Copy.
1654 */
1655 void sqlite3ExprHardCopy(Parse *pParse, int iReg, int nReg){
1656   int addr;
1657   VdbeOp *pOp;
1658   Vdbe *v;
1659 
1660   v = pParse->pVdbe;
1661   addr = sqlite3VdbeCurrentAddr(v);
1662   pOp = sqlite3VdbeGetOp(v, addr-1);
1663   assert( pOp || pParse->db->mallocFailed );
1664   if( pOp && pOp->opcode==OP_SCopy && pOp->p1>=iReg && pOp->p1<iReg+nReg ){
1665     pOp->opcode = OP_Copy;
1666   }
1667 }
1668 
1669 /*
1670 ** Generate code to store the value of the iAlias-th alias in register
1671 ** target.  The first time this is called, pExpr is evaluated to compute
1672 ** the value of the alias.  The value is stored in an auxiliary register
1673 ** and the number of that register is returned.  On subsequent calls,
1674 ** the register number is returned without generating any code.
1675 **
1676 ** Note that in order for this to work, code must be generated in the
1677 ** same order that it is executed.
1678 **
1679 ** Aliases are numbered starting with 1.  So iAlias is in the range
1680 ** of 1 to pParse->nAlias inclusive.
1681 **
1682 ** pParse->aAlias[iAlias-1] records the register number where the value
1683 ** of the iAlias-th alias is stored.  If zero, that means that the
1684 ** alias has not yet been computed.
1685 */
1686 static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr){
1687   sqlite3 *db = pParse->db;
1688   int iReg;
1689   if( pParse->aAlias==0 ){
1690     pParse->aAlias = sqlite3DbMallocZero(db,
1691                                  sizeof(pParse->aAlias[0])*pParse->nAlias );
1692     if( db->mallocFailed ) return 0;
1693   }
1694   assert( iAlias>0 && iAlias<=pParse->nAlias );
1695   iReg = pParse->aAlias[iAlias-1];
1696   if( iReg==0 ){
1697     iReg = ++pParse->nMem;
1698     sqlite3ExprCode(pParse, pExpr, iReg);
1699     pParse->aAlias[iAlias-1] = iReg;
1700   }
1701   return iReg;
1702 }
1703 
1704 /*
1705 ** Generate code into the current Vdbe to evaluate the given
1706 ** expression.  Attempt to store the results in register "target".
1707 ** Return the register where results are stored.
1708 **
1709 ** With this routine, there is no guarantee that results will
1710 ** be stored in target.  The result might be stored in some other
1711 ** register if it is convenient to do so.  The calling function
1712 ** must check the return code and move the results to the desired
1713 ** register.
1714 */
1715 int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
1716   Vdbe *v = pParse->pVdbe;  /* The VM under construction */
1717   int op;                   /* The opcode being coded */
1718   int inReg = target;       /* Results stored in register inReg */
1719   int regFree1 = 0;         /* If non-zero free this temporary register */
1720   int regFree2 = 0;         /* If non-zero free this temporary register */
1721   int r1, r2, r3, r4;       /* Various register numbers */
1722   sqlite3 *db;
1723 
1724   db = pParse->db;
1725   assert( v!=0 || db->mallocFailed );
1726   assert( target>0 && target<=pParse->nMem );
1727   if( v==0 ) return 0;
1728 
1729   if( pExpr==0 ){
1730     op = TK_NULL;
1731   }else{
1732     op = pExpr->op;
1733   }
1734   switch( op ){
1735     case TK_AGG_COLUMN: {
1736       AggInfo *pAggInfo = pExpr->pAggInfo;
1737       struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
1738       if( !pAggInfo->directMode ){
1739         assert( pCol->iMem>0 );
1740         inReg = pCol->iMem;
1741         break;
1742       }else if( pAggInfo->useSortingIdx ){
1743         sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdx,
1744                               pCol->iSorterColumn, target);
1745         break;
1746       }
1747       /* Otherwise, fall thru into the TK_COLUMN case */
1748     }
1749     case TK_COLUMN: {
1750       if( pExpr->iTable<0 ){
1751         /* This only happens when coding check constraints */
1752         assert( pParse->ckBase>0 );
1753         inReg = pExpr->iColumn + pParse->ckBase;
1754       }else{
1755         testcase( (pExpr->flags & EP_AnyAff)!=0 );
1756         inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
1757                                  pExpr->iColumn, pExpr->iTable, target,
1758                                  pExpr->flags & EP_AnyAff);
1759       }
1760       break;
1761     }
1762     case TK_INTEGER: {
1763       codeInteger(v, pExpr, 0, target);
1764       break;
1765     }
1766     case TK_FLOAT: {
1767       codeReal(v, (char*)pExpr->token.z, pExpr->token.n, 0, target);
1768       break;
1769     }
1770     case TK_STRING: {
1771       sqlite3DequoteExpr(db, pExpr);
1772       sqlite3VdbeAddOp4(v,OP_String8, 0, target, 0,
1773                         (char*)pExpr->token.z, pExpr->token.n);
1774       break;
1775     }
1776     case TK_NULL: {
1777       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
1778       break;
1779     }
1780 #ifndef SQLITE_OMIT_BLOB_LITERAL
1781     case TK_BLOB: {
1782       int n;
1783       const char *z;
1784       char *zBlob;
1785       assert( pExpr->token.n>=3 );
1786       assert( pExpr->token.z[0]=='x' || pExpr->token.z[0]=='X' );
1787       assert( pExpr->token.z[1]=='\'' );
1788       assert( pExpr->token.z[pExpr->token.n-1]=='\'' );
1789       n = pExpr->token.n - 3;
1790       z = (char*)pExpr->token.z + 2;
1791       zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
1792       sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
1793       break;
1794     }
1795 #endif
1796     case TK_VARIABLE: {
1797       sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iTable, target);
1798       if( pExpr->token.n>1 ){
1799         sqlite3VdbeChangeP4(v, -1, (char*)pExpr->token.z, pExpr->token.n);
1800       }
1801       break;
1802     }
1803     case TK_REGISTER: {
1804       inReg = pExpr->iTable;
1805       break;
1806     }
1807     case TK_AS: {
1808       inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft);
1809       break;
1810     }
1811 #ifndef SQLITE_OMIT_CAST
1812     case TK_CAST: {
1813       /* Expressions of the form:   CAST(pLeft AS token) */
1814       int aff, to_op;
1815       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
1816       aff = sqlite3AffinityType(&pExpr->token);
1817       to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
1818       assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );
1819       assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );
1820       assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
1821       assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );
1822       assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );
1823       testcase( to_op==OP_ToText );
1824       testcase( to_op==OP_ToBlob );
1825       testcase( to_op==OP_ToNumeric );
1826       testcase( to_op==OP_ToInt );
1827       testcase( to_op==OP_ToReal );
1828       sqlite3VdbeAddOp1(v, to_op, inReg);
1829       testcase( usedAsColumnCache(pParse, inReg, inReg) );
1830       sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
1831       break;
1832     }
1833 #endif /* SQLITE_OMIT_CAST */
1834     case TK_LT:
1835     case TK_LE:
1836     case TK_GT:
1837     case TK_GE:
1838     case TK_NE:
1839     case TK_EQ: {
1840       assert( TK_LT==OP_Lt );
1841       assert( TK_LE==OP_Le );
1842       assert( TK_GT==OP_Gt );
1843       assert( TK_GE==OP_Ge );
1844       assert( TK_EQ==OP_Eq );
1845       assert( TK_NE==OP_Ne );
1846       testcase( op==TK_LT );
1847       testcase( op==TK_LE );
1848       testcase( op==TK_GT );
1849       testcase( op==TK_GE );
1850       testcase( op==TK_EQ );
1851       testcase( op==TK_NE );
1852       codeCompareOperands(pParse, pExpr->pLeft, &r1, &regFree1,
1853                                   pExpr->pRight, &r2, &regFree2);
1854       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
1855                   r1, r2, inReg, SQLITE_STOREP2);
1856       testcase( regFree1==0 );
1857       testcase( regFree2==0 );
1858       break;
1859     }
1860     case TK_AND:
1861     case TK_OR:
1862     case TK_PLUS:
1863     case TK_STAR:
1864     case TK_MINUS:
1865     case TK_REM:
1866     case TK_BITAND:
1867     case TK_BITOR:
1868     case TK_SLASH:
1869     case TK_LSHIFT:
1870     case TK_RSHIFT:
1871     case TK_CONCAT: {
1872       assert( TK_AND==OP_And );
1873       assert( TK_OR==OP_Or );
1874       assert( TK_PLUS==OP_Add );
1875       assert( TK_MINUS==OP_Subtract );
1876       assert( TK_REM==OP_Remainder );
1877       assert( TK_BITAND==OP_BitAnd );
1878       assert( TK_BITOR==OP_BitOr );
1879       assert( TK_SLASH==OP_Divide );
1880       assert( TK_LSHIFT==OP_ShiftLeft );
1881       assert( TK_RSHIFT==OP_ShiftRight );
1882       assert( TK_CONCAT==OP_Concat );
1883       testcase( op==TK_AND );
1884       testcase( op==TK_OR );
1885       testcase( op==TK_PLUS );
1886       testcase( op==TK_MINUS );
1887       testcase( op==TK_REM );
1888       testcase( op==TK_BITAND );
1889       testcase( op==TK_BITOR );
1890       testcase( op==TK_SLASH );
1891       testcase( op==TK_LSHIFT );
1892       testcase( op==TK_RSHIFT );
1893       testcase( op==TK_CONCAT );
1894       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
1895       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
1896       sqlite3VdbeAddOp3(v, op, r2, r1, target);
1897       testcase( regFree1==0 );
1898       testcase( regFree2==0 );
1899       break;
1900     }
1901     case TK_UMINUS: {
1902       Expr *pLeft = pExpr->pLeft;
1903       assert( pLeft );
1904       if( pLeft->op==TK_FLOAT || pLeft->op==TK_INTEGER ){
1905         if( pLeft->op==TK_FLOAT ){
1906           codeReal(v, (char*)pLeft->token.z, pLeft->token.n, 1, target);
1907         }else{
1908           codeInteger(v, pLeft, 1, target);
1909         }
1910       }else{
1911         regFree1 = r1 = sqlite3GetTempReg(pParse);
1912         sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
1913         r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
1914         sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
1915         testcase( regFree2==0 );
1916       }
1917       inReg = target;
1918       break;
1919     }
1920     case TK_BITNOT:
1921     case TK_NOT: {
1922       assert( TK_BITNOT==OP_BitNot );
1923       assert( TK_NOT==OP_Not );
1924       testcase( op==TK_BITNOT );
1925       testcase( op==TK_NOT );
1926       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
1927       testcase( inReg==target );
1928       testcase( usedAsColumnCache(pParse, inReg, inReg) );
1929       inReg = sqlite3ExprWritableRegister(pParse, inReg, target);
1930       sqlite3VdbeAddOp1(v, op, inReg);
1931       break;
1932     }
1933     case TK_ISNULL:
1934     case TK_NOTNULL: {
1935       int addr;
1936       assert( TK_ISNULL==OP_IsNull );
1937       assert( TK_NOTNULL==OP_NotNull );
1938       testcase( op==TK_ISNULL );
1939       testcase( op==TK_NOTNULL );
1940       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
1941       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
1942       testcase( regFree1==0 );
1943       addr = sqlite3VdbeAddOp1(v, op, r1);
1944       sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
1945       sqlite3VdbeJumpHere(v, addr);
1946       break;
1947     }
1948     case TK_AGG_FUNCTION: {
1949       AggInfo *pInfo = pExpr->pAggInfo;
1950       if( pInfo==0 ){
1951         sqlite3ErrorMsg(pParse, "misuse of aggregate: %T",
1952             &pExpr->span);
1953       }else{
1954         inReg = pInfo->aFunc[pExpr->iAgg].iMem;
1955       }
1956       break;
1957     }
1958     case TK_CONST_FUNC:
1959     case TK_FUNCTION: {
1960       ExprList *pList = pExpr->pList;
1961       int nExpr = pList ? pList->nExpr : 0;
1962       FuncDef *pDef;
1963       int nId;
1964       const char *zId;
1965       int constMask = 0;
1966       int i;
1967       u8 enc = ENC(db);
1968       CollSeq *pColl = 0;
1969 
1970       testcase( op==TK_CONST_FUNC );
1971       testcase( op==TK_FUNCTION );
1972       zId = (char*)pExpr->token.z;
1973       nId = pExpr->token.n;
1974       pDef = sqlite3FindFunction(db, zId, nId, nExpr, enc, 0);
1975       assert( pDef!=0 );
1976       if( pList ){
1977         nExpr = pList->nExpr;
1978         r1 = sqlite3GetTempRange(pParse, nExpr);
1979         sqlite3ExprCodeExprList(pParse, pList, r1, 1);
1980       }else{
1981         nExpr = r1 = 0;
1982       }
1983 #ifndef SQLITE_OMIT_VIRTUALTABLE
1984       /* Possibly overload the function if the first argument is
1985       ** a virtual table column.
1986       **
1987       ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
1988       ** second argument, not the first, as the argument to test to
1989       ** see if it is a column in a virtual table.  This is done because
1990       ** the left operand of infix functions (the operand we want to
1991       ** control overloading) ends up as the second argument to the
1992       ** function.  The expression "A glob B" is equivalent to
1993       ** "glob(B,A).  We want to use the A in "A glob B" to test
1994       ** for function overloading.  But we use the B term in "glob(B,A)".
1995       */
1996       if( nExpr>=2 && (pExpr->flags & EP_InfixFunc) ){
1997         pDef = sqlite3VtabOverloadFunction(db, pDef, nExpr, pList->a[1].pExpr);
1998       }else if( nExpr>0 ){
1999         pDef = sqlite3VtabOverloadFunction(db, pDef, nExpr, pList->a[0].pExpr);
2000       }
2001 #endif
2002       for(i=0; i<nExpr && i<32; i++){
2003         if( sqlite3ExprIsConstant(pList->a[i].pExpr) ){
2004           constMask |= (1<<i);
2005         }
2006         if( pDef->needCollSeq && !pColl ){
2007           pColl = sqlite3ExprCollSeq(pParse, pList->a[i].pExpr);
2008         }
2009       }
2010       if( pDef->needCollSeq ){
2011         if( !pColl ) pColl = db->pDfltColl;
2012         sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
2013       }
2014       sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
2015                         (char*)pDef, P4_FUNCDEF);
2016       sqlite3VdbeChangeP5(v, nExpr);
2017       if( nExpr ){
2018         sqlite3ReleaseTempRange(pParse, r1, nExpr);
2019       }
2020       sqlite3ExprCacheAffinityChange(pParse, r1, nExpr);
2021       break;
2022     }
2023 #ifndef SQLITE_OMIT_SUBQUERY
2024     case TK_EXISTS:
2025     case TK_SELECT: {
2026       testcase( op==TK_EXISTS );
2027       testcase( op==TK_SELECT );
2028       if( pExpr->iColumn==0 ){
2029         sqlite3CodeSubselect(pParse, pExpr, 0);
2030       }
2031       inReg = pExpr->iColumn;
2032       break;
2033     }
2034     case TK_IN: {
2035       int rNotFound = 0;
2036       int rMayHaveNull = 0;
2037       int j2, j3, j4, j5;
2038       char affinity;
2039       int eType;
2040 
2041       VdbeNoopComment((v, "begin IN expr r%d", target));
2042       eType = sqlite3FindInIndex(pParse, pExpr, &rMayHaveNull);
2043       if( rMayHaveNull ){
2044         rNotFound = ++pParse->nMem;
2045       }
2046 
2047       /* Figure out the affinity to use to create a key from the results
2048       ** of the expression. affinityStr stores a static string suitable for
2049       ** P4 of OP_MakeRecord.
2050       */
2051       affinity = comparisonAffinity(pExpr);
2052 
2053 
2054       /* Code the <expr> from "<expr> IN (...)". The temporary table
2055       ** pExpr->iTable contains the values that make up the (...) set.
2056       */
2057       pParse->disableColCache++;
2058       sqlite3ExprCode(pParse, pExpr->pLeft, target);
2059       pParse->disableColCache--;
2060       j2 = sqlite3VdbeAddOp1(v, OP_IsNull, target);
2061       if( eType==IN_INDEX_ROWID ){
2062         j3 = sqlite3VdbeAddOp1(v, OP_MustBeInt, target);
2063         j4 = sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, 0, target);
2064         sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
2065         j5 = sqlite3VdbeAddOp0(v, OP_Goto);
2066         sqlite3VdbeJumpHere(v, j3);
2067         sqlite3VdbeJumpHere(v, j4);
2068         sqlite3VdbeAddOp2(v, OP_Integer, 0, target);
2069       }else{
2070         r2 = regFree2 = sqlite3GetTempReg(pParse);
2071 
2072         /* Create a record and test for set membership. If the set contains
2073         ** the value, then jump to the end of the test code. The target
2074         ** register still contains the true (1) value written to it earlier.
2075         */
2076         sqlite3VdbeAddOp4(v, OP_MakeRecord, target, 1, r2, &affinity, 1);
2077         sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
2078         j5 = sqlite3VdbeAddOp3(v, OP_Found, pExpr->iTable, 0, r2);
2079 
2080         /* If the set membership test fails, then the result of the
2081         ** "x IN (...)" expression must be either 0 or NULL. If the set
2082         ** contains no NULL values, then the result is 0. If the set
2083         ** contains one or more NULL values, then the result of the
2084         ** expression is also NULL.
2085         */
2086         if( rNotFound==0 ){
2087           /* This branch runs if it is known at compile time (now) that
2088           ** the set contains no NULL values. This happens as the result
2089           ** of a "NOT NULL" constraint in the database schema. No need
2090           ** to test the data structure at runtime in this case.
2091           */
2092           sqlite3VdbeAddOp2(v, OP_Integer, 0, target);
2093         }else{
2094           /* This block populates the rNotFound register with either NULL
2095           ** or 0 (an integer value). If the data structure contains one
2096           ** or more NULLs, then set rNotFound to NULL. Otherwise, set it
2097           ** to 0. If register rMayHaveNull is already set to some value
2098           ** other than NULL, then the test has already been run and
2099           ** rNotFound is already populated.
2100           */
2101           static const char nullRecord[] = { 0x02, 0x00 };
2102           j3 = sqlite3VdbeAddOp1(v, OP_NotNull, rMayHaveNull);
2103           sqlite3VdbeAddOp2(v, OP_Null, 0, rNotFound);
2104           sqlite3VdbeAddOp4(v, OP_Blob, 2, rMayHaveNull, 0,
2105                              nullRecord, P4_STATIC);
2106           j4 = sqlite3VdbeAddOp3(v, OP_Found, pExpr->iTable, 0, rMayHaveNull);
2107           sqlite3VdbeAddOp2(v, OP_Integer, 0, rNotFound);
2108           sqlite3VdbeJumpHere(v, j4);
2109           sqlite3VdbeJumpHere(v, j3);
2110 
2111           /* Copy the value of register rNotFound (which is either NULL or 0)
2112 	  ** into the target register. This will be the result of the
2113           ** expression.
2114           */
2115           sqlite3VdbeAddOp2(v, OP_Copy, rNotFound, target);
2116         }
2117       }
2118       sqlite3VdbeJumpHere(v, j2);
2119       sqlite3VdbeJumpHere(v, j5);
2120       VdbeComment((v, "end IN expr r%d", target));
2121       break;
2122     }
2123 #endif
2124     /*
2125     **    x BETWEEN y AND z
2126     **
2127     ** This is equivalent to
2128     **
2129     **    x>=y AND x<=z
2130     **
2131     ** X is stored in pExpr->pLeft.
2132     ** Y is stored in pExpr->pList->a[0].pExpr.
2133     ** Z is stored in pExpr->pList->a[1].pExpr.
2134     */
2135     case TK_BETWEEN: {
2136       Expr *pLeft = pExpr->pLeft;
2137       struct ExprList_item *pLItem = pExpr->pList->a;
2138       Expr *pRight = pLItem->pExpr;
2139 
2140       codeCompareOperands(pParse, pLeft, &r1, &regFree1,
2141                                   pRight, &r2, &regFree2);
2142       testcase( regFree1==0 );
2143       testcase( regFree2==0 );
2144       r3 = sqlite3GetTempReg(pParse);
2145       r4 = sqlite3GetTempReg(pParse);
2146       codeCompare(pParse, pLeft, pRight, OP_Ge,
2147                   r1, r2, r3, SQLITE_STOREP2);
2148       pLItem++;
2149       pRight = pLItem->pExpr;
2150       sqlite3ReleaseTempReg(pParse, regFree2);
2151       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
2152       testcase( regFree2==0 );
2153       codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
2154       sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
2155       sqlite3ReleaseTempReg(pParse, r3);
2156       sqlite3ReleaseTempReg(pParse, r4);
2157       break;
2158     }
2159     case TK_UPLUS: {
2160       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
2161       break;
2162     }
2163 
2164     /*
2165     ** Form A:
2166     **   CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
2167     **
2168     ** Form B:
2169     **   CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
2170     **
2171     ** Form A is can be transformed into the equivalent form B as follows:
2172     **   CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
2173     **        WHEN x=eN THEN rN ELSE y END
2174     **
2175     ** X (if it exists) is in pExpr->pLeft.
2176     ** Y is in pExpr->pRight.  The Y is also optional.  If there is no
2177     ** ELSE clause and no other term matches, then the result of the
2178     ** exprssion is NULL.
2179     ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
2180     **
2181     ** The result of the expression is the Ri for the first matching Ei,
2182     ** or if there is no matching Ei, the ELSE term Y, or if there is
2183     ** no ELSE term, NULL.
2184     */
2185     case TK_CASE: {
2186       int endLabel;                     /* GOTO label for end of CASE stmt */
2187       int nextCase;                     /* GOTO label for next WHEN clause */
2188       int nExpr;                        /* 2x number of WHEN terms */
2189       int i;                            /* Loop counter */
2190       ExprList *pEList;                 /* List of WHEN terms */
2191       struct ExprList_item *aListelem;  /* Array of WHEN terms */
2192       Expr opCompare;                   /* The X==Ei expression */
2193       Expr cacheX;                      /* Cached expression X */
2194       Expr *pX;                         /* The X expression */
2195       Expr *pTest;                      /* X==Ei (form A) or just Ei (form B) */
2196 
2197       assert(pExpr->pList);
2198       assert((pExpr->pList->nExpr % 2) == 0);
2199       assert(pExpr->pList->nExpr > 0);
2200       pEList = pExpr->pList;
2201       aListelem = pEList->a;
2202       nExpr = pEList->nExpr;
2203       endLabel = sqlite3VdbeMakeLabel(v);
2204       if( (pX = pExpr->pLeft)!=0 ){
2205         cacheX = *pX;
2206         testcase( pX->op==TK_COLUMN || pX->op==TK_REGISTER );
2207         cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
2208         testcase( regFree1==0 );
2209         cacheX.op = TK_REGISTER;
2210         opCompare.op = TK_EQ;
2211         opCompare.pLeft = &cacheX;
2212         pTest = &opCompare;
2213       }
2214       pParse->disableColCache++;
2215       for(i=0; i<nExpr; i=i+2){
2216         if( pX ){
2217           opCompare.pRight = aListelem[i].pExpr;
2218         }else{
2219           pTest = aListelem[i].pExpr;
2220         }
2221         nextCase = sqlite3VdbeMakeLabel(v);
2222         testcase( pTest->op==TK_COLUMN || pTest->op==TK_REGISTER );
2223         sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
2224         testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
2225         testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
2226         sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
2227         sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
2228         sqlite3VdbeResolveLabel(v, nextCase);
2229       }
2230       if( pExpr->pRight ){
2231         sqlite3ExprCode(pParse, pExpr->pRight, target);
2232       }else{
2233         sqlite3VdbeAddOp2(v, OP_Null, 0, target);
2234       }
2235       sqlite3VdbeResolveLabel(v, endLabel);
2236       assert( pParse->disableColCache>0 );
2237       pParse->disableColCache--;
2238       break;
2239     }
2240 #ifndef SQLITE_OMIT_TRIGGER
2241     case TK_RAISE: {
2242       if( !pParse->trigStack ){
2243         sqlite3ErrorMsg(pParse,
2244                        "RAISE() may only be used within a trigger-program");
2245         return 0;
2246       }
2247       if( pExpr->iColumn!=OE_Ignore ){
2248          assert( pExpr->iColumn==OE_Rollback ||
2249                  pExpr->iColumn == OE_Abort ||
2250                  pExpr->iColumn == OE_Fail );
2251          sqlite3DequoteExpr(db, pExpr);
2252          sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn, 0,
2253                         (char*)pExpr->token.z, pExpr->token.n);
2254       } else {
2255          assert( pExpr->iColumn == OE_Ignore );
2256          sqlite3VdbeAddOp2(v, OP_ContextPop, 0, 0);
2257          sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->trigStack->ignoreJump);
2258          VdbeComment((v, "raise(IGNORE)"));
2259       }
2260       break;
2261     }
2262 #endif
2263   }
2264   sqlite3ReleaseTempReg(pParse, regFree1);
2265   sqlite3ReleaseTempReg(pParse, regFree2);
2266   return inReg;
2267 }
2268 
2269 /*
2270 ** Generate code to evaluate an expression and store the results
2271 ** into a register.  Return the register number where the results
2272 ** are stored.
2273 **
2274 ** If the register is a temporary register that can be deallocated,
2275 ** then write its number into *pReg.  If the result register is not
2276 ** a temporary, then set *pReg to zero.
2277 */
2278 int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
2279   int r1 = sqlite3GetTempReg(pParse);
2280   int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
2281   if( r2==r1 ){
2282     *pReg = r1;
2283   }else{
2284     sqlite3ReleaseTempReg(pParse, r1);
2285     *pReg = 0;
2286   }
2287   return r2;
2288 }
2289 
2290 /*
2291 ** Generate code that will evaluate expression pExpr and store the
2292 ** results in register target.  The results are guaranteed to appear
2293 ** in register target.
2294 */
2295 int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
2296   int inReg;
2297 
2298   assert( target>0 && target<=pParse->nMem );
2299   inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
2300   assert( pParse->pVdbe || pParse->db->mallocFailed );
2301   if( inReg!=target && pParse->pVdbe ){
2302     sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
2303   }
2304   return target;
2305 }
2306 
2307 /*
2308 ** Generate code that evalutes the given expression and puts the result
2309 ** in register target.
2310 **
2311 ** Also make a copy of the expression results into another "cache" register
2312 ** and modify the expression so that the next time it is evaluated,
2313 ** the result is a copy of the cache register.
2314 **
2315 ** This routine is used for expressions that are used multiple
2316 ** times.  They are evaluated once and the results of the expression
2317 ** are reused.
2318 */
2319 int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
2320   Vdbe *v = pParse->pVdbe;
2321   int inReg;
2322   inReg = sqlite3ExprCode(pParse, pExpr, target);
2323   assert( target>0 );
2324   if( pExpr->op!=TK_REGISTER ){
2325     int iMem;
2326     iMem = ++pParse->nMem;
2327     sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
2328     pExpr->iTable = iMem;
2329     pExpr->op = TK_REGISTER;
2330   }
2331   return inReg;
2332 }
2333 
2334 /*
2335 ** Return TRUE if pExpr is an constant expression that is appropriate
2336 ** for factoring out of a loop.  Appropriate expressions are:
2337 **
2338 **    *  Any expression that evaluates to two or more opcodes.
2339 **
2340 **    *  Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null,
2341 **       or OP_Variable that does not need to be placed in a
2342 **       specific register.
2343 **
2344 ** There is no point in factoring out single-instruction constant
2345 ** expressions that need to be placed in a particular register.
2346 ** We could factor them out, but then we would end up adding an
2347 ** OP_SCopy instruction to move the value into the correct register
2348 ** later.  We might as well just use the original instruction and
2349 ** avoid the OP_SCopy.
2350 */
2351 static int isAppropriateForFactoring(Expr *p){
2352   if( !sqlite3ExprIsConstantNotJoin(p) ){
2353     return 0;  /* Only constant expressions are appropriate for factoring */
2354   }
2355   if( (p->flags & EP_FixedDest)==0 ){
2356     return 1;  /* Any constant without a fixed destination is appropriate */
2357   }
2358   while( p->op==TK_UPLUS ) p = p->pLeft;
2359   switch( p->op ){
2360 #ifndef SQLITE_OMIT_BLOB_LITERAL
2361     case TK_BLOB:
2362 #endif
2363     case TK_VARIABLE:
2364     case TK_INTEGER:
2365     case TK_FLOAT:
2366     case TK_NULL:
2367     case TK_STRING: {
2368       testcase( p->op==TK_BLOB );
2369       testcase( p->op==TK_VARIABLE );
2370       testcase( p->op==TK_INTEGER );
2371       testcase( p->op==TK_FLOAT );
2372       testcase( p->op==TK_NULL );
2373       testcase( p->op==TK_STRING );
2374       /* Single-instruction constants with a fixed destination are
2375       ** better done in-line.  If we factor them, they will just end
2376       ** up generating an OP_SCopy to move the value to the destination
2377       ** register. */
2378       return 0;
2379     }
2380     case TK_UMINUS: {
2381        if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
2382          return 0;
2383        }
2384        break;
2385     }
2386     default: {
2387       break;
2388     }
2389   }
2390   return 1;
2391 }
2392 
2393 /*
2394 ** If pExpr is a constant expression that is appropriate for
2395 ** factoring out of a loop, then evaluate the expression
2396 ** into a register and convert the expression into a TK_REGISTER
2397 ** expression.
2398 */
2399 static int evalConstExpr(Walker *pWalker, Expr *pExpr){
2400   Parse *pParse = pWalker->pParse;
2401   switch( pExpr->op ){
2402     case TK_REGISTER: {
2403       return 1;
2404     }
2405     case TK_FUNCTION:
2406     case TK_AGG_FUNCTION:
2407     case TK_CONST_FUNC: {
2408       /* The arguments to a function have a fixed destination.
2409       ** Mark them this way to avoid generated unneeded OP_SCopy
2410       ** instructions.
2411       */
2412       ExprList *pList = pExpr->pList;
2413       if( pList ){
2414         int i = pList->nExpr;
2415         struct ExprList_item *pItem = pList->a;
2416         for(; i>0; i--, pItem++){
2417           if( pItem->pExpr ) pItem->pExpr->flags |= EP_FixedDest;
2418         }
2419       }
2420       break;
2421     }
2422   }
2423   if( isAppropriateForFactoring(pExpr) ){
2424     int r1 = ++pParse->nMem;
2425     int r2;
2426     r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
2427     if( r1!=r2 ) sqlite3ReleaseTempReg(pParse, r1);
2428     pExpr->op = TK_REGISTER;
2429     pExpr->iTable = r2;
2430     return WRC_Prune;
2431   }
2432   return WRC_Continue;
2433 }
2434 
2435 /*
2436 ** Preevaluate constant subexpressions within pExpr and store the
2437 ** results in registers.  Modify pExpr so that the constant subexpresions
2438 ** are TK_REGISTER opcodes that refer to the precomputed values.
2439 */
2440 void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
2441   Walker w;
2442   w.xExprCallback = evalConstExpr;
2443   w.xSelectCallback = 0;
2444   w.pParse = pParse;
2445   sqlite3WalkExpr(&w, pExpr);
2446 }
2447 
2448 
2449 /*
2450 ** Generate code that pushes the value of every element of the given
2451 ** expression list into a sequence of registers beginning at target.
2452 **
2453 ** Return the number of elements evaluated.
2454 */
2455 int sqlite3ExprCodeExprList(
2456   Parse *pParse,     /* Parsing context */
2457   ExprList *pList,   /* The expression list to be coded */
2458   int target,        /* Where to write results */
2459   int doHardCopy     /* Call sqlite3ExprHardCopy on each element if true */
2460 ){
2461   struct ExprList_item *pItem;
2462   int i, n;
2463   assert( pList!=0 );
2464   assert( target>0 );
2465   n = pList->nExpr;
2466   for(pItem=pList->a, i=0; i<n; i++, pItem++){
2467     if( pItem->iAlias ){
2468       int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr);
2469       Vdbe *v = sqlite3GetVdbe(pParse);
2470       sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i);
2471     }else{
2472       sqlite3ExprCode(pParse, pItem->pExpr, target+i);
2473     }
2474     if( doHardCopy ) sqlite3ExprHardCopy(pParse, target, n);
2475   }
2476   return n;
2477 }
2478 
2479 /*
2480 ** Generate code for a boolean expression such that a jump is made
2481 ** to the label "dest" if the expression is true but execution
2482 ** continues straight thru if the expression is false.
2483 **
2484 ** If the expression evaluates to NULL (neither true nor false), then
2485 ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
2486 **
2487 ** This code depends on the fact that certain token values (ex: TK_EQ)
2488 ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
2489 ** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in
2490 ** the make process cause these values to align.  Assert()s in the code
2491 ** below verify that the numbers are aligned correctly.
2492 */
2493 void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
2494   Vdbe *v = pParse->pVdbe;
2495   int op = 0;
2496   int regFree1 = 0;
2497   int regFree2 = 0;
2498   int r1, r2;
2499 
2500   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
2501   if( v==0 || pExpr==0 ) return;
2502   op = pExpr->op;
2503   switch( op ){
2504     case TK_AND: {
2505       int d2 = sqlite3VdbeMakeLabel(v);
2506       testcase( jumpIfNull==0 );
2507       testcase( pParse->disableColCache==0 );
2508       sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
2509       pParse->disableColCache++;
2510       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
2511       assert( pParse->disableColCache>0 );
2512       pParse->disableColCache--;
2513       sqlite3VdbeResolveLabel(v, d2);
2514       break;
2515     }
2516     case TK_OR: {
2517       testcase( jumpIfNull==0 );
2518       testcase( pParse->disableColCache==0 );
2519       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
2520       pParse->disableColCache++;
2521       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
2522       assert( pParse->disableColCache>0 );
2523       pParse->disableColCache--;
2524       break;
2525     }
2526     case TK_NOT: {
2527       testcase( jumpIfNull==0 );
2528       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
2529       break;
2530     }
2531     case TK_LT:
2532     case TK_LE:
2533     case TK_GT:
2534     case TK_GE:
2535     case TK_NE:
2536     case TK_EQ: {
2537       assert( TK_LT==OP_Lt );
2538       assert( TK_LE==OP_Le );
2539       assert( TK_GT==OP_Gt );
2540       assert( TK_GE==OP_Ge );
2541       assert( TK_EQ==OP_Eq );
2542       assert( TK_NE==OP_Ne );
2543       testcase( op==TK_LT );
2544       testcase( op==TK_LE );
2545       testcase( op==TK_GT );
2546       testcase( op==TK_GE );
2547       testcase( op==TK_EQ );
2548       testcase( op==TK_NE );
2549       testcase( jumpIfNull==0 );
2550       codeCompareOperands(pParse, pExpr->pLeft, &r1, &regFree1,
2551                                   pExpr->pRight, &r2, &regFree2);
2552       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
2553                   r1, r2, dest, jumpIfNull);
2554       testcase( regFree1==0 );
2555       testcase( regFree2==0 );
2556       break;
2557     }
2558     case TK_ISNULL:
2559     case TK_NOTNULL: {
2560       assert( TK_ISNULL==OP_IsNull );
2561       assert( TK_NOTNULL==OP_NotNull );
2562       testcase( op==TK_ISNULL );
2563       testcase( op==TK_NOTNULL );
2564       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2565       sqlite3VdbeAddOp2(v, op, r1, dest);
2566       testcase( regFree1==0 );
2567       break;
2568     }
2569     case TK_BETWEEN: {
2570       /*    x BETWEEN y AND z
2571       **
2572       ** Is equivalent to
2573       **
2574       **    x>=y AND x<=z
2575       **
2576       ** Code it as such, taking care to do the common subexpression
2577       ** elementation of x.
2578       */
2579       Expr exprAnd;
2580       Expr compLeft;
2581       Expr compRight;
2582       Expr exprX;
2583 
2584       exprX = *pExpr->pLeft;
2585       exprAnd.op = TK_AND;
2586       exprAnd.pLeft = &compLeft;
2587       exprAnd.pRight = &compRight;
2588       compLeft.op = TK_GE;
2589       compLeft.pLeft = &exprX;
2590       compLeft.pRight = pExpr->pList->a[0].pExpr;
2591       compRight.op = TK_LE;
2592       compRight.pLeft = &exprX;
2593       compRight.pRight = pExpr->pList->a[1].pExpr;
2594       exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
2595       testcase( regFree1==0 );
2596       exprX.op = TK_REGISTER;
2597       testcase( jumpIfNull==0 );
2598       sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
2599       break;
2600     }
2601     default: {
2602       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
2603       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
2604       testcase( regFree1==0 );
2605       testcase( jumpIfNull==0 );
2606       break;
2607     }
2608   }
2609   sqlite3ReleaseTempReg(pParse, regFree1);
2610   sqlite3ReleaseTempReg(pParse, regFree2);
2611 }
2612 
2613 /*
2614 ** Generate code for a boolean expression such that a jump is made
2615 ** to the label "dest" if the expression is false but execution
2616 ** continues straight thru if the expression is true.
2617 **
2618 ** If the expression evaluates to NULL (neither true nor false) then
2619 ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
2620 ** is 0.
2621 */
2622 void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
2623   Vdbe *v = pParse->pVdbe;
2624   int op = 0;
2625   int regFree1 = 0;
2626   int regFree2 = 0;
2627   int r1, r2;
2628 
2629   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
2630   if( v==0 || pExpr==0 ) return;
2631 
2632   /* The value of pExpr->op and op are related as follows:
2633   **
2634   **       pExpr->op            op
2635   **       ---------          ----------
2636   **       TK_ISNULL          OP_NotNull
2637   **       TK_NOTNULL         OP_IsNull
2638   **       TK_NE              OP_Eq
2639   **       TK_EQ              OP_Ne
2640   **       TK_GT              OP_Le
2641   **       TK_LE              OP_Gt
2642   **       TK_GE              OP_Lt
2643   **       TK_LT              OP_Ge
2644   **
2645   ** For other values of pExpr->op, op is undefined and unused.
2646   ** The value of TK_ and OP_ constants are arranged such that we
2647   ** can compute the mapping above using the following expression.
2648   ** Assert()s verify that the computation is correct.
2649   */
2650   op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
2651 
2652   /* Verify correct alignment of TK_ and OP_ constants
2653   */
2654   assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
2655   assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
2656   assert( pExpr->op!=TK_NE || op==OP_Eq );
2657   assert( pExpr->op!=TK_EQ || op==OP_Ne );
2658   assert( pExpr->op!=TK_LT || op==OP_Ge );
2659   assert( pExpr->op!=TK_LE || op==OP_Gt );
2660   assert( pExpr->op!=TK_GT || op==OP_Le );
2661   assert( pExpr->op!=TK_GE || op==OP_Lt );
2662 
2663   switch( pExpr->op ){
2664     case TK_AND: {
2665       testcase( jumpIfNull==0 );
2666       testcase( pParse->disableColCache==0 );
2667       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
2668       pParse->disableColCache++;
2669       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
2670       assert( pParse->disableColCache>0 );
2671       pParse->disableColCache--;
2672       break;
2673     }
2674     case TK_OR: {
2675       int d2 = sqlite3VdbeMakeLabel(v);
2676       testcase( jumpIfNull==0 );
2677       testcase( pParse->disableColCache==0 );
2678       sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
2679       pParse->disableColCache++;
2680       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
2681       assert( pParse->disableColCache>0 );
2682       pParse->disableColCache--;
2683       sqlite3VdbeResolveLabel(v, d2);
2684       break;
2685     }
2686     case TK_NOT: {
2687       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
2688       break;
2689     }
2690     case TK_LT:
2691     case TK_LE:
2692     case TK_GT:
2693     case TK_GE:
2694     case TK_NE:
2695     case TK_EQ: {
2696       testcase( op==TK_LT );
2697       testcase( op==TK_LE );
2698       testcase( op==TK_GT );
2699       testcase( op==TK_GE );
2700       testcase( op==TK_EQ );
2701       testcase( op==TK_NE );
2702       testcase( jumpIfNull==0 );
2703       codeCompareOperands(pParse, pExpr->pLeft, &r1, &regFree1,
2704                                   pExpr->pRight, &r2, &regFree2);
2705       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
2706                   r1, r2, dest, jumpIfNull);
2707       testcase( regFree1==0 );
2708       testcase( regFree2==0 );
2709       break;
2710     }
2711     case TK_ISNULL:
2712     case TK_NOTNULL: {
2713       testcase( op==TK_ISNULL );
2714       testcase( op==TK_NOTNULL );
2715       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
2716       sqlite3VdbeAddOp2(v, op, r1, dest);
2717       testcase( regFree1==0 );
2718       break;
2719     }
2720     case TK_BETWEEN: {
2721       /*    x BETWEEN y AND z
2722       **
2723       ** Is equivalent to
2724       **
2725       **    x>=y AND x<=z
2726       **
2727       ** Code it as such, taking care to do the common subexpression
2728       ** elementation of x.
2729       */
2730       Expr exprAnd;
2731       Expr compLeft;
2732       Expr compRight;
2733       Expr exprX;
2734 
2735       exprX = *pExpr->pLeft;
2736       exprAnd.op = TK_AND;
2737       exprAnd.pLeft = &compLeft;
2738       exprAnd.pRight = &compRight;
2739       compLeft.op = TK_GE;
2740       compLeft.pLeft = &exprX;
2741       compLeft.pRight = pExpr->pList->a[0].pExpr;
2742       compRight.op = TK_LE;
2743       compRight.pLeft = &exprX;
2744       compRight.pRight = pExpr->pList->a[1].pExpr;
2745       exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
2746       testcase( regFree1==0 );
2747       exprX.op = TK_REGISTER;
2748       testcase( jumpIfNull==0 );
2749       sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
2750       break;
2751     }
2752     default: {
2753       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
2754       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
2755       testcase( regFree1==0 );
2756       testcase( jumpIfNull==0 );
2757       break;
2758     }
2759   }
2760   sqlite3ReleaseTempReg(pParse, regFree1);
2761   sqlite3ReleaseTempReg(pParse, regFree2);
2762 }
2763 
2764 /*
2765 ** Do a deep comparison of two expression trees.  Return TRUE (non-zero)
2766 ** if they are identical and return FALSE if they differ in any way.
2767 **
2768 ** Sometimes this routine will return FALSE even if the two expressions
2769 ** really are equivalent.  If we cannot prove that the expressions are
2770 ** identical, we return FALSE just to be safe.  So if this routine
2771 ** returns false, then you do not really know for certain if the two
2772 ** expressions are the same.  But if you get a TRUE return, then you
2773 ** can be sure the expressions are the same.  In the places where
2774 ** this routine is used, it does not hurt to get an extra FALSE - that
2775 ** just might result in some slightly slower code.  But returning
2776 ** an incorrect TRUE could lead to a malfunction.
2777 */
2778 int sqlite3ExprCompare(Expr *pA, Expr *pB){
2779   int i;
2780   if( pA==0||pB==0 ){
2781     return pB==pA;
2782   }
2783   if( pA->op!=pB->op ) return 0;
2784   if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 0;
2785   if( !sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 0;
2786   if( !sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 0;
2787   if( pA->pList ){
2788     if( pB->pList==0 ) return 0;
2789     if( pA->pList->nExpr!=pB->pList->nExpr ) return 0;
2790     for(i=0; i<pA->pList->nExpr; i++){
2791       if( !sqlite3ExprCompare(pA->pList->a[i].pExpr, pB->pList->a[i].pExpr) ){
2792         return 0;
2793       }
2794     }
2795   }else if( pB->pList ){
2796     return 0;
2797   }
2798   if( pA->pSelect || pB->pSelect ) return 0;
2799   if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 0;
2800   if( pA->op!=TK_COLUMN && pA->token.z ){
2801     if( pB->token.z==0 ) return 0;
2802     if( pB->token.n!=pA->token.n ) return 0;
2803     if( sqlite3StrNICmp((char*)pA->token.z,(char*)pB->token.z,pB->token.n)!=0 ){
2804       return 0;
2805     }
2806   }
2807   return 1;
2808 }
2809 
2810 
2811 /*
2812 ** Add a new element to the pAggInfo->aCol[] array.  Return the index of
2813 ** the new element.  Return a negative number if malloc fails.
2814 */
2815 static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
2816   int i;
2817   pInfo->aCol = sqlite3ArrayAllocate(
2818        db,
2819        pInfo->aCol,
2820        sizeof(pInfo->aCol[0]),
2821        3,
2822        &pInfo->nColumn,
2823        &pInfo->nColumnAlloc,
2824        &i
2825   );
2826   return i;
2827 }
2828 
2829 /*
2830 ** Add a new element to the pAggInfo->aFunc[] array.  Return the index of
2831 ** the new element.  Return a negative number if malloc fails.
2832 */
2833 static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
2834   int i;
2835   pInfo->aFunc = sqlite3ArrayAllocate(
2836        db,
2837        pInfo->aFunc,
2838        sizeof(pInfo->aFunc[0]),
2839        3,
2840        &pInfo->nFunc,
2841        &pInfo->nFuncAlloc,
2842        &i
2843   );
2844   return i;
2845 }
2846 
2847 /*
2848 ** This is the xExprCallback for a tree walker.  It is used to
2849 ** implement sqlite3ExprAnalyzeAggregates().  See sqlite3ExprAnalyzeAggregates
2850 ** for additional information.
2851 */
2852 static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
2853   int i;
2854   NameContext *pNC = pWalker->u.pNC;
2855   Parse *pParse = pNC->pParse;
2856   SrcList *pSrcList = pNC->pSrcList;
2857   AggInfo *pAggInfo = pNC->pAggInfo;
2858 
2859   switch( pExpr->op ){
2860     case TK_AGG_COLUMN:
2861     case TK_COLUMN: {
2862       testcase( pExpr->op==TK_AGG_COLUMN );
2863       testcase( pExpr->op==TK_COLUMN );
2864       /* Check to see if the column is in one of the tables in the FROM
2865       ** clause of the aggregate query */
2866       if( pSrcList ){
2867         struct SrcList_item *pItem = pSrcList->a;
2868         for(i=0; i<pSrcList->nSrc; i++, pItem++){
2869           struct AggInfo_col *pCol;
2870           if( pExpr->iTable==pItem->iCursor ){
2871             /* If we reach this point, it means that pExpr refers to a table
2872             ** that is in the FROM clause of the aggregate query.
2873             **
2874             ** Make an entry for the column in pAggInfo->aCol[] if there
2875             ** is not an entry there already.
2876             */
2877             int k;
2878             pCol = pAggInfo->aCol;
2879             for(k=0; k<pAggInfo->nColumn; k++, pCol++){
2880               if( pCol->iTable==pExpr->iTable &&
2881                   pCol->iColumn==pExpr->iColumn ){
2882                 break;
2883               }
2884             }
2885             if( (k>=pAggInfo->nColumn)
2886              && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
2887             ){
2888               pCol = &pAggInfo->aCol[k];
2889               pCol->pTab = pExpr->pTab;
2890               pCol->iTable = pExpr->iTable;
2891               pCol->iColumn = pExpr->iColumn;
2892               pCol->iMem = ++pParse->nMem;
2893               pCol->iSorterColumn = -1;
2894               pCol->pExpr = pExpr;
2895               if( pAggInfo->pGroupBy ){
2896                 int j, n;
2897                 ExprList *pGB = pAggInfo->pGroupBy;
2898                 struct ExprList_item *pTerm = pGB->a;
2899                 n = pGB->nExpr;
2900                 for(j=0; j<n; j++, pTerm++){
2901                   Expr *pE = pTerm->pExpr;
2902                   if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
2903                       pE->iColumn==pExpr->iColumn ){
2904                     pCol->iSorterColumn = j;
2905                     break;
2906                   }
2907                 }
2908               }
2909               if( pCol->iSorterColumn<0 ){
2910                 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
2911               }
2912             }
2913             /* There is now an entry for pExpr in pAggInfo->aCol[] (either
2914             ** because it was there before or because we just created it).
2915             ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
2916             ** pAggInfo->aCol[] entry.
2917             */
2918             pExpr->pAggInfo = pAggInfo;
2919             pExpr->op = TK_AGG_COLUMN;
2920             pExpr->iAgg = k;
2921             break;
2922           } /* endif pExpr->iTable==pItem->iCursor */
2923         } /* end loop over pSrcList */
2924       }
2925       return WRC_Prune;
2926     }
2927     case TK_AGG_FUNCTION: {
2928       /* The pNC->nDepth==0 test causes aggregate functions in subqueries
2929       ** to be ignored */
2930       if( pNC->nDepth==0 ){
2931         /* Check to see if pExpr is a duplicate of another aggregate
2932         ** function that is already in the pAggInfo structure
2933         */
2934         struct AggInfo_func *pItem = pAggInfo->aFunc;
2935         for(i=0; i<pAggInfo->nFunc; i++, pItem++){
2936           if( sqlite3ExprCompare(pItem->pExpr, pExpr) ){
2937             break;
2938           }
2939         }
2940         if( i>=pAggInfo->nFunc ){
2941           /* pExpr is original.  Make a new entry in pAggInfo->aFunc[]
2942           */
2943           u8 enc = ENC(pParse->db);
2944           i = addAggInfoFunc(pParse->db, pAggInfo);
2945           if( i>=0 ){
2946             pItem = &pAggInfo->aFunc[i];
2947             pItem->pExpr = pExpr;
2948             pItem->iMem = ++pParse->nMem;
2949             pItem->pFunc = sqlite3FindFunction(pParse->db,
2950                    (char*)pExpr->token.z, pExpr->token.n,
2951                    pExpr->pList ? pExpr->pList->nExpr : 0, enc, 0);
2952             if( pExpr->flags & EP_Distinct ){
2953               pItem->iDistinct = pParse->nTab++;
2954             }else{
2955               pItem->iDistinct = -1;
2956             }
2957           }
2958         }
2959         /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
2960         */
2961         pExpr->iAgg = i;
2962         pExpr->pAggInfo = pAggInfo;
2963         return WRC_Prune;
2964       }
2965     }
2966   }
2967   return WRC_Continue;
2968 }
2969 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
2970   NameContext *pNC = pWalker->u.pNC;
2971   if( pNC->nDepth==0 ){
2972     pNC->nDepth++;
2973     sqlite3WalkSelect(pWalker, pSelect);
2974     pNC->nDepth--;
2975     return WRC_Prune;
2976   }else{
2977     return WRC_Continue;
2978   }
2979 }
2980 
2981 /*
2982 ** Analyze the given expression looking for aggregate functions and
2983 ** for variables that need to be added to the pParse->aAgg[] array.
2984 ** Make additional entries to the pParse->aAgg[] array as necessary.
2985 **
2986 ** This routine should only be called after the expression has been
2987 ** analyzed by sqlite3ResolveExprNames().
2988 */
2989 void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
2990   Walker w;
2991   w.xExprCallback = analyzeAggregate;
2992   w.xSelectCallback = analyzeAggregatesInSelect;
2993   w.u.pNC = pNC;
2994   sqlite3WalkExpr(&w, pExpr);
2995 }
2996 
2997 /*
2998 ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
2999 ** expression list.  Return the number of errors.
3000 **
3001 ** If an error is found, the analysis is cut short.
3002 */
3003 void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
3004   struct ExprList_item *pItem;
3005   int i;
3006   if( pList ){
3007     for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
3008       sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
3009     }
3010   }
3011 }
3012 
3013 /*
3014 ** Allocate or deallocate temporary use registers during code generation.
3015 */
3016 int sqlite3GetTempReg(Parse *pParse){
3017   if( pParse->nTempReg==0 ){
3018     return ++pParse->nMem;
3019   }
3020   return pParse->aTempReg[--pParse->nTempReg];
3021 }
3022 void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
3023   if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
3024     sqlite3ExprWritableRegister(pParse, iReg, iReg);
3025     pParse->aTempReg[pParse->nTempReg++] = iReg;
3026   }
3027 }
3028 
3029 /*
3030 ** Allocate or deallocate a block of nReg consecutive registers
3031 */
3032 int sqlite3GetTempRange(Parse *pParse, int nReg){
3033   int i, n;
3034   i = pParse->iRangeReg;
3035   n = pParse->nRangeReg;
3036   if( nReg<=n && !usedAsColumnCache(pParse, i, i+n-1) ){
3037     pParse->iRangeReg += nReg;
3038     pParse->nRangeReg -= nReg;
3039   }else{
3040     i = pParse->nMem+1;
3041     pParse->nMem += nReg;
3042   }
3043   return i;
3044 }
3045 void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
3046   if( nReg>pParse->nRangeReg ){
3047     pParse->nRangeReg = nReg;
3048     pParse->iRangeReg = iReg;
3049   }
3050 }
3051