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

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

?? expr.c

?? 嵌入式數(shù)據(jù)系統(tǒng)軟件!
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
        ){          int iDb;          int iMem = pParse->nMem++;          int iAddr;          char *pKey;            pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);          iDb = sqlite3SchemaToIndex(db, pIdx->pSchema);          sqlite3VdbeUsesBtree(v, iDb);          sqlite3VdbeAddOp(v, OP_MemLoad, iMem, 0);          iAddr = sqlite3VdbeAddOp(v, OP_If, 0, iMem);          sqlite3VdbeAddOp(v, OP_MemInt, 1, iMem);            sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);          VdbeComment((v, "# %s", pIdx->zName));          sqlite3VdbeOp3(v,OP_OpenRead,iTab,pIdx->tnum,pKey,P3_KEYINFO_HANDOFF);          eType = IN_INDEX_INDEX;          sqlite3VdbeAddOp(v, OP_SetNumColumns, iTab, pIdx->nColumn);          sqlite3VdbeJumpHere(v, iAddr);        }      }    }  }  if( eType==0 ){    sqlite3CodeSubselect(pParse, pX);    eType = IN_INDEX_EPH;  }else{    pX->iTable = iTab;  }  return eType;}#endif/*** 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 || pParse->db->mallocFailed );    sqlite3VdbeAddOp(v, OP_MemInt, 1, mem);  }  switch( pExpr->op ){    case TK_IN: {      char affinity;      KeyInfo keyInfo;      int addr;        /* Address of OP_OpenEphemeral 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_OpenEphemeral, 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 );        if( sqlite3Select(pParse, pExpr->pSelect, SRT_Set, iParm, 0, 0, 0, 0) ){          return;        }        pEList = pExpr->pSelect->pEList;        if( pEList && pEList->nExpr>0 ){           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(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_NONE;        }        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 = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &one);      if( sqlite3Select(pParse, pSel, sop, iMem, 0, 0, 0, 0) ){        return;      }      break;    }  }  if( testAddr ){    sqlite3VdbeJumpHere(v, testAddr);  }  return;}#endif /* SQLITE_OMIT_SUBQUERY *//*** Duplicate an 8-byte value*/static char *dup8bytes(Vdbe *v, const char *in){  char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);  if( out ){    memcpy(out, in, 8);  }  return out;}/*** Generate an instruction that will put the floating point** value described by z[0..n-1] on the stack.**** The z[] string will probably not be zero-terminated.  But the ** z[n] character is guaranteed to be something that does not look** like the continuation of the number.*/static void codeReal(Vdbe *v, const char *z, int n, int negateFlag){  assert( z || v==0 || sqlite3VdbeDb(v)->mallocFailed );  if( z ){    double value;    char *zV;    assert( !isdigit(z[n]) );    sqlite3AtoF(z, &value);    if( negateFlag ) value = -value;    zV = dup8bytes(v, (char*)&value);    sqlite3VdbeOp3(v, OP_Real, 0, 0, zV, P3_REAL);  }}/*** Generate an instruction that will put the integer describe by** text z[0..n-1] on the stack.**** The z[] string will probably not be zero-terminated.  But the ** z[n] character is guaranteed to be something that does not look** like the continuation of the number.*/static void codeInteger(Vdbe *v, const char *z, int n, int negateFlag){  assert( z || v==0 || sqlite3VdbeDb(v)->mallocFailed );  if( z ){    int i;    assert( !isdigit(z[n]) );    if( sqlite3GetInt32(z, &i) ){      if( negateFlag ) i = -i;      sqlite3VdbeAddOp(v, OP_Integer, i, 0);    }else if( sqlite3FitsIn64Bits(z, negateFlag) ){      i64 value;      char *zV;      sqlite3Atoi64(z, &value);      if( negateFlag ) value = -value;      zV = dup8bytes(v, (char*)&value);      sqlite3VdbeOp3(v, OP_Int64, 0, 0, zV, P3_INT64);    }else{      codeReal(v, z, n, negateFlag);    }  }}/*** Generate code that will extract the iColumn-th column from** table pTab and push that column value on the stack.  There** is an open cursor to pTab in iTable.  If iColumn<0 then** code is generated that extracts the rowid.*/void sqlite3ExprCodeGetColumn(Vdbe *v, Table *pTab, int iColumn, int iTable){  if( iColumn<0 ){    int op = (pTab && IsVirtual(pTab)) ? OP_VRowid : OP_Rowid;    sqlite3VdbeAddOp(v, op, iTable, 0);  }else if( pTab==0 ){    sqlite3VdbeAddOp(v, OP_Column, iTable, iColumn);  }else{    int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;    sqlite3VdbeAddOp(v, op, iTable, iColumn);    sqlite3ColumnDefault(v, pTab, iColumn);#ifndef SQLITE_OMIT_FLOATING_POINT    if( pTab->aCol[iColumn].affinity==SQLITE_AFF_REAL ){      sqlite3VdbeAddOp(v, OP_RealAffinity, 0, 0);    }#endif  }}/*** 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{        sqlite3ExprCodeGetColumn(v, pExpr->pTab, pExpr->iColumn, pExpr->iTable);      }      break;    }    case TK_INTEGER: {      codeInteger(v, (char*)pExpr->token.z, pExpr->token.n, 0);      break;    }    case TK_FLOAT: {      codeReal(v, (char*)pExpr->token.z, pExpr->token.n, 0);      break;    }    case TK_STRING: {      sqlite3DequoteExpr(pParse->db, pExpr);      sqlite3VdbeOp3(v,OP_String8, 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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人精品视频| 久久精品人人做人人综合| 这里只有精品免费| 久久天堂av综合合色蜜桃网| 国产欧美一区二区在线| 亚洲激情一二三区| 久久se这里有精品| 99国产精品国产精品毛片| 欧美日韩三级在线| 久久久国产精品麻豆| 亚洲精品成人悠悠色影视| 精品在线免费观看| 色婷婷综合久久久中文一区二区 | 国产精品色眯眯| 亚洲综合无码一区二区| 久久国产精品99精品国产| 99国产精品99久久久久久| 日韩欧美亚洲国产另类| 亚洲精品久久久蜜桃| 韩国女主播一区二区三区| 色菇凉天天综合网| 国产亚洲欧美日韩俺去了| 亚洲国产精品一区二区www在线| 精品亚洲免费视频| 欧美少妇xxx| 亚洲国产成人午夜在线一区| 日韩和欧美一区二区| 不卡视频免费播放| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲综合一区二区精品导航| 高清在线成人网| 4hu四虎永久在线影院成人| 亚洲欧洲日韩在线| 国产呦萝稀缺另类资源| 欧美日韩国产综合草草| 综合分类小说区另类春色亚洲小说欧美| 免费成人结看片| 欧美亚洲自拍偷拍| 国产精品久久福利| 国产在线视频一区二区| 91精品国产综合久久精品| 亚洲欧美日韩久久| 成人午夜私人影院| 欧美成人乱码一区二区三区| 香蕉加勒比综合久久| 91免费版在线| 中文在线一区二区| 韩国女主播成人在线观看| 91麻豆精品国产自产在线观看一区| 亚洲日本电影在线| 国产婷婷色一区二区三区四区| 国产精品毛片无遮挡高清| 国产福利一区二区三区在线视频| 捆绑紧缚一区二区三区视频| 日本二三区不卡| 亚洲欧洲日韩女同| 成人黄色片在线观看| 久久日韩粉嫩一区二区三区| 免费高清在线一区| 日韩一区二区三区免费看| 亚洲6080在线| 欧美日韩精品一区二区三区蜜桃 | 色乱码一区二区三区88| 亚洲国产精品ⅴa在线观看| 国内精品在线播放| 久久亚洲一级片| 久久超碰97中文字幕| 欧美r级电影在线观看| 日韩成人午夜电影| 制服丝袜亚洲播放| 日韩专区中文字幕一区二区| 欧美日韩小视频| 天堂久久久久va久久久久| 欧美精品 国产精品| 午夜成人免费电影| 欧美喷潮久久久xxxxx| 日韩精品一二三区| 欧美一区二区三区免费视频| 人人爽香蕉精品| 日韩精品一区二区三区swag| 国内不卡的二区三区中文字幕| 精品国产一区二区三区不卡| 国模套图日韩精品一区二区| 久久久久久久久久看片| 国产成人午夜精品5599| 中文字幕欧美区| 92国产精品观看| 一区二区三区日韩| 欧美日韩电影在线播放| 日本不卡高清视频| 欧美精品一区二区高清在线观看| 国产一区欧美一区| 国产精品电影院| 在线观看av不卡| 日精品一区二区| 久久久99精品免费观看不卡| 成人av资源站| 亚洲愉拍自拍另类高清精品| 欧美精品久久99| 国产精品99久久久久久宅男| 国产精品久久国产精麻豆99网站 | 午夜日韩在线观看| 精品乱码亚洲一区二区不卡| 成人网男人的天堂| 一区二区三区欧美激情| 欧美剧情片在线观看| 黑人精品欧美一区二区蜜桃| 国产片一区二区三区| 97成人超碰视| 舔着乳尖日韩一区| 国产日韩欧美麻豆| 欧美自拍偷拍一区| 精东粉嫩av免费一区二区三区| 欧美韩国日本综合| 欧美日韩午夜在线| 激情欧美一区二区三区在线观看| 日本一区二区电影| 欧美日韩亚洲综合| 国产成人三级在线观看| 亚洲一二三级电影| 26uuu精品一区二区在线观看| 99精品桃花视频在线观看| 日韩在线a电影| 国产精品热久久久久夜色精品三区 | 69堂国产成人免费视频| 国产精品一区免费在线观看| 一区二区三区日韩欧美| 久久综合狠狠综合久久综合88| 色婷婷av久久久久久久| 激情五月激情综合网| 一区二区视频免费在线观看| 欧美sm美女调教| 欧美无砖专区一中文字| 国产成人亚洲综合色影视| 亚洲国产精品视频| 国产亚洲自拍一区| 777午夜精品视频在线播放| 成人小视频在线观看| 五月婷婷久久综合| 中文字幕欧美一区| 2021中文字幕一区亚洲| 欧美曰成人黄网| 丁香婷婷综合五月| 免费成人av在线| 亚洲精品中文字幕乱码三区| 久久免费国产精品| 欧美日本免费一区二区三区| 成人精品一区二区三区中文字幕 | 久久久青草青青国产亚洲免观| 在线观看三级视频欧美| 成人激情开心网| 精品一区二区三区欧美| 亚洲一区在线视频| 国产精品日产欧美久久久久| 欧美不卡视频一区| 欧美日韩国产天堂| 一本一道久久a久久精品 | 国产精品久久久99| 久久久www成人免费毛片麻豆| 欧美日韩高清一区二区三区| 91美女精品福利| 国产成人8x视频一区二区 | 久久蜜桃av一区二区天堂| 欧美高清一级片在线| 欧美丝袜丝交足nylons图片| 99精品桃花视频在线观看| 国产suv一区二区三区88区| 激情另类小说区图片区视频区| 亚洲超碰精品一区二区| 亚洲色图一区二区三区| 久久久亚洲欧洲日产国码αv| 欧美一级高清片| 欧美人成免费网站| 欧美日韩国产精选| 欧美视频自拍偷拍| 日本乱码高清不卡字幕| 一本色道久久综合精品竹菊| 成人国产在线观看| 99精品一区二区| 色综合天天综合网国产成人综合天 | 欧美性一级生活| 91成人在线免费观看| 在线精品视频一区二区三四| 91电影在线观看| 欧美日韩一区二区三区在线| 色婷婷综合久久| 在线影视一区二区三区| 91蝌蚪国产九色| 色婷婷狠狠综合| 在线视频一区二区三| 日本精品裸体写真集在线观看| 色综合久久六月婷婷中文字幕| 91丨porny丨户外露出| 91免费版在线看| 欧美在线你懂的| 欧美日韩极品在线观看一区| 欧美一区二区视频网站| 日韩欧美成人一区二区| 久久众筹精品私拍模特| 国产无遮挡一区二区三区毛片日本|