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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? expr.c

?? sqlite 嵌入式數(shù)據(jù)庫的源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
  }  switch( pExpr->op ){    case TK_IN: {      char affinity;      KeyInfo keyInfo;      int addr;        /* Address of OP_OpenTemp 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 temporary 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_OpenTemp, 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;        if( !affinity ){          affinity = SQLITE_AFF_NUMERIC;        }        keyInfo.aColl[0] = pExpr->pLeft->pColl;        /* Loop through each expression in <exprlist>. */        for(i=0; i<pExpr->pList->nExpr; i++){          Expr *pE2 = pExpr->pList->a[i].pExpr;          /* Check that the expression is constant and valid. */          if( !sqlite3ExprIsConstant(pE2) ){            sqlite3ErrorMsg(pParse,              "right-hand side of IN operator must be constant");            return;          }          /* 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.      */      int sop;      Select *pSel;      pExpr->iColumn = pParse->nMem++;      pSel = pExpr->pSelect;      if( pExpr->op==TK_SELECT ){        sop = SRT_Mem;      }else{        static const Token one = { "1", 0, 1 };        sop = SRT_Exists;        sqlite3ExprListDelete(pSel->pEList);        pSel->pEList = sqlite3ExprListAppend(0,                           sqlite3Expr(TK_INTEGER, 0, 0, &one), 0);      }      sqlite3Select(pParse, pSel, sop, pExpr->iColumn, 0, 0, 0, 0);      break;    }  }  if( pExpr->pSelect ){    sqlite3VdbeAddOp(v, OP_AggContextPop, 0, 0);  }  if( label<0 ){    sqlite3VdbeResolveLabel(v, label);  }  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_Integer, 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;  if( v==0 ) return;  if( pExpr==0 ){    sqlite3VdbeAddOp(v, OP_Null, 0, 0);    return;  }  op = pExpr->op;  switch( op ){    case TK_COLUMN: {      if( !pParse->fillAgg && pExpr->iAgg>=0 ){        sqlite3VdbeAddOp(v, OP_AggGet, pExpr->iAggCtx, pExpr->iAgg);      }else if( pExpr->iColumn>=0 ){        sqlite3VdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn);        sqlite3ColumnDefault(v, pExpr->pTab, pExpr->iColumn);      }else{        sqlite3VdbeAddOp(v, OP_Rowid, pExpr->iTable, 0);      }      break;    }    case TK_INTEGER: {      codeInteger(v, pExpr->token.z, pExpr->token.n);      break;    }    case TK_FLOAT:    case TK_STRING: {      assert( TK_FLOAT==OP_Real );      assert( TK_STRING==OP_String8 );      sqlite3VdbeOp3(v, op, 0, 0, pExpr->token.z, pExpr->token.n);      sqlite3VdbeDequoteP3(v, -1);      break;    }    case TK_NULL: {      sqlite3VdbeAddOp(v, OP_Null, 0, 0);      break;    }#ifndef SQLITE_OMIT_BLOB_LITERAL    case TK_BLOB: {      assert( TK_BLOB==OP_HexBlob );      sqlite3VdbeOp3(v, op, 0, 0, pExpr->token.z+1, pExpr->token.n-1);      sqlite3VdbeDequoteP3(v, -1);      break;    }#endif    case TK_VARIABLE: {      sqlite3VdbeAddOp(v, OP_Variable, pExpr->iTable, 0);      if( pExpr->token.n>1 ){        sqlite3VdbeChangeP3(v, -1, pExpr->token.z, pExpr->token.n);      }      break;    }    case TK_REGISTER: {      sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iTable, 0);      break;    }    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);      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);      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 = sqliteMalloc( p->n + 2 );        sprintf(z, "-%.*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);      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);      sqlite3ExprCode(pParse, pExpr->pLeft);      dest = sqlite3VdbeCurrentAddr(v) + 2;      sqlite3VdbeAddOp(v, op, 1, dest);      sqlite3VdbeAddOp(v, OP_AddImm, -1, 0);      break;    }    case TK_AGG_FUNCTION: {      sqlite3VdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);      break;    }    case TK_CONST_FUNC:    case TK_FUNCTION: {      ExprList *pList = pExpr->pList;      int nExpr = pList ? pList->nExpr : 0;      FuncDef *pDef;      int nId;      const char *zId;      int p2 = 0;      int i;      u8 enc = pParse->db->enc;      CollSeq *pColl = 0;      zId = pExpr->token.z;      nId = pExpr->token.n;      pDef = sqlite3FindFunction(pParse->db, zId, nId, nExpr, enc, 0);      assert( pDef!=0 );      nExpr = sqlite3ExprCodeExprList(pParse, pList);      for(i=0; i<nExpr && i<32; i++){        if( sqlite3ExprIsConstant(pList->a[i].pExpr) ){          p2 |= (1<<i);        }        if( pDef->needCollSeq && !pColl ){          pColl = sqlite3ExprCollSeq(pParse, pList->a[i].pExpr);        }      }      if( pDef->needCollSeq ){        if( !pColl ) pColl = pParse->db->pDfltColl;         sqlite3VdbeOp3(v, OP_CollSeq, 0, 0, (char *)pColl, P3_COLLSEQ);      }      sqlite3VdbeOp3(v, OP_Function, nExpr, p2, (char*)pDef, P3_FUNCDEF);      break;    }#ifndef SQLITE_OMIT_SUBQUERY    case TK_EXISTS:    case TK_SELECT: {      sqlite3CodeSubselect(pParse, pExpr);      sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);      VdbeComment((v, "# load subquery result"));      break;    }    case TK_IN: {      int addr;      char affinity;      sqlite3CodeSubselect(pParse, pExpr);      /* Figure out the affinity to use to create a key from the results      ** of the expression. affinityStr stores a static string suitable for      ** P3 of OP_MakeRecord.      */      affinity = comparisonAffinity(pExpr);      sqlite3VdbeAddOp(v, OP_Integer, 1, 0);      /* Code the <expr> from "<expr> IN (...)". The temporary table      ** pExpr->iTable contains the values that make up the (...) set.      */      sqlite3ExprCode(pParse, pExpr->pLeft);      addr = sqlite3VdbeCurrentAddr(v);      sqlite3VdbeAddOp(v, OP_NotNull, -1, addr+4);            /* addr + 0 */      sqlite3VdbeAddOp(v, OP_Pop, 2, 0);      sqlite3VdbeAddOp(v, OP_Null, 0, 0);      sqlite3VdbeAddOp(v, OP_Goto, 0, addr+7);      sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &affinity, 1);   /* addr + 4 */      sqlite3VdbeAddOp(v, OP_Found, pExpr->iTable, addr+7);      sqlite3VdbeAddOp(v, OP_AddImm, -1, 0);                  /* addr + 6 */      break;    }#endif    case TK_BETWEEN: {      Expr *pLeft = pExpr->pLeft;      struct ExprList_item *pLItem = pExpr->pList->a;      Expr *pRight = pLItem->pExpr;      sqlite3ExprCode(pParse, pLeft);      sqlite3VdbeAddOp(v, OP_Dup, 0, 0);      sqlite3ExprCode(pParse, pRight);      codeCompare(pParse, pLeft, pRight, OP_Ge, 0, 0);      sqlite3VdbeAddOp(v, OP_Pull, 1, 0);      pLItem++;      pRight = pLItem->pExpr;      sqlite3ExprCode(pParse, pRight);      codeCompare(pParse, pLeft, pRight, OP_Le, 0, 0);      sqlite3VdbeAddOp(v, OP_And, 0, 0);      break;    }    case TK_UPLUS:    case TK_AS: {      sqlite3ExprCode(pParse, pExpr->pLeft);      break;    }    case TK_CASE: {      int expr_end_label;      int jumpInst;      int addr;      int nExpr;      int i;      ExprList *pEList;      struct ExprList_item *aListelem;      assert(pExpr->pList);      assert((pExpr->pList->nExpr % 2) == 0);      assert(pExpr->pList->nExpr > 0);      pEList = pExpr->pList;      aListelem = pEList->a;      nExpr = pEList->nExpr;      expr_end_label = sqlite3VdbeMakeLabel(v);      if( pExpr->pLeft ){        sqlite3ExprCode(pParse, pExpr->pLeft);      }      for(i=0; i<nExpr; i=i+2){        sqlite3ExprCode(pParse, aListelem[i].pExpr);        if( pExpr->pLeft ){          sqlite3VdbeAddOp(v, OP_Dup, 1, 1);          jumpInst = codeCompare(pParse, pExpr->pLeft, aListelem[i].pExpr,                                 OP_Ne, 0, 1);          sqlite3VdbeAddOp(v, OP_Pop, 1, 0);        }else{          jumpInst = sqlite3VdbeAddOp(v, OP_IfNot, 1, 0);        }        sqlite3ExprCode(pParse, aListelem[i+1].pExpr);        sqlite3VdbeAddOp(v, OP_Goto, 0, expr_end_label);        addr = sqlite3VdbeCurrentAddr(v);        sqlite3VdbeChangeP2(v, jumpInst, addr);      }      if( pExpr->pLeft ){        sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      }      if( pExpr->pRight ){        sqlite3ExprCode(pParse, pExpr->pRight);      }else{        sqlite3VdbeAddOp(v, OP_Null, 0, 0);      }      sqlite3VdbeResolveLabel(v, expr_end_label);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影你懂得| 亚洲综合网站在线观看| 一本一道久久a久久精品| 青青青伊人色综合久久| 中文字幕av在线一区二区三区| 欧美一a一片一级一片| 国产麻豆视频一区| 丝袜亚洲精品中文字幕一区| 国产精品久久久久久久久动漫| 欧美日本一道本在线视频| 不卡的av电影在线观看| 另类欧美日韩国产在线| 一区二区三区高清不卡| 国产精品乱码一区二区三区软件| 日韩一区二区在线播放| 在线观看成人免费视频| 波多野结衣在线aⅴ中文字幕不卡| 热久久国产精品| 一区二区免费视频| 国产成人午夜精品5599| 三级一区在线视频先锋| 亚洲男人都懂的| 国产精品午夜春色av| 久久免费偷拍视频| 欧美一区二区国产| 欧美日韩成人在线| 在线精品视频小说1| 91免费版pro下载短视频| 国产精品99精品久久免费| 奇米精品一区二区三区在线观看| 亚洲国产欧美在线| 亚洲美腿欧美偷拍| 国产精品成人午夜| 欧美国产精品一区| 亚洲国产精品av| 久久久不卡网国产精品二区| 精品国产a毛片| 精品久久一区二区三区| 欧美成人猛片aaaaaaa| 日韩一区二区中文字幕| 91精品国产综合久久精品app| 精品视频免费在线| 欧美色图12p| 欧美妇女性影城| 欧美一区二区三区小说| 日韩美女一区二区三区四区| 日韩网站在线看片你懂的| 日韩视频一区二区在线观看| 日韩视频一区二区三区在线播放 | 91色.com| 91蝌蚪porny| 在线观看日韩av先锋影音电影院| 在线视频一区二区三区| 欧美性色综合网| 制服丝袜国产精品| 日韩精品专区在线影院观看| 精品处破学生在线二十三| 久久亚洲欧美国产精品乐播| 国产欧美日韩在线| 国产精品超碰97尤物18| 亚洲综合一区在线| 日本欧美一区二区在线观看| 久久精品99国产精品日本| 黑人精品欧美一区二区蜜桃| 高清视频一区二区| 91麻豆精东视频| 欧美老女人第四色| 久久亚洲春色中文字幕久久久| 中文字幕不卡在线| 亚洲一级二级在线| 久久99久久99小草精品免视看| 国产麻豆一精品一av一免费 | 91麻豆6部合集magnet| 欧美日本一区二区在线观看| 精品久久久三级丝袜| 中文字幕一区不卡| 五月天视频一区| 久久一区二区三区四区| 亚洲日本中文字幕区| 亚洲va欧美va人人爽| 国产一区在线观看麻豆| 白白色 亚洲乱淫| 欧美精品国产精品| 欧美经典三级视频一区二区三区| 亚洲精品精品亚洲| 精品无人区卡一卡二卡三乱码免费卡| 成人免费高清在线观看| 欧美日高清视频| 欧美极品aⅴ影院| 午夜视频在线观看一区二区| 国产成人在线影院| 欧美人妖巨大在线| 中文字幕在线观看不卡| 视频一区视频二区中文| 成人免费观看男女羞羞视频| 777亚洲妇女| 1000精品久久久久久久久| 免费观看一级欧美片| 成人福利电影精品一区二区在线观看| 欧美精品乱码久久久久久按摩| 日本一区二区三区在线不卡| 亚洲国产一区二区三区| 成人动漫一区二区三区| 欧美一区二区三区四区在线观看 | 欧美日韩免费高清一区色橹橹 | 欧美日韩国产成人在线91| 国产精品美女久久久久久久久久久| 欧美aaaaaa午夜精品| 欧洲一区二区三区在线| 国产精品免费视频观看| 久草热8精品视频在线观看| 欧美日韩在线电影| 成人欧美一区二区三区在线播放| 精品中文av资源站在线观看| 欧美三级午夜理伦三级中视频| 国产精品污污网站在线观看| 九九**精品视频免费播放| 欧美日韩免费一区二区三区| 亚洲欧美日韩国产中文在线| 国产成人综合亚洲91猫咪| 欧美大肚乱孕交hd孕妇| 午夜一区二区三区在线观看| 91一区二区在线| 国产精品久久久久久久第一福利| 国产一区二区视频在线| 日韩一级片网站| 爽好久久久欧美精品| 欧洲人成人精品| 亚洲女与黑人做爰| av在线不卡电影| 中文字幕免费在线观看视频一区| 国产在线播放一区二区三区| 日韩欧美激情一区| 另类中文字幕网| 欧美电影免费观看高清完整版在线 | 国产日韩欧美a| 精东粉嫩av免费一区二区三区| 日韩精品综合一本久道在线视频| 石原莉奈在线亚洲二区| 在线成人免费观看| 日本人妖一区二区| 日韩一级完整毛片| 久久 天天综合| 国产喷白浆一区二区三区| 国产东北露脸精品视频| 欧美极品aⅴ影院| 99re66热这里只有精品3直播 | 日本一区二区三区高清不卡| 国产乱码精品一区二区三| 久久精品网站免费观看| 福利一区福利二区| 综合欧美一区二区三区| 色婷婷久久99综合精品jk白丝| 亚洲激情图片qvod| 欧美日韩免费在线视频| 蜜桃精品视频在线| 26uuu色噜噜精品一区二区| 国产乱码字幕精品高清av| 中文字幕 久热精品 视频在线| 成人激情动漫在线观看| 一区二区三区毛片| 91精品国产综合久久精品app| 精品一区二区三区免费播放| 欧美经典一区二区| 色域天天综合网| 天天色图综合网| 久久综合九色综合97婷婷女人| 国产91在线观看| 亚洲国产欧美另类丝袜| 日韩欧美高清在线| 成人ar影院免费观看视频| 欧美日韩一级二级| 国产精品午夜免费| 一本一道波多野结衣一区二区| 亚洲成人综合在线| 精品99一区二区三区| av午夜精品一区二区三区| 天堂va蜜桃一区二区三区漫画版| 亚洲精品在线电影| 91麻豆免费看片| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美日韩系列| 日韩欧美一级二级三级久久久| 成人黄页毛片网站| 日本视频一区二区| 亚洲婷婷综合久久一本伊一区| 日韩视频在线一区二区| 91丨porny丨中文| 久久99精品久久久久久| 亚洲精品免费在线观看| 久久亚洲影视婷婷| 91豆麻精品91久久久久久| 狠狠色综合日日| 亚洲五月六月丁香激情| 欧美国产激情一区二区三区蜜月| 欧美猛男男办公室激情| 99久精品国产| 国产麻豆一精品一av一免费| k8久久久一区二区三区| 久久99精品久久只有精品|