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

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

?? where.c

?? Trolltech公司發布的基于C++圖形開發環境
?? C
?? 第 1 頁 / 共 3 頁
字號:
  */  if( pWhere && (pTabList->nSrc==0 || sqliteExprIsConstant(pWhere)) ){    sqliteExprIfFalse(pParse, pWhere, pWInfo->iBreak, 1);    pWhere = 0;  }  /* Analyze all of the subexpressions.  */  for(i=0; i<nExpr; i++){    exprAnalyze(&maskSet, &aExpr[i]);    /* If we are executing a trigger body, remove all references to    ** new.* and old.* tables from the prerequisite masks.    */    if( pParse->trigStack ){      int x;      if( (x = pParse->trigStack->newIdx) >= 0 ){        int mask = ~getMask(&maskSet, x);        aExpr[i].prereqRight &= mask;        aExpr[i].prereqLeft &= mask;        aExpr[i].prereqAll &= mask;      }      if( (x = pParse->trigStack->oldIdx) >= 0 ){        int mask = ~getMask(&maskSet, x);        aExpr[i].prereqRight &= mask;        aExpr[i].prereqLeft &= mask;        aExpr[i].prereqAll &= mask;      }    }  }  /* Figure out what index to use (if any) for each nested loop.  ** Make pWInfo->a[i].pIdx point to the index to use for the i-th nested  ** loop where i==0 is the outer loop and i==pTabList->nSrc-1 is the inner  ** loop.   **  ** If terms exist that use the ROWID of any table, then set the  ** iDirectEq[], iDirectLt[], or iDirectGt[] elements for that table  ** to the index of the term containing the ROWID.  We always prefer  ** to use a ROWID which can directly access a table rather than an  ** index which requires reading an index first to get the rowid then  ** doing a second read of the actual database table.  **  ** Actually, if there are more than 32 tables in the join, only the  ** first 32 tables are candidates for indices.  This is (again) due  ** to the limit of 32 bits in an integer bitmask.  */  loopMask = 0;  for(i=0; i<pTabList->nSrc && i<ARRAYSIZE(iDirectEq); i++){    int j;    int iCur = pTabList->a[i].iCursor;    /* The cursor for this table */    int mask = getMask(&maskSet, iCur);   /* Cursor mask for this table */    Table *pTab = pTabList->a[i].pTab;    Index *pIdx;    Index *pBestIdx = 0;    int bestScore = 0;    /* Check to see if there is an expression that uses only the    ** ROWID field of this table.  For terms of the form ROWID==expr    ** set iDirectEq[i] to the index of the term.  For terms of the    ** form ROWID<expr or ROWID<=expr set iDirectLt[i] to the term index.    ** For terms like ROWID>expr or ROWID>=expr set iDirectGt[i].    **    ** (Added:) Treat ROWID IN expr like ROWID=expr.    */    pWInfo->a[i].iCur = -1;    iDirectEq[i] = -1;    iDirectLt[i] = -1;    iDirectGt[i] = -1;    for(j=0; j<nExpr; j++){      if( aExpr[j].idxLeft==iCur && aExpr[j].p->pLeft->iColumn<0            && (aExpr[j].prereqRight & loopMask)==aExpr[j].prereqRight ){        switch( aExpr[j].p->op ){          case TK_IN:          case TK_EQ: iDirectEq[i] = j; break;          case TK_LE:          case TK_LT: iDirectLt[i] = j; break;          case TK_GE:          case TK_GT: iDirectGt[i] = j;  break;        }      }      if( aExpr[j].idxRight==iCur && aExpr[j].p->pRight->iColumn<0            && (aExpr[j].prereqLeft & loopMask)==aExpr[j].prereqLeft ){        switch( aExpr[j].p->op ){          case TK_EQ: iDirectEq[i] = j;  break;          case TK_LE:          case TK_LT: iDirectGt[i] = j;  break;          case TK_GE:          case TK_GT: iDirectLt[i] = j;  break;        }      }    }    if( iDirectEq[i]>=0 ){      loopMask |= mask;      pWInfo->a[i].pIdx = 0;      continue;    }    /* Do a search for usable indices.  Leave pBestIdx pointing to    ** the "best" index.  pBestIdx is left set to NULL if no indices    ** are usable.    **    ** The best index is determined as follows.  For each of the    ** left-most terms that is fixed by an equality operator, add    ** 8 to the score.  The right-most term of the index may be    ** constrained by an inequality.  Add 1 if for an "x<..." constraint    ** and add 2 for an "x>..." constraint.  Chose the index that    ** gives the best score.    **    ** This scoring system is designed so that the score can later be    ** used to determine how the index is used.  If the score&7 is 0    ** then all constraints are equalities.  If score&1 is not 0 then    ** there is an inequality used as a termination key.  (ex: "x<...")    ** If score&2 is not 0 then there is an inequality used as the    ** start key.  (ex: "x>...").  A score or 4 is the special case    ** of an IN operator constraint.  (ex:  "x IN ...").    **    ** The IN operator (as in "<expr> IN (...)") is treated the same as    ** an equality comparison except that it can only be used on the    ** left-most column of an index and other terms of the WHERE clause    ** cannot be used in conjunction with the IN operator to help satisfy    ** other columns of the index.    */    for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){      int eqMask = 0;  /* Index columns covered by an x=... term */      int ltMask = 0;  /* Index columns covered by an x<... term */      int gtMask = 0;  /* Index columns covered by an x>... term */      int inMask = 0;  /* Index columns covered by an x IN .. term */      int nEq, m, score;      if( pIdx->nColumn>32 ) continue;  /* Ignore indices too many columns */      for(j=0; j<nExpr; j++){        if( aExpr[j].idxLeft==iCur              && (aExpr[j].prereqRight & loopMask)==aExpr[j].prereqRight ){          int iColumn = aExpr[j].p->pLeft->iColumn;          int k;          for(k=0; k<pIdx->nColumn; k++){            if( pIdx->aiColumn[k]==iColumn ){              switch( aExpr[j].p->op ){                case TK_IN: {                  if( k==0 ) inMask |= 1;                  break;                }                case TK_EQ: {                  eqMask |= 1<<k;                  break;                }                case TK_LE:                case TK_LT: {                  ltMask |= 1<<k;                  break;                }                case TK_GE:                case TK_GT: {                  gtMask |= 1<<k;                  break;                }                default: {                  /* CANT_HAPPEN */                  assert( 0 );                  break;                }              }              break;            }          }        }        if( aExpr[j].idxRight==iCur              && (aExpr[j].prereqLeft & loopMask)==aExpr[j].prereqLeft ){          int iColumn = aExpr[j].p->pRight->iColumn;          int k;          for(k=0; k<pIdx->nColumn; k++){            if( pIdx->aiColumn[k]==iColumn ){              switch( aExpr[j].p->op ){                case TK_EQ: {                  eqMask |= 1<<k;                  break;                }                case TK_LE:                case TK_LT: {                  gtMask |= 1<<k;                  break;                }                case TK_GE:                case TK_GT: {                  ltMask |= 1<<k;                  break;                }                default: {                  /* CANT_HAPPEN */                  assert( 0 );                  break;                }              }              break;            }          }        }      }      /* The following loop ends with nEq set to the number of columns      ** on the left of the index with == constraints.      */      for(nEq=0; nEq<pIdx->nColumn; nEq++){        m = (1<<(nEq+1))-1;        if( (m & eqMask)!=m ) break;      }      score = nEq*8;   /* Base score is 8 times number of == constraints */      m = 1<<nEq;      if( m & ltMask ) score++;    /* Increase score for a < constraint */      if( m & gtMask ) score+=2;   /* Increase score for a > constraint */      if( score==0 && inMask ) score = 4;  /* Default score for IN constraint */      if( score>bestScore ){        pBestIdx = pIdx;        bestScore = score;      }    }    pWInfo->a[i].pIdx = pBestIdx;    pWInfo->a[i].score = bestScore;    pWInfo->a[i].bRev = 0;    loopMask |= mask;    if( pBestIdx ){      pWInfo->a[i].iCur = pParse->nTab++;      pWInfo->peakNTab = pParse->nTab;    }  }  /* Check to see if the ORDER BY clause is or can be satisfied by the  ** use of an index on the first table.  */  if( ppOrderBy && *ppOrderBy && pTabList->nSrc>0 ){     Index *pSortIdx;     Index *pIdx;     Table *pTab;     int bRev = 0;     pTab = pTabList->a[0].pTab;     pIdx = pWInfo->a[0].pIdx;     if( pIdx && pWInfo->a[0].score==4 ){       /* If there is already an IN index on the left-most table,       ** it will not give the correct sort order.       ** So, pretend that no suitable index is found.       */       pSortIdx = 0;     }else if( iDirectEq[0]>=0 || iDirectLt[0]>=0 || iDirectGt[0]>=0 ){       /* If the left-most column is accessed using its ROWID, then do       ** not try to sort by index.       */       pSortIdx = 0;     }else{       int nEqCol = (pWInfo->a[0].score+4)/8;       pSortIdx = findSortingIndex(pTab, pTabList->a[0].iCursor,                                    *ppOrderBy, pIdx, nEqCol, &bRev);     }     if( pSortIdx && (pIdx==0 || pIdx==pSortIdx) ){       if( pIdx==0 ){         pWInfo->a[0].pIdx = pSortIdx;         pWInfo->a[0].iCur = pParse->nTab++;         pWInfo->peakNTab = pParse->nTab;       }       pWInfo->a[0].bRev = bRev;       *ppOrderBy = 0;     }  }  /* Open all tables in the pTabList and all indices used by those tables.  */  for(i=0; i<pTabList->nSrc; i++){    Table *pTab;    Index *pIx;    pTab = pTabList->a[i].pTab;    if( pTab->isTransient || pTab->pSelect ) continue;    sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);    sqliteVdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum,                     pTab->zName, P3_STATIC);    sqliteCodeVerifySchema(pParse, pTab->iDb);    if( (pIx = pWInfo->a[i].pIdx)!=0 ){      sqliteVdbeAddOp(v, OP_Integer, pIx->iDb, 0);      sqliteVdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0);    }  }  /* Generate the code to do the search  */  loopMask = 0;  for(i=0; i<pTabList->nSrc; i++){    int j, k;    int iCur = pTabList->a[i].iCursor;    Index *pIdx;    WhereLevel *pLevel = &pWInfo->a[i];    /* If this is the right table of a LEFT OUTER JOIN, allocate and    ** initialize a memory cell that records if this table matches any    ** row of the left table of the join.    */    if( i>0 && (pTabList->a[i-1].jointype & JT_LEFT)!=0 ){      if( !pParse->nMem ) pParse->nMem++;      pLevel->iLeftJoin = pParse->nMem++;      sqliteVdbeAddOp(v, OP_String, 0, 0);      sqliteVdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);    }    pIdx = pLevel->pIdx;    pLevel->inOp = OP_Noop;    if( i<ARRAYSIZE(iDirectEq) && iDirectEq[i]>=0 ){      /* Case 1:  We can directly reference a single row using an      **          equality comparison against the ROWID field.  Or      **          we reference multiple rows using a "rowid IN (...)"      **          construct.      */      k = iDirectEq[i];      assert( k<nExpr );      assert( aExpr[k].p!=0 );      assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur );      brk = pLevel->brk = sqliteVdbeMakeLabel(v);      if( aExpr[k].idxLeft==iCur ){        Expr *pX = aExpr[k].p;        if( pX->op!=TK_IN ){          sqliteExprCode(pParse, aExpr[k].p->pRight);        }else if( pX->pList ){          sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk);          pLevel->inOp = OP_SetNext;          pLevel->inP1 = pX->iTable;          pLevel->inP2 = sqliteVdbeCurrentAddr(v);        }else{          assert( pX->pSelect );          sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk);          sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1);          pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0);          pLevel->inOp = OP_Next;          pLevel->inP1 = pX->iTable;        }      }else{        sqliteExprCode(pParse, aExpr[k].p->pLeft);      }      aExpr[k].p = 0;      cont = pLevel->cont = sqliteVdbeMakeLabel(v);      sqliteVdbeAddOp(v, OP_MustBeInt, 1, brk);      haveKey = 0;      sqliteVdbeAddOp(v, OP_NotExists, iCur, brk);      pLevel->op = OP_Noop;    }else if( pIdx!=0 && pLevel->score>0 && pLevel->score%4==0 ){      /* Case 2:  There is an index and all terms of the WHERE clause that      **          refer to the index use the "==" or "IN" operators.      */      int start;      int testOp;      int nColumn = (pLevel->score+4)/8;      brk = pLevel->brk = sqliteVdbeMakeLabel(v);      for(j=0; j<nColumn; j++){        for(k=0; k<nExpr; k++){          Expr *pX = aExpr[k].p;          if( pX==0 ) continue;          if( aExpr[k].idxLeft==iCur             && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight              && pX->pLeft->iColumn==pIdx->aiColumn[j]          ){            if( pX->op==TK_EQ ){              sqliteExprCode(pParse, pX->pRight);              aExpr[k].p = 0;              break;            }            if( pX->op==TK_IN && nColumn==1 ){              if( pX->pList ){                sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk);                pLevel->inOp = OP_SetNext;                pLevel->inP1 = pX->iTable;                pLevel->inP2 = sqliteVdbeCurrentAddr(v);              }else{                assert( pX->pSelect );                sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk);                sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1);                pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0);                pLevel->inOp = OP_Next;                pLevel->inP1 = pX->iTable;              }              aExpr[k].p = 0;              break;            }          }          if( aExpr[k].idxRight==iCur             && aExpr[k].p->op==TK_EQ             && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft             && aExpr[k].p->pRight->iColumn==pIdx->aiColumn[j]          ){            sqliteExprCode(pParse, aExpr[k].p->pLeft);            aExpr[k].p = 0;            break;          }        }      }      pLevel->iMem = pParse->nMem++;      cont = pLevel->cont = sqliteVdbeMakeLabel(v);      sqliteVdbeAddOp(v, OP_NotNull, -nColumn, sqliteVdbeCurrentAddr(v)+3);      sqliteVdbeAddOp(v, OP_Pop, nColumn, 0);      sqliteVdbeAddOp(v, OP_Goto, 0, brk);      sqliteVdbeAddOp(v, OP_MakeKey, nColumn, 0);      sqliteAddIdxKeyType(v, pIdx);      if( nColumn==pIdx->nColumn || pLevel->bRev ){        sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 0);        testOp = OP_IdxGT;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲香肠在线观看| 一本大道综合伊人精品热热| 1区2区3区欧美| 国产性色一区二区| 亚洲精品菠萝久久久久久久| 精品一区二区三区影院在线午夜| 99re亚洲国产精品| 久久婷婷国产综合国色天香| 午夜视频久久久久久| 99国产精品国产精品毛片| 精品理论电影在线观看| 亚洲与欧洲av电影| 91网址在线看| 国产欧美日韩久久| 国模冰冰炮一区二区| 宅男噜噜噜66一区二区66| 夜夜揉揉日日人人青青一国产精品| 国产成人精品亚洲777人妖| 精品久久国产字幕高潮| 日本视频一区二区三区| 欧美色窝79yyyycom| 亚洲乱码国产乱码精品精98午夜| 成人av电影免费观看| 国产欧美精品一区二区三区四区| 久久成人精品无人区| 日韩一级片在线播放| 午夜精彩视频在线观看不卡| 欧美伊人久久久久久久久影院| 亚洲欧美日韩国产综合| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 蜜桃91丨九色丨蝌蚪91桃色| 欧美性猛交一区二区三区精品| 夜夜精品视频一区二区| 日本精品一区二区三区高清 | 久久99国产精品久久99果冻传媒| 欧美精品一二三区| 天堂va蜜桃一区二区三区| 欧美喷水一区二区| 日日嗨av一区二区三区四区| 欧美一区二区三区思思人| 奇米色777欧美一区二区| 91精品国产色综合久久ai换脸| 日本v片在线高清不卡在线观看| 这里是久久伊人| 国产一区二区三区免费观看| 国产午夜亚洲精品理论片色戒| av不卡在线播放| 一区二区三区四区不卡视频| 欧美三级视频在线播放| 日韩二区三区四区| 国产亚洲精品bt天堂精选| 成人动漫一区二区在线| 亚洲一区二区三区四区五区黄| 91精品国产91久久久久久最新毛片| 精品一区二区在线看| 中文字幕一区二区三区在线播放| 欧美亚洲综合一区| 另类小说图片综合网| 日本一二三四高清不卡| 色94色欧美sute亚洲13| 日韩**一区毛片| 中文字幕精品综合| 欧美午夜在线一二页| 精品在线你懂的| 亚洲天堂免费看| 91精品免费观看| 成人高清在线视频| 天堂成人国产精品一区| 国产精品乱码久久久久久| 在线观看日韩国产| 国产麻豆成人传媒免费观看| 亚洲男女一区二区三区| 精品毛片乱码1区2区3区| 91美女片黄在线观看91美女| 蜜臀av在线播放一区二区三区| 中文字幕一区二区在线观看| 6080日韩午夜伦伦午夜伦| 国产98色在线|日韩| 日韩一区欧美二区| 亚洲欧洲日本在线| 26uuu精品一区二区| 欧美又粗又大又爽| 国产91精品在线观看| 日本不卡一区二区三区高清视频| 成人免费在线播放视频| 欧美一二三四区在线| 91黄色免费版| 国产成人高清视频| 精品中文字幕一区二区小辣椒| 亚洲精品一二三| 国产精品色一区二区三区| 欧美高清dvd| 欧美性猛片xxxx免费看久爱| 99久久精品费精品国产一区二区| 国产乱子伦视频一区二区三区 | 91美女片黄在线| 国产91色综合久久免费分享| 久久99精品久久久久久国产越南| 亚洲国产精品自拍| 亚洲人吸女人奶水| 国产精品毛片高清在线完整版| 精品国产网站在线观看| 欧美一区欧美二区| 欧美高清视频不卡网| 欧美日韩一区二区三区视频| 色成年激情久久综合| 97国产一区二区| 色综合亚洲欧洲| 日本大胆欧美人术艺术动态| 一区二区三区国产精华| 国产精品国产三级国产三级人妇| 国产欧美综合在线观看第十页| 欧美精品一区二区久久婷婷| 日韩免费高清av| 精品欧美一区二区久久| 日韩欧美一区二区免费| 日韩午夜激情电影| 欧美videossexotv100| 欧美精品一区二区三区久久久| 日韩三级伦理片妻子的秘密按摩| 欧美二区三区的天堂| 91精品国产日韩91久久久久久| 欧美男同性恋视频网站| 欧美一区二区三区视频在线 | 精品视频免费在线| 欧美精品视频www在线观看| 在线不卡的av| 欧美成人vps| 国产免费成人在线视频| 一区免费观看视频| 一区二区不卡在线播放| 午夜亚洲福利老司机| 免费日韩伦理电影| 国产毛片精品国产一区二区三区| 成人av在线资源网| 91国产视频在线观看| 欧美一区二区三区四区在线观看| 久久你懂得1024| 亚洲欧美日韩国产综合在线| 天天免费综合色| 国产一区999| 在线观看亚洲成人| 91精品国产综合久久婷婷香蕉| 久久久精品综合| 亚洲激情图片一区| 九九视频精品免费| 色婷婷国产精品| 欧美sm极限捆绑bd| 亚洲日本成人在线观看| 免费成人在线网站| 丰满放荡岳乱妇91ww| 欧美日韩国产首页| 国产欧美日韩精品在线| 天天综合天天综合色| a4yy欧美一区二区三区| 欧美一区二区在线免费播放| 国产清纯白嫩初高生在线观看91| 亚洲午夜日本在线观看| 国产999精品久久久久久绿帽| 欧美女孩性生活视频| 国产精品视频一二三区| 蜜臀av一级做a爰片久久| av一本久道久久综合久久鬼色| 欧美一区二区三区视频免费播放 | 欧洲人成人精品| 精品国产乱码久久久久久夜甘婷婷| 亚洲婷婷综合久久一本伊一区 | 2023国产精品自拍| 亚洲综合色网站| 成人网页在线观看| 日韩欧美卡一卡二| 午夜影院久久久| 色综合欧美在线| 国产欧美日韩在线| 国产一区二区三区免费观看| 51精品视频一区二区三区| 亚洲精品久久久蜜桃| 暴力调教一区二区三区| 久久人人爽人人爽| 老司机午夜精品| 91精品国产综合久久久久久久 | 一区二区三区国产豹纹内裤在线| 成人手机电影网| 精品国产伦理网| 麻豆精品精品国产自在97香蕉| 欧美图片一区二区三区| 亚洲免费在线观看| 99久久免费视频.com| 国产精品美女久久久久av爽李琼| 久久er精品视频| 欧美成人精品福利| 狠狠色伊人亚洲综合成人| 91精品国产色综合久久不卡电影| 五月天国产精品| 欧美三级电影网| 亚洲成av人片一区二区三区| 欧美午夜精品理论片a级按摩| 一区二区三区欧美视频| 欧美中文字幕不卡| 亚洲大片免费看|