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

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

?? where.c

?? 新版輕量級嵌入式數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
  SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);  SWAP(Expr*,pExpr->pRight,pExpr->pLeft);  if( pExpr->op>=TK_GT ){    assert( TK_LT==TK_GT+2 );    assert( TK_GE==TK_LE+2 );    assert( TK_GT>TK_EQ );    assert( TK_GT<TK_LE );    assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );    pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;  }}/*** Translate from TK_xx operator to WO_xx bitmask.*/static int operatorMask(int op){  int c;  assert( allowedOp(op) );  if( op==TK_IN ){    c = WO_IN;  }else{    c = WO_EQ<<(op-TK_EQ);  }  assert( op!=TK_IN || c==WO_IN );  assert( op!=TK_EQ || c==WO_EQ );  assert( op!=TK_LT || c==WO_LT );  assert( op!=TK_LE || c==WO_LE );  assert( op!=TK_GT || c==WO_GT );  assert( op!=TK_GE || c==WO_GE );  return c;}/*** Search for a term in the WHERE clause that is of the form "X <op> <expr>"** where X is a reference to the iColumn of table iCur and <op> is one of** the WO_xx operator codes specified by the op parameter.** Return a pointer to the term.  Return 0 if not found.*/static WhereTerm *findTerm(  WhereClause *pWC,     /* The WHERE clause to be searched */  int iCur,             /* Cursor number of LHS */  int iColumn,          /* Column number of LHS */  Bitmask notReady,     /* RHS must not overlap with this mask */  u16 op,               /* Mask of WO_xx values describing operator */  Index *pIdx           /* Must be compatible with this index, if not NULL */){  WhereTerm *pTerm;  int k;  for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){    if( pTerm->leftCursor==iCur       && (pTerm->prereqRight & notReady)==0       && pTerm->leftColumn==iColumn       && (pTerm->eOperator & op)!=0    ){      if( iCur>=0 && pIdx ){        Expr *pX = pTerm->pExpr;        CollSeq *pColl;        char idxaff;        int j;        Parse *pParse = pWC->pParse;        idxaff = pIdx->pTable->aCol[iColumn].affinity;        if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;        pColl = sqlite3ExprCollSeq(pParse, pX->pLeft);        if( !pColl ){          if( pX->pRight ){            pColl = sqlite3ExprCollSeq(pParse, pX->pRight);          }          if( !pColl ){            pColl = pParse->db->pDfltColl;          }        }        for(j=0; j<pIdx->nColumn && pIdx->aiColumn[j]!=iColumn; j++){}        assert( j<pIdx->nColumn );        if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;      }      return pTerm;    }  }  return 0;}/* Forward reference */static void exprAnalyze(SrcList*, ExprMaskSet*, WhereClause*, int);/*** Call exprAnalyze on all terms in a WHERE clause.  *****/static void exprAnalyzeAll(  SrcList *pTabList,       /* the FROM clause */  ExprMaskSet *pMaskSet,   /* table masks */  WhereClause *pWC         /* the WHERE clause to be analyzed */){  int i;  for(i=pWC->nTerm-1; i>=0; i--){    exprAnalyze(pTabList, pMaskSet, pWC, i);  }}#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION/*** Check to see if the given expression is a LIKE or GLOB operator that** can be optimized using inequality constraints.  Return TRUE if it is** so and false if not.**** In order for the operator to be optimizible, the RHS must be a string** literal that does not begin with a wildcard.  */static int isLikeOrGlob(  sqlite3 *db,      /* The database */  Expr *pExpr,      /* Test this expression */  int *pnPattern,   /* Number of non-wildcard prefix characters */  int *pisComplete  /* True if the only wildcard is % in the last character */){  const char *z;  Expr *pRight, *pLeft;  ExprList *pList;  int c, cnt;  int noCase;  char wc[3];  CollSeq *pColl;  if( !sqlite3IsLikeFunction(db, pExpr, &noCase, wc) ){    return 0;  }  pList = pExpr->pList;  pRight = pList->a[0].pExpr;  if( pRight->op!=TK_STRING ){    return 0;  }  pLeft = pList->a[1].pExpr;  if( pLeft->op!=TK_COLUMN ){    return 0;  }  pColl = pLeft->pColl;  if( pColl==0 ){    pColl = db->pDfltColl;  }  if( (pColl->type!=SQLITE_COLL_BINARY || noCase) &&      (pColl->type!=SQLITE_COLL_NOCASE || !noCase) ){    return 0;  }  sqlite3DequoteExpr(pRight);  z = (char *)pRight->token.z;  for(cnt=0; (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2]; cnt++){}  if( cnt==0 || 255==(u8)z[cnt] ){    return 0;  }  *pisComplete = z[cnt]==wc[0] && z[cnt+1]==0;  *pnPattern = cnt;  return 1;}#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION *//*** If the pBase expression originated in the ON or USING clause of** a join, then transfer the appropriate markings over to derived.*/static void transferJoinMarkings(Expr *pDerived, Expr *pBase){  pDerived->flags |= pBase->flags & EP_FromJoin;  pDerived->iRightJoinTable = pBase->iRightJoinTable;}/*** The input to this routine is an WhereTerm structure with only the** "pExpr" field filled in.  The job of this routine is to analyze the** subexpression and populate all the other fields of the WhereTerm** structure.**** If the expression is of the form "<expr> <op> X" it gets commuted** to the standard form of "X <op> <expr>".  If the expression is of** the form "X <op> Y" where both X and Y are columns, then the original** expression is unchanged and a new virtual expression of the form** "Y <op> X" is added to the WHERE clause and analyzed separately.*/static void exprAnalyze(  SrcList *pSrc,            /* the FROM clause */  ExprMaskSet *pMaskSet,    /* table masks */  WhereClause *pWC,         /* the WHERE clause */  int idxTerm               /* Index of the term to be analyzed */){  WhereTerm *pTerm = &pWC->a[idxTerm];  Expr *pExpr = pTerm->pExpr;  Bitmask prereqLeft;  Bitmask prereqAll;  int nPattern;  int isComplete;  if( sqlite3MallocFailed() ) return;  prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);  if( pExpr->op==TK_IN ){    assert( pExpr->pRight==0 );    pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->pList)                          | exprSelectTableUsage(pMaskSet, pExpr->pSelect);  }else{    pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);  }  prereqAll = exprTableUsage(pMaskSet, pExpr);  if( ExprHasProperty(pExpr, EP_FromJoin) ){    prereqAll |= getMask(pMaskSet, pExpr->iRightJoinTable);  }  pTerm->prereqAll = prereqAll;  pTerm->leftCursor = -1;  pTerm->iParent = -1;  pTerm->eOperator = 0;  if( allowedOp(pExpr->op) && (pTerm->prereqRight & prereqLeft)==0 ){    Expr *pLeft = pExpr->pLeft;    Expr *pRight = pExpr->pRight;    if( pLeft->op==TK_COLUMN ){      pTerm->leftCursor = pLeft->iTable;      pTerm->leftColumn = pLeft->iColumn;      pTerm->eOperator = operatorMask(pExpr->op);    }    if( pRight && pRight->op==TK_COLUMN ){      WhereTerm *pNew;      Expr *pDup;      if( pTerm->leftCursor>=0 ){        int idxNew;        pDup = sqlite3ExprDup(pExpr);        idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);        if( idxNew==0 ) return;        pNew = &pWC->a[idxNew];        pNew->iParent = idxTerm;        pTerm = &pWC->a[idxTerm];        pTerm->nChild = 1;        pTerm->flags |= TERM_COPIED;      }else{        pDup = pExpr;        pNew = pTerm;      }      exprCommute(pDup);      pLeft = pDup->pLeft;      pNew->leftCursor = pLeft->iTable;      pNew->leftColumn = pLeft->iColumn;      pNew->prereqRight = prereqLeft;      pNew->prereqAll = prereqAll;      pNew->eOperator = operatorMask(pDup->op);    }  }#ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION  /* If a term is the BETWEEN operator, create two new virtual terms  ** that define the range that the BETWEEN implements.  */  else if( pExpr->op==TK_BETWEEN ){    ExprList *pList = pExpr->pList;    int i;    static const u8 ops[] = {TK_GE, TK_LE};    assert( pList!=0 );    assert( pList->nExpr==2 );    for(i=0; i<2; i++){      Expr *pNewExpr;      int idxNew;      pNewExpr = sqlite3Expr(ops[i], sqlite3ExprDup(pExpr->pLeft),                             sqlite3ExprDup(pList->a[i].pExpr), 0);      idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);      exprAnalyze(pSrc, pMaskSet, pWC, idxNew);      pTerm = &pWC->a[idxTerm];      pWC->a[idxNew].iParent = idxTerm;    }    pTerm->nChild = 2;  }#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)  /* Attempt to convert OR-connected terms into an IN operator so that  ** they can make use of indices.  Example:  **  **      x = expr1  OR  expr2 = x  OR  x = expr3  **  ** is converted into  **  **      x IN (expr1,expr2,expr3)  **  ** This optimization must be omitted if OMIT_SUBQUERY is defined because  ** the compiler for the the IN operator is part of sub-queries.  */  else if( pExpr->op==TK_OR ){    int ok;    int i, j;    int iColumn, iCursor;    WhereClause sOr;    WhereTerm *pOrTerm;    assert( (pTerm->flags & TERM_DYNAMIC)==0 );    whereClauseInit(&sOr, pWC->pParse);    whereSplit(&sOr, pExpr, TK_OR);    exprAnalyzeAll(pSrc, pMaskSet, &sOr);    assert( sOr.nTerm>0 );    j = 0;    do{      iColumn = sOr.a[j].leftColumn;      iCursor = sOr.a[j].leftCursor;      ok = iCursor>=0;      for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){        if( pOrTerm->eOperator!=WO_EQ ){          goto or_not_possible;        }        if( pOrTerm->leftCursor==iCursor && pOrTerm->leftColumn==iColumn ){          pOrTerm->flags |= TERM_OR_OK;        }else if( (pOrTerm->flags & TERM_COPIED)!=0 ||                    ((pOrTerm->flags & TERM_VIRTUAL)!=0 &&                     (sOr.a[pOrTerm->iParent].flags & TERM_OR_OK)!=0) ){          pOrTerm->flags &= ~TERM_OR_OK;        }else{          ok = 0;        }      }    }while( !ok && (sOr.a[j++].flags & TERM_COPIED)!=0 && j<sOr.nTerm );    if( ok ){      ExprList *pList = 0;      Expr *pNew, *pDup;      for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){        if( (pOrTerm->flags & TERM_OR_OK)==0 ) continue;        pDup = sqlite3ExprDup(pOrTerm->pExpr->pRight);        pList = sqlite3ExprListAppend(pList, pDup, 0);      }      pDup = sqlite3Expr(TK_COLUMN, 0, 0, 0);      if( pDup ){        pDup->iTable = iCursor;        pDup->iColumn = iColumn;      }      pNew = sqlite3Expr(TK_IN, pDup, 0, 0);      if( pNew ){        int idxNew;        transferJoinMarkings(pNew, pExpr);        pNew->pList = pList;        idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);        exprAnalyze(pSrc, pMaskSet, pWC, idxNew);        pTerm = &pWC->a[idxTerm];        pWC->a[idxNew].iParent = idxTerm;        pTerm->nChild = 1;      }else{        sqlite3ExprListDelete(pList);      }    }or_not_possible:    whereClauseClear(&sOr);  }#endif /* SQLITE_OMIT_OR_OPTIMIZATION */#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION  /* Add constraints to reduce the search space on a LIKE or GLOB  ** operator.  */  if( isLikeOrGlob(pWC->pParse->db, pExpr, &nPattern, &isComplete) ){    Expr *pLeft, *pRight;    Expr *pStr1, *pStr2;    Expr *pNewExpr1, *pNewExpr2;    int idxNew1, idxNew2;    pLeft = pExpr->pList->a[1].pExpr;    pRight = pExpr->pList->a[0].pExpr;    pStr1 = sqlite3Expr(TK_STRING, 0, 0, 0);    if( pStr1 ){      sqlite3TokenCopy(&pStr1->token, &pRight->token);      pStr1->token.n = nPattern;    }    pStr2 = sqlite3ExprDup(pStr1);    if( pStr2 ){      assert( pStr2->token.dyn );      ++*(u8*)&pStr2->token.z[nPattern-1];    }    pNewExpr1 = sqlite3Expr(TK_GE, sqlite3ExprDup(pLeft), pStr1, 0);    idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxx在线观看| 91色九色蝌蚪| 久久国产精品色| 盗摄精品av一区二区三区| 99久久99久久久精品齐齐| 欧美日本一道本在线视频| 日韩精品在线看片z| 亚洲丝袜另类动漫二区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美美女黄视频| 制服丝袜亚洲播放| 精品国产乱码久久久久久老虎| 久久九九99视频| 国产精品欧美久久久久一区二区| 亚洲美女偷拍久久| 午夜亚洲福利老司机| 美女高潮久久久| 成人性生交大片免费看中文网站| 97久久超碰国产精品电影| 懂色av一区二区三区免费观看| 成人少妇影院yyyy| 欧美美女网站色| 亚洲欧洲日韩在线| 紧缚奴在线一区二区三区| a4yy欧美一区二区三区| 久久久久97国产精华液好用吗| 亚洲少妇中出一区| 国产91精品精华液一区二区三区| 欧美日韩亚洲丝袜制服| 国产精品久久久99| 国内成人自拍视频| 欧美肥妇free| 亚洲国产成人av| 欧美自拍偷拍午夜视频| 亚洲欧美视频在线观看| 懂色av中文字幕一区二区三区| 精品久久久久久久久久久久包黑料| 一区二区三区免费看视频| 色综合中文综合网| 国产嫩草影院久久久久| 久久精品国产精品亚洲精品| 91精品婷婷国产综合久久性色| 亚洲综合色网站| 欧美伦理视频网站| 亚洲va韩国va欧美va| 91传媒视频在线播放| 亚洲女同一区二区| 欧美在线观看你懂的| 日韩国产精品大片| 欧美一区二区人人喊爽| 亚洲国产精品久久久男人的天堂 | 欧美精品tushy高清| 日本女人一区二区三区| 欧美成人一区二区| 国内偷窥港台综合视频在线播放| 久久蜜臀精品av| 91免费精品国自产拍在线不卡| 亚洲欧洲另类国产综合| 色婷婷精品久久二区二区蜜臂av| 一区二区三区久久| 91麻豆精品国产自产在线观看一区 | 国产98色在线|日韩| 中文字幕一区二区三| 91传媒视频在线播放| 日本v片在线高清不卡在线观看| 26uuu亚洲综合色| 91亚洲精品久久久蜜桃| 偷窥国产亚洲免费视频| 久久久www免费人成精品| 欧美性色综合网| 成人小视频在线观看| 日韩成人精品视频| 亚洲美女偷拍久久| 国产欧美1区2区3区| 日韩欧美一级二级三级久久久| 在线中文字幕不卡| 不卡的av在线| 国产精品自拍网站| 国产一区二区在线观看视频| 美女视频网站黄色亚洲| 日韩国产成人精品| 美女在线视频一区| 极品美女销魂一区二区三区| 毛片不卡一区二区| 成人综合激情网| 91久久人澡人人添人人爽欧美| 色婷婷av一区二区三区大白胸| 欧美日韩综合不卡| 精品剧情v国产在线观看在线| 久久久一区二区三区捆绑**| 中文字幕一区二区三区精华液| 亚洲黄色性网站| 久久国产精品99久久久久久老狼 | 亚洲精品欧美在线| 日韩成人精品视频| www.欧美.com| 精品免费日韩av| 亚洲女子a中天字幕| 极品少妇xxxx精品少妇| 色哦色哦哦色天天综合| 日韩欧美一区二区免费| 亚洲欧洲在线观看av| 天天综合色天天综合色h| proumb性欧美在线观看| 欧美日韩激情一区| 中文字幕在线观看一区二区| 日韩不卡在线观看日韩不卡视频| 91在线观看一区二区| 日韩欧美一级二级| 日韩精品一二三区| 97超碰欧美中文字幕| 久久综合九色综合欧美就去吻| 亚洲五月六月丁香激情| 在线观看av一区| 久久亚洲欧美国产精品乐播| 日韩电影在线观看网站| 欧美在线观看一二区| 一区二区激情视频| 在线亚洲欧美专区二区| 亚洲欧美色图小说| 99久久国产综合精品色伊| 中文字幕欧美国产| 成人午夜电影久久影院| 国产精品天天看| 99国产精品国产精品久久| 国产精品久久久久久久久快鸭| 国产成人免费av在线| 亚洲美女视频在线观看| 欧美日韩一区在线| 日韩电影在线观看网站| 日韩女优视频免费观看| 韩国精品主播一区二区在线观看| 3atv一区二区三区| 国产一区二区在线视频| 国产精品美女久久久久aⅴ| 色香蕉成人二区免费| 亚洲国产成人av网| 日韩三级精品电影久久久| 麻豆91精品视频| 亚洲免费资源在线播放| 制服丝袜中文字幕一区| 国产老妇另类xxxxx| 亚洲另类一区二区| 欧美成人一区二区| 91美女视频网站| 国产乱子伦视频一区二区三区 | 欧美成人欧美edvon| 99视频一区二区| 日本最新不卡在线| 国产精品人成在线观看免费| 欧美狂野另类xxxxoooo| 99国内精品久久| 国产乱码精品一区二区三区忘忧草| 依依成人精品视频| 亚洲国产精品成人综合色在线婷婷| 欧美日韩五月天| 欧美视频中文字幕| 成人三级伦理片| 成人午夜av在线| jizzjizzjizz欧美| 粉嫩欧美一区二区三区高清影视| 日韩中文字幕区一区有砖一区| 国产精品久久久久永久免费观看| 久久久蜜桃精品| 2014亚洲片线观看视频免费| 欧美一级二级在线观看| 欧美美女喷水视频| 91精品国产综合久久精品麻豆| 在线免费精品视频| 欧美午夜不卡在线观看免费| 欧美日韩免费一区二区三区 | 亚洲电影第三页| 蜜桃视频一区二区三区在线观看| 亚洲18色成人| 免费在线观看不卡| 国产一区二区剧情av在线| 国精品**一区二区三区在线蜜桃| 激情综合网av| 懂色av一区二区在线播放| 色婷婷一区二区三区四区| 欧美日韩一级二级三级| 欧美一区国产二区| 国产亲近乱来精品视频| 亚洲尤物在线视频观看| 日日摸夜夜添夜夜添精品视频| 久久国产精品99精品国产| 国产一区二区三区日韩| 日本久久一区二区| 精品国产污网站| 亚洲免费视频中文字幕| 日本vs亚洲vs韩国一区三区二区| 99热这里都是精品| 91精品国产综合久久精品麻豆| 中文字幕一区二区三区精华液| 日日摸夜夜添夜夜添国产精品| 成人性视频免费网站| 日韩亚洲欧美中文三级| 亚洲四区在线观看| 国产高清不卡一区二区| 日韩精品专区在线影院观看|