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

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

?? select.c

?? 新版輕量級嵌入式數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
    addr = sqlite3VdbeAddOp(v, OP_IfMemNeg, p->iOffset, 0);    if( nPop>0 ){      sqlite3VdbeAddOp(v, OP_Pop, nPop, 0);    }    sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue);    VdbeComment((v, "# skip OFFSET records"));    sqlite3VdbeJumpHere(v, addr);  }}/*** Add code that will check to make sure the top N elements of the** stack are distinct.  iTab is a sorting index that holds previously** seen combinations of the N values.  A new entry is made in iTab** if the current N values are new.**** A jump to addrRepeat is made and the N+1 values are popped from the** stack if the top N elements are not distinct.*/static void codeDistinct(  Vdbe *v,           /* Generate code into this VM */  int iTab,          /* A sorting index used to test for distinctness */  int addrRepeat,    /* Jump to here if not distinct */  int N              /* The top N elements of the stack must be distinct */){  sqlite3VdbeAddOp(v, OP_MakeRecord, -N, 0);  sqlite3VdbeAddOp(v, OP_Distinct, iTab, sqlite3VdbeCurrentAddr(v)+3);  sqlite3VdbeAddOp(v, OP_Pop, N+1, 0);  sqlite3VdbeAddOp(v, OP_Goto, 0, addrRepeat);  VdbeComment((v, "# skip indistinct records"));  sqlite3VdbeAddOp(v, OP_IdxInsert, iTab, 0);}/*** This routine generates the code for the inside of the inner loop** of a SELECT.**** If srcTab and nColumn are both zero, then the pEList expressions** are evaluated in order to get the data for this row.  If nColumn>0** then data is pulled from srcTab and pEList is used only to get the** datatypes for each column.*/static int selectInnerLoop(  Parse *pParse,          /* The parser context */  Select *p,              /* The complete select statement being coded */  ExprList *pEList,       /* List of values being extracted */  int srcTab,             /* Pull data from this table */  int nColumn,            /* Number of columns in the source table */  ExprList *pOrderBy,     /* If not NULL, sort results using this key */  int distinct,           /* If >=0, make sure results are distinct */  int eDest,              /* How to dispose of the results */  int iParm,              /* An argument to the disposal method */  int iContinue,          /* Jump here to continue with next row */  int iBreak,             /* Jump here to break out of the inner loop */  char *aff               /* affinity string if eDest is SRT_Union */){  Vdbe *v = pParse->pVdbe;  int i;  int hasDistinct;        /* True if the DISTINCT keyword is present */  if( v==0 ) return 0;  assert( pEList!=0 );  /* If there was a LIMIT clause on the SELECT statement, then do the check  ** to see if this row should be output.  */  hasDistinct = distinct>=0 && pEList->nExpr>0;  if( pOrderBy==0 && !hasDistinct ){    codeOffset(v, p, iContinue, 0);  }  /* Pull the requested columns.  */  if( nColumn>0 ){    for(i=0; i<nColumn; i++){      sqlite3VdbeAddOp(v, OP_Column, srcTab, i);    }  }else{    nColumn = pEList->nExpr;    sqlite3ExprCodeExprList(pParse, pEList);  }  /* If the DISTINCT keyword was present on the SELECT statement  ** and this row has been seen before, then do not make this row  ** part of the result.  */  if( hasDistinct ){    assert( pEList!=0 );    assert( pEList->nExpr==nColumn );    codeDistinct(v, distinct, iContinue, nColumn);    if( pOrderBy==0 ){      codeOffset(v, p, iContinue, nColumn);    }  }  switch( eDest ){    /* In this mode, write each query result to the key of the temporary    ** table iParm.    */#ifndef SQLITE_OMIT_COMPOUND_SELECT    case SRT_Union: {      sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);      if( aff ){        sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC);      }      sqlite3VdbeAddOp(v, OP_IdxInsert, iParm, 0);      break;    }    /* Construct a record from the query result, but instead of    ** saving that record, use it as a key to delete elements from    ** the temporary table iParm.    */    case SRT_Except: {      int addr;      addr = sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);      sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC);      sqlite3VdbeAddOp(v, OP_NotFound, iParm, addr+3);      sqlite3VdbeAddOp(v, OP_Delete, iParm, 0);      break;    }#endif    /* Store the result as data using a unique key.    */    case SRT_Table:    case SRT_VirtualTab: {      sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);      if( pOrderBy ){        pushOntoSorter(pParse, pOrderBy, p);      }else{        sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0);        sqlite3VdbeAddOp(v, OP_Pull, 1, 0);        sqlite3VdbeAddOp(v, OP_Insert, iParm, 0);      }      break;    }#ifndef SQLITE_OMIT_SUBQUERY    /* If we are creating a set for an "expr IN (SELECT ...)" construct,    ** then there should be a single item on the stack.  Write this    ** item into the set table with bogus data.    */    case SRT_Set: {      int addr1 = sqlite3VdbeCurrentAddr(v);      int addr2;      assert( nColumn==1 );      sqlite3VdbeAddOp(v, OP_NotNull, -1, addr1+3);      sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      addr2 = sqlite3VdbeAddOp(v, OP_Goto, 0, 0);      if( pOrderBy ){        /* At first glance you would think we could optimize out the        ** ORDER BY in this case since the order of entries in the set        ** does not matter.  But there might be a LIMIT clause, in which        ** case the order does matter */        pushOntoSorter(pParse, pOrderBy, p);      }else{        char affinity = (iParm>>16)&0xFF;        affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, affinity);        sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &affinity, 1);        sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0);      }      sqlite3VdbeJumpHere(v, addr2);      break;    }    /* If any row exist in the result set, record that fact and abort.    */    case SRT_Exists: {      sqlite3VdbeAddOp(v, OP_MemInt, 1, iParm);      sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0);      /* The LIMIT clause will terminate the loop for us */      break;    }    /* If this is a scalar select that is part of an expression, then    ** store the results in the appropriate memory cell and break out    ** of the scan loop.    */    case SRT_Mem: {      assert( nColumn==1 );      if( pOrderBy ){        pushOntoSorter(pParse, pOrderBy, p);      }else{        sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1);        /* The LIMIT clause will jump out of the loop for us */      }      break;    }#endif /* #ifndef SQLITE_OMIT_SUBQUERY */    /* Send the data to the callback function or to a subroutine.  In the    ** case of a subroutine, the subroutine itself is responsible for    ** popping the data from the stack.    */    case SRT_Subroutine:    case SRT_Callback: {      if( pOrderBy ){        sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);        pushOntoSorter(pParse, pOrderBy, p);      }else if( eDest==SRT_Subroutine ){        sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm);      }else{        sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0);      }      break;    }#if !defined(SQLITE_OMIT_TRIGGER)    /* Discard the results.  This is used for SELECT statements inside    ** the body of a TRIGGER.  The purpose of such selects is to call    ** user-defined functions that have side effects.  We do not care    ** about the actual results of the select.    */    default: {      assert( eDest==SRT_Discard );      sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0);      break;    }#endif  }  /* Jump to the end of the loop if the LIMIT is reached.  */  if( p->iLimit>=0 && pOrderBy==0 ){    sqlite3VdbeAddOp(v, OP_MemIncr, -1, p->iLimit);    sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, iBreak);  }  return 0;}/*** Given an expression list, generate a KeyInfo structure that records** the collating sequence for each expression in that expression list.**** If the ExprList is an ORDER BY or GROUP BY clause then the resulting** KeyInfo structure is appropriate for initializing a virtual index to** implement that clause.  If the ExprList is the result set of a SELECT** then the KeyInfo structure is appropriate for initializing a virtual** index to implement a DISTINCT test.**** Space to hold the KeyInfo structure is obtain from malloc.  The calling** function is responsible for seeing that this structure is eventually** freed.  Add the KeyInfo structure to the P3 field of an opcode using** P3_KEYINFO_HANDOFF is the usual way of dealing with this.*/static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){  sqlite3 *db = pParse->db;  int nExpr;  KeyInfo *pInfo;  struct ExprList_item *pItem;  int i;  nExpr = pList->nExpr;  pInfo = sqliteMalloc( sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );  if( pInfo ){    pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];    pInfo->nField = nExpr;    pInfo->enc = ENC(db);    for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){      CollSeq *pColl;      pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);      if( !pColl ){        pColl = db->pDfltColl;      }      pInfo->aColl[i] = pColl;      pInfo->aSortOrder[i] = pItem->sortOrder;    }  }  return pInfo;}/*** If the inner loop was generated using a non-null pOrderBy argument,** then the results were placed in a sorter.  After the loop is terminated** we need to run the sorter and output the results.  The following** routine generates the code needed to do that.*/static void generateSortTail(  Parse *pParse,   /* Parsing context */  Select *p,       /* The SELECT statement */  Vdbe *v,         /* Generate code into this VDBE */  int nColumn,     /* Number of columns of data */  int eDest,       /* Write the sorted results here */  int iParm        /* Optional parameter associated with eDest */){  int brk = sqlite3VdbeMakeLabel(v);  int cont = sqlite3VdbeMakeLabel(v);  int addr;  int iTab;  int pseudoTab;  ExprList *pOrderBy = p->pOrderBy;  iTab = pOrderBy->iECursor;  if( eDest==SRT_Callback || eDest==SRT_Subroutine ){    pseudoTab = pParse->nTab++;    sqlite3VdbeAddOp(v, OP_OpenPseudo, pseudoTab, 0);    sqlite3VdbeAddOp(v, OP_SetNumColumns, pseudoTab, nColumn);  }  addr = 1 + sqlite3VdbeAddOp(v, OP_Sort, iTab, brk);  codeOffset(v, p, cont, 0);  if( eDest==SRT_Callback || eDest==SRT_Subroutine ){    sqlite3VdbeAddOp(v, OP_Integer, 1, 0);  }  sqlite3VdbeAddOp(v, OP_Column, iTab, pOrderBy->nExpr + 1);  switch( eDest ){    case SRT_Table:    case SRT_VirtualTab: {      sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0);      sqlite3VdbeAddOp(v, OP_Pull, 1, 0);      sqlite3VdbeAddOp(v, OP_Insert, iParm, 0);      break;    }#ifndef SQLITE_OMIT_SUBQUERY    case SRT_Set: {      assert( nColumn==1 );      sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3);      sqlite3VdbeAddOp(v, OP_Pop, 1, 0);      sqlite3VdbeAddOp(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+3);      sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, "c", P3_STATIC);      sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0);      break;    }    case SRT_Mem: {      assert( nColumn==1 );      sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1);      /* The LIMIT clause will terminate the loop for us */      break;    }#endif    case SRT_Callback:    case SRT_Subroutine: {      int i;      sqlite3VdbeAddOp(v, OP_Insert, pseudoTab, 0);      for(i=0; i<nColumn; i++){        sqlite3VdbeAddOp(v, OP_Column, pseudoTab, i);      }      if( eDest==SRT_Callback ){        sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0);      }else{        sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm);      }      break;    }    default: {      /* Do nothing */      break;    }  }  /* Jump to the end of the loop when the LIMIT is reached  */  if( p->iLimit>=0 ){    sqlite3VdbeAddOp(v, OP_MemIncr, -1, p->iLimit);    sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, brk);  }  /* The bottom of the loop  */  sqlite3VdbeResolveLabel(v, cont);  sqlite3VdbeAddOp(v, OP_Next, iTab, addr);  sqlite3VdbeResolveLabel(v, brk);  if( eDest==SRT_Callback || eDest==SRT_Subroutine ){    sqlite3VdbeAddOp(v, OP_Close, pseudoTab, 0);  }}/*** Return a pointer to a string containing the 'declaration type' of the** expression pExpr. The string may be treated as static by the caller.**** The declaration type is the exact datatype definition extracted from the** original CREATE TABLE statement if the expression is a column. The** declaration type for a ROWID field is INTEGER. Exactly when an expression** is considered a column can be complex in the presence of subqueries. The** result-set expression in all of the following SELECT statements is ** considered a column by this function.****   SELECT col FROM tbl;**   SELECT (SELECT col FROM tbl;**   SELECT (SELECT col FROM tbl);**   SELECT abc FROM (SELECT col AS abc FROM tbl);** ** The declaration type for any expression other than a column is NULL.*/static const char *columnType(  NameContext *pNC,   Expr *pExpr,  const char **pzOriginDb,  const char **pzOriginTab,  const char **pzOriginCol){  char const *zType = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区很污很色的| 久久精品99国产精品日本| 亚洲精品伦理在线| 麻豆成人久久精品二区三区红| 国产资源在线一区| 欧美经典一区二区三区| 欧美日韩成人综合| 国产精品福利一区| 国产米奇在线777精品观看| 欧美乱妇23p| 亚洲女子a中天字幕| www.激情成人| 欧美精品一区视频| 奇米影视7777精品一区二区| 在线看国产日韩| 中文字幕一区在线观看| 国产成人综合精品三级| 精品三级在线观看| 美女视频第一区二区三区免费观看网站 | 国产精品美女久久久久久久网站| 日本不卡免费在线视频| 欧美三级三级三级爽爽爽| 亚洲天堂中文字幕| av网站一区二区三区| 国产精品区一区二区三区| 国产激情视频一区二区三区欧美 | 91久久一区二区| 中文字幕一区二区三区在线观看 | 黄色资源网久久资源365| 91精品福利在线一区二区三区 | 最新日韩av在线| 丝袜脚交一区二区| 奇米色一区二区三区四区| 精品少妇一区二区三区在线视频| 午夜视频在线观看一区二区三区| 成人免费毛片高清视频| 国产精品拍天天在线| 成人亚洲精品久久久久软件| 日韩一区二区三区在线观看| 免费成人在线观看视频| 欧美成人综合网站| 国产麻豆精品在线观看| 国产欧美久久久精品影院| 成人综合激情网| 日韩一区中文字幕| 91福利精品视频| 亚洲成a人v欧美综合天堂| 欧美日韩精品电影| 麻豆精品国产91久久久久久| 精品99999| 不卡的av电影在线观看| 一区二区三区资源| 日韩一卡二卡三卡| 国产成a人亚洲精| 一区二区三区在线视频免费观看| 91精品中文字幕一区二区三区| 香蕉成人啪国产精品视频综合网| 欧美电影一区二区三区| 精品在线观看免费| 国产精品女同一区二区三区| 91官网在线观看| 免费观看久久久4p| 国产精品乱码妇女bbbb| 欧洲色大大久久| 久久精品国产一区二区三区免费看| 国产日本欧美一区二区| 91精品国产全国免费观看| 日韩精品专区在线影院重磅| 亚洲欧美成人一区二区三区| 日韩一区二区在线看| 99精品桃花视频在线观看| 日韩成人午夜电影| 中文字幕在线不卡| 欧美大尺度电影在线| av成人老司机| 久久激情五月婷婷| 亚洲蜜桃精久久久久久久| 欧美精品一区二区三区高清aⅴ | 91在线精品一区二区| 日韩国产欧美在线视频| 综合久久国产九一剧情麻豆| 欧美高清你懂得| 色综合久久久网| 国产盗摄女厕一区二区三区| 亚洲成av人片观看| 国产精品久久久久aaaa樱花 | 久久国产精品72免费观看| 欧美激情一区二区三区蜜桃视频 | 亚洲成人av中文| 欧美变态tickling挠脚心| 日本大香伊一区二区三区| 国产在线精品免费av| 亚洲一区二区三区爽爽爽爽爽| 久久久久国产精品人| 欧美三级韩国三级日本三斤 | 欧美一区二区播放| 色婷婷av一区二区三区软件 | 亚洲欧美日韩国产成人精品影院| 欧美一级专区免费大片| 欧美日韩在线精品一区二区三区激情| 99re成人精品视频| 国产**成人网毛片九色 | av色综合久久天堂av综合| 国产精品一二三| 韩国视频一区二区| 久久99精品久久久久久国产越南 | 在线观看成人小视频| 99久久综合色| 成人av网站在线观看免费| 国产精品18久久久久久久久久久久 | 一二三区精品福利视频| 亚洲日本乱码在线观看| 国产精品毛片无遮挡高清| 中文天堂在线一区| 国产精品久线在线观看| 亚洲日本电影在线| 专区另类欧美日韩| 亚洲一卡二卡三卡四卡五卡| 亚洲黄色片在线观看| 亚洲国产精品一区二区尤物区| 五月天亚洲精品| 日本不卡视频在线| 国产精品影视天天线| 国产成a人无v码亚洲福利| 成人福利视频在线看| 97成人超碰视| 欧美亚日韩国产aⅴ精品中极品| 欧美色偷偷大香| 在线成人免费观看| 精品国产伦一区二区三区观看体验 | 亚洲制服欧美中文字幕中文字幕| 亚洲一线二线三线视频| 五月天网站亚洲| 成人精品电影在线观看| 欧美综合色免费| 欧美二区乱c少妇| 精品国产网站在线观看| 欧美激情一区在线观看| 中文字幕字幕中文在线中不卡视频| 亚洲美女少妇撒尿| 日本不卡的三区四区五区| 国产乱码精品1区2区3区| 不卡的av中国片| 51午夜精品国产| 国产日韩欧美高清在线| 一区二区三区av电影 | 亚洲乱码国产乱码精品精的特点| 亚洲成av人影院| 国产乱码精品一区二区三| 日本道在线观看一区二区| 日韩欧美三级在线| 中文字幕亚洲成人| 三级不卡在线观看| 成人综合在线视频| 欧美丰满一区二区免费视频| 欧美韩国日本一区| 日本sm残虐另类| 99在线视频精品| 欧美一区二区三区日韩视频| 国产精品免费人成网站| 日韩av网站免费在线| 风间由美性色一区二区三区| 欧美日韩一二三区| 国产精品久久久久久久午夜片| 亚洲午夜影视影院在线观看| 国产成人综合在线| 91精品国产欧美一区二区18| 亚洲欧洲制服丝袜| 国产精品一区2区| 3d成人动漫网站| 亚洲精品视频自拍| 国产精品99久久久久| 日韩一区二区三区三四区视频在线观看 | 国产精品久久久久7777按摩 | 欧美xxxxxxxxx| 亚洲电影第三页| 91在线精品一区二区| 国产亚洲欧美日韩在线一区| 日韩国产精品久久久| 欧美在线观看视频一区二区三区| 欧美国产成人在线| 国内成人免费视频| 日韩一区和二区| 日韩专区一卡二卡| 欧美色综合久久| 一区二区三区免费在线观看| 成人黄色片在线观看| 久久九九99视频| 国精产品一区一区三区mba视频 | 亚洲精品自拍动漫在线| 成人丝袜18视频在线观看| 日韩精品一区二区三区视频播放| 亚洲大尺度视频在线观看| 91在线一区二区| 中文字幕日韩欧美一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 精品欧美一区二区久久| 九九九精品视频| 久久这里只有精品6| 六月丁香婷婷色狠狠久久|