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

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

?? expr.c

?? sqlite庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
      sqlite3ExprCode(pParse, pExpr->pLeft);      dest = sqlite3VdbeCurrentAddr(v) + 2;      sqlite3VdbeAddOp(v, op, 1, dest);      sqlite3VdbeAddOp(v, OP_AddImm, -1, 0);      stackChng = 0;      break;    }    case TK_AGG_FUNCTION: {      AggInfo *pInfo = pExpr->pAggInfo;      if( pInfo==0 ){        sqlite3ErrorMsg(pParse, "misuse of aggregate: %T",            &pExpr->span);      }else{        sqlite3VdbeAddOp(v, OP_MemLoad, pInfo->aFunc[pExpr->iAgg].iMem, 0);      }      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 constMask = 0;      int i;      u8 enc = ENC(pParse->db);      CollSeq *pColl = 0;      zId = (char*)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) ){          constMask |= (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, constMask, nExpr, (char*)pDef, P3_FUNCDEF);      stackChng = 1-nExpr;      break;    }#ifndef SQLITE_OMIT_SUBQUERY    case TK_EXISTS:    case TK_SELECT: {      if( pExpr->iColumn==0 ){        sqlite3CodeSubselect(pParse, pExpr);      }      sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);      VdbeComment((v, "# load subquery result"));      break;    }    case TK_IN: {      int addr;      char affinity;      int ckOffset = pParse->ckOffset;      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);      pParse->ckOffset = ckOffset+1;      /* 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);      stackChng = 0;      break;    }    case TK_CASE: {      int expr_end_label;      int jumpInst;      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);        sqlite3VdbeJumpHere(v, jumpInst);      }      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);      break;    }#ifndef SQLITE_OMIT_TRIGGER    case TK_RAISE: {      if( !pParse->trigStack ){        sqlite3ErrorMsg(pParse,                       "RAISE() may only be used within a trigger-program");	return;      }      if( pExpr->iColumn!=OE_Ignore ){         assert( pExpr->iColumn==OE_Rollback ||                 pExpr->iColumn == OE_Abort ||                 pExpr->iColumn == OE_Fail );         sqlite3DequoteExpr(pExpr);         sqlite3VdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn,                        (char*)pExpr->token.z, pExpr->token.n);      } else {         assert( pExpr->iColumn == OE_Ignore );         sqlite3VdbeAddOp(v, OP_ContextPop, 0, 0);         sqlite3VdbeAddOp(v, OP_Goto, 0, pParse->trigStack->ignoreJump);         VdbeComment((v, "# raise(IGNORE)"));      }      stackChng = 0;      break;    }#endif  }  if( pParse->ckOffset ){    pParse->ckOffset += stackChng;    assert( pParse->ckOffset );  }}#ifndef SQLITE_OMIT_TRIGGER/*** Generate code that evalutes the given expression and leaves the result** on the stack.  See also sqlite3ExprCode().**** This routine might also cache the result and modify the pExpr tree** so that it will make use of the cached result on subsequent evaluations** rather than evaluate the whole expression again.  Trivial expressions are** not cached.  If the expression is cached, its result is stored in a ** memory location.*/void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr){  Vdbe *v = pParse->pVdbe;  int iMem;  int addr1, addr2;  if( v==0 ) return;  addr1 = sqlite3VdbeCurrentAddr(v);  sqlite3ExprCode(pParse, pExpr);  addr2 = sqlite3VdbeCurrentAddr(v);  if( addr2>addr1+1 || sqlite3VdbeGetOp(v, addr1)->opcode==OP_Function ){    iMem = pExpr->iTable = pParse->nMem++;    sqlite3VdbeAddOp(v, OP_MemStore, iMem, 0);    pExpr->op = TK_REGISTER;  }}#endif/*** Generate code that pushes the value of every element of the given** expression list onto the stack.**** Return the number of elements pushed onto the stack.*/int sqlite3ExprCodeExprList(  Parse *pParse,     /* Parsing context */  ExprList *pList    /* The expression list to be coded */){  struct ExprList_item *pItem;  int i, n;  if( pList==0 ) return 0;  n = pList->nExpr;  for(pItem=pList->a, i=n; i>0; i--, pItem++){    sqlite3ExprCode(pParse, pItem->pExpr);  }  return n;}/*** Generate code for a boolean expression such that a jump is made** to the label "dest" if the expression is true but execution** continues straight thru if the expression is false.**** If the expression evaluates to NULL (neither true nor false), then** take the jump if the jumpIfNull flag is true.**** 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 sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){  Vdbe *v = pParse->pVdbe;  int op = 0;  int ckOffset = pParse->ckOffset;  if( v==0 || pExpr==0 ) return;  op = pExpr->op;  switch( op ){    case TK_AND: {      int d2 = sqlite3VdbeMakeLabel(v);      sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2, !jumpIfNull);      sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);      sqlite3VdbeResolveLabel(v, d2);      break;    }    case TK_OR: {      sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);      sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);      break;    }    case TK_NOT: {      sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);      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, dest, jumpIfNull);      break;    }    case TK_ISNULL:    case TK_NOTNULL: {      assert( TK_ISNULL==OP_IsNull );      assert( TK_NOTNULL==OP_NotNull );      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite3VdbeAddOp(v, op, 1, dest);      break;    }    case TK_BETWEEN: {      /* The expression "x BETWEEN y AND z" is implemented as:      **      ** 1 IF (x < y) GOTO 3      ** 2 IF (x <= z) GOTO <dest>      ** 3 ...      */      int addr;      Expr *pLeft = pExpr->pLeft;      Expr *pRight = pExpr->pList->a[0].pExpr;      sqlite3ExprCode(pParse, pLeft);      sqlite3VdbeAddOp(v, OP_Dup, 0, 0);      sqlite3ExprCode(pParse, pRight);      addr = codeCompare(pParse, pLeft, pRight, OP_Lt, 0, !jumpIfNull);      pRight = pExpr->pList->a[1].pExpr;      sqlite3ExprCode(pParse, pRight);      codeCompare(pParse, pLeft, pRight, OP_Le, dest, jumpIfNull);      sqlite3VdbeAddOp(v, OP_Integer, 0, 0);      sqlite3VdbeJumpHere(v, addr);      sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      break;    }    default: {      sqlite3ExprCode(pParse, pExpr);      sqlite3VdbeAddOp(v, OP_If, jumpIfNull, dest);      break;    }  }  pParse->ckOffset = ckOffset;}/*** Generate code for a boolean expression such that a jump is made** to the label "dest" if the expression is false but execution** continues straight thru if the expression is true.**** If the expression evaluates to NULL (neither true nor false) then** jump if jumpIfNull is true or fall through if jumpIfNull is false.*/void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){  Vdbe *v = pParse->pVdbe;  int op = 0;  int ckOffset = pParse->ckOffset;  if( v==0 || pExpr==0 ) return;  /* The value of pExpr->op and op are related as follows:  **  **       pExpr->op            op  **       ---------          ----------  **       TK_ISNULL          OP_NotNull  **       TK_NOTNULL         OP_IsNull  **       TK_NE              OP_Eq  **       TK_EQ              OP_Ne  **       TK_GT              OP_Le  **       TK_LE              OP_Gt  **       TK_GE              OP_Lt  **       TK_LT              OP_Ge  **  ** For other values of pExpr->op, op is undefined and unused.  ** The value of TK_ and OP_ constants are arranged such that we  ** can compute the mapping above using the following expression.  ** Assert()s verify that the computation is correct.  */  op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);  /* Verify correct alignment of TK_ and OP_ constants  */  assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );  assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );  assert( pExpr->op!=TK_NE || op==OP_Eq );  assert( pExpr->op!=TK_EQ || op==OP_Ne );  assert( pExpr->op!=TK_LT || op==OP_Ge );  assert( pExpr->op!=TK_LE || op==OP_Gt );  assert( pExpr->op!=TK_GT || op==OP_Le );  assert( pExpr->op!=TK_GE || op==OP_Lt );  switch( pExpr->op ){    case TK_AND: {      sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);      sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);      break;    }    case TK_OR: {      int d2 = sqlite3VdbeMakeLabel(v);      sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, !jumpIfNull);      sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);      sqlite3VdbeResolveLabel(v, d2);      break;    }    case TK_NOT: {      sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);      break;    }    case TK_LT:    case TK_LE:    case TK_GT:    case TK_GE:    case TK_NE:    case TK_EQ: {      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite3ExprCode(pParse, pExpr->pRight);      codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, dest, jumpIfNull);      break;    }    case TK_ISNULL:    case TK_NOTNULL: {      sqlite3ExprCode(pParse, pExpr->pLeft);      sqlite

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲制服丝袜| 一区二区国产盗摄色噜噜| 亚洲欧洲日产国产综合网| 午夜日韩在线观看| av在线不卡观看免费观看| 在线成人免费视频| 最新热久久免费视频| 麻豆一区二区三| 欧美视频一区在线观看| 中文字幕日韩精品一区| 国内精品自线一区二区三区视频| 欧美色综合网站| 中文字幕在线不卡国产视频| 国产在线不卡视频| 69堂成人精品免费视频| 亚洲精品va在线观看| www.亚洲色图.com| 久久久久久久久久电影| 久久精品国产一区二区| 制服丝袜成人动漫| 亚洲成人av一区| 欧美中文字幕不卡| 亚洲色欲色欲www| 97aⅴ精品视频一二三区| 国产欧美精品一区| 国产成人精品三级麻豆| 欧美电影免费观看高清完整版在线| 舔着乳尖日韩一区| 欧美精品一级二级三级| 一区二区高清在线| 在线观看免费亚洲| 一区二区不卡在线播放| 日本久久一区二区| 亚洲福利视频三区| 日韩一级片在线观看| 美女一区二区在线观看| 精品国产成人在线影院| 久久成人精品无人区| 精品日韩一区二区| 国产自产视频一区二区三区| 久久蜜桃香蕉精品一区二区三区| 激情av综合网| 国产精品久久久久国产精品日日| 不卡一区在线观看| 亚洲精品ww久久久久久p站| 欧美性一二三区| 午夜精品免费在线观看| 91精品国产免费| 精品一区二区三区免费| 久久久国产精华| 91亚洲国产成人精品一区二区三| 亚洲伦在线观看| 在线电影一区二区三区| 国产在线一区二区综合免费视频| 国产精品午夜在线| 91日韩精品一区| 日本午夜一本久久久综合| 久久综合九色欧美综合狠狠 | 91丝袜美腿高跟国产极品老师| 中文字幕一区二区视频| 欧美日韩视频在线一区二区| 美女视频一区二区| 国产精品高潮呻吟久久| 欧美色欧美亚洲另类二区| 蜜臀av一区二区在线观看 | 国产剧情av麻豆香蕉精品| 国产精品区一区二区三区| 91黄色免费看| 免费看黄色91| 中文字幕一区二区不卡| 欧美精品在线一区二区三区| 国产乱码精品一区二区三区av| **欧美大码日韩| 日韩欧美国产系列| 色综合中文字幕| 精品一区二区免费| 亚洲另类在线一区| 亚洲精品在线网站| 欧美性一区二区| 粉嫩在线一区二区三区视频| 亚洲bt欧美bt精品777| 国产精品国产三级国产专播品爱网| 欧美三级韩国三级日本三斤| 国产高清成人在线| 久久精品免费看| 亚洲乱码日产精品bd| 国产三级精品三级| 日韩一区二区三区电影| 91网页版在线| 成人亚洲精品久久久久软件| 日本va欧美va精品发布| 亚洲国产视频一区| 国产精品久久久久久久浪潮网站| 欧美第一区第二区| 欧美日韩三级一区二区| 一本大道综合伊人精品热热| 国产美女精品人人做人人爽| 美女在线一区二区| 舔着乳尖日韩一区| 亚洲成人在线观看视频| 国产精品国产三级国产| 久久精品视频在线免费观看| 日韩欧美国产一区二区三区| 69久久夜色精品国产69蝌蚪网| 日本精品一级二级| 99re这里都是精品| 成人国产免费视频| 成人免费看黄yyy456| 国产一区三区三区| 久草这里只有精品视频| 久久丁香综合五月国产三级网站| 日韩中文字幕不卡| 视频一区二区国产| 亚洲chinese男男1069| 亚洲成人免费在线| 一级女性全黄久久生活片免费| 亚洲乱码国产乱码精品精小说 | 欧美优质美女网站| 精品视频全国免费看| 欧美午夜免费电影| 91麻豆精品国产无毒不卡在线观看| 欧美日韩免费在线视频| 欧美午夜影院一区| 制服丝袜中文字幕一区| 欧美一区二区女人| 久久婷婷色综合| 国产欧美日韩在线视频| 国产精品成人在线观看| 亚洲欧美另类综合偷拍| 亚洲国产精品欧美一二99| 三级影片在线观看欧美日韩一区二区| 亚洲国产你懂的| 久久99国产精品久久| 久久精工是国产品牌吗| 国产精品一区二区男女羞羞无遮挡 | 日韩午夜av一区| 久久久精品一品道一区| 中文字幕佐山爱一区二区免费| 一卡二卡三卡日韩欧美| 精品一区二区三区视频| 大白屁股一区二区视频| 97精品电影院| 9久草视频在线视频精品| 色天天综合色天天久久| 成人激情视频网站| 韩国成人在线视频| 成人小视频在线| 狠狠色丁香婷婷综合久久片| 麻豆国产欧美日韩综合精品二区| 奇米888四色在线精品| 国产制服丝袜一区| kk眼镜猥琐国模调教系列一区二区| 亚洲国产精品尤物yw在线观看| 久久99九九99精品| 成人国产精品免费观看| 欧美少妇bbb| 欧美网站大全在线观看| 久久久五月婷婷| 亚洲精品乱码久久久久久久久| 亚洲va国产va欧美va观看| 极品美女销魂一区二区三区免费| av不卡免费在线观看| 欧美精品丝袜中出| 亚洲视频你懂的| 麻豆传媒一区二区三区| 成人av高清在线| 99r精品视频| 日韩一区二区精品在线观看| 精品福利一二区| 欧美国产日韩a欧美在线观看| 国产精品蜜臀在线观看| 亚洲一区二区三区国产| 国产成人久久精品77777最新版本| 91美女福利视频| 欧美日韩极品在线观看一区| 日韩一区在线播放| 蜜桃av噜噜一区| 欧美亚洲一区三区| 国产精品久久久久影院老司| 美女精品一区二区| 欧美日免费三级在线| 欧美一区二区三区在线观看| 欧美精品一区二区精品网| 综合久久国产九一剧情麻豆| 另类欧美日韩国产在线| 欧美天堂一区二区三区| 国产蜜臀97一区二区三区| 免费成人在线视频观看| 在线看国产一区| 亚洲欧美国产毛片在线| 国产麻豆午夜三级精品| 欧美群妇大交群中文字幕| 亚洲综合另类小说| 成人app网站| 国产网红主播福利一区二区| 美女被吸乳得到大胸91| 欧美久久免费观看| 天堂成人国产精品一区| 欧美日本在线一区| 亚洲视频在线一区观看|