Lines Matching refs:pExpr

45 char sqlite3ExprAffinity(const Expr *pExpr){  in sqlite3ExprAffinity()  argument
47 while( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){ in sqlite3ExprAffinity()
48 assert( pExpr->op==TK_COLLATE in sqlite3ExprAffinity()
49 || pExpr->op==TK_IF_NULL_ROW in sqlite3ExprAffinity()
50 || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) ); in sqlite3ExprAffinity()
51 pExpr = pExpr->pLeft; in sqlite3ExprAffinity()
52 assert( pExpr!=0 ); in sqlite3ExprAffinity()
54 op = pExpr->op; in sqlite3ExprAffinity()
55 if( op==TK_REGISTER ) op = pExpr->op2; in sqlite3ExprAffinity()
57 assert( ExprUseYTab(pExpr) ); in sqlite3ExprAffinity()
58 assert( pExpr->y.pTab!=0 ); in sqlite3ExprAffinity()
59 return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); in sqlite3ExprAffinity()
62 assert( ExprUseXSelect(pExpr) ); in sqlite3ExprAffinity()
63 assert( pExpr->x.pSelect!=0 ); in sqlite3ExprAffinity()
64 assert( pExpr->x.pSelect->pEList!=0 ); in sqlite3ExprAffinity()
65 assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 ); in sqlite3ExprAffinity()
66 return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); in sqlite3ExprAffinity()
70 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprAffinity()
71 return sqlite3AffinityType(pExpr->u.zToken, 0); in sqlite3ExprAffinity()
75 assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) ); in sqlite3ExprAffinity()
76 assert( pExpr->iColumn < pExpr->iTable ); in sqlite3ExprAffinity()
77 assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr ); in sqlite3ExprAffinity()
79 pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr in sqlite3ExprAffinity()
83 assert( ExprUseXList(pExpr) ); in sqlite3ExprAffinity()
84 return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr); in sqlite3ExprAffinity()
86 return pExpr->affExpr; in sqlite3ExprAffinity()
99 Expr *pExpr, /* Add the "COLLATE" clause to this expression */ in sqlite3ExprAddCollateToken() argument
106 pNew->pLeft = pExpr; in sqlite3ExprAddCollateToken()
108 pExpr = pNew; in sqlite3ExprAddCollateToken()
111 return pExpr; in sqlite3ExprAddCollateToken()
115 Expr *pExpr, /* Add the "COLLATE" clause to this expression */ in sqlite3ExprAddCollateString() argument
121 return sqlite3ExprAddCollateToken(pParse, pExpr, &s, 0); in sqlite3ExprAddCollateString()
127 Expr *sqlite3ExprSkipCollate(Expr *pExpr){ in sqlite3ExprSkipCollate() argument
128 while( pExpr && ExprHasProperty(pExpr, EP_Skip) ){ in sqlite3ExprSkipCollate()
129 assert( pExpr->op==TK_COLLATE ); in sqlite3ExprSkipCollate()
130 pExpr = pExpr->pLeft; in sqlite3ExprSkipCollate()
132 return pExpr; in sqlite3ExprSkipCollate()
140 Expr *sqlite3ExprSkipCollateAndLikely(Expr *pExpr){ in sqlite3ExprSkipCollateAndLikely() argument
141 while( pExpr && ExprHasProperty(pExpr, EP_Skip|EP_Unlikely) ){ in sqlite3ExprSkipCollateAndLikely()
142 if( ExprHasProperty(pExpr, EP_Unlikely) ){ in sqlite3ExprSkipCollateAndLikely()
143 assert( ExprUseXList(pExpr) ); in sqlite3ExprSkipCollateAndLikely()
144 assert( pExpr->x.pList->nExpr>0 ); in sqlite3ExprSkipCollateAndLikely()
145 assert( pExpr->op==TK_FUNCTION ); in sqlite3ExprSkipCollateAndLikely()
146 pExpr = pExpr->x.pList->a[0].pExpr; in sqlite3ExprSkipCollateAndLikely()
148 assert( pExpr->op==TK_COLLATE ); in sqlite3ExprSkipCollateAndLikely()
149 pExpr = pExpr->pLeft; in sqlite3ExprSkipCollateAndLikely()
152 return pExpr; in sqlite3ExprSkipCollateAndLikely()
169 CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ in sqlite3ExprCollSeq() argument
172 const Expr *p = pExpr; in sqlite3ExprCollSeq()
192 p = p->x.pList->a[0].pExpr; in sqlite3ExprCollSeq()
211 if( ExprHasProperty(p->x.pList->a[i].pExpr, EP_Collate) ){ in sqlite3ExprCollSeq()
212 pNext = p->x.pList->a[i].pExpr; in sqlite3ExprCollSeq()
239 CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, const Expr *pExpr){ in sqlite3ExprNNCollSeq() argument
240 CollSeq *p = sqlite3ExprCollSeq(pParse, pExpr); in sqlite3ExprNNCollSeq()
260 char sqlite3CompareAffinity(const Expr *pExpr, char aff2){ in sqlite3CompareAffinity() argument
261 char aff1 = sqlite3ExprAffinity(pExpr); in sqlite3CompareAffinity()
282 static char comparisonAffinity(const Expr *pExpr){ in comparisonAffinity() argument
284 assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT || in comparisonAffinity()
285 pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE || in comparisonAffinity()
286 pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT ); in comparisonAffinity()
287 assert( pExpr->pLeft ); in comparisonAffinity()
288 aff = sqlite3ExprAffinity(pExpr->pLeft); in comparisonAffinity()
289 if( pExpr->pRight ){ in comparisonAffinity()
290 aff = sqlite3CompareAffinity(pExpr->pRight, aff); in comparisonAffinity()
291 }else if( ExprUseXSelect(pExpr) ){ in comparisonAffinity()
292 aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff); in comparisonAffinity()
305 int sqlite3IndexAffinityOk(const Expr *pExpr, char idx_affinity){ in sqlite3IndexAffinityOk() argument
306 char aff = comparisonAffinity(pExpr); in sqlite3IndexAffinityOk()
417 int sqlite3ExprIsVector(const Expr *pExpr){ in sqlite3ExprIsVector() argument
418 return sqlite3ExprVectorSize(pExpr)>1; in sqlite3ExprIsVector()
427 int sqlite3ExprVectorSize(const Expr *pExpr){ in sqlite3ExprVectorSize() argument
428 u8 op = pExpr->op; in sqlite3ExprVectorSize()
429 if( op==TK_REGISTER ) op = pExpr->op2; in sqlite3ExprVectorSize()
431 assert( ExprUseXList(pExpr) ); in sqlite3ExprVectorSize()
432 return pExpr->x.pList->nExpr; in sqlite3ExprVectorSize()
434 assert( ExprUseXSelect(pExpr) ); in sqlite3ExprVectorSize()
435 return pExpr->x.pSelect->pEList->nExpr; in sqlite3ExprVectorSize()
462 return pVector->x.pSelect->pEList->a[i].pExpr; in sqlite3VectorFieldSubexpr()
465 return pVector->x.pList->a[i].pExpr; in sqlite3VectorFieldSubexpr()
527 ppVector = &pVector->x.pList->a[iField].pExpr; in sqlite3ExprForVectorField()
548 static int exprCodeSubselect(Parse *pParse, Expr *pExpr){ in exprCodeSubselect() argument
551 if( pExpr->op==TK_SELECT ){ in exprCodeSubselect()
552 reg = sqlite3CodeSubselect(pParse, pExpr); in exprCodeSubselect()
592 *ppExpr = pVector->x.pSelect->pEList->a[iField].pExpr; in exprVectorRegister()
597 *ppExpr = pVector->x.pList->a[iField].pExpr; in exprVectorRegister()
616 Expr *pExpr, /* The comparison operation */ in codeVectorCompare() argument
622 Expr *pLeft = pExpr->pLeft; in codeVectorCompare()
623 Expr *pRight = pExpr->pRight; in codeVectorCompare()
631 int isCommuted = ExprHasProperty(pExpr,EP_Commuted); in codeVectorCompare()
633 assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); in codeVectorCompare()
639 assert( pExpr->op==TK_EQ || pExpr->op==TK_NE in codeVectorCompare()
640 || pExpr->op==TK_IS || pExpr->op==TK_ISNOT in codeVectorCompare()
641 || pExpr->op==TK_LT || pExpr->op==TK_GT in codeVectorCompare()
642 || pExpr->op==TK_LE || pExpr->op==TK_GE in codeVectorCompare()
644 assert( pExpr->op==op || (pExpr->op==TK_IS && op==TK_EQ) in codeVectorCompare()
645 || (pExpr->op==TK_ISNOT && op==TK_NE) ); in codeVectorCompare()
646 assert( p5==0 || pExpr->op!=op ); in codeVectorCompare()
647 assert( p5==SQLITE_NULLEQ || pExpr->op==op ); in codeVectorCompare()
741 heightOfExpr(p->a[i].pExpr, pnHeight); in heightOfExprList()
969 void sqlite3PExprAddSelect(Parse *pParse, Expr *pExpr, Select *pSelect){ in sqlite3PExprAddSelect() argument
970 if( pExpr ){ in sqlite3PExprAddSelect()
971 pExpr->x.pSelect = pSelect; in sqlite3PExprAddSelect()
972 ExprSetProperty(pExpr, EP_xIsSelect|EP_Subquery); in sqlite3PExprAddSelect()
973 sqlite3ExprSetHeightAndFlags(pParse, pExpr); in sqlite3PExprAddSelect()
1005 Expr *pExpr = pEList->a[ii].pExpr; in sqlite3ExprListToValues() local
1007 if( pExpr->op==TK_VECTOR ){ in sqlite3ExprListToValues()
1008 assert( ExprUseXList(pExpr) ); in sqlite3ExprListToValues()
1009 nExprElem = pExpr->x.pList->nExpr; in sqlite3ExprListToValues()
1019 assert( ExprUseXList(pExpr) ); in sqlite3ExprListToValues()
1020 pSel = sqlite3SelectNew(pParse, pExpr->x.pList, 0, 0, 0, 0, 0, SF_Values,0); in sqlite3ExprListToValues()
1021 pExpr->x.pList = 0; in sqlite3ExprListToValues()
1110 const Expr *pExpr, /* The function invocation */ in sqlite3ExprFunctionUsable() argument
1115 if( ExprHasProperty(pExpr, EP_FromDDL) ){ in sqlite3ExprFunctionUsable()
1126 sqlite3ErrorMsg(pParse, "unsafe use of %#T()", pExpr); in sqlite3ExprFunctionUsable()
1147 void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n){ in sqlite3ExprAssignVarNumber() argument
1152 if( pExpr==0 ) return; in sqlite3ExprAssignVarNumber()
1153 assert( !ExprHasProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) ); in sqlite3ExprAssignVarNumber()
1154 z = pExpr->u.zToken; in sqlite3ExprAssignVarNumber()
1182 sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); in sqlite3ExprAssignVarNumber()
1207 pExpr->iColumn = x; in sqlite3ExprAssignVarNumber()
1210 sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); in sqlite3ExprAssignVarNumber()
1282 void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ in sqlite3ExprDeferredDelete() argument
1285 pExpr); in sqlite3ExprDeferredDelete()
1554 static int gatherSelectWindowsCallback(Walker *pWalker, Expr *pExpr){ in gatherSelectWindowsCallback() argument
1555 if( pExpr->op==TK_FUNCTION && ExprHasProperty(pExpr, EP_WinFunc) ){ in gatherSelectWindowsCallback()
1557 Window *pWin = pExpr->y.pWin; in gatherSelectWindowsCallback()
1559 assert( IsWindowFunc(pExpr) ); in gatherSelectWindowsCallback()
1617 Expr *pOldExpr = pOldItem->pExpr; in sqlite3ExprListDup()
1619 pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags); in sqlite3ExprListDup()
1622 && (pNewExpr = pItem->pExpr)!=0 in sqlite3ExprListDup()
1793 Expr *pExpr /* Expression to be appended. Might be NULL */ in sqlite3ExprListAppendNew() argument
1800 sqlite3ExprDelete(db, pExpr); in sqlite3ExprListAppendNew()
1807 pItem->pExpr = pExpr; in sqlite3ExprListAppendNew()
1813 Expr *pExpr /* Expression to be appended. Might be NULL */ in sqlite3ExprListAppendGrow() argument
1822 sqlite3ExprDelete(db, pExpr); in sqlite3ExprListAppendGrow()
1829 pItem->pExpr = pExpr; in sqlite3ExprListAppendGrow()
1835 Expr *pExpr /* Expression to be appended. Might be NULL */ in sqlite3ExprListAppend() argument
1839 return sqlite3ExprListAppendNew(pParse->db,pExpr); in sqlite3ExprListAppend()
1842 return sqlite3ExprListAppendGrow(pParse->db,pList,pExpr); in sqlite3ExprListAppend()
1846 pItem->pExpr = pExpr; in sqlite3ExprListAppend()
1865 Expr *pExpr /* Vector expression to be appended. Might be NULL */ in sqlite3ExprListAppendVector() argument
1874 if( pExpr==0 ) goto vector_append_error; in sqlite3ExprListAppendVector()
1881 if( pExpr->op!=TK_SELECT && pColumns->nId!=(n=sqlite3ExprVectorSize(pExpr)) ){ in sqlite3ExprListAppendVector()
1888 Expr *pSubExpr = sqlite3ExprForVectorField(pParse, pExpr, i, pColumns->nId); in sqlite3ExprListAppendVector()
1899 if( !db->mallocFailed && pExpr->op==TK_SELECT && ALWAYS(pList!=0) ){ in sqlite3ExprListAppendVector()
1900 Expr *pFirst = pList->a[iFirst].pExpr; in sqlite3ExprListAppendVector()
1906 pFirst->pRight = pExpr; in sqlite3ExprListAppendVector()
1907 pExpr = 0; in sqlite3ExprListAppendVector()
1915 sqlite3ExprUnmapAndDelete(pParse, pExpr); in sqlite3ExprListAppendVector()
2040 sqlite3ExprDelete(db, pItem->pExpr); in exprListDeleteNN()
2059 Expr *pExpr = pList->a[i].pExpr; in sqlite3ExprListFlags() local
2060 assert( pExpr!=0 ); in sqlite3ExprListFlags()
2061 m |= pExpr->flags; in sqlite3ExprListFlags()
2099 int sqlite3ExprIdToTrueFalse(Expr *pExpr){ in sqlite3ExprIdToTrueFalse() argument
2101 assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); in sqlite3ExprIdToTrueFalse()
2102 if( !ExprHasProperty(pExpr, EP_Quoted|EP_IntValue) in sqlite3ExprIdToTrueFalse()
2103 && (v = sqlite3IsTrueOrFalse(pExpr->u.zToken))!=0 in sqlite3ExprIdToTrueFalse()
2105 pExpr->op = TK_TRUEFALSE; in sqlite3ExprIdToTrueFalse()
2106 ExprSetProperty(pExpr, v); in sqlite3ExprIdToTrueFalse()
2116 int sqlite3ExprTruthValue(const Expr *pExpr){ in sqlite3ExprTruthValue() argument
2117 pExpr = sqlite3ExprSkipCollate((Expr*)pExpr); in sqlite3ExprTruthValue()
2118 assert( pExpr->op==TK_TRUEFALSE ); in sqlite3ExprTruthValue()
2119 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprTruthValue()
2120 assert( sqlite3StrICmp(pExpr->u.zToken,"true")==0 in sqlite3ExprTruthValue()
2121 || sqlite3StrICmp(pExpr->u.zToken,"false")==0 ); in sqlite3ExprTruthValue()
2122 return pExpr->u.zToken[4]==0; in sqlite3ExprTruthValue()
2138 Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){ in sqlite3ExprSimplifiedAndOr() argument
2139 assert( pExpr!=0 ); in sqlite3ExprSimplifiedAndOr()
2140 if( pExpr->op==TK_AND || pExpr->op==TK_OR ){ in sqlite3ExprSimplifiedAndOr()
2141 Expr *pRight = sqlite3ExprSimplifiedAndOr(pExpr->pRight); in sqlite3ExprSimplifiedAndOr()
2142 Expr *pLeft = sqlite3ExprSimplifiedAndOr(pExpr->pLeft); in sqlite3ExprSimplifiedAndOr()
2144 pExpr = pExpr->op==TK_AND ? pRight : pLeft; in sqlite3ExprSimplifiedAndOr()
2146 pExpr = pExpr->op==TK_AND ? pLeft : pRight; in sqlite3ExprSimplifiedAndOr()
2149 return pExpr; in sqlite3ExprSimplifiedAndOr()
2179 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ in exprNodeIsConstant() argument
2184 if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_OuterON) ){ in exprNodeIsConstant()
2189 switch( pExpr->op ){ in exprNodeIsConstant()
2194 if( (pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_ConstFunc)) in exprNodeIsConstant()
2195 && !ExprHasProperty(pExpr, EP_WinFunc) in exprNodeIsConstant()
2197 if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL); in exprNodeIsConstant()
2206 if( sqlite3ExprIdToTrueFalse(pExpr) ){ in exprNodeIsConstant()
2213 testcase( pExpr->op==TK_ID ); in exprNodeIsConstant()
2214 testcase( pExpr->op==TK_COLUMN ); in exprNodeIsConstant()
2215 testcase( pExpr->op==TK_AGG_FUNCTION ); in exprNodeIsConstant()
2216 testcase( pExpr->op==TK_AGG_COLUMN ); in exprNodeIsConstant()
2217 if( ExprHasProperty(pExpr, EP_FixedCol) && pWalker->eCode!=2 ){ in exprNodeIsConstant()
2220 if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ in exprNodeIsConstant()
2227 testcase( pExpr->op==TK_REGISTER ); in exprNodeIsConstant()
2228 testcase( pExpr->op==TK_IF_NULL_ROW ); in exprNodeIsConstant()
2229 testcase( pExpr->op==TK_DOT ); in exprNodeIsConstant()
2237 pExpr->op = TK_NULL; in exprNodeIsConstant()
2246 testcase( pExpr->op==TK_SELECT ); /* sqlite3SelectWalkFail() disallows */ in exprNodeIsConstant()
2247 testcase( pExpr->op==TK_EXISTS ); /* sqlite3SelectWalkFail() disallows */ in exprNodeIsConstant()
2326 int sqlite3ExprIsTableConstraint(Expr *pExpr, const SrcItem *pSrc){ in sqlite3ExprIsTableConstraint() argument
2331 if( !ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* rule (4a) */ in sqlite3ExprIsTableConstraint()
2332 if( pExpr->w.iJoin!=pSrc->iCursor ) return 0; /* rule (4b) */ in sqlite3ExprIsTableConstraint()
2334 if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* rule (5) */ in sqlite3ExprIsTableConstraint()
2336 return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor); /* rules (1), (2) */ in sqlite3ExprIsTableConstraint()
2343 static int exprNodeIsConstantOrGroupBy(Walker *pWalker, Expr *pExpr){ in exprNodeIsConstantOrGroupBy() argument
2350 Expr *p = pGroupBy->a[i].pExpr; in exprNodeIsConstantOrGroupBy()
2351 if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){ in exprNodeIsConstantOrGroupBy()
2360 if( ExprUseXSelect(pExpr) ){ in exprNodeIsConstantOrGroupBy()
2365 return exprNodeIsConstant(pWalker, pExpr); in exprNodeIsConstantOrGroupBy()
2612 Expr *pRes = pEList->a[i].pExpr; in isCandidateForInOpt()
2767 if( sqlite3ExprCanBeNull(pEList->a[i].pExpr) ) break; in sqlite3FindInIndex()
2785 assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */ in sqlite3FindInIndex()
2796 if( nExpr==1 && pEList->a[0].pExpr->iColumn<0 ){ in sqlite3FindInIndex()
2817 int iCol = pEList->a[i].pExpr->iColumn; in sqlite3FindInIndex()
2860 Expr *pRhs = pEList->a[i].pExpr; in sqlite3FindInIndex()
2966 static char *exprINAffinity(Parse *pParse, const Expr *pExpr){ in exprINAffinity() argument
2967 Expr *pLeft = pExpr->pLeft; in exprINAffinity()
2969 Select *pSelect = ExprUseXSelect(pExpr) ? pExpr->x.pSelect : 0; in exprINAffinity()
2972 assert( pExpr->op==TK_IN ); in exprINAffinity()
2980 zRet[i] = sqlite3CompareAffinity(pSelect->pEList->a[i].pExpr, a); in exprINAffinity()
3017 void sqlite3VectorErrorMsg(Parse *pParse, Expr *pExpr){ in sqlite3VectorErrorMsg() argument
3019 if( ExprUseXSelect(pExpr) ){ in sqlite3VectorErrorMsg()
3020 sqlite3SubselectError(pParse, pExpr->x.pSelect->pEList->nExpr, 1); in sqlite3VectorErrorMsg()
3053 Expr *pExpr, /* The IN operator */ in sqlite3CodeRhsOfIN() argument
3076 if( !ExprHasProperty(pExpr, EP_VarSelect) && pParse->iSelfTab==0 ){ in sqlite3CodeRhsOfIN()
3081 if( ExprHasProperty(pExpr, EP_Subrtn) ){ in sqlite3CodeRhsOfIN()
3083 if( ExprUseXSelect(pExpr) ){ in sqlite3CodeRhsOfIN()
3085 pExpr->x.pSelect->selId)); in sqlite3CodeRhsOfIN()
3087 assert( ExprUseYSub(pExpr) ); in sqlite3CodeRhsOfIN()
3088 sqlite3VdbeAddOp2(v, OP_Gosub, pExpr->y.sub.regReturn, in sqlite3CodeRhsOfIN()
3089 pExpr->y.sub.iAddr); in sqlite3CodeRhsOfIN()
3090 assert( iTab!=pExpr->iTable ); in sqlite3CodeRhsOfIN()
3091 sqlite3VdbeAddOp2(v, OP_OpenDup, iTab, pExpr->iTable); in sqlite3CodeRhsOfIN()
3097 assert( !ExprUseYWin(pExpr) ); in sqlite3CodeRhsOfIN()
3098 ExprSetProperty(pExpr, EP_Subrtn); in sqlite3CodeRhsOfIN()
3099 assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); in sqlite3CodeRhsOfIN()
3100 pExpr->y.sub.regReturn = ++pParse->nMem; in sqlite3CodeRhsOfIN()
3101 pExpr->y.sub.iAddr = in sqlite3CodeRhsOfIN()
3102 sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; in sqlite3CodeRhsOfIN()
3108 pLeft = pExpr->pLeft; in sqlite3CodeRhsOfIN()
3114 pExpr->iTable = iTab; in sqlite3CodeRhsOfIN()
3115 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, nVal); in sqlite3CodeRhsOfIN()
3117 if( ExprUseXSelect(pExpr) ){ in sqlite3CodeRhsOfIN()
3118 VdbeComment((v, "Result of SELECT %u", pExpr->x.pSelect->selId)); in sqlite3CodeRhsOfIN()
3125 if( ExprUseXSelect(pExpr) ){ in sqlite3CodeRhsOfIN()
3131 Select *pSelect = pExpr->x.pSelect; in sqlite3CodeRhsOfIN()
3145 dest.zAffSdst = exprINAffinity(pParse, pExpr); in sqlite3CodeRhsOfIN()
3164 pParse, p, pEList->a[i].pExpr in sqlite3CodeRhsOfIN()
3168 }else if( ALWAYS(pExpr->x.pList!=0) ){ in sqlite3CodeRhsOfIN()
3178 ExprList *pList = pExpr->x.pList; in sqlite3CodeRhsOfIN()
3189 pKeyInfo->aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft); in sqlite3CodeRhsOfIN()
3196 Expr *pE2 = pItem->pExpr; in sqlite3CodeRhsOfIN()
3206 ExprClearProperty(pExpr, EP_Subrtn); in sqlite3CodeRhsOfIN()
3225 assert( ExprUseYSub(pExpr) ); in sqlite3CodeRhsOfIN()
3226 assert( sqlite3VdbeGetOp(v,pExpr->y.sub.iAddr-1)->opcode==OP_BeginSubrtn in sqlite3CodeRhsOfIN()
3228 sqlite3VdbeAddOp3(v, OP_Return, pExpr->y.sub.regReturn, in sqlite3CodeRhsOfIN()
3229 pExpr->y.sub.iAddr, 1); in sqlite3CodeRhsOfIN()
3251 int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ in sqlite3CodeSubselect() argument
3262 testcase( pExpr->op==TK_EXISTS ); in sqlite3CodeSubselect()
3263 testcase( pExpr->op==TK_SELECT ); in sqlite3CodeSubselect()
3264 assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT ); in sqlite3CodeSubselect()
3265 assert( ExprUseXSelect(pExpr) ); in sqlite3CodeSubselect()
3266 pSel = pExpr->x.pSelect; in sqlite3CodeSubselect()
3270 if( ExprHasProperty(pExpr, EP_Subrtn) ){ in sqlite3CodeSubselect()
3272 assert( ExprUseYSub(pExpr) ); in sqlite3CodeSubselect()
3273 sqlite3VdbeAddOp2(v, OP_Gosub, pExpr->y.sub.regReturn, in sqlite3CodeSubselect()
3274 pExpr->y.sub.iAddr); in sqlite3CodeSubselect()
3275 return pExpr->iTable; in sqlite3CodeSubselect()
3279 assert( !ExprUseYWin(pExpr) ); in sqlite3CodeSubselect()
3280 assert( !ExprHasProperty(pExpr, EP_Reduced|EP_TokenOnly) ); in sqlite3CodeSubselect()
3281 ExprSetProperty(pExpr, EP_Subrtn); in sqlite3CodeSubselect()
3282 pExpr->y.sub.regReturn = ++pParse->nMem; in sqlite3CodeSubselect()
3283 pExpr->y.sub.iAddr = in sqlite3CodeSubselect()
3284 sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; in sqlite3CodeSubselect()
3296 if( !ExprHasProperty(pExpr, EP_VarSelect) ){ in sqlite3CodeSubselect()
3312 nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1; in sqlite3CodeSubselect()
3315 if( pExpr->op==TK_SELECT ){ in sqlite3CodeSubselect()
3345 pExpr->op2 = pExpr->op; in sqlite3CodeSubselect()
3346 pExpr->op = TK_ERROR; in sqlite3CodeSubselect()
3349 pExpr->iTable = rReg = dest.iSDParm; in sqlite3CodeSubselect()
3350 ExprSetVVAProperty(pExpr, EP_NoReduce); in sqlite3CodeSubselect()
3356 assert( ExprUseYSub(pExpr) ); in sqlite3CodeSubselect()
3357 assert( sqlite3VdbeGetOp(v,pExpr->y.sub.iAddr-1)->opcode==OP_BeginSubrtn in sqlite3CodeSubselect()
3359 sqlite3VdbeAddOp3(v, OP_Return, pExpr->y.sub.regReturn, in sqlite3CodeSubselect()
3360 pExpr->y.sub.iAddr, 1); in sqlite3CodeSubselect()
3417 Expr *pExpr, /* The IN expression */ in sqlite3ExprCodeIN() argument
3440 assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); in sqlite3ExprCodeIN()
3441 pLeft = pExpr->pLeft; in sqlite3ExprCodeIN()
3442 if( sqlite3ExprCheckIN(pParse, pExpr) ) return; in sqlite3ExprCodeIN()
3443 zAff = exprINAffinity(pParse, pExpr); in sqlite3ExprCodeIN()
3444 nVector = sqlite3ExprVectorSize(pExpr->pLeft); in sqlite3ExprCodeIN()
3457 eType = sqlite3FindInIndex(pParse, pExpr, in sqlite3ExprCodeIN()
3516 assert( ExprUseXList(pExpr) ); in sqlite3ExprCodeIN()
3517 pList = pExpr->x.pList; in sqlite3ExprCodeIN()
3518 pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); in sqlite3ExprCodeIN()
3524 r2 = sqlite3ExprCodeTemp(pParse, pList->a[ii].pExpr, &regToFree); in sqlite3ExprCodeIN()
3525 if( regCkNull && sqlite3ExprCanBeNull(pList->a[ii].pExpr) ){ in sqlite3ExprCodeIN()
3567 Expr *p = sqlite3VectorFieldSubexpr(pExpr->pLeft, i); in sqlite3ExprCodeIN()
3691 static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ in codeInteger() argument
3693 if( pExpr->flags & EP_IntValue ){ in codeInteger()
3694 int i = pExpr->u.iValue; in codeInteger()
3701 const char *z = pExpr->u.zToken; in codeInteger()
3706 sqlite3ErrorMsg(pParse, "oversized integer: %s%#T", negFlag?"-":"",pExpr); in codeInteger()
3711 negFlag?"-":"",pExpr); in codeInteger()
3741 sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[iIdxCol].pExpr, regOut); in sqlite3ExprCodeLoadIndexColumn()
3866 static void exprToRegister(Expr *pExpr, int iReg){ in exprToRegister() argument
3867 Expr *p = sqlite3ExprSkipCollateAndLikely(pExpr); in exprToRegister()
3904 sqlite3ExprCodeFactorable(pParse, p->x.pList->a[i].pExpr, i+iResult); in exprCodeVector()
3946 sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target); in exprCodeInlineFunction()
3950 sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target); in exprCodeInlineFunction()
3965 Expr *pArg = pFarg->a[0].pExpr; in exprCodeInlineFunction()
3979 target = sqlite3ExprCodeTarget(pParse, pFarg->a[0].pExpr, target); in exprCodeInlineFunction()
3992 sqlite3ExprCompare(0,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1), in exprCodeInlineFunction()
4001 sqlite3ExprImpliesExpr(pParse,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1), in exprCodeInlineFunction()
4010 pA1 = pFarg->a[1].pExpr; in exprCodeInlineFunction()
4013 sqlite3ExprImpliesNonNullRow(pFarg->a[0].pExpr,pA1->iTable), in exprCodeInlineFunction()
4029 aff = sqlite3ExprAffinity(pFarg->a[0].pExpr); in exprCodeInlineFunction()
4047 Expr *pExpr, /* The expression to potentially bypass */ in sqlite3IndexedExprLookup() argument
4059 if( sqlite3ExprCompare(0, pExpr, p->pExpr, iDataCur)!=0 ) continue; in sqlite3IndexedExprLookup()
4074 sqlite3ExprCode(pParse, pExpr, target); in sqlite3IndexedExprLookup()
4098 int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){ in sqlite3ExprCodeTarget() argument
4112 if( pExpr==0 ){ in sqlite3ExprCodeTarget()
4115 && !ExprHasProperty(pExpr, EP_Leaf) in sqlite3ExprCodeTarget()
4116 && (r1 = sqlite3IndexedExprLookup(pParse, pExpr, target))>=0 in sqlite3ExprCodeTarget()
4120 assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); in sqlite3ExprCodeTarget()
4121 op = pExpr->op; in sqlite3ExprCodeTarget()
4125 AggInfo *pAggInfo = pExpr->pAggInfo; in sqlite3ExprCodeTarget()
4128 assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn ); in sqlite3ExprCodeTarget()
4129 pCol = &pAggInfo->aCol[pExpr->iAgg]; in sqlite3ExprCodeTarget()
4152 int iTab = pExpr->iTable; in sqlite3ExprCodeTarget()
4154 if( ExprHasProperty(pExpr, EP_FixedCol) ){ in sqlite3ExprCodeTarget()
4162 iReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft,target); in sqlite3ExprCodeTarget()
4163 assert( ExprUseYTab(pExpr) ); in sqlite3ExprCodeTarget()
4164 assert( pExpr->y.pTab!=0 ); in sqlite3ExprCodeTarget()
4165 aff = sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); in sqlite3ExprCodeTarget()
4186 int iCol = pExpr->iColumn; in sqlite3ExprCodeTarget()
4187 assert( ExprUseYTab(pExpr) ); in sqlite3ExprCodeTarget()
4188 pTab = pExpr->y.pTab; in sqlite3ExprCodeTarget()
4226 assert( ExprUseYTab(pExpr) ); in sqlite3ExprCodeTarget()
4227 assert( pExpr->y.pTab!=0 ); in sqlite3ExprCodeTarget()
4228 iReg = sqlite3ExprCodeGetColumn(pParse, pExpr->y.pTab, in sqlite3ExprCodeTarget()
4229 pExpr->iColumn, iTab, target, in sqlite3ExprCodeTarget()
4230 pExpr->op2); in sqlite3ExprCodeTarget()
4234 codeInteger(pParse, pExpr, 0, target); in sqlite3ExprCodeTarget()
4238 sqlite3VdbeAddOp2(v, OP_Integer, sqlite3ExprTruthValue(pExpr), target); in sqlite3ExprCodeTarget()
4243 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4244 codeReal(v, pExpr->u.zToken, 0, target); in sqlite3ExprCodeTarget()
4249 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4250 sqlite3VdbeLoadString(v, target, pExpr->u.zToken); in sqlite3ExprCodeTarget()
4267 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4268 assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); in sqlite3ExprCodeTarget()
4269 assert( pExpr->u.zToken[1]=='\'' ); in sqlite3ExprCodeTarget()
4270 z = &pExpr->u.zToken[2]; in sqlite3ExprCodeTarget()
4279 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4280 assert( pExpr->u.zToken!=0 ); in sqlite3ExprCodeTarget()
4281 assert( pExpr->u.zToken[0]!=0 ); in sqlite3ExprCodeTarget()
4282 sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target); in sqlite3ExprCodeTarget()
4283 if( pExpr->u.zToken[1]!=0 ){ in sqlite3ExprCodeTarget()
4284 const char *z = sqlite3VListNumToName(pParse->pVList, pExpr->iColumn); in sqlite3ExprCodeTarget()
4285 assert( pExpr->u.zToken[0]=='?' || (z && !strcmp(pExpr->u.zToken, z)) ); in sqlite3ExprCodeTarget()
4292 return pExpr->iTable; in sqlite3ExprCodeTarget()
4297 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); in sqlite3ExprCodeTarget()
4302 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4304 sqlite3AffinityType(pExpr->u.zToken, 0)); in sqlite3ExprCodeTarget()
4319 Expr *pLeft = pExpr->pLeft; in sqlite3ExprCodeTarget()
4321 codeVectorCompare(pParse, pExpr, target, op, p5); in sqlite3ExprCodeTarget()
4324 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2); in sqlite3ExprCodeTarget()
4326 codeCompare(pParse, pLeft, pExpr->pRight, op, r1, r2, in sqlite3ExprCodeTarget()
4328 ExprHasProperty(pExpr,EP_Commuted)); in sqlite3ExprCodeTarget()
4368 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprCodeTarget()
4369 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2); in sqlite3ExprCodeTarget()
4376 Expr *pLeft = pExpr->pLeft; in sqlite3ExprCodeTarget()
4383 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4393 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2); in sqlite3ExprCodeTarget()
4403 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprCodeTarget()
4411 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprCodeTarget()
4413 isTrue = sqlite3ExprTruthValue(pExpr->pRight); in sqlite3ExprCodeTarget()
4414 bNormal = pExpr->op2==TK_IS; in sqlite3ExprCodeTarget()
4426 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprCodeTarget()
4436 AggInfo *pInfo = pExpr->pAggInfo; in sqlite3ExprCodeTarget()
4438 || NEVER(pExpr->iAgg<0) in sqlite3ExprCodeTarget()
4439 || NEVER(pExpr->iAgg>=pInfo->nFunc) in sqlite3ExprCodeTarget()
4441 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4442 sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr); in sqlite3ExprCodeTarget()
4444 return pInfo->aFunc[pExpr->iAgg].iMem; in sqlite3ExprCodeTarget()
4460 if( ExprHasProperty(pExpr, EP_WinFunc) ){ in sqlite3ExprCodeTarget()
4461 return pExpr->y.pWin->regResult; in sqlite3ExprCodeTarget()
4465 if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){ in sqlite3ExprCodeTarget()
4468 return sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); in sqlite3ExprCodeTarget()
4470 assert( !ExprHasProperty(pExpr, EP_TokenOnly) ); in sqlite3ExprCodeTarget()
4471 assert( ExprUseXList(pExpr) ); in sqlite3ExprCodeTarget()
4472 pFarg = pExpr->x.pList; in sqlite3ExprCodeTarget()
4474 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4475 zId = pExpr->u.zToken; in sqlite3ExprCodeTarget()
4483 sqlite3ErrorMsg(pParse, "unknown function: %#T()", pExpr); in sqlite3ExprCodeTarget()
4492 sqlite3ExprFunctionUsable(pParse, pExpr, pDef); in sqlite3ExprCodeTarget()
4496 if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){ in sqlite3ExprCodeTarget()
4501 pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); in sqlite3ExprCodeTarget()
4520 assert( pFarg->a[0].pExpr!=0 ); in sqlite3ExprCodeTarget()
4521 exprOp = pFarg->a[0].pExpr->op; in sqlite3ExprCodeTarget()
4526 pFarg->a[0].pExpr->op2 = in sqlite3ExprCodeTarget()
4549 if( nFarg>=2 && ExprHasProperty(pExpr, EP_InfixFunc) ){ in sqlite3ExprCodeTarget()
4550 pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); in sqlite3ExprCodeTarget()
4552 pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); in sqlite3ExprCodeTarget()
4560 pDef, pExpr->op2); in sqlite3ExprCodeTarget()
4579 && ALWAYS( ExprUseXSelect(pExpr) ) in sqlite3ExprCodeTarget()
4580 && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 in sqlite3ExprCodeTarget()
4584 return sqlite3CodeSubselect(pParse, pExpr); in sqlite3ExprCodeTarget()
4590 Expr *pLeft = pExpr->pLeft; in sqlite3ExprCodeTarget()
4597 if( pExpr->iTable!=n ){ in sqlite3ExprCodeTarget()
4599 pExpr->iTable, n); in sqlite3ExprCodeTarget()
4601 return pLeft->iTable + pExpr->iColumn; in sqlite3ExprCodeTarget()
4607 sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); in sqlite3ExprCodeTarget()
4629 exprCodeBetween(pParse, pExpr, target, 0, 0); in sqlite3ExprCodeTarget()
4633 if( !ExprHasProperty(pExpr, EP_Collate) in sqlite3ExprCodeTarget()
4634 && ALWAYS(pExpr->pLeft) in sqlite3ExprCodeTarget()
4635 && pExpr->pLeft->op==TK_FUNCTION in sqlite3ExprCodeTarget()
4637 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); in sqlite3ExprCodeTarget()
4645 pExpr = pExpr->pLeft; in sqlite3ExprCodeTarget()
4651 pExpr = pExpr->pLeft; in sqlite3ExprCodeTarget()
4685 assert( ExprUseYTab(pExpr) ); in sqlite3ExprCodeTarget()
4686 pTab = pExpr->y.pTab; in sqlite3ExprCodeTarget()
4687 iCol = pExpr->iColumn; in sqlite3ExprCodeTarget()
4688 p1 = pExpr->iTable * (pTab->nCol+1) + 1 in sqlite3ExprCodeTarget()
4691 assert( pExpr->iTable==0 || pExpr->iTable==1 ); in sqlite3ExprCodeTarget()
4698 (pExpr->iTable ? "new" : "old"), in sqlite3ExprCodeTarget()
4699 (pExpr->iColumn<0 ? "rowid" : pExpr->y.pTab->aCol[iCol].zCnName) in sqlite3ExprCodeTarget()
4729 AggInfo *pAggInfo = pExpr->pAggInfo; in sqlite3ExprCodeTarget()
4731 assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn ); in sqlite3ExprCodeTarget()
4733 inReg = pAggInfo->aCol[pExpr->iAgg].iMem; in sqlite3ExprCodeTarget()
4736 if( pExpr->pAggInfo->useSortingIdx ){ in sqlite3ExprCodeTarget()
4738 pAggInfo->aCol[pExpr->iAgg].iSorterColumn, in sqlite3ExprCodeTarget()
4744 addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); in sqlite3ExprCodeTarget()
4750 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); in sqlite3ExprCodeTarget()
4791 assert( ExprUseXList(pExpr) && pExpr->x.pList!=0 ); in sqlite3ExprCodeTarget()
4792 assert(pExpr->x.pList->nExpr > 0); in sqlite3ExprCodeTarget()
4793 pEList = pExpr->x.pList; in sqlite3ExprCodeTarget()
4797 if( (pX = pExpr->pLeft)!=0 ){ in sqlite3ExprCodeTarget()
4819 opCompare.pRight = aListelem[i].pExpr; in sqlite3ExprCodeTarget()
4821 pTest = aListelem[i].pExpr; in sqlite3ExprCodeTarget()
4826 testcase( aListelem[i+1].pExpr->op==TK_COLUMN ); in sqlite3ExprCodeTarget()
4827 sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); in sqlite3ExprCodeTarget()
4832 sqlite3ExprCode(pParse, pEList->a[nExpr-1].pExpr, target); in sqlite3ExprCodeTarget()
4843 assert( pExpr->affExpr==OE_Rollback in sqlite3ExprCodeTarget()
4844 || pExpr->affExpr==OE_Abort in sqlite3ExprCodeTarget()
4845 || pExpr->affExpr==OE_Fail in sqlite3ExprCodeTarget()
4846 || pExpr->affExpr==OE_Ignore in sqlite3ExprCodeTarget()
4853 if( pExpr->affExpr==OE_Abort ){ in sqlite3ExprCodeTarget()
4856 assert( !ExprHasProperty(pExpr, EP_IntValue) ); in sqlite3ExprCodeTarget()
4857 if( pExpr->affExpr==OE_Ignore ){ in sqlite3ExprCodeTarget()
4859 v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0); in sqlite3ExprCodeTarget()
4864 pExpr->affExpr, pExpr->u.zToken, 0, 0); in sqlite3ExprCodeTarget()
4895 Expr *pExpr, /* The expression to code when the VDBE initializes */ in sqlite3ExprCodeRunJustOnce() argument
4906 && sqlite3ExprCompare(0,pItem->pExpr,pExpr,-1)==0 in sqlite3ExprCodeRunJustOnce()
4912 pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); in sqlite3ExprCodeRunJustOnce()
4913 if( pExpr!=0 && ExprHasProperty(pExpr, EP_HasFunc) ){ in sqlite3ExprCodeRunJustOnce()
4921 sqlite3ExprCode(pParse, pExpr, regDest); in sqlite3ExprCodeRunJustOnce()
4924 sqlite3ExprDelete(pParse->db, pExpr); in sqlite3ExprCodeRunJustOnce()
4927 p = sqlite3ExprListAppend(pParse, p, pExpr); in sqlite3ExprCodeRunJustOnce()
4952 int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ in sqlite3ExprCodeTemp() argument
4954 pExpr = sqlite3ExprSkipCollateAndLikely(pExpr); in sqlite3ExprCodeTemp()
4956 && ALWAYS(pExpr!=0) in sqlite3ExprCodeTemp()
4957 && pExpr->op!=TK_REGISTER in sqlite3ExprCodeTemp()
4958 && sqlite3ExprIsConstantNotJoin(pExpr) in sqlite3ExprCodeTemp()
4961 r2 = sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); in sqlite3ExprCodeTemp()
4964 r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); in sqlite3ExprCodeTemp()
4980 void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ in sqlite3ExprCode() argument
4983 assert( pExpr==0 || !ExprHasVVAProperty(pExpr,EP_Immutable) ); in sqlite3ExprCode()
4987 inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); in sqlite3ExprCode()
4990 if( ALWAYS(pExpr) && ExprHasProperty(pExpr,EP_Subquery) ){ in sqlite3ExprCode()
5004 void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){ in sqlite3ExprCodeCopy() argument
5006 pExpr = sqlite3ExprDup(db, pExpr, 0); in sqlite3ExprCodeCopy()
5007 if( !db->mallocFailed ) sqlite3ExprCode(pParse, pExpr, target); in sqlite3ExprCodeCopy()
5008 sqlite3ExprDelete(db, pExpr); in sqlite3ExprCodeCopy()
5017 void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ in sqlite3ExprCodeFactorable() argument
5018 if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){ in sqlite3ExprCodeFactorable()
5019 sqlite3ExprCodeRunJustOnce(pParse, pExpr, target); in sqlite3ExprCodeFactorable()
5021 sqlite3ExprCodeCopy(pParse, pExpr, target); in sqlite3ExprCodeFactorable()
5062 Expr *pExpr = pItem->pExpr; in sqlite3ExprCodeExprList() local
5077 && sqlite3ExprIsConstantNotJoin(pExpr) in sqlite3ExprCodeExprList()
5079 sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i); in sqlite3ExprCodeExprList()
5081 int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); in sqlite3ExprCodeExprList()
5122 Expr *pExpr, /* The BETWEEN expression */ in exprCodeBetween() argument
5138 assert( ExprUseXList(pExpr) ); in exprCodeBetween()
5139 pDel = sqlite3ExprDup(db, pExpr->pLeft, 0); in exprCodeBetween()
5146 compLeft.pRight = pExpr->x.pList->a[0].pExpr; in exprCodeBetween()
5149 compRight.pRight = pExpr->x.pList->a[1].pExpr; in exprCodeBetween()
5192 void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ in sqlite3ExprIfTrue() argument
5201 if( NEVER(pExpr==0) ) return; /* No way this can happen */ in sqlite3ExprIfTrue()
5202 assert( !ExprHasVVAProperty(pExpr, EP_Immutable) ); in sqlite3ExprIfTrue()
5203 op = pExpr->op; in sqlite3ExprIfTrue()
5207 Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); in sqlite3ExprIfTrue()
5208 if( pAlt!=pExpr ){ in sqlite3ExprIfTrue()
5213 sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2, in sqlite3ExprIfTrue()
5215 sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); in sqlite3ExprIfTrue()
5219 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); in sqlite3ExprIfTrue()
5220 sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); in sqlite3ExprIfTrue()
5226 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); in sqlite3ExprIfTrue()
5233 isNot = pExpr->op2==TK_ISNOT; in sqlite3ExprIfTrue()
5234 isTrue = sqlite3ExprTruthValue(pExpr->pRight); in sqlite3ExprIfTrue()
5238 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, in sqlite3ExprIfTrue()
5241 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, in sqlite3ExprIfTrue()
5259 if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; in sqlite3ExprIfTrue()
5261 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprIfTrue()
5262 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2); in sqlite3ExprIfTrue()
5263 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, in sqlite3ExprIfTrue()
5264 r1, r2, dest, jumpIfNull, ExprHasProperty(pExpr,EP_Commuted)); in sqlite3ExprIfTrue()
5283 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprIfTrue()
5293 exprCodeBetween(pParse, pExpr, dest, sqlite3ExprIfTrue, jumpIfNull); in sqlite3ExprIfTrue()
5300 sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); in sqlite3ExprIfTrue()
5308 if( ExprAlwaysTrue(pExpr) ){ in sqlite3ExprIfTrue()
5310 }else if( ExprAlwaysFalse(pExpr) ){ in sqlite3ExprIfTrue()
5313 r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1); in sqlite3ExprIfTrue()
5335 void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ in sqlite3ExprIfFalse() argument
5344 if( pExpr==0 ) return; in sqlite3ExprIfFalse()
5345 assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); in sqlite3ExprIfFalse()
5365 op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1); in sqlite3ExprIfFalse()
5369 assert( pExpr->op!=TK_ISNULL || op==OP_NotNull ); in sqlite3ExprIfFalse()
5370 assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull ); in sqlite3ExprIfFalse()
5371 assert( pExpr->op!=TK_NE || op==OP_Eq ); in sqlite3ExprIfFalse()
5372 assert( pExpr->op!=TK_EQ || op==OP_Ne ); in sqlite3ExprIfFalse()
5373 assert( pExpr->op!=TK_LT || op==OP_Ge ); in sqlite3ExprIfFalse()
5374 assert( pExpr->op!=TK_LE || op==OP_Gt ); in sqlite3ExprIfFalse()
5375 assert( pExpr->op!=TK_GT || op==OP_Le ); in sqlite3ExprIfFalse()
5376 assert( pExpr->op!=TK_GE || op==OP_Lt ); in sqlite3ExprIfFalse()
5378 switch( pExpr->op ){ in sqlite3ExprIfFalse()
5381 Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); in sqlite3ExprIfFalse()
5382 if( pAlt!=pExpr ){ in sqlite3ExprIfFalse()
5384 }else if( pExpr->op==TK_AND ){ in sqlite3ExprIfFalse()
5386 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); in sqlite3ExprIfFalse()
5387 sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); in sqlite3ExprIfFalse()
5391 sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, in sqlite3ExprIfFalse()
5393 sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); in sqlite3ExprIfFalse()
5400 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); in sqlite3ExprIfFalse()
5407 isNot = pExpr->op2==TK_ISNOT; in sqlite3ExprIfFalse()
5408 isTrue = sqlite3ExprTruthValue(pExpr->pRight); in sqlite3ExprIfFalse()
5413 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, in sqlite3ExprIfFalse()
5418 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, in sqlite3ExprIfFalse()
5425 testcase( pExpr->op==TK_IS ); in sqlite3ExprIfFalse()
5426 testcase( pExpr->op==TK_ISNOT ); in sqlite3ExprIfFalse()
5427 op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ; in sqlite3ExprIfFalse()
5436 if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; in sqlite3ExprIfFalse()
5438 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprIfFalse()
5439 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2); in sqlite3ExprIfFalse()
5440 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, in sqlite3ExprIfFalse()
5441 r1, r2, dest, jumpIfNull,ExprHasProperty(pExpr,EP_Commuted)); in sqlite3ExprIfFalse()
5458 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1); in sqlite3ExprIfFalse()
5468 exprCodeBetween(pParse, pExpr, dest, sqlite3ExprIfFalse, jumpIfNull); in sqlite3ExprIfFalse()
5474 sqlite3ExprCodeIN(pParse, pExpr, dest, dest); in sqlite3ExprIfFalse()
5477 sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull); in sqlite3ExprIfFalse()
5485 if( ExprAlwaysFalse(pExpr) ){ in sqlite3ExprIfFalse()
5487 }else if( ExprAlwaysTrue(pExpr) ){ in sqlite3ExprIfFalse()
5490 r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1); in sqlite3ExprIfFalse()
5508 void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,int jumpIfNull){ in sqlite3ExprIfFalseDup() argument
5510 Expr *pCopy = sqlite3ExprDup(db, pExpr, 0); in sqlite3ExprIfFalseDup()
5533 const Expr *pExpr in exprCompareVariable() argument
5539 sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); in exprCompareVariable()
5695 Expr *pExprA = pA->a[i].pExpr; in sqlite3ExprListCompare()
5696 Expr *pExprB = pB->a[i].pExpr; in sqlite3ExprListCompare()
5745 if( exprImpliesNotNull(pParse, pList->a[0].pExpr, pNN, iTab, 1) in exprImpliesNotNull()
5746 || exprImpliesNotNull(pParse, pList->a[1].pExpr, pNN, iTab, 1) in exprImpliesNotNull()
5849 static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ in impliesNotNullRow() argument
5850 testcase( pExpr->op==TK_AGG_COLUMN ); in impliesNotNullRow()
5851 testcase( pExpr->op==TK_AGG_FUNCTION ); in impliesNotNullRow()
5852 if( ExprHasProperty(pExpr, EP_OuterON) ) return WRC_Prune; in impliesNotNullRow()
5853 switch( pExpr->op ){ in impliesNotNullRow()
5864 testcase( pExpr->op==TK_ISNOT ); in impliesNotNullRow()
5865 testcase( pExpr->op==TK_ISNULL ); in impliesNotNullRow()
5866 testcase( pExpr->op==TK_NOTNULL ); in impliesNotNullRow()
5867 testcase( pExpr->op==TK_IS ); in impliesNotNullRow()
5868 testcase( pExpr->op==TK_OR ); in impliesNotNullRow()
5869 testcase( pExpr->op==TK_VECTOR ); in impliesNotNullRow()
5870 testcase( pExpr->op==TK_CASE ); in impliesNotNullRow()
5871 testcase( pExpr->op==TK_IN ); in impliesNotNullRow()
5872 testcase( pExpr->op==TK_FUNCTION ); in impliesNotNullRow()
5873 testcase( pExpr->op==TK_TRUTH ); in impliesNotNullRow()
5876 if( pWalker->u.iCur==pExpr->iTable ){ in impliesNotNullRow()
5884 sqlite3WalkExpr(pWalker, pExpr->pLeft); in impliesNotNullRow()
5887 sqlite3WalkExpr(pWalker, pExpr->pRight); in impliesNotNullRow()
5893 if( sqlite3WalkExpr(pWalker, pExpr->pLeft)==WRC_Abort ){ in impliesNotNullRow()
5908 Expr *pLeft = pExpr->pLeft; in impliesNotNullRow()
5909 Expr *pRight = pExpr->pRight; in impliesNotNullRow()
5910 testcase( pExpr->op==TK_EQ ); in impliesNotNullRow()
5911 testcase( pExpr->op==TK_NE ); in impliesNotNullRow()
5912 testcase( pExpr->op==TK_LT ); in impliesNotNullRow()
5913 testcase( pExpr->op==TK_LE ); in impliesNotNullRow()
5914 testcase( pExpr->op==TK_GT ); in impliesNotNullRow()
5915 testcase( pExpr->op==TK_GE ); in impliesNotNullRow()
5996 static int exprIdxCover(Walker *pWalker, Expr *pExpr){ in exprIdxCover() argument
5997 if( pExpr->op==TK_COLUMN in exprIdxCover()
5998 && pExpr->iTable==pWalker->u.pIdxCover->iCur in exprIdxCover()
5999 && sqlite3TableColumnToIndex(pWalker->u.pIdxCover->pIdx, pExpr->iColumn)<0 in exprIdxCover()
6018 Expr *pExpr, /* The index to be tested */ in sqlite3ExprCoveredByIndex() argument
6029 sqlite3WalkExpr(&w, pExpr); in sqlite3ExprCoveredByIndex()
6089 static int exprRefToSrcList(Walker *pWalker, Expr *pExpr){ in exprRefToSrcList() argument
6090 if( pExpr->op==TK_COLUMN in exprRefToSrcList()
6091 || pExpr->op==TK_AGG_COLUMN in exprRefToSrcList()
6098 if( pExpr->iTable==pSrc->a[i].iCursor ){ in exprRefToSrcList()
6103 for(i=0; i<p->nExclude && p->aiExclude[i]!=pExpr->iTable; i++){} in exprRefToSrcList()
6126 int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){ in sqlite3ReferencesSrcList() argument
6138 assert( pExpr->op==TK_AGG_FUNCTION ); in sqlite3ReferencesSrcList()
6139 assert( ExprUseXList(pExpr) ); in sqlite3ReferencesSrcList()
6140 sqlite3WalkExprList(&w, pExpr->x.pList); in sqlite3ReferencesSrcList()
6142 if( ExprHasProperty(pExpr, EP_WinFunc) ){ in sqlite3ReferencesSrcList()
6143 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); in sqlite3ReferencesSrcList()
6169 static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ in agginfoPersistExprCb() argument
6170 if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) in agginfoPersistExprCb()
6171 && pExpr->pAggInfo!=0 in agginfoPersistExprCb()
6173 AggInfo *pAggInfo = pExpr->pAggInfo; in agginfoPersistExprCb()
6174 int iAgg = pExpr->iAgg; in agginfoPersistExprCb()
6177 if( pExpr->op!=TK_AGG_FUNCTION ){ in agginfoPersistExprCb()
6178 assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW ); in agginfoPersistExprCb()
6180 if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ in agginfoPersistExprCb()
6181 pExpr = sqlite3ExprDup(db, pExpr, 0); in agginfoPersistExprCb()
6182 if( pExpr ){ in agginfoPersistExprCb()
6183 pAggInfo->aCol[iAgg].pCExpr = pExpr; in agginfoPersistExprCb()
6184 sqlite3ExprDeferredDelete(pParse, pExpr); in agginfoPersistExprCb()
6188 assert( pExpr->op==TK_AGG_FUNCTION ); in agginfoPersistExprCb()
6190 if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ in agginfoPersistExprCb()
6191 pExpr = sqlite3ExprDup(db, pExpr, 0); in agginfoPersistExprCb()
6192 if( pExpr ){ in agginfoPersistExprCb()
6193 pAggInfo->aFunc[iAgg].pFExpr = pExpr; in agginfoPersistExprCb()
6194 sqlite3ExprDeferredDelete(pParse, pExpr); in agginfoPersistExprCb()
6250 static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ in analyzeAggregate() argument
6258 switch( pExpr->op ){ in analyzeAggregate()
6262 testcase( pExpr->op==TK_AGG_COLUMN ); in analyzeAggregate()
6263 testcase( pExpr->op==TK_COLUMN ); in analyzeAggregate()
6264 testcase( pExpr->op==TK_IF_NULL_ROW ); in analyzeAggregate()
6271 assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); in analyzeAggregate()
6272 if( pExpr->iTable==pItem->iCursor ){ in analyzeAggregate()
6282 if( pCol->iTable==pExpr->iTable in analyzeAggregate()
6283 && pCol->iColumn==pExpr->iColumn in analyzeAggregate()
6284 && pExpr->op!=TK_IF_NULL_ROW in analyzeAggregate()
6293 assert( ExprUseYTab(pExpr) ); in analyzeAggregate()
6294 pCol->pTab = pExpr->y.pTab; in analyzeAggregate()
6295 pCol->iTable = pExpr->iTable; in analyzeAggregate()
6296 pCol->iColumn = pExpr->iColumn; in analyzeAggregate()
6299 pCol->pCExpr = pExpr; in analyzeAggregate()
6300 if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ in analyzeAggregate()
6306 Expr *pE = pTerm->pExpr; in analyzeAggregate()
6308 && pE->iTable==pExpr->iTable in analyzeAggregate()
6309 && pE->iColumn==pExpr->iColumn in analyzeAggregate()
6325 ExprSetVVAProperty(pExpr, EP_NoReduce); in analyzeAggregate()
6326 pExpr->pAggInfo = pAggInfo; in analyzeAggregate()
6327 if( pExpr->op==TK_COLUMN ){ in analyzeAggregate()
6328 pExpr->op = TK_AGG_COLUMN; in analyzeAggregate()
6330 pExpr->iAgg = (i16)k; in analyzeAggregate()
6339 && pWalker->walkerDepth==pExpr->op2 in analyzeAggregate()
6346 if( pItem->pFExpr==pExpr ) break; in analyzeAggregate()
6347 if( sqlite3ExprCompare(0, pItem->pFExpr, pExpr, -1)==0 ){ in analyzeAggregate()
6357 assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); in analyzeAggregate()
6359 pItem->pFExpr = pExpr; in analyzeAggregate()
6361 assert( ExprUseUToken(pExpr) ); in analyzeAggregate()
6363 pExpr->u.zToken, in analyzeAggregate()
6364 pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0); in analyzeAggregate()
6365 if( pExpr->flags & EP_Distinct ){ in analyzeAggregate()
6374 assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); in analyzeAggregate()
6375 ExprSetVVAProperty(pExpr, EP_NoReduce); in analyzeAggregate()
6376 pExpr->iAgg = (i16)i; in analyzeAggregate()
6377 pExpr->pAggInfo = pAggInfo; in analyzeAggregate()
6396 void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ in sqlite3ExprAnalyzeAggregates() argument
6405 sqlite3WalkExpr(&w, pExpr); in sqlite3ExprAnalyzeAggregates()
6419 sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr); in sqlite3ExprAnalyzeAggList()