亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? expr.c

?? 新版輕量級嵌入式數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
** Expr.opcode for such nodes is changed to TK_COLUMN.  The Expr.iTable** value is changed to the index of the referenced table in pTabList** plus the "base" value.  The base value will ultimately become the** VDBE cursor number for a cursor that is pointing into the referenced** table.  The Expr.iColumn value is changed to the index of the column ** of the referenced table.  The Expr.iColumn value for the special** ROWID column is -1.  Any INTEGER PRIMARY KEY column is tried as an** alias for ROWID.**** Also resolve function names and check the functions for proper** usage.  Make sure all function names are recognized and all functions** have the correct number of arguments.  Leave an error message** in pParse->zErrMsg if anything is amiss.  Return the number of errors.**** If the expression contains aggregate functions then set the EP_Agg** property on the expression.*/int sqlite3ExprResolveNames(  NameContext *pNC,       /* Namespace to resolve expressions in. */  Expr *pExpr             /* The expression to be analyzed. */){  int savedHasAgg;  if( pExpr==0 ) return 0;  savedHasAgg = pNC->hasAgg;  pNC->hasAgg = 0;  walkExprTree(pExpr, nameResolverStep, pNC);  if( pNC->nErr>0 ){    ExprSetProperty(pExpr, EP_Error);  }  if( pNC->hasAgg ){    ExprSetProperty(pExpr, EP_Agg);  }else if( savedHasAgg ){    pNC->hasAgg = 1;  }  return ExprHasProperty(pExpr, EP_Error);}/*** A pointer instance of this structure is used to pass information** through walkExprTree into codeSubqueryStep().*/typedef struct QueryCoder QueryCoder;struct QueryCoder {  Parse *pParse;       /* The parsing context */  NameContext *pNC;    /* Namespace of first enclosing query */};/*** Generate code for scalar subqueries used as an expression** and IN operators.  Examples:****     (SELECT a FROM b)          -- subquery**     EXISTS (SELECT a FROM b)   -- EXISTS subquery**     x IN (4,5,11)              -- IN operator with list on right-hand side**     x IN (SELECT a FROM b)     -- IN operator with subquery on the right**** The pExpr parameter describes the expression that contains the IN** operator or subquery.*/#ifndef SQLITE_OMIT_SUBQUERYvoid sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){  int testAddr = 0;                       /* One-time test address */  Vdbe *v = sqlite3GetVdbe(pParse);  if( v==0 ) return;  /* This code must be run in its entirety every time it is encountered  ** if any of the following is true:  **  **    *  The right-hand side is a correlated subquery  **    *  The right-hand side is an expression list containing variables  **    *  We are inside a trigger  **  ** If all of the above are false, then we can run this code just once  ** save the results, and reuse the same result on subsequent invocations.  */  if( !ExprHasAnyProperty(pExpr, EP_VarSelect) && !pParse->trigStack ){    int mem = pParse->nMem++;    sqlite3VdbeAddOp(v, OP_MemLoad, mem, 0);    testAddr = sqlite3VdbeAddOp(v, OP_If, 0, 0);    assert( testAddr>0 || sqlite3MallocFailed() );    sqlite3VdbeAddOp(v, OP_MemInt, 1, mem);  }  switch( pExpr->op ){    case TK_IN: {      char affinity;      KeyInfo keyInfo;      int addr;        /* Address of OP_OpenVirtual instruction */      affinity = sqlite3ExprAffinity(pExpr->pLeft);      /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'      ** expression it is handled the same way. A virtual table is       ** filled with single-field index keys representing the results      ** from the SELECT or the <exprlist>.      **      ** If the 'x' expression is a column value, or the SELECT...      ** statement returns a column value, then the affinity of that      ** column is used to build the index keys. If both 'x' and the      ** SELECT... statement are columns, then numeric affinity is used      ** if either column has NUMERIC or INTEGER affinity. If neither      ** 'x' nor the SELECT... statement are columns, then numeric affinity      ** is used.      */      pExpr->iTable = pParse->nTab++;      addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, pExpr->iTable, 0);      memset(&keyInfo, 0, sizeof(keyInfo));      keyInfo.nField = 1;      sqlite3VdbeAddOp(v, OP_SetNumColumns, pExpr->iTable, 1);      if( pExpr->pSelect ){        /* Case 1:     expr IN (SELECT ...)        **        ** Generate code to write the results of the select into the temporary        ** table allocated and opened above.        */        int iParm = pExpr->iTable +  (((int)affinity)<<16);        ExprList *pEList;        assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );        sqlite3Select(pParse, pExpr->pSelect, SRT_Set, iParm, 0, 0, 0, 0);        pEList = pExpr->pSelect->pEList;        if( pEList && pEList->nExpr>0 ){           keyInfo.aColl[0] = binaryCompareCollSeq(pParse, pExpr->pLeft,              pEList->a[0].pExpr);        }      }else if( pExpr->pList ){        /* Case 2:     expr IN (exprlist)        **	** For each expression, build an index key from the evaluation and        ** store it in the temporary table. If <expr> is a column, then use        ** that columns affinity when building index keys. If <expr> is not        ** a column, use numeric affinity.        */        int i;        ExprList *pList = pExpr->pList;        struct ExprList_item *pItem;        if( !affinity ){          affinity = SQLITE_AFF_NUMERIC;        }        keyInfo.aColl[0] = pExpr->pLeft->pColl;        /* Loop through each expression in <exprlist>. */        for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){          Expr *pE2 = pItem->pExpr;          /* If the expression is not constant then we will need to          ** disable the test that was generated above that makes sure          ** this code only executes once.  Because for a non-constant          ** expression we need to rerun this code each time.          */          if( testAddr>0 && !sqlite3ExprIsConstant(pE2) ){            sqlite3VdbeChangeToNoop(v, testAddr-1, 3);            testAddr = 0;          }          /* Evaluate the expression and insert it into the temp table */          sqlite3ExprCode(pParse, pE2);          sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &affinity, 1);          sqlite3VdbeAddOp(v, OP_IdxInsert, pExpr->iTable, 0);        }      }      sqlite3VdbeChangeP3(v, addr, (void *)&keyInfo, P3_KEYINFO);      break;    }    case TK_EXISTS:    case TK_SELECT: {      /* This has to be a scalar SELECT.  Generate code to put the      ** value of this select in a memory cell and record the number      ** of the memory cell in iColumn.      */      static const Token one = { (u8*)"1", 0, 1 };      Select *pSel;      int iMem;      int sop;      pExpr->iColumn = iMem = pParse->nMem++;      pSel = pExpr->pSelect;      if( pExpr->op==TK_SELECT ){        sop = SRT_Mem;        sqlite3VdbeAddOp(v, OP_MemNull, iMem, 0);        VdbeComment((v, "# Init subquery result"));      }else{        sop = SRT_Exists;        sqlite3VdbeAddOp(v, OP_MemInt, 0, iMem);        VdbeComment((v, "# Init EXISTS result"));      }      sqlite3ExprDelete(pSel->pLimit);      pSel->pLimit = sqlite3Expr(TK_INTEGER, 0, 0, &one);      sqlite3Select(pParse, pSel, sop, iMem, 0, 0, 0, 0);      break;    }  }  if( testAddr ){    sqlite3VdbeJumpHere(v, testAddr);  }  return;}#endif /* SQLITE_OMIT_SUBQUERY *//*** Generate an instruction that will put the integer describe by** text z[0..n-1] on the stack.*/static void codeInteger(Vdbe *v, const char *z, int n){  int i;  if( sqlite3GetInt32(z, &i) ){    sqlite3VdbeAddOp(v, OP_Integer, i, 0);  }else if( sqlite3FitsIn64Bits(z) ){    sqlite3VdbeOp3(v, OP_Int64, 0, 0, z, n);  }else{    sqlite3VdbeOp3(v, OP_Real, 0, 0, z, n);  }}/*** Generate code into the current Vdbe to evaluate the given** expression and leave the result on the top of stack.**** This code depends on the fact that certain token values (ex: TK_EQ)** are the same as opcode values (ex: OP_Eq) that implement the corresponding** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in** the make process cause these values to align.  Assert()s in the code** below verify that the numbers are aligned correctly.*/void sqlite3ExprCode(Parse *pParse, Expr *pExpr){  Vdbe *v = pParse->pVdbe;  int op;  int stackChng = 1;    /* Amount of change to stack depth */  if( v==0 ) return;  if( pExpr==0 ){    sqlite3VdbeAddOp(v, OP_Null, 0, 0);    return;  }  op = pExpr->op;  switch( op ){    case TK_AGG_COLUMN: {      AggInfo *pAggInfo = pExpr->pAggInfo;      struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];      if( !pAggInfo->directMode ){        sqlite3VdbeAddOp(v, OP_MemLoad, pCol->iMem, 0);        break;      }else if( pAggInfo->useSortingIdx ){        sqlite3VdbeAddOp(v, OP_Column, pAggInfo->sortingIdx,                              pCol->iSorterColumn);        break;      }      /* Otherwise, fall thru into the TK_COLUMN case */    }    case TK_COLUMN: {      if( pExpr->iTable<0 ){        /* This only happens when coding check constraints */        assert( pParse->ckOffset>0 );        sqlite3VdbeAddOp(v, OP_Dup, pParse->ckOffset-pExpr->iColumn-1, 1);      }else if( pExpr->iColumn>=0 ){        Table *pTab = pExpr->pTab;        int iCol = pExpr->iColumn;        sqlite3VdbeAddOp(v, OP_Column, pExpr->iTable, iCol);        sqlite3ColumnDefault(v, pTab, iCol);#ifndef SQLITE_OMIT_FLOATING_POINT        if( pTab && pTab->aCol[iCol].affinity==SQLITE_AFF_REAL ){          sqlite3VdbeAddOp(v, OP_RealAffinity, 0, 0);        }#endif      }else{        sqlite3VdbeAddOp(v, OP_Rowid, pExpr->iTable, 0);      }      break;    }    case TK_INTEGER: {      codeInteger(v, (char*)pExpr->token.z, pExpr->token.n);      break;    }    case TK_FLOAT:    case TK_STRING: {      assert( TK_FLOAT==OP_Real );      assert( TK_STRING==OP_String8 );      sqlite3DequoteExpr(pExpr);      sqlite3VdbeOp3(v, op, 0, 0, (char*)pExpr->token.z, pExpr->token.n);      break;    }    case TK_NULL: {      sqlite3VdbeAddOp(v, OP_Null, 0, 0);      break;    }#ifndef SQLITE_OMIT_BLOB_LITERAL    case TK_BLOB: {      int n;      const char *z;      assert( TK_BLOB==OP_HexBlob );      n = pExpr->token.n - 3;      z = (char*)pExpr->token.z + 2;      assert( n>=0 );      if( n==0 ){        z = "";      }      sqlite3VdbeOp3(v, op, 0, 0, z, n);      break;    }#endif    case TK_VARIABLE: {      sqlite3VdbeAddOp(v, OP_Variable, pExpr->iTable, 0);      if( pExpr->token.n>1 ){        sqlite3VdbeChangeP3(v, -1, (char*)pExpr->token.z, pExpr->token.n);      }      break;    }    case TK_REGISTER: {      sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iTable, 0);      break;    }#ifndef SQLITE_OMIT_CAST    case TK_CAST: {      /* Expressions of the form:   CAST(pLeft AS token) */      int aff, to_op;      sqlite3ExprCode(pParse, pExpr->pLeft);      aff = sqlite3AffinityType(&pExpr->token);      to_op = aff - SQLITE_AFF_TEXT + OP_ToText;      assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );      assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );      assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );      assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );      assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );      sqlite3VdbeAddOp(v, to_op, 0, 0);      stackChng = 0;      break;    }#endif /* SQLITE_OMIT_CAST */    case TK_LT:    case TK_LE:    case TK_GT:    case TK_GE:    case TK_NE:    case TK_EQ: {      assert( TK_LT==OP_Lt );      assert( TK_LE==OP_Le );      assert( TK_GT==OP_Gt );      assert( TK_GE==OP_Ge );      assert( TK_EQ==OP_Eq );      assert( TK_NE==OP_Ne );      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite3ExprCode(pParse, pExpr->pRight);      codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, 0, 0);      stackChng = -1;      break;    }    case TK_AND:    case TK_OR:    case TK_PLUS:    case TK_STAR:    case TK_MINUS:    case TK_REM:    case TK_BITAND:    case TK_BITOR:    case TK_SLASH:    case TK_LSHIFT:    case TK_RSHIFT:     case TK_CONCAT: {      assert( TK_AND==OP_And );      assert( TK_OR==OP_Or );      assert( TK_PLUS==OP_Add );      assert( TK_MINUS==OP_Subtract );      assert( TK_REM==OP_Remainder );      assert( TK_BITAND==OP_BitAnd );      assert( TK_BITOR==OP_BitOr );      assert( TK_SLASH==OP_Divide );      assert( TK_LSHIFT==OP_ShiftLeft );      assert( TK_RSHIFT==OP_ShiftRight );      assert( TK_CONCAT==OP_Concat );      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite3ExprCode(pParse, pExpr->pRight);      sqlite3VdbeAddOp(v, op, 0, 0);      stackChng = -1;      break;    }    case TK_UMINUS: {      Expr *pLeft = pExpr->pLeft;      assert( pLeft );      if( pLeft->op==TK_FLOAT || pLeft->op==TK_INTEGER ){        Token *p = &pLeft->token;        char *z = sqlite3MPrintf("-%.*s", p->n, p->z);        if( pLeft->op==TK_FLOAT ){          sqlite3VdbeOp3(v, OP_Real, 0, 0, z, p->n+1);        }else{          codeInteger(v, z, p->n+1);        }        sqliteFree(z);        break;      }      /* Fall through into TK_NOT */    }    case TK_BITNOT:    case TK_NOT: {      assert( TK_BITNOT==OP_BitNot );      assert( TK_NOT==OP_Not );      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite3VdbeAddOp(v, op, 0, 0);      stackChng = 0;      break;    }    case TK_ISNULL:    case TK_NOTNULL: {      int dest;      assert( TK_ISNULL==OP_IsNull );      assert( TK_NOTNULL==OP_NotNull );      sqlite3VdbeAddOp(v, OP_Integer, 1, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久热成人在线视频| www.欧美亚洲| www.亚洲免费av| 欧美群妇大交群中文字幕| 2023国产精品自拍| 欧美在线制服丝袜| 亚洲h精品动漫在线观看| 欧美无砖砖区免费| 99国产欧美另类久久久精品| 亚洲成人黄色影院| 国产真实乱对白精彩久久| 91成人国产精品| 国产欧美综合在线观看第十页| 午夜视黄欧洲亚洲| 色婷婷综合五月| 最新不卡av在线| 国产.精品.日韩.另类.中文.在线.播放| 69堂国产成人免费视频| 亚洲精品免费电影| a级精品国产片在线观看| 久久久久九九视频| 最新中文字幕一区二区三区| 欧美一区二区三区白人| 91精品国产综合久久蜜臀| 99re视频这里只有精品| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲人午夜精品天堂一二香蕉| 美女免费视频一区二区| 欧美色涩在线第一页| 亚洲一区二区高清| 欧美制服丝袜第一页| 亚洲综合在线视频| 日本久久一区二区| 一区二区三区中文字幕精品精品| 懂色av一区二区三区免费观看 | 亚洲中国最大av网站| 一本色道久久综合精品竹菊| 亚洲欧美经典视频| 欧美三级中文字幕在线观看| 亚洲午夜电影在线观看| 911精品国产一区二区在线| 肉肉av福利一精品导航| 日韩一区二区三区四区五区六区| 免费在线观看精品| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 天天色综合成人网| 日韩一区二区精品葵司在线| 麻豆国产一区二区| 国产欧美日韩不卡| 色妞www精品视频| 性做久久久久久| 日韩欧美精品三级| 国产成人一区在线| 夜夜精品浪潮av一区二区三区| 欧美日韩在线播放三区四区| 日日夜夜免费精品| 精品福利二区三区| 99国产精品99久久久久久| 亚洲超碰97人人做人人爱| 欧美α欧美αv大片| 成人一区在线观看| 亚洲成人激情av| 国产欧美日本一区视频| 欧美在线不卡视频| 国产麻豆成人传媒免费观看| 最新日韩av在线| 欧美一区二区免费视频| 高清av一区二区| 亚洲v中文字幕| 欧美国产欧美亚州国产日韩mv天天看完整| 一本久久精品一区二区| 日韩国产欧美在线播放| 国产精品免费aⅴ片在线观看| 欧美精品v国产精品v日韩精品| 国产成人精品影院| 热久久国产精品| 日韩久久一区二区| 久久久综合视频| 欧美精品第一页| 色综合天天综合| 国产精品18久久久久久久久| 一区二区国产视频| 久久毛片高清国产| 日韩一区二区三区视频在线| www.欧美.com| 国产成人免费在线视频| 日韩成人精品视频| 夜夜爽夜夜爽精品视频| 国产精品三级电影| 久久这里只有精品首页| 欧美日韩大陆在线| 在线亚洲一区二区| 成人免费不卡视频| 国产成人在线视频网址| 久久99国产乱子伦精品免费| 亚洲国产乱码最新视频| 亚洲国产精品激情在线观看| 精品国产凹凸成av人导航| 欧美另类高清zo欧美| 色综合久久综合网97色综合| 成人免费视频国产在线观看| 国产精品一线二线三线| 美女一区二区视频| 青青青伊人色综合久久| 亚洲男同1069视频| 亚洲欧美日韩中文播放| 亚洲男女毛片无遮挡| 中文字幕av免费专区久久| 国产女人水真多18毛片18精品视频 | 一本到不卡免费一区二区| 国产成人av电影在线播放| 久久不见久久见免费视频1| 日韩1区2区日韩1区2区| 亚洲成av人片在线观看无码| 亚洲国产日韩精品| 亚洲国产精品自拍| 亚洲国产wwwccc36天堂| 亚洲成av人在线观看| 日韩精品午夜视频| 日本色综合中文字幕| 蜜桃视频第一区免费观看| 精品在线一区二区三区| 国产一区二区0| 国产成人av电影在线观看| 成人毛片在线观看| 91麻豆蜜桃一区二区三区| 91丨porny丨最新| 欧美综合久久久| 在线不卡欧美精品一区二区三区| 欧美日本韩国一区| 26uuu久久综合| 国产日韩欧美激情| 亚洲欧美日韩中文字幕一区二区三区| 亚洲女同ⅹxx女同tv| 午夜精品免费在线| 精一区二区三区| 国产91在线|亚洲| 一本一道波多野结衣一区二区| 欧美日韩亚洲国产综合| 久久先锋资源网| 亚洲精品中文在线| 日本中文字幕一区二区有限公司| 国产在线精品免费av| gogo大胆日本视频一区| 欧美色中文字幕| 欧美精品一区二区三区蜜臀| 亚洲欧美视频在线观看| 视频一区二区中文字幕| 国产不卡高清在线观看视频| 色婷婷久久久综合中文字幕| 欧美成人乱码一区二区三区| 国产精品婷婷午夜在线观看| 亚洲午夜久久久久久久久久久| 久久99精品久久只有精品| 99精品国产91久久久久久| 在线综合视频播放| 中文字幕日韩av资源站| 午夜精品福利在线| 成人国产精品免费观看视频| 欧美一区二区三级| ●精品国产综合乱码久久久久| 免费观看久久久4p| 99re热这里只有精品免费视频| 日韩免费福利电影在线观看| 亚洲精品老司机| 国模套图日韩精品一区二区 | 午夜精品免费在线观看| 成人一区二区视频| 日韩欧美一区二区久久婷婷| 一区二区三区免费观看| 高清不卡一二三区| 日韩精品一区二区在线| 亚洲制服丝袜在线| 91在线视频18| 欧美国产在线观看| 精品亚洲国内自在自线福利| 欧美日韩国产区一| 亚洲久草在线视频| 99国产精品99久久久久久| 久久久精品人体av艺术| 久久成人精品无人区| 欧美日韩黄视频| 亚洲自拍偷拍综合| 91亚洲精品乱码久久久久久蜜桃| 亚洲精品一区二区三区四区高清| 丝瓜av网站精品一区二区| 欧美性大战久久久久久久蜜臀| 亚洲天堂久久久久久久| 高清av一区二区| 中文字幕精品一区| 国产精品一线二线三线| 久久久亚洲高清| 国精产品一区一区三区mba视频 | 国产精品原创巨作av| 精品国产伦一区二区三区观看方式| 午夜亚洲福利老司机| 欧美性猛片aaaaaaa做受| 亚洲欧美另类久久久精品| 91蜜桃视频在线| 亚洲欧美偷拍另类a∨色屁股|