Lines Matching defs:pExpr

59 void sqliteExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
62 /* Note: pExpr might be NULL due to a prior malloc failure */
63 if( pExpr && pRight->z && pLeft->z ){
65 pExpr->span.z = pLeft->z;
66 pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z);
68 pExpr->span.z = 0;
167 pItem->pExpr = pNewExpr = sqliteExprDup(pOldExpr = p->a[i].pExpr);
251 ExprList *sqliteExprListAppend(ExprList *pList, Expr *pExpr, Token *pName){
255 /* sqliteExprDelete(pExpr); // Leak memory if malloc fails */
264 /* sqliteExprDelete(pExpr); // Leak memory if malloc fails */
270 if( pExpr || pName ){
273 pItem->pExpr = pExpr;
291 sqliteExprDelete(pList->a[i].pExpr);
325 if( !sqliteExprIsConstant(p->pList->a[i].pExpr) ) return 0;
388 ** that name in the set of source tables in pSrcList and make the pExpr
390 ** are made to pExpr:
392 ** pExpr->iDb Set the index in db->aDb[] of the database holding
394 ** pExpr->iTable Set to the cursor number for the table obtained
396 ** pExpr->iColumn Set to the column number within the table.
397 ** pExpr->dataType Set to the appropriate data type for the column.
398 ** pExpr->op Set to TK_COLUMN.
399 ** pExpr->pLeft Any expression this points to is deleted
400 ** pExpr->pRight Any expression this points to is deleted.
419 Expr *pExpr /* Make this EXPR node point to the selected column */
450 pExpr->iTable = -1;
471 pExpr->iTable = pItem->iCursor;
472 pExpr->iDb = pTab->iDb;
477 pExpr->iTable = pItem->iCursor;
478 pExpr->iDb = pTab->iDb;
480 pExpr->iColumn = j==pTab->iPKey ? -1 : j;
481 pExpr->dataType = pCol->sortOrder & SQLITE_SO_TYPEMASK;
494 pExpr->iTable = pTriggerStack->newIdx;
498 pExpr->iTable = pTriggerStack->oldIdx;
507 pExpr->iDb = pTab->iDb;
512 pExpr->iColumn = j==pTab->iPKey ? -1 : j;
513 pExpr->dataType = pCol->sortOrder & SQLITE_SO_TYPEMASK;
525 pExpr->iColumn = -1;
526 pExpr->dataType = SQLITE_SO_NUM;
536 ** In cases like this, replace pExpr with a copy of the expression that
545 assert( pExpr->pLeft==0 && pExpr->pRight==0 );
546 pExpr->op = TK_AS;
547 pExpr->iColumn = j;
548 pExpr->pLeft = sqliteExprDup(pEList->a[j].pExpr);
561 ** pExpr.
592 sqliteExprDelete(pExpr->pLeft);
593 pExpr->pLeft = 0;
594 sqliteExprDelete(pExpr->pRight);
595 pExpr->pRight = 0;
596 pExpr->op = TK_COLUMN;
597 sqliteAuthRead(pParse, pExpr, pSrcList);
636 Expr *pExpr /* The expression to be analyzed. */
640 if( pExpr==0 || pSrcList==0 ) return 0;
644 switch( pExpr->op ){
650 if( pExpr->token.z[0]=='\'' ) break;
656 if( lookupName(pParse, 0, 0, &pExpr->token, pSrcList, pEList, pExpr) ){
671 pRight = pExpr->pRight;
674 pTable = &pExpr->pLeft->token;
678 pDb = &pExpr->pLeft->token;
682 if( lookupName(pParse, pDb, pTable, pColumn, pSrcList, 0, pExpr) ){
691 if( sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pLeft) ){
694 if( pExpr->pSelect ){
701 pExpr->iTable = pParse->nTab++;
702 sqliteVdbeAddOp(v, OP_OpenTemp, pExpr->iTable, 1);
703 sqliteSelect(pParse, pExpr->pSelect, SRT_Set, pExpr->iTable, 0,0,0);
704 }else if( pExpr->pList ){
711 for(i=0; i<pExpr->pList->nExpr; i++){
712 Expr *pE2 = pExpr->pList->a[i].pExpr;
722 iSet = pExpr->iTable = pParse->nSet++;
723 for(i=0; i<pExpr->pList->nExpr; i++){
724 Expr *pE2 = pExpr->pList->a[i].pExpr;
752 pExpr->iColumn = pParse->nMem++;
753 if( sqliteSelect(pParse, pExpr->pSelect, SRT_Mem, pExpr->iColumn,0,0,0) ){
761 if( pExpr->pLeft
762 && sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pLeft) ){
765 if( pExpr->pRight
766 && sqliteExprResolveIds(pParse, pSrcList, pEList, pExpr->pRight) ){
769 if( pExpr->pList ){
771 ExprList *pList = pExpr->pList;
773 Expr *pArg = pList->a[i].pExpr;
785 ** pExpr is a node that defines a function of some kind. It might
792 static void getFunctionName(Expr *pExpr, const char **pzName, int *pnName){
793 switch( pExpr->op ){
795 *pzName = pExpr->token.z;
796 *pnName = pExpr->token.n;
826 int sqliteExprCheck(Parse *pParse, Expr *pExpr, int allowAgg, int *pIsAgg){
828 if( pExpr==0 ) return 0;
829 switch( pExpr->op ){
833 int n = pExpr->pList ? pExpr->pList->nExpr : 0; /* Number of arguments */
842 getFunctionName(pExpr, &zId, &nId);
867 pExpr->op = TK_AGG_FUNCTION;
871 nErr = sqliteExprCheck(pParse, pExpr->pList->a[i].pExpr,
878 pExpr->dataType =
879 sqliteExprType(pExpr->pList->a[pDef->dataType].pExpr);
881 pExpr->dataType = SQLITE_SO_NUM;
886 if( sqliteExprType(pExpr->pList->a[i].pExpr)==SQLITE_SO_NUM ){
887 pExpr->dataType = SQLITE_SO_NUM;
892 pExpr->dataType = SQLITE_SO_NUM;
894 pExpr->dataType = SQLITE_SO_TEXT;
898 if( pExpr->pLeft ){
899 nErr = sqliteExprCheck(pParse, pExpr->pLeft, allowAgg, pIsAgg);
901 if( nErr==0 && pExpr->pRight ){
902 nErr = sqliteExprCheck(pParse, pExpr->pRight, allowAgg, pIsAgg);
904 if( nErr==0 && pExpr->pList ){
905 int n = pExpr->pList->nExpr;
908 Expr *pE2 = pExpr->pList->a[i].pExpr;
984 p = p->pSelect->pEList->a[0].pExpr;
995 if( sqliteExprType(pList->a[i].pExpr)==SQLITE_SO_NUM ){
1014 void sqliteExprCode(Parse *pParse, Expr *pExpr){
1017 if( v==0 || pExpr==0 ) return;
1018 switch( pExpr->op ){
1043 switch( pExpr->op ){
1046 sqliteVdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
1047 }else if( pExpr->iColumn>=0 ){
1048 sqliteVdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn);
1050 sqliteVdbeAddOp(v, OP_Recno, pExpr->iTable, 0);
1057 if( pExpr->op==TK_INTEGER && sqliteFitsIn32Bits(pExpr->token.z) ){
1058 sqliteVdbeAddOp(v, OP_Integer, atoi(pExpr->token.z), 0);
1062 assert( pExpr->token.z );
1063 sqliteVdbeChangeP3(v, -1, pExpr->token.z, pExpr->token.n);
1072 sqliteVdbeAddOp(v, OP_Variable, pExpr->iTable, 0);
1081 if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
1095 sqliteExprCode(pParse, pExpr->pLeft);
1096 sqliteExprCode(pParse, pExpr->pRight);
1102 sqliteExprCode(pParse, pExpr->pRight);
1103 sqliteExprCode(pParse, pExpr->pLeft);
1108 sqliteExprCode(pParse, pExpr->pLeft);
1109 sqliteExprCode(pParse, pExpr->pRight);
1114 assert( pExpr->pLeft );
1115 if( pExpr->pLeft->op==TK_FLOAT || pExpr->pLeft->op==TK_INTEGER ){
1116 Token *p = &pExpr->pLeft->token;
1119 if( pExpr->pLeft->op==TK_INTEGER && sqliteFitsIn32Bits(z) ){
1132 sqliteExprCode(pParse, pExpr->pLeft);
1140 sqliteExprCode(pParse, pExpr->pLeft);
1147 sqliteVdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
1153 ExprList *pList = pExpr->pList;
1158 getFunctionName(pExpr, &zId, &nId);
1166 sqliteVdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);
1172 sqliteExprCode(pParse, pExpr->pLeft);
1178 if( pExpr->pSelect ){
1179 sqliteVdbeAddOp(v, OP_Found, pExpr->iTable, addr+6);
1181 sqliteVdbeAddOp(v, OP_SetFound, pExpr->iTable, addr+6);
1187 sqliteExprCode(pParse, pExpr->pLeft);
1189 sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
1192 sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
1199 sqliteExprCode(pParse, pExpr->pLeft);
1209 assert(pExpr->pList);
1210 assert((pExpr->pList->nExpr % 2) == 0);
1211 assert(pExpr->pList->nExpr > 0);
1212 nExpr = pExpr->pList->nExpr;
1214 if( pExpr->pLeft ){
1215 sqliteExprCode(pParse, pExpr->pLeft);
1218 sqliteExprCode(pParse, pExpr->pList->a[i].pExpr);
1219 if( pExpr->pLeft ){
1226 sqliteExprCode(pParse, pExpr->pList->a[i+1].pExpr);
1231 if( pExpr->pLeft ){
1234 if( pExpr->pRight ){
1235 sqliteExprCode(pParse, pExpr->pRight);
1249 if( pExpr->iColumn == OE_Rollback ||
1250 pExpr->iColumn == OE_Abort ||
1251 pExpr->iColumn == OE_Fail ){
1252 sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn,
1253 pExpr->token.z, pExpr->token.n);
1256 assert( pExpr->iColumn == OE_Ignore );
1285 sqliteExprCode(pParse, pItem->pExpr);
1288 sqliteExprType(pItem->pExpr)==SQLITE_SO_NUM ? "numeric" : "text",
1303 void sqliteExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
1306 if( v==0 || pExpr==0 ) return;
1307 switch( pExpr->op ){
1318 switch( pExpr->op ){
1321 sqliteExprIfFalse(pParse, pExpr->pLeft, d2, !jumpIfNull);
1322 sqliteExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
1327 sqliteExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
1328 sqliteExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
1332 sqliteExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
1341 sqliteExprCode(pParse, pExpr->pLeft);
1342 sqliteExprCode(pParse, pExpr->pRight);
1343 if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
1351 sqliteExprCode(pParse, pExpr->pLeft);
1357 sqliteExprCode(pParse, pExpr->pLeft);
1362 if( pExpr->pSelect ){
1363 sqliteVdbeAddOp(v, OP_Found, pExpr->iTable, dest);
1365 sqliteVdbeAddOp(v, OP_SetFound, pExpr->iTable, dest);
1371 sqliteExprCode(pParse, pExpr->pLeft);
1373 sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
1375 sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
1383 sqliteExprCode(pParse, pExpr);
1398 void sqliteExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
1401 if( v==0 || pExpr==0 ) return;
1402 switch( pExpr->op ){
1413 switch( pExpr->op ){
1415 sqliteExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
1416 sqliteExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
1421 sqliteExprIfTrue(pParse, pExpr->pLeft, d2, !jumpIfNull);
1422 sqliteExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
1427 sqliteExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
1436 if( pParse->db->file_format>=4 && sqliteExprType(pExpr)==SQLITE_SO_TEXT ){
1445 sqliteExprCode(pParse, pExpr->pLeft);
1446 sqliteExprCode(pParse, pExpr->pRight);
1452 sqliteExprCode(pParse, pExpr->pLeft);
1458 sqliteExprCode(pParse, pExpr->pLeft);
1463 if( pExpr->pSelect ){
1464 sqliteVdbeAddOp(v, OP_NotFound, pExpr->iTable, dest);
1466 sqliteVdbeAddOp(v, OP_SetNotFound, pExpr->iTable, dest);
1472 sqliteExprCode(pParse, pExpr->pLeft);
1474 sqliteExprCode(pParse, pExpr->pList->a[0].pExpr);
1479 sqliteExprCode(pParse, pExpr->pList->a[1].pExpr);
1484 sqliteExprCode(pParse, pExpr);
1509 if( !sqliteExprCompare(pA->pList->a[i].pExpr, pB->pList->a[i].pExpr) ){
1553 int sqliteExprAnalyzeAggregates(Parse *pParse, Expr *pExpr){
1558 if( pExpr==0 ) return 0;
1559 switch( pExpr->op ){
1564 if( aAgg[i].pExpr->iTable==pExpr->iTable
1565 && aAgg[i].pExpr->iColumn==pExpr->iColumn ){
1573 pParse->aAgg[i].pExpr = pExpr;
1575 pExpr->iAgg = i;
1582 if( sqliteExprCompare(aAgg[i].pExpr, pExpr) ){
1590 pParse->aAgg[i].pExpr = pExpr;
1592 pExpr->token.z, pExpr->token.n,
1593 pExpr->pList ? pExpr->pList->nExpr : 0, 0);
1595 pExpr->iAgg = i;
1599 if( pExpr->pLeft ){
1600 nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pLeft);
1602 if( nErr==0 && pExpr->pRight ){
1603 nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pRight);
1605 if( nErr==0 && pExpr->pList ){
1606 int n = pExpr->pList->nExpr;
1609 nErr = sqliteExprAnalyzeAggregates(pParse, pExpr->pList->a[i].pExpr);