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