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

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

?? vdbe.c

?? 新版輕量級嵌入式數(shù)據(jù)庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*** 2001 September 15**** The author disclaims copyright to this source code.  In place of** a legal notice, here is a blessing:****    May you do good and not evil.**    May you find forgiveness for yourself and forgive others.**    May you share freely, never taking more than you give.***************************************************************************** The code in this file implements execution method of the ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")** handles housekeeping details such as creating and deleting** VDBE instances.  This file is solely interested in executing** the VDBE program.**** In the external interface, an "sqlite3_stmt*" is an opaque pointer** to a VDBE.**** The SQL parser generates a program which is then executed by** the VDBE to do the work of the SQL statement.  VDBE programs are ** similar in form to assembly language.  The program consists of** a linear sequence of operations.  Each operation has an opcode ** and 3 operands.  Operands P1 and P2 are integers.  Operand P3 ** is a null-terminated string.   The P2 operand must be non-negative.** Opcodes will typically ignore one or more operands.  Many opcodes** ignore all three operands.**** Computation results are stored on a stack.  Each entry on the** stack is either an integer, a null-terminated string, a floating point** number, or the SQL "NULL" value.  An inplicit conversion from one** type to the other occurs as necessary.** ** Most of the code in this file is taken up by the sqlite3VdbeExec()** function which does the work of interpreting a VDBE program.** But other routines are also provided to help in building up** a program instruction by instruction.**** Various scripts scan this source file in order to generate HTML** documentation, headers files, or other derived files.  The formatting** of the code in this file is, therefore, important.  See other comments** in this file for details.  If in doubt, do not deviate from existing** commenting and indentation practices when changing or adding code.**** $Id: vdbe.c,v 1.548 2006/03/22 22:10:08 drh Exp $*/#include "sqliteInt.h"#include "os.h"#include <ctype.h>#include "vdbeInt.h"/*** The following global variable is incremented every time a cursor** moves, either by the OP_MoveXX, OP_Next, or OP_Prev opcodes.  The test** procedures use this information to make sure that indices are** working correctly.  This variable has no function other than to** help verify the correct operation of the library.*/int sqlite3_search_count = 0;/*** When this global variable is positive, it gets decremented once before** each instruction in the VDBE.  When reaches zero, the SQLITE_Interrupt** of the db.flags field is set in order to simulate and interrupt.**** This facility is used for testing purposes only.  It does not function** in an ordinary build.*/int sqlite3_interrupt_count = 0;/*** The next global variable is incremented each type the OP_Sort opcode** is executed.  The test procedures use this information to make sure that** sorting is occurring or not occuring at appropriate times.   This variable** has no function other than to help verify the correct operation of the** library.*/int sqlite3_sort_count = 0;/*** Release the memory associated with the given stack level.  This** leaves the Mem.flags field in an inconsistent state.*/#define Release(P) if((P)->flags&MEM_Dyn){ sqlite3VdbeMemRelease(P); }/*** Convert the given stack entity into a string if it isn't one** already. Return non-zero if a malloc() fails.*/#define Stringify(P, enc) \   if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \     { goto no_mem; }/*** Convert the given stack entity into a string that has been obtained** from sqliteMalloc().  This is different from Stringify() above in that** Stringify() will use the NBFS bytes of static string space if the string** will fit but this routine always mallocs for space.** Return non-zero if we run out of memory.*/#define Dynamicify(P,enc) sqlite3VdbeMemDynamicify(P)/*** The header of a record consists of a sequence variable-length integers.** These integers are almost always small and are encoded as a single byte.** The following macro takes advantage this fact to provide a fast decode** of the integers in a record header.  It is faster for the common case** where the integer is a single byte.  It is a little slower when the** integer is two or more bytes.  But overall it is faster.**** The following expressions are equivalent:****     x = sqlite3GetVarint32( A, &B );****     x = GetVarint( A, B );***/#define GetVarint(A,B)  ((B = *(A))<=0x7f ? 1 : sqlite3GetVarint32(A, &B))/*** An ephemeral string value (signified by the MEM_Ephem flag) contains** a pointer to a dynamically allocated string where some other entity** is responsible for deallocating that string.  Because the stack entry** does not control the string, it might be deleted without the stack** entry knowing it.**** This routine converts an ephemeral string into a dynamically allocated** string that the stack entry itself controls.  In other words, it** converts an MEM_Ephem string into an MEM_Dyn string.*/#define Deephemeralize(P) \   if( ((P)->flags&MEM_Ephem)!=0 \       && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}/*** Argument pMem points at a memory cell that will be passed to a** user-defined function or returned to the user as the result of a query.** The second argument, 'db_enc' is the text encoding used by the vdbe for** stack variables.  This routine sets the pMem->enc and pMem->type** variables used by the sqlite3_value_*() routines.*/#define storeTypeInfo(A,B) _storeTypeInfo(A)static void _storeTypeInfo(Mem *pMem){  int flags = pMem->flags;  if( flags & MEM_Null ){    pMem->type = SQLITE_NULL;  }  else if( flags & MEM_Int ){    pMem->type = SQLITE_INTEGER;  }  else if( flags & MEM_Real ){    pMem->type = SQLITE_FLOAT;  }  else if( flags & MEM_Str ){    pMem->type = SQLITE_TEXT;  }else{    pMem->type = SQLITE_BLOB;  }}/*** Pop the stack N times.*/static void popStack(Mem **ppTos, int N){  Mem *pTos = *ppTos;  while( N>0 ){    N--;    Release(pTos);    pTos--;  }  *ppTos = pTos;}/*** Allocate cursor number iCur.  Return a pointer to it.  Return NULL** if we run out of memory.*/static Cursor *allocateCursor(Vdbe *p, int iCur, int iDb){  Cursor *pCx;  assert( iCur<p->nCursor );  if( p->apCsr[iCur] ){    sqlite3VdbeFreeCursor(p->apCsr[iCur]);  }  p->apCsr[iCur] = pCx = sqliteMalloc( sizeof(Cursor) );  if( pCx ){    pCx->iDb = iDb;  }  return pCx;}/*** Try to convert a value into a numeric representation if we can** do so without loss of information.  In other words, if the string** looks like a number, convert it into a number.  If it does not** look like a number, leave it alone.*/static void applyNumericAffinity(Mem *pRec){  if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){    int realnum;    sqlite3VdbeMemNulTerminate(pRec);    if( (pRec->flags&MEM_Str)         && sqlite3IsNumber(pRec->z, &realnum, pRec->enc) ){      i64 value;      sqlite3VdbeChangeEncoding(pRec, SQLITE_UTF8);      if( !realnum && sqlite3atoi64(pRec->z, &value) ){        sqlite3VdbeMemRelease(pRec);        pRec->i = value;        pRec->flags = MEM_Int;      }else{        sqlite3VdbeMemRealify(pRec);      }    }  }}/*** Processing is determine by the affinity parameter:**** SQLITE_AFF_INTEGER:** SQLITE_AFF_REAL:** SQLITE_AFF_NUMERIC:**    Try to convert pRec to an integer representation or a **    floating-point representation if an integer representation**    is not possible.  Note that the integer representation is**    always preferred, even if the affinity is REAL, because**    an integer representation is more space efficient on disk.**** SQLITE_AFF_TEXT:**    Convert pRec to a text representation.**** SQLITE_AFF_NONE:**    No-op.  pRec is unchanged.*/static void applyAffinity(Mem *pRec, char affinity, u8 enc){  if( affinity==SQLITE_AFF_TEXT ){    /* Only attempt the conversion to TEXT if there is an integer or real    ** representation (blob and NULL do not get converted) but no string    ** representation.    */    if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){      sqlite3VdbeMemStringify(pRec, enc);    }    pRec->flags &= ~(MEM_Real|MEM_Int);  }else if( affinity!=SQLITE_AFF_NONE ){    assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL             || affinity==SQLITE_AFF_NUMERIC );    applyNumericAffinity(pRec);    if( pRec->flags & MEM_Real ){      sqlite3VdbeIntegerAffinity(pRec);    }  }}/*** Try to convert the type of a function argument or a result column** into a numeric representation.  Use either INTEGER or REAL whichever** is appropriate.  But only do the conversion if it is possible without** loss of information and return the revised type of the argument.**** This is an EXPERIMENTAL api and is subject to change or removal.*/int sqlite3_value_numeric_type(sqlite3_value *pVal){  Mem *pMem = (Mem*)pVal;  applyNumericAffinity(pMem);  storeTypeInfo(pMem, 0);  return pMem->type;}/*** Exported version of applyAffinity(). This one works on sqlite3_value*, ** not the internal Mem* type.*/void sqlite3ValueApplyAffinity(sqlite3_value *pVal, u8 affinity, u8 enc){  applyAffinity((Mem *)pVal, affinity, enc);}#ifdef SQLITE_DEBUG/*** Write a nice string representation of the contents of cell pMem** into buffer zBuf, length nBuf.*/void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){  char *zCsr = zBuf;  int f = pMem->flags;  static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};  if( f&MEM_Blob ){    int i;    char c;    if( f & MEM_Dyn ){      c = 'z';      assert( (f & (MEM_Static|MEM_Ephem))==0 );    }else if( f & MEM_Static ){      c = 't';      assert( (f & (MEM_Dyn|MEM_Ephem))==0 );    }else if( f & MEM_Ephem ){      c = 'e';      assert( (f & (MEM_Static|MEM_Dyn))==0 );    }else{      c = 's';    }    zCsr += sprintf(zCsr, "%c", c);    zCsr += sprintf(zCsr, "%d[", pMem->n);    for(i=0; i<16 && i<pMem->n; i++){      zCsr += sprintf(zCsr, "%02X ", ((int)pMem->z[i] & 0xFF));    }    for(i=0; i<16 && i<pMem->n; i++){      char z = pMem->z[i];      if( z<32 || z>126 ) *zCsr++ = '.';      else *zCsr++ = z;    }    zCsr += sprintf(zCsr, "]");    *zCsr = '\0';  }else if( f & MEM_Str ){    int j, k;    zBuf[0] = ' ';    if( f & MEM_Dyn ){      zBuf[1] = 'z';      assert( (f & (MEM_Static|MEM_Ephem))==0 );    }else if( f & MEM_Static ){      zBuf[1] = 't';      assert( (f & (MEM_Dyn|MEM_Ephem))==0 );    }else if( f & MEM_Ephem ){      zBuf[1] = 'e';      assert( (f & (MEM_Static|MEM_Dyn))==0 );    }else{      zBuf[1] = 's';    }    k = 2;    k += sprintf(&zBuf[k], "%d", pMem->n);    zBuf[k++] = '[';    for(j=0; j<15 && j<pMem->n; j++){      u8 c = pMem->z[j];      if( c>=0x20 && c<0x7f ){        zBuf[k++] = c;      }else{        zBuf[k++] = '.';      }    }    zBuf[k++] = ']';    k += sprintf(&zBuf[k], encnames[pMem->enc]);    zBuf[k++] = 0;  }}#endif#ifdef VDBE_PROFILE/*** The following routine only works on pentium-class processors.** It uses the RDTSC opcode to read the cycle count value out of the** processor and returns that value.  This can be used for high-res** profiling.*/__inline__ unsigned long long int hwtime(void){  unsigned long long int x;  __asm__("rdtsc\n\t"          "mov %%edx, %%ecx\n\t"          :"=A" (x));  return x;}#endif/*** The CHECK_FOR_INTERRUPT macro defined here looks to see if the** sqlite3_interrupt() routine has been called.  If it has been, then** processing of the VDBE program is interrupted.**** This macro added to every instruction that does a jump in order to** implement a loop.  This test used to be on every single instruction,** but that meant we more testing that we needed.  By only testing the** flag on jump instructions, we get a (small) speed improvement.*/#define CHECK_FOR_INTERRUPT \   if( db->flags & SQLITE_Interrupt ) goto abort_due_to_interrupt;/*** Execute as much of a VDBE program as we can then return.**** sqlite3VdbeMakeReady() must be called before this routine in order to** close the program with a final OP_Halt and to set up the callbacks** and the error message pointer.**** Whenever a row or result data is available, this routine will either** invoke the result callback (if there is one) or return with** SQLITE_ROW.**** If an attempt is made to open a locked database, then this routine** will either invoke the busy callback (if there is one) or it will** return SQLITE_BUSY.**** If an error occurs, an error message is written to memory obtained** from sqliteMalloc() and p->zErrMsg is made to point to that memory.** The error code is stored in p->rc and this routine returns SQLITE_ERROR.**** If the callback ever returns non-zero, then the program exits** immediately.  There will be no error message but the p->rc field is** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.**** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this** routine to return SQLITE_ERROR.**** Other fatal errors return SQLITE_ERROR.**** After this routine has finished, sqlite3VdbeFinalize() should be** used to clean up the mess that was left behind.*/int sqlite3VdbeExec(  Vdbe *p                    /* The VDBE */){  int pc;                    /* The program counter */  Op *pOp;                   /* Current operation */  int rc = SQLITE_OK;        /* Value to return */  sqlite3 *db = p->db;       /* The database */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线不卡视频| 最新久久zyz资源站| 国产中文字幕一区| 欧美裸体一区二区三区| 精品少妇一区二区三区在线播放 | 国产精品91一区二区| 成人免费小视频| 精品国产91洋老外米糕| 欧美日韩在线播| 99re这里只有精品视频首页| 国内一区二区在线| 青青青伊人色综合久久| 有码一区二区三区| 秋霞电影网一区二区| 欧美性视频一区二区三区| 久久99精品网久久| 亚洲国产一区二区三区青草影视 | 久久影院电视剧免费观看| 色综合天天综合色综合av| 免费高清在线一区| 亚洲午夜激情av| 一区二区在线观看av| 国产精品美女久久久久aⅴ国产馆| 日韩视频一区在线观看| 欧美日本一道本在线视频| 91麻豆文化传媒在线观看| 国产 欧美在线| hitomi一区二区三区精品| 国产在线播放一区二区三区| 男人操女人的视频在线观看欧美 | 男人操女人的视频在线观看欧美 | 亚洲国产精品欧美一二99| 一二三四区精品视频| 成人小视频免费在线观看| 1024成人网色www| 在线亚洲免费视频| 国产精品一二三区| 激情深爱一区二区| 经典三级在线一区| 国产激情一区二区三区四区| 精品一区二区久久| 国产精品资源在线看| 国产一区二区三区观看| 国产麻豆精品在线| 国产91清纯白嫩初高中在线观看| 韩日欧美一区二区三区| 国产一区 二区| 成人久久18免费网站麻豆| 99久久婷婷国产精品综合| av高清久久久| 日本久久电影网| 欧美高清精品3d| 欧美大片一区二区| 久久无码av三级| 国产精品欧美极品| 依依成人综合视频| 日本va欧美va欧美va精品| 精品一区二区成人精品| 亚洲一区二区三区激情| 欧美精品一区二区三区很污很色的| 色噜噜狠狠成人中文综合 | 韩国三级中文字幕hd久久精品| 久久97超碰色| a级精品国产片在线观看| 91久久国产最好的精华液| 欧美肥妇毛茸茸| 久久亚洲精品国产精品紫薇| 国产精品女主播av| 一区二区三区精密机械公司| 视频在线观看91| 国产精品正在播放| 在线观看av不卡| 欧美成人精品二区三区99精品| 国产精品天干天干在观线| 亚洲一区二区av电影| 日本不卡视频在线观看| 国产91精品露脸国语对白| 欧美色图一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 综合网在线视频| 蜜桃av一区二区在线观看| 成人亚洲一区二区一| 欧美三级韩国三级日本一级| 亚洲精品一区二区三区在线观看| 亚洲国产精品精华液网站| 欧美性猛交xxxx乱大交退制版| 欧美久久高跟鞋激| 国产精品欧美极品| 麻豆成人在线观看| 日本乱人伦aⅴ精品| 久久久亚洲午夜电影| 亚洲国产日韩一级| 不卡av在线网| 51精品视频一区二区三区| 国产精品久久久久久久久免费桃花| 亚洲一二三四区| 国产99精品在线观看| 91精品国产91久久久久久一区二区| 中文字幕乱码一区二区免费| 日本亚洲免费观看| 在线观看成人小视频| 久久女同精品一区二区| 午夜一区二区三区视频| 北条麻妃国产九九精品视频| 精品日本一线二线三线不卡| 亚洲网友自拍偷拍| 91免费在线播放| 国产日韩精品一区| 美腿丝袜亚洲综合| 欧美精选在线播放| 亚洲综合激情另类小说区| 成人午夜短视频| 精品第一国产综合精品aⅴ| 婷婷综合在线观看| 欧美综合一区二区三区| 亚洲天堂成人在线观看| 国产成人福利片| 久久久国产精华| 狠狠色丁香久久婷婷综| 欧美一区二区三区在线看| 亚洲成a人v欧美综合天堂 | 色婷婷国产精品综合在线观看| 日本一区二区三区dvd视频在线| 欧美aaaaa成人免费观看视频| 欧美日韩国产乱码电影| 亚洲电影一级黄| 在线视频国内一区二区| 日韩毛片在线免费观看| 99久久99久久精品免费观看| 国产三级久久久| 91丝袜美腿高跟国产极品老师| 国产网站一区二区三区| 韩国三级电影一区二区| 久久一留热品黄| 国产曰批免费观看久久久| 精品国产伦一区二区三区观看方式 | 日韩精品中午字幕| 免费国产亚洲视频| 日韩一区二区免费在线观看| 日韩av不卡一区二区| 日韩欧美一区二区免费| 国产又黄又大久久| 久久综合久久鬼色| 国产传媒欧美日韩成人| 国产精品久久久久久久久久久免费看| 国产91精品一区二区麻豆亚洲| 国产精品久久久久久户外露出| av在线播放成人| 亚洲永久免费av| 7777精品伊人久久久大香线蕉最新版 | 精品第一国产综合精品aⅴ| 色综合一区二区| 精品系列免费在线观看| 韩国女主播一区二区三区| 精品在线亚洲视频| 国产精品嫩草影院com| 欧美一二三区在线观看| 91精品国产91热久久久做人人| 色狠狠综合天天综合综合| 91丨porny丨国产| 91在线视频在线| 午夜免费久久看| 麻豆一区二区三区| 日韩伦理免费电影| 色乱码一区二区三区88 | 欧美国产综合色视频| 91在线porny国产在线看| 亚洲一区在线视频观看| 欧美成人国产一区二区| 丁香婷婷综合五月| 亚洲夂夂婷婷色拍ww47| 欧美成人一区二区三区| 91免费版pro下载短视频| 亚洲国产日韩a在线播放| 日韩视频免费观看高清完整版在线观看 | 欧美一级艳片视频免费观看| 国产一区三区三区| 亚洲精品国产第一综合99久久| 欧美精品久久99久久在免费线| 国产精品综合在线视频| 亚洲综合色自拍一区| 欧美精品一区二区三区高清aⅴ| 国产乱国产乱300精品| 91蜜桃在线观看| 日韩伦理免费电影| 99免费精品视频| 日本不卡123| 亚洲天堂免费在线观看视频| 日韩欧美一级片| 91福利视频久久久久| 国产一区在线精品| 亚洲成人av中文| 国产精品国产三级国产普通话99| 91超碰这里只有精品国产| 成人av中文字幕| 日韩avvvv在线播放| 亚洲乱码国产乱码精品精小说| 久久综合久久99| 6080亚洲精品一区二区| 91免费国产在线|