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

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

?? vdbeaux.c

?? sqlite 3.3.8 支持加密的版本
?? C
?? 第 1 頁 / 共 5 頁
字號:
**      5                     6            signed integer
**      6                     8            signed integer
**      7                     8            IEEE float
**      8                     0            Integer constant 0
**      9                     0            Integer constant 1
**     10,11                               reserved for expansion
**    N>=12 and even       (N-12)/2        BLOB
**    N>=13 and odd        (N-13)/2        text
**
** The 8 and 9 types were added in 3.3.0, file format 4.  Prior versions
** of SQLite will not understand those serial types.
*/

/*
** Return the serial-type for the value stored in pMem.
*/
u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
  int flags = pMem->flags;

  if( flags&MEM_Null ){
    return 0;
  }
  if( flags&MEM_Int ){
    /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
#   define MAX_6BYTE ((((i64)0x00001000)<<32)-1)
    i64 i = pMem->i;
    u64 u;
    if( file_format>=4 && (i&1)==i ){
      return 8+i;
    }
    u = i<0 ? -i : i;
    if( u<=127 ) return 1;
    if( u<=32767 ) return 2;
    if( u<=8388607 ) return 3;
    if( u<=2147483647 ) return 4;
    if( u<=MAX_6BYTE ) return 5;
    return 6;
  }
  if( flags&MEM_Real ){
    return 7;
  }
  if( flags&MEM_Str ){
    int n = pMem->n;
    assert( n>=0 );
    return ((n*2) + 13);
  }
  if( flags&MEM_Blob ){
    return (pMem->n*2 + 12);
  }
  return 0;
}

/*
** Return the length of the data corresponding to the supplied serial-type.
*/
int sqlite3VdbeSerialTypeLen(u32 serial_type){
  if( serial_type>=12 ){
    return (serial_type-12)/2;
  }else{
    static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
    return aSize[serial_type];
  }
}

/*
** Write the serialized data blob for the value stored in pMem into 
** buf. It is assumed that the caller has allocated sufficient space.
** Return the number of bytes written.
*/ 
int sqlite3VdbeSerialPut(unsigned char *buf, Mem *pMem, int file_format){
  u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
  int len;

  /* Integer and Real */
  if( serial_type<=7 && serial_type>0 ){
    u64 v;
    int i;
    if( serial_type==7 ){
      v = *(u64*)&pMem->r;
    }else{
      v = *(u64*)&pMem->i;
    }
    len = i = sqlite3VdbeSerialTypeLen(serial_type);
    while( i-- ){
      buf[i] = (v&0xFF);
      v >>= 8;
    }
    return len;
  }

  /* String or blob */
  if( serial_type>=12 ){
    len = sqlite3VdbeSerialTypeLen(serial_type);
    memcpy(buf, pMem->z, len);
    return len;
  }

  /* NULL or constants 0 or 1 */
  return 0;
}

/*
** Deserialize the data blob pointed to by buf as serial type serial_type
** and store the result in pMem.  Return the number of bytes read.
*/ 
int sqlite3VdbeSerialGet(
  const unsigned char *buf,     /* Buffer to deserialize from */
  u32 serial_type,              /* Serial type to deserialize */
  Mem *pMem                     /* Memory cell to write value into */
){
  switch( serial_type ){
    case 10:   /* Reserved for future use */
    case 11:   /* Reserved for future use */
    case 0: {  /* NULL */
      pMem->flags = MEM_Null;
      break;
    }
    case 1: { /* 1-byte signed integer */
      pMem->i = (signed char)buf[0];
      pMem->flags = MEM_Int;
      return 1;
    }
    case 2: { /* 2-byte signed integer */
      pMem->i = (((signed char)buf[0])<<8) | buf[1];
      pMem->flags = MEM_Int;
      return 2;
    }
    case 3: { /* 3-byte signed integer */
      pMem->i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
      pMem->flags = MEM_Int;
      return 3;
    }
    case 4: { /* 4-byte signed integer */
      pMem->i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
      pMem->flags = MEM_Int;
      return 4;
    }
    case 5: { /* 6-byte signed integer */
      u64 x = (((signed char)buf[0])<<8) | buf[1];
      u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
      x = (x<<32) | y;
      pMem->i = *(i64*)&x;
      pMem->flags = MEM_Int;
      return 6;
    }
    case 6:   /* 8-byte signed integer */
    case 7: { /* IEEE floating point */
      u64 x;
      u32 y;
#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
      /* Verify that integers and floating point values use the same
      ** byte order.  The byte order differs on some (broken) architectures.
      */
      static const u64 t1 = ((u64)0x3ff00000)<<32;
      assert( 1.0==*(double*)&t1 );
#endif

      x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
      y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
      x = (x<<32) | y;
      if( serial_type==6 ){
        pMem->i = *(i64*)&x;
        pMem->flags = MEM_Int;
      }else{
        pMem->r = *(double*)&x;
        pMem->flags = MEM_Real;
      }
      return 8;
    }
    case 8:    /* Integer 0 */
    case 9: {  /* Integer 1 */
      pMem->i = serial_type-8;
      pMem->flags = MEM_Int;
      return 0;
    }
    default: {
      int len = (serial_type-12)/2;
      pMem->z = (char *)buf;
      pMem->n = len;
      pMem->xDel = 0;
      if( serial_type&0x01 ){
        pMem->flags = MEM_Str | MEM_Ephem;
      }else{
        pMem->flags = MEM_Blob | MEM_Ephem;
      }
      return len;
    }
  }
  return 0;
}

/*
** 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))

/*
** This function compares the two table rows or index records specified by 
** {nKey1, pKey1} and {nKey2, pKey2}, returning a negative, zero
** or positive integer if {nKey1, pKey1} is less than, equal to or 
** greater than {nKey2, pKey2}.  Both Key1 and Key2 must be byte strings
** composed by the OP_MakeRecord opcode of the VDBE.
*/
int sqlite3VdbeRecordCompare(
  void *userData,
  int nKey1, const void *pKey1, 
  int nKey2, const void *pKey2
){
  KeyInfo *pKeyInfo = (KeyInfo*)userData;
  u32 d1, d2;          /* Offset into aKey[] of next data element */
  u32 idx1, idx2;      /* Offset into aKey[] of next header element */
  u32 szHdr1, szHdr2;  /* Number of bytes in header */
  int i = 0;
  int nField;
  int rc = 0;
  const unsigned char *aKey1 = (const unsigned char *)pKey1;
  const unsigned char *aKey2 = (const unsigned char *)pKey2;

  Mem mem1;
  Mem mem2;
  mem1.enc = pKeyInfo->enc;
  mem2.enc = pKeyInfo->enc;
  
  idx1 = GetVarint(aKey1, szHdr1);
  d1 = szHdr1;
  idx2 = GetVarint(aKey2, szHdr2);
  d2 = szHdr2;
  nField = pKeyInfo->nField;
  while( idx1<szHdr1 && idx2<szHdr2 ){
    u32 serial_type1;
    u32 serial_type2;

    /* Read the serial types for the next element in each key. */
    idx1 += GetVarint( aKey1+idx1, serial_type1 );
    if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
    idx2 += GetVarint( aKey2+idx2, serial_type2 );
    if( d2>=nKey2 && sqlite3VdbeSerialTypeLen(serial_type2)>0 ) break;

    /* Assert that there is enough space left in each key for the blob of
    ** data to go with the serial type just read. This assert may fail if
    ** the file is corrupted.  Then read the value from each key into mem1
    ** and mem2 respectively.
    */
    d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
    d2 += sqlite3VdbeSerialGet(&aKey2[d2], serial_type2, &mem2);

    rc = sqlite3MemCompare(&mem1, &mem2, i<nField ? pKeyInfo->aColl[i] : 0);
    if( mem1.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem1);
    if( mem2.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem2);
    if( rc!=0 ){
      break;
    }
    i++;
  }

  /* One of the keys ran out of fields, but all the fields up to that point
  ** were equal. If the incrKey flag is true, then the second key is
  ** treated as larger.
  */
  if( rc==0 ){
    if( pKeyInfo->incrKey ){
      rc = -1;
    }else if( d1<nKey1 ){
      rc = 1;
    }else if( d2<nKey2 ){
      rc = -1;
    }
  }else if( pKeyInfo->aSortOrder && i<pKeyInfo->nField
               && pKeyInfo->aSortOrder[i] ){
    rc = -rc;
  }

  return rc;
}

/*
** The argument is an index entry composed using the OP_MakeRecord opcode.
** The last entry in this record should be an integer (specifically
** an integer rowid).  This routine returns the number of bytes in
** that integer.
*/
int sqlite3VdbeIdxRowidLen(const u8 *aKey){
  u32 szHdr;        /* Size of the header */
  u32 typeRowid;    /* Serial type of the rowid */

  sqlite3GetVarint32(aKey, &szHdr);
  sqlite3GetVarint32(&aKey[szHdr-1], &typeRowid);
  return sqlite3VdbeSerialTypeLen(typeRowid);
}
  

/*
** pCur points at an index entry created using the OP_MakeRecord opcode.
** Read the rowid (the last field in the record) and store it in *rowid.
** Return SQLITE_OK if everything works, or an error code otherwise.
*/
int sqlite3VdbeIdxRowid(BtCursor *pCur, i64 *rowid){
  i64 nCellKey;
  int rc;
  u32 szHdr;        /* Size of the header */
  u32 typeRowid;    /* Serial type of the rowid */
  u32 lenRowid;     /* Size of the rowid */
  Mem m, v;

  sqlite3BtreeKeySize(pCur, &nCellKey);
  if( nCellKey<=0 ){
    return SQLITE_CORRUPT_BKPT;
  }
  rc = sqlite3VdbeMemFromBtree(pCur, 0, nCellKey, 1, &m);
  if( rc ){
    return rc;
  }
  sqlite3GetVarint32((u8*)m.z, &szHdr);
  sqlite3GetVarint32((u8*)&m.z[szHdr-1], &typeRowid);
  lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
  sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
  *rowid = v.i;
  sqlite3VdbeMemRelease(&m);
  return SQLITE_OK;
}

/*
** Compare the key of the index entry that cursor pC is point to against
** the key string in pKey (of length nKey).  Write into *pRes a number
** that is negative, zero, or positive if pC is less than, equal to,
** or greater than pKey.  Return SQLITE_OK on success.
**
** pKey is either created without a rowid or is truncated so that it
** omits the rowid at the end.  The rowid at the end of the index entry
** is ignored as well.
*/
int sqlite3VdbeIdxKeyCompare(
  Cursor *pC,                 /* The cursor to compare against */
  int nKey, const u8 *pKey,   /* The key to compare */
  int *res                    /* Write the comparison result here */
){
  i64 nCellKey;
  int rc;
  BtCursor *pCur = pC->pCursor;
  int lenRowid;
  Mem m;

  sqlite3BtreeKeySize(pCur, &nCellKey);
  if( nCellKey<=0 ){
    *res = 0;
    return SQLITE_OK;
  }
  rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, nCellKey, 1, &m);
  if( rc ){
    return rc;
  }
  lenRowid = sqlite3VdbeIdxRowidLen((u8*)m.z);
  *res = sqlite3VdbeRecordCompare(pC->pKeyInfo, m.n-lenRowid, m.z, nKey, pKey);
  sqlite3VdbeMemRelease(&m);
  return SQLITE_OK;
}

/*
** This routine sets the value to be returned by subsequent calls to
** sqlite3_changes() on the database handle 'db'. 
*/
void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
  db->nChange = nChange;
  db->nTotalChange += nChange;
}

/*
** Set a flag in the vdbe to update the change counter when it is finalised
** or reset.
*/
void sqlite3VdbeCountChanges(Vdbe *v){
  v->changeCntOn = 1;
}

/*
** Mark every prepared statement associated with a database connection
** as expired.
**
** An expired statement means that recompilation of the statement is
** recommend.  Statements expire when things happen that make their
** programs obsolete.  Removing user-defined functions or collating
** sequences, or changing an authorization function are the types of
** things that make prepared statements obsolete.
*/
void sqlite3ExpirePreparedStatements(sqlite3 *db){
  Vdbe *p;
  for(p = db->pVdbe; p; p=p->pNext){
    p->expired = 1;
  }
}

/*
** Return the database associated with the Vdbe.
*/
sqlite3 *sqlite3VdbeDb(Vdbe *v){
  return v->db;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区免费观看| av在线综合网| 9191久久久久久久久久久| 亚洲国产精华液网站w| 欧美无砖专区一中文字| 日本韩国欧美在线| 国产a区久久久| 国产麻豆成人传媒免费观看| 日日噜噜夜夜狠狠视频欧美人| 亚洲综合丁香婷婷六月香| 欧美刺激午夜性久久久久久久| 色婷婷精品大视频在线蜜桃视频| 99精品欧美一区| 久久网站最新地址| 美女脱光内衣内裤视频久久网站| 制服丝袜成人动漫| 日韩激情在线观看| 久久久久国产精品麻豆ai换脸| 黄一区二区三区| 中文一区在线播放| 国产精品一卡二卡在线观看| 亚洲日本丝袜连裤袜办公室| 色激情天天射综合网| 午夜日韩在线观看| 国产亚洲精品资源在线26u| 国产69精品久久777的优势| 久久久久久久久岛国免费| 亚洲国产va精品久久久不卡综合| 日韩一区二区三区免费观看| 久久精品国产77777蜜臀| 久久久久久久久久久久电影| 91蜜桃视频在线| 日韩av午夜在线观看| 在线视频综合导航| 麻豆91小视频| 欧美国产日本视频| 在线观看中文字幕不卡| 美腿丝袜亚洲三区| 久久日一线二线三线suv| 国产成人亚洲综合a∨婷婷图片| 亚洲视频一二区| 制服丝袜日韩国产| 国产69精品久久久久毛片 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 99久久精品免费| 婷婷开心久久网| 久久蜜臀中文字幕| 色999日韩国产欧美一区二区| 奇米亚洲午夜久久精品| 中文字幕不卡一区| 日韩一区二区不卡| 99久久精品国产一区二区三区| 舔着乳尖日韩一区| 亚洲特级片在线| 欧美一区二区黄| 久久99久久久欧美国产| 国产成人av资源| 91年精品国产| 国产99精品国产| 久久精品一二三| 国产精品乡下勾搭老头1| 欧美日韩的一区二区| 美女视频一区二区| 91在线精品一区二区三区| 久久这里只精品最新地址| 日本午夜精品视频在线观看| 2023国产精品自拍| 精品美女在线观看| 99国产精品视频免费观看| 精品一区二区在线免费观看| 亚洲综合激情网| 综合久久综合久久| 国产日韩欧美综合在线| 91在线观看污| 色呦呦国产精品| 国产成人8x视频一区二区 | 91黄色激情网站| 九九精品视频在线看| 亚洲不卡在线观看| 亚洲一区二区四区蜜桃| 国产精品麻豆久久久| 久久天天做天天爱综合色| 日韩一卡二卡三卡| 91亚洲资源网| 91麻豆国产香蕉久久精品| 国产**成人网毛片九色 | 亚洲一区二区成人在线观看| 国产精品久久久久久久浪潮网站 | 天天影视网天天综合色在线播放| 自拍偷拍国产亚洲| 国产亚洲污的网站| 久久九九全国免费| 国产校园另类小说区| 久久影院午夜片一区| 欧美成人伊人久久综合网| 欧美乱妇一区二区三区不卡视频| 色成年激情久久综合| 91热门视频在线观看| www.亚洲人| 91偷拍与自偷拍精品| 色诱视频网站一区| 色又黄又爽网站www久久| 欧美视频一区二区在线观看| 1000部国产精品成人观看| 中文字幕不卡的av| 亚洲一级二级三级| 精品在线亚洲视频| 菠萝蜜视频在线观看一区| 欧美日韩成人综合天天影院 | 欧美在线观看禁18| 国产传媒欧美日韩成人| 91久久精品一区二区二区| 国产最新精品精品你懂的| 国产成人在线视频免费播放| 国产白丝精品91爽爽久久| 色94色欧美sute亚洲线路二| 久久99久久99精品免视看婷婷| 亚洲成人一区二区| 国内欧美视频一区二区| 色综合久久久久综合99| 日韩一级完整毛片| 日韩理论片网站| 奇米888四色在线精品| 菠萝蜜视频在线观看一区| 欧美一级搡bbbb搡bbbb| 1000部国产精品成人观看| 理论片日本一区| 日本福利一区二区| 久久蜜桃av一区二区天堂 | 91精品免费在线| 国产精品嫩草99a| 久久99精品久久久久婷婷| 日本大香伊一区二区三区| 久久精品夜夜夜夜久久| 婷婷国产在线综合| 一本色道久久综合亚洲精品按摩| 欧美岛国在线观看| 亚洲伊人色欲综合网| 成人在线综合网| 日韩三级av在线播放| 亚洲精品国产一区二区精华液| 国产九色sp调教91| 欧美大片在线观看| 日精品一区二区三区| 91色九色蝌蚪| 国产精品久久久久9999吃药| 韩国v欧美v日本v亚洲v| 日韩视频永久免费| 午夜亚洲国产au精品一区二区| 不卡视频在线看| 久久久久国产一区二区三区四区| 日本va欧美va欧美va精品| 欧美在线观看一区二区| 亚洲精品水蜜桃| 99精品欧美一区二区三区小说| 国产日韩影视精品| 国产一区二区三区电影在线观看| 欧美一区二区三区视频免费播放| 亚洲丶国产丶欧美一区二区三区| 色婷婷激情综合| 一个色综合网站| 色视频一区二区| 亚洲卡通动漫在线| 91在线观看视频| 一区二区视频在线| 色乱码一区二区三区88| 亚洲欧美偷拍三级| 91精品国产综合久久久蜜臀图片| 日本网站在线观看一区二区三区| 一区二区三区高清不卡| 中文字幕在线不卡一区| 91日韩一区二区三区| 日韩 欧美一区二区三区| 国产精品午夜在线| 91精品国产综合久久精品app| www.亚洲激情.com| 亚洲精品自拍动漫在线| 久久久综合视频| 欧美一区二区三区的| caoporen国产精品视频| 激情偷乱视频一区二区三区| 在线不卡免费av| 亚洲成av人片www| 日韩一级免费观看| 国产老肥熟一区二区三区| 国产日韩欧美一区二区三区乱码| 不卡的av电影在线观看| 一区二区久久久久久| 欧美日韩精品免费| 精品亚洲porn| 国产精品日日摸夜夜摸av| 一本大道av伊人久久综合| 亚洲成人www| 精品国产sm最大网站免费看| 成人av网址在线观看| 亚洲高清免费在线| 精品欧美久久久| 91丨porny丨中文| 视频一区二区欧美| 国产丝袜在线精品|