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