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