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

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

?? vdbe.c

?? 這是一個嵌入式系統上運行的輕量級數據庫
?? C
?? 第 1 頁 / 共 5 頁
字號:
  pTos->i = ~pTos->i;  pTos->flags = MEM_Int;  break;}/* Opcode: Noop * * ***** Do nothing.  This instruction is often useful as a jump** destination.*/case OP_Noop: {  break;}/* Opcode: If P1 P2 ***** Pop a single boolean from the stack.  If the boolean popped is** true, then jump to p2.  Otherwise continue to the next instruction.** An integer is false if zero and true otherwise.  A string is** false if it has zero length and true otherwise.**** If the value popped of the stack is NULL, then take the jump if P1** is true and fall through if P1 is false.*//* Opcode: IfNot P1 P2 ***** Pop a single boolean from the stack.  If the boolean popped is** false, then jump to p2.  Otherwise continue to the next instruction.** An integer is false if zero and true otherwise.  A string is** false if it has zero length and true otherwise.**** If the value popped of the stack is NULL, then take the jump if P1** is true and fall through if P1 is false.*/case OP_If:case OP_IfNot: {  int c;  assert( pTos>=p->aStack );  if( pTos->flags & MEM_Null ){    c = pOp->p1;  }else{    Integerify(pTos);    c = pTos->i;    if( pOp->opcode==OP_IfNot ) c = !c;  }  assert( (pTos->flags & MEM_Dyn)==0 );  pTos--;  if( c ) pc = pOp->p2-1;  break;}/* Opcode: IsNull P1 P2 ***** If any of the top abs(P1) values on the stack are NULL, then jump** to P2.  Pop the stack P1 times if P1>0.   If P1<0 leave the stack** unchanged.*/case OP_IsNull: {  int i, cnt;  Mem *pTerm;  cnt = pOp->p1;  if( cnt<0 ) cnt = -cnt;  pTerm = &pTos[1-cnt];  assert( pTerm>=p->aStack );  for(i=0; i<cnt; i++, pTerm++){    if( pTerm->flags & MEM_Null ){      pc = pOp->p2-1;      break;    }  }  if( pOp->p1>0 ) popStack(&pTos, cnt);  break;}/* Opcode: NotNull P1 P2 ***** Jump to P2 if the top P1 values on the stack are all not NULL.  Pop the** stack if P1 times if P1 is greater than zero.  If P1 is less than** zero then leave the stack unchanged.*/case OP_NotNull: {  int i, cnt;  cnt = pOp->p1;  if( cnt<0 ) cnt = -cnt;  assert( &pTos[1-cnt] >= p->aStack );  for(i=0; i<cnt && (pTos[1+i-cnt].flags & MEM_Null)==0; i++){}  if( i>=cnt ) pc = pOp->p2-1;  if( pOp->p1>0 ) popStack(&pTos, cnt);  break;}/* Opcode: MakeRecord P1 P2 ***** Convert the top P1 entries of the stack into a single entry** suitable for use as a data record in a database table.  The** details of the format are irrelavant as long as the OP_Column** opcode can decode the record later.  Refer to source code** comments for the details of the record format.**** If P2 is true (non-zero) and one or more of the P1 entries** that go into building the record is NULL, then add some extra** bytes to the record to make it distinct for other entries created** during the same run of the VDBE.  The extra bytes added are a** counter that is reset with each run of the VDBE, so records** created this way will not necessarily be distinct across runs.** But they should be distinct for transient tables (created using** OP_OpenTemp) which is what they are intended for.**** (Later:) The P2==1 option was intended to make NULLs distinct** for the UNION operator.  But I have since discovered that NULLs** are indistinct for UNION.  So this option is never used.*/case OP_MakeRecord: {  char *zNewRecord;  int nByte;  int nField;  int i, j;  int idxWidth;  u32 addr;  Mem *pRec;  int addUnique = 0;   /* True to cause bytes to be added to make the                       ** generated record distinct */  char zTemp[NBFS];    /* Temp space for small records */  /* Assuming the record contains N fields, the record format looks  ** like this:  **  **   -------------------------------------------------------------------  **   | idx0 | idx1 | ... | idx(N-1) | idx(N) | data0 | ... | data(N-1) |  **   -------------------------------------------------------------------  **  ** All data fields are converted to strings before being stored and  ** are stored with their null terminators.  NULL entries omit the  ** null terminator.  Thus an empty string uses 1 byte and a NULL uses  ** zero bytes.  Data(0) is taken from the lowest element of the stack  ** and data(N-1) is the top of the stack.  **  ** Each of the idx() entries is either 1, 2, or 3 bytes depending on  ** how big the total record is.  Idx(0) contains the offset to the start  ** of data(0).  Idx(k) contains the offset to the start of data(k).  ** Idx(N) contains the total number of bytes in the record.  */  nField = pOp->p1;  pRec = &pTos[1-nField];  assert( pRec>=p->aStack );  nByte = 0;  for(i=0; i<nField; i++, pRec++){    if( pRec->flags & MEM_Null ){      addUnique = pOp->p2;    }else{      Stringify(pRec);      nByte += pRec->n;    }  }  if( addUnique ) nByte += sizeof(p->uniqueCnt);  if( nByte + nField + 1 < 256 ){    idxWidth = 1;  }else if( nByte + 2*nField + 2 < 65536 ){    idxWidth = 2;  }else{    idxWidth = 3;  }  nByte += idxWidth*(nField + 1);  if( nByte>MAX_BYTES_PER_ROW ){    rc = SQLITE_TOOBIG;    goto abort_due_to_error;  }  if( nByte<=NBFS ){    zNewRecord = zTemp;  }else{    zNewRecord = sqliteMallocRaw( nByte );    if( zNewRecord==0 ) goto no_mem;  }  j = 0;  addr = idxWidth*(nField+1) + addUnique*sizeof(p->uniqueCnt);  for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){    zNewRecord[j++] = addr & 0xff;    if( idxWidth>1 ){      zNewRecord[j++] = (addr>>8)&0xff;      if( idxWidth>2 ){        zNewRecord[j++] = (addr>>16)&0xff;      }    }    if( (pRec->flags & MEM_Null)==0 ){      addr += pRec->n;    }  }  zNewRecord[j++] = addr & 0xff;  if( idxWidth>1 ){    zNewRecord[j++] = (addr>>8)&0xff;    if( idxWidth>2 ){      zNewRecord[j++] = (addr>>16)&0xff;    }  }  if( addUnique ){    memcpy(&zNewRecord[j], &p->uniqueCnt, sizeof(p->uniqueCnt));    p->uniqueCnt++;    j += sizeof(p->uniqueCnt);  }  for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){    if( (pRec->flags & MEM_Null)==0 ){      memcpy(&zNewRecord[j], pRec->z, pRec->n);      j += pRec->n;    }  }  popStack(&pTos, nField);  pTos++;  pTos->n = nByte;  if( nByte<=NBFS ){    assert( zNewRecord==zTemp );    memcpy(pTos->zShort, zTemp, nByte);    pTos->z = pTos->zShort;    pTos->flags = MEM_Str | MEM_Short;  }else{    assert( zNewRecord!=zTemp );    pTos->z = zNewRecord;    pTos->flags = MEM_Str | MEM_Dyn;  }  break;}/* Opcode: MakeKey P1 P2 P3**** Convert the top P1 entries of the stack into a single entry suitable** for use as the key in an index.  The top P1 records are** converted to strings and merged.  The null-terminators ** are retained and used as separators.** The lowest entry in the stack is the first field and the top of the** stack becomes the last.**** If P2 is not zero, then the original entries remain on the stack** and the new key is pushed on top.  If P2 is zero, the original** data is popped off the stack first then the new key is pushed** back in its place.**** P3 is a string that is P1 characters long.  Each character is either** an 'n' or a 't' to indicates if the argument should be intepreted as** numeric or text type.  The first character of P3 corresponds to the** lowest element on the stack.  If P3 is NULL then all arguments are** assumed to be of the numeric type.**** The type makes a difference in that text-type fields may not be ** introduced by 'b' (as described in the next paragraph).  The** first character of a text-type field must be either 'a' (if it is NULL)** or 'c'.  Numeric fields will be introduced by 'b' if their content** looks like a well-formed number.  Otherwise the 'a' or 'c' will be** used.**** The key is a concatenation of fields.  Each field is terminated by** a single 0x00 character.  A NULL field is introduced by an 'a' and** is followed immediately by its 0x00 terminator.  A numeric field is** introduced by a single character 'b' and is followed by a sequence** of characters that represent the number such that a comparison of** the character string using memcpy() sorts the numbers in numerical** order.  The character strings for numbers are generated using the** sqliteRealToSortable() function.  A text field is introduced by a** 'c' character and is followed by the exact text of the field.  The** use of an 'a', 'b', or 'c' character at the beginning of each field** guarantees that NULLs sort before numbers and that numbers sort** before text.  0x00 characters do not occur except as separators** between fields.**** See also: MakeIdxKey, SortMakeKey*//* Opcode: MakeIdxKey P1 P2 P3**** Convert the top P1 entries of the stack into a single entry suitable** for use as the key in an index.  In addition, take one additional integer** off of the stack, treat that integer as a four-byte record number, and** append the four bytes to the key.  Thus a total of P1+1 entries are** popped from the stack for this instruction and a single entry is pushed** back.  The first P1 entries that are popped are strings and the last** entry (the lowest on the stack) is an integer record number.**** The converstion of the first P1 string entries occurs just like in** MakeKey.  Each entry is separated from the others by a null.** The entire concatenation is null-terminated.  The lowest entry** in the stack is the first field and the top of the stack becomes the** last.**** If P2 is not zero and one or more of the P1 entries that go into the** generated key is NULL, then jump to P2 after the new key has been** pushed on the stack.  In other words, jump to P2 if the key is** guaranteed to be unique.  This jump can be used to skip a subsequent** uniqueness test.**** P3 is a string that is P1 characters long.  Each character is either** an 'n' or a 't' to indicates if the argument should be numeric or** text.  The first character corresponds to the lowest element on the** stack.  If P3 is null then all arguments are assumed to be numeric.**** See also:  MakeKey, SortMakeKey*/case OP_MakeIdxKey:case OP_MakeKey: {  char *zNewKey;  int nByte;  int nField;  int addRowid;  int i, j;  int containsNull = 0;  Mem *pRec;  char zTemp[NBFS];  addRowid = pOp->opcode==OP_MakeIdxKey;  nField = pOp->p1;  pRec = &pTos[1-nField];  assert( pRec>=p->aStack );  nByte = 0;  for(j=0, i=0; i<nField; i++, j++, pRec++){    int flags = pRec->flags;    int len;    char *z;    if( flags & MEM_Null ){      nByte += 2;      containsNull = 1;    }else if( pOp->p3 && pOp->p3[j]=='t' ){      Stringify(pRec);      pRec->flags &= ~(MEM_Int|MEM_Real);      nByte += pRec->n+1;    }else if( (flags & (MEM_Real|MEM_Int))!=0 || sqliteIsNumber(pRec->z) ){      if( (flags & (MEM_Real|MEM_Int))==MEM_Int ){        pRec->r = pRec->i;      }else if( (flags & (MEM_Real|MEM_Int))==0 ){        pRec->r = sqliteAtoF(pRec->z, 0);      }      Release(pRec);      z = pRec->zShort;      sqliteRealToSortable(pRec->r, z);      len = strlen(z);      pRec->z = 0;      pRec->flags = MEM_Real;      pRec->n = len+1;      nByte += pRec->n+1;    }else{      nByte += pRec->n+1;    }  }  if( nByte+sizeof(u32)>MAX_BYTES_PER_ROW ){    rc = SQLITE_TOOBIG;    goto abort_due_to_error;  }  if( addRowid ) nByte += sizeof(u32);  if( nByte<=NBFS ){    zNewKey = zTemp;  }else{    zNewKey = sqliteMallocRaw( nByte );    if( zNewKey==0 ) goto no_mem;  }  j = 0;  pRec = &pTos[1-nField];  for(i=0; i<nField; i++, pRec++){    if( pRec->flags & MEM_Null ){      zNewKey[j++] = 'a';      zNewKey[j++] = 0;    }else if( pRec->flags==MEM_Real ){      zNewKey[j++] = 'b';      memcpy(&zNewKey[j], pRec->zShort, pRec->n);      j += pRec->n;    }else{      assert( pRec->flags & MEM_Str );      zNewKey[j++] = 'c';      memcpy(&zNewKey[j], pRec->z, pRec->n);      j += pRec->n;    }  }  if( addRowid ){    u32 iKey;    pRec = &pTos[-nField];    assert( pRec>=p->aStack );    Integerify(pRec);    iKey = intToKey(pRec->i);    memcpy(&zNewKey[j], &iKey, sizeof(u32));    popStack(&pTos, nField+1);    if( pOp->p2 && containsNull ) pc = pOp->p2 - 1;  }else{    if( pOp->p2==0 ) popStack(&pTos, nField);  }  pTos++;  pTos->n = nByte;  if( nByte<=NBFS ){    assert( zNewKey==zTemp );    pTos->z = pTos->zShort;    memcpy(pTos->zShort, zTemp, nByte);    pTos->flags = MEM_Str | MEM_Short;  }else{    pTos->z = zNewKey;    pTos->flags = MEM_Str | MEM_Dyn;  }  break;}/* Opcode: IncrKey * * ***** The top of the stack should contain an index key generated by** The MakeKey opcode.  This routine increases the least significant** byte of that key by one.  This is used so that the MoveTo opcode** will move to the first entry greater than the key rather than to** the key itself.*/case OP_IncrKey: {  assert( pTos>=p->aStack );  /* The IncrKey opcode is only applied to keys generated by  ** MakeKey or MakeIdxKey and the results of those operands  ** are always dynamic strings or zShort[] strings.  So we  ** are always free to modify the string in place.  */  assert( pTos->flags & (MEM_Dyn|MEM_Short) );  pTos->z[pTos->n-1]++;  break;}/* Opcode: Checkpoint P1 * ***** Begin a checkpoint.  A checkpoint is the beginning of a operation that** is part of a larger transaction but which might need to be rolled back** itself without effecting the containing transaction.  A checkpoint will** be automatically committed or rollback when the VDBE halts.**** The checkpoint is begun on the database file with index P1.  The main** database file has an index of 0 and the file used for temporary tables** has an index of 1.*/case OP_Checkpoint: {  int i = pOp->p1;  if( i>=0 && i<db->nDb && db->aDb[i].pBt && db->aDb[i].inTrans==1 ){    rc = sqliteBtreeBeginCkpt(db->aDb[i].pBt);    if( rc==SQLITE_OK ) db->aDb[i].inTrans = 2;  }  bre

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色美美综合视频| 国产精品丝袜在线| 亚洲国产一二三| 在线电影院国产精品| 久久99精品久久久久久动态图| 国产网站一区二区三区| 色综合久久66| 久久精品国产精品亚洲精品| 中文字幕一区av| 日韩一区二区三区免费看| 国产福利精品导航| 亚洲黄色片在线观看| 91精品国产综合久久国产大片 | 狠狠色综合日日| 国产人久久人人人人爽| 欧美日韩视频第一区| 国产白丝精品91爽爽久久| 午夜精品视频在线观看| 国产精品久久久久精k8| 欧美tk丨vk视频| 在线免费精品视频| 成人激情校园春色| 热久久免费视频| 一区二区三区波多野结衣在线观看 | 一本色道久久加勒比精品| 91视频在线观看免费| 亚洲大型综合色站| 中文字幕在线一区免费| 亚洲国产日产av| 精品制服美女丁香| aaa欧美色吧激情视频| 久久99精品久久久久久久久久久久 | 一本大道av一区二区在线播放| 在线视频国产一区| 精品处破学生在线二十三| 欧美精品一区二区三区高清aⅴ| 欧美一级日韩不卡播放免费| 久久久91精品国产一区二区精品 | 国产精品亲子乱子伦xxxx裸| 一区二区三区久久久| 精品一区二区三区日韩| 91丝袜呻吟高潮美腿白嫩在线观看| 色欧美88888久久久久久影院| 7777精品伊人久久久大香线蕉 | 亚洲欧美日韩中文播放| 亚洲国产精品成人综合| 久久综合色8888| 欧美第一区第二区| 欧美日韩免费在线视频| 久久蜜桃av一区精品变态类天堂 | 久久久五月婷婷| 亚洲资源在线观看| 香蕉影视欧美成人| 国产一二精品视频| 成人黄色在线网站| 日韩一区二区在线看| 亚洲婷婷综合色高清在线| 国产午夜一区二区三区| 三级在线观看一区二区| 狠狠色丁香婷综合久久| 色天使色偷偷av一区二区| 26uuu亚洲综合色欧美| 亚洲一区二区综合| 91亚洲大成网污www| 国产色婷婷亚洲99精品小说| 美女爽到高潮91| 不卡电影一区二区三区| 2020国产精品自拍| 美女视频网站久久| 制服丝袜中文字幕一区| 国产精品久久久久一区二区三区 | 国产欧美日韩综合精品一区二区| 奇米在线7777在线精品| 欧美精品日韩综合在线| 亚洲成人一二三| 在线观看网站黄不卡| 国产精品国产a级| av在线这里只有精品| 亚洲欧美日韩一区| eeuss影院一区二区三区 | 不卡一区二区在线| 久久久精品免费网站| 高清国产午夜精品久久久久久| 26uuu亚洲婷婷狠狠天堂| 精品制服美女丁香| 2017欧美狠狠色| 国产999精品久久久久久绿帽| 久久这里只精品最新地址| 美女精品自拍一二三四| 精品国内二区三区| 国产美女视频一区| 国产精品视频在线看| 91在线视频在线| 精品国产sm最大网站免费看 | 欧美一区二区免费视频| 美女精品自拍一二三四| 精品国产1区二区| 国产99久久久国产精品| 国产精品毛片无遮挡高清| 91丨九色丨尤物| 午夜亚洲国产au精品一区二区| 欧美一区二区福利视频| 九色综合国产一区二区三区| 国产精品视频观看| 欧美日韩一区二区三区高清 | 精品国产伦一区二区三区免费| 国产精品一二一区| 91麻豆精品国产自产在线| 蜜臀va亚洲va欧美va天堂| 国产日韩欧美综合在线| 色综合欧美在线| 日本成人中文字幕| 欧美久久久久久久久中文字幕| 蜜臀久久久99精品久久久久久| 国产亚洲欧美日韩在线一区| 91丨九色丨蝌蚪丨老版| 看电视剧不卡顿的网站| 亚洲欧洲日韩综合一区二区| 91精品国产综合久久香蕉的特点| 91免费观看在线| 日本成人在线一区| 日韩理论片一区二区| 日韩欧美在线一区二区三区| 成人性生交大合| 亚洲私人黄色宅男| 精品日产卡一卡二卡麻豆| 色婷婷精品久久二区二区蜜臀av| 免费看黄色91| 亚洲精品国产成人久久av盗摄| 欧美一区二区成人6969| 在线观看亚洲专区| 成人免费观看av| 国产一区二区看久久| 婷婷成人综合网| 一区二区三区久久| 国产精品久久久久久久久免费桃花 | 欧美日韩一本到| av在线不卡免费看| 久久99久久精品欧美| 亚洲高清免费视频| 伊人一区二区三区| 亚洲欧洲av另类| 国产亚洲人成网站| 欧美一级欧美一级在线播放| 在线看日本不卡| 91视视频在线观看入口直接观看www | 麻豆国产欧美日韩综合精品二区| 麻豆免费看一区二区三区| 亚洲丝袜自拍清纯另类| 亚洲国产精品黑人久久久| 欧美成人女星排行榜| 欧美三级韩国三级日本三斤| 91黄色在线观看| 91国产丝袜在线播放| 91性感美女视频| 91久久人澡人人添人人爽欧美| jlzzjlzz国产精品久久| 成人禁用看黄a在线| 成人性生交大片免费看在线播放| 国产成人在线免费| 成人午夜激情片| 97精品久久久午夜一区二区三区| 成人av网在线| 91麻豆视频网站| 欧洲激情一区二区| 欧美精品第1页| 欧美成人三级电影在线| 久久久久国产精品厨房| 欧美国产激情二区三区 | 色一情一伦一子一伦一区| 色哟哟亚洲精品| 欧美精品在欧美一区二区少妇| 91精品国产乱| 久久青草欧美一区二区三区| 国产婷婷色一区二区三区四区| 中文字幕一区免费在线观看| 亚洲欧美精品午睡沙发| 婷婷夜色潮精品综合在线| 日韩国产欧美三级| 国产精品1024| 欧美综合一区二区| 91精品久久久久久蜜臀| 久久精品欧美日韩| 亚洲免费av网站| 日韩精品欧美精品| 高清免费成人av| 欧美日韩在线综合| 精品国产一区二区三区四区四| 国产精品入口麻豆原神| 亚洲二区视频在线| 国产一区在线观看视频| 一本大道久久精品懂色aⅴ| 日韩一区二区麻豆国产| 国产精品乱码人人做人人爱| 午夜在线成人av| 成人午夜av影视| 日韩视频一区二区三区在线播放| 中文字幕不卡一区| 蜜桃精品在线观看| 在线观看一区二区精品视频|