Fix some incorrect comments and typos in comments. Add testcase() macros
to some of the new record comparison code. FossilOrigin-Name: b83cfe899d84fe9d61540e9984321ca30401638c
This commit is contained in:
parent
62117159d0
commit
b6e8fd105c
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
|||||||
C Better\sloadable\sextension\shandling\sin\sthe\sWin32\sVFS\swhen\scompiled\sfor\sCygwin.
|
C Fix\ssome\sincorrect\scomments\sand\stypos\sin\scomments.\s\sAdd\stestcase()\smacros\nto\ssome\sof\sthe\snew\srecord\scomparison\scode.
|
||||||
D 2014-03-06T00:30:27.980
|
D 2014-03-06T01:56:33.418
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@ -163,7 +163,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
|||||||
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
||||||
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
||||||
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
||||||
F src/btree.c ad795be588e394a0921796f87cc27717359738cc
|
F src/btree.c 4d28fb15543f0e071b1780b2af8cd2ee489de32d
|
||||||
F src/btree.h 9e0f97c01b972f779eb7655cfb4f8727fd6dc26f
|
F src/btree.h 9e0f97c01b972f779eb7655cfb4f8727fd6dc26f
|
||||||
F src/btreeInt.h 0be66063468a520e4d66b80c7a1dc26d04ee6ea4
|
F src/btreeInt.h 0be66063468a520e4d66b80c7a1dc26d04ee6ea4
|
||||||
F src/build.c 0d50ef95aad63f4c4fc47f3fa2670d4557c45db0
|
F src/build.c 0d50ef95aad63f4c4fc47f3fa2670d4557c45db0
|
||||||
@ -180,7 +180,7 @@ F src/global.c 1d7bb7ea8254ae6a68ed9bfaf65fcb3d1690b486
|
|||||||
F src/hash.c d139319967164f139c8d1bb8a11b14db9c4ba3cd
|
F src/hash.c d139319967164f139c8d1bb8a11b14db9c4ba3cd
|
||||||
F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
|
F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
|
||||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||||
F src/insert.c d3d1164299faa53b5347f8ff676d3787537fa9e5
|
F src/insert.c d8bb30535c8c0785876025a4a07f9074640a15d1
|
||||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||||
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
||||||
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
||||||
@ -277,11 +277,11 @@ F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115
|
|||||||
F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c
|
F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c
|
||||||
F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf
|
F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf
|
||||||
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
||||||
F src/vdbe.c 8c6fc7bb9f2218c0e43f24d847e596effa8671e2
|
F src/vdbe.c b2ca9b8e3a47a3bcecdb2b551279a2ba750a19e5
|
||||||
F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21
|
F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21
|
||||||
F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b
|
F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b
|
||||||
F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4
|
F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4
|
||||||
F src/vdbeaux.c 43bee29ac866f7ce6af90c4f084bb22c160b8b70
|
F src/vdbeaux.c e45e3f9daf38c5be3fd39e9aacc1c9066af57a06
|
||||||
F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50
|
F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50
|
||||||
F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447
|
F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447
|
||||||
F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59
|
F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59
|
||||||
@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P 170e0585202eec6882e9513eba05e6d5767bfc5b 854d410ad3a2bb3af5465d933ac9535fe3f22bfe
|
P 29b0a4f158785449b6f3da6fcceeb63442c9711c
|
||||||
R dbc36dfda03a0ba225e8ff052c2c6fea
|
R 6ebc5b98243298bdc1108377764c8e0d
|
||||||
U mistachkin
|
U drh
|
||||||
Z 97b3517e69e758ff54d2564329fd6e38
|
Z 431ba6c46f093bf18085ee790e19125c
|
||||||
|
@ -1 +1 @@
|
|||||||
29b0a4f158785449b6f3da6fcceeb63442c9711c
|
b83cfe899d84fe9d61540e9984321ca30401638c
|
@ -4576,7 +4576,7 @@ int sqlite3BtreeMovetoUnpacked(
|
|||||||
|| pIdxKey->default_rc==-1
|
|| pIdxKey->default_rc==-1
|
||||||
);
|
);
|
||||||
}else{
|
}else{
|
||||||
xRecordCompare = 0; /* Not actually used. Avoids a compiler warning. */
|
xRecordCompare = 0; /* All keys are integers */
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = moveToRoot(pCur);
|
rc = moveToRoot(pCur);
|
||||||
|
@ -101,13 +101,13 @@ const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
|
|||||||
** Compute the affinity string for table pTab, if it has not already been
|
** Compute the affinity string for table pTab, if it has not already been
|
||||||
** computed. As an optimization, omit trailing SQLITE_AFF_NONE affinities.
|
** computed. As an optimization, omit trailing SQLITE_AFF_NONE affinities.
|
||||||
**
|
**
|
||||||
** If the affinity exists (if it is no entirely SQLITE_AFF_NONE values and
|
** If the affinity exists (if it is no entirely SQLITE_AFF_NONE values) and
|
||||||
** if iReg>0 then code an OP_Affinity opcode that will set the affinities
|
** if iReg>0 then code an OP_Affinity opcode that will set the affinities
|
||||||
** for register iReg and following. Or if affinities exists and iReg==0,
|
** for register iReg and following. Or if affinities exists and iReg==0,
|
||||||
** then just set the P4 operand of the previous opcode (which should be
|
** then just set the P4 operand of the previous opcode (which should be
|
||||||
** an OP_MakeRecord) to the affinity string.
|
** an OP_MakeRecord) to the affinity string.
|
||||||
**
|
**
|
||||||
** A column affinity string has one character column:
|
** A column affinity string has one character per column:
|
||||||
**
|
**
|
||||||
** Character Column affinity
|
** Character Column affinity
|
||||||
** ------------------------------
|
** ------------------------------
|
||||||
@ -148,10 +148,9 @@ void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Return non-zero if the table pTab in database iDb or any of its indices
|
** Return non-zero if the table pTab in database iDb or any of its indices
|
||||||
** have been opened at any point in the VDBE program beginning at location
|
** have been opened at any point in the VDBE program. This is used to see if
|
||||||
** iStartAddr throught the end of the program. This is used to see if
|
|
||||||
** a statement of the form "INSERT INTO <iDb, pTab> SELECT ..." can
|
** a statement of the form "INSERT INTO <iDb, pTab> SELECT ..." can
|
||||||
** run without using temporary table for the results of the SELECT.
|
** run without using a temporary table for the results of the SELECT.
|
||||||
*/
|
*/
|
||||||
static int readsTable(Parse *p, int iDb, Table *pTab){
|
static int readsTable(Parse *p, int iDb, Table *pTab){
|
||||||
Vdbe *v = sqlite3GetVdbe(p);
|
Vdbe *v = sqlite3GetVdbe(p);
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
** pointer to the string or blob, not the content. If the original
|
** pointer to the string or blob, not the content. If the original
|
||||||
** is changed while the copy is still in use, the string or blob might
|
** is changed while the copy is still in use, the string or blob might
|
||||||
** be changed out from under the copy. This macro verifies that nothing
|
** be changed out from under the copy. This macro verifies that nothing
|
||||||
** like that every happens.
|
** like that ever happens.
|
||||||
*/
|
*/
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
# define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M)
|
# define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M)
|
||||||
@ -2166,8 +2166,8 @@ case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */
|
|||||||
**
|
**
|
||||||
** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
|
** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
|
||||||
** set the flag and fall through to the next instruction. In other words,
|
** set the flag and fall through to the next instruction. In other words,
|
||||||
** this opcode causes all following up codes up through P2 (but not including
|
** this opcode causes all following opcodes up through P2 (but not including
|
||||||
** P2) to run just once and skipped on subsequent times through the loop.
|
** P2) to run just once and to be skipped on subsequent times through the loop.
|
||||||
*/
|
*/
|
||||||
case OP_Once: { /* jump */
|
case OP_Once: { /* jump */
|
||||||
assert( pOp->p1<p->nOnceFlag );
|
assert( pOp->p1<p->nOnceFlag );
|
||||||
|
@ -1234,6 +1234,10 @@ static void releaseMemArray(Mem *p, int N){
|
|||||||
** with no indexes using a single prepared INSERT statement, bind()
|
** with no indexes using a single prepared INSERT statement, bind()
|
||||||
** and reset(). Inserts are grouped into a transaction.
|
** and reset(). Inserts are grouped into a transaction.
|
||||||
*/
|
*/
|
||||||
|
testcase( p->flags & MEM_Agg );
|
||||||
|
testcase( p->flags & MEM_Dyn );
|
||||||
|
testcase( p->flags & MEM_Frame );
|
||||||
|
testcase( p->flags & MEM_RowSet );
|
||||||
if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
|
if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
|
||||||
sqlite3VdbeMemRelease(p);
|
sqlite3VdbeMemRelease(p);
|
||||||
}else if( p->zMalloc ){
|
}else if( p->zMalloc ){
|
||||||
@ -2962,27 +2966,32 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
case 1: { /* 1-byte signed integer */
|
case 1: { /* 1-byte signed integer */
|
||||||
pMem->u.i = ONE_BYTE_INT(buf);
|
pMem->u.i = ONE_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
case 2: { /* 2-byte signed integer */
|
case 2: { /* 2-byte signed integer */
|
||||||
pMem->u.i = TWO_BYTE_INT(buf);
|
pMem->u.i = TWO_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
case 3: { /* 3-byte signed integer */
|
case 3: { /* 3-byte signed integer */
|
||||||
pMem->u.i = THREE_BYTE_INT(buf);
|
pMem->u.i = THREE_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
case 4: { /* 4-byte signed integer */
|
case 4: { /* 4-byte signed integer */
|
||||||
y = FOUR_BYTE_UINT(buf);
|
y = FOUR_BYTE_UINT(buf);
|
||||||
pMem->u.i = (i64)*(int*)&y;
|
pMem->u.i = (i64)*(int*)&y;
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
case 5: { /* 6-byte signed integer */
|
case 5: { /* 6-byte signed integer */
|
||||||
pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
|
pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
case 6: /* 8-byte signed integer */
|
case 6: /* 8-byte signed integer */
|
||||||
@ -3005,6 +3014,7 @@ u32 sqlite3VdbeSerialGet(
|
|||||||
if( serial_type==6 ){
|
if( serial_type==6 ){
|
||||||
pMem->u.i = *(i64*)&x;
|
pMem->u.i = *(i64*)&x;
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
|
testcase( pMem->u.i<0 );
|
||||||
}else{
|
}else{
|
||||||
assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
|
assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
|
||||||
swapMixedEndianFloat(x);
|
swapMixedEndianFloat(x);
|
||||||
@ -3350,20 +3360,26 @@ static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){
|
|||||||
switch( serial_type ){
|
switch( serial_type ){
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
return ONE_BYTE_INT(aKey);
|
return ONE_BYTE_INT(aKey);
|
||||||
case 2:
|
case 2:
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
return TWO_BYTE_INT(aKey);
|
return TWO_BYTE_INT(aKey);
|
||||||
case 3:
|
case 3:
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
return THREE_BYTE_INT(aKey);
|
return THREE_BYTE_INT(aKey);
|
||||||
case 4: {
|
case 4: {
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
y = FOUR_BYTE_UINT(aKey);
|
y = FOUR_BYTE_UINT(aKey);
|
||||||
return (i64)*(int*)&y;
|
return (i64)*(int*)&y;
|
||||||
}
|
}
|
||||||
case 5: {
|
case 5: {
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
return FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
|
return FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
|
||||||
}
|
}
|
||||||
case 6: {
|
case 6: {
|
||||||
u64 x = FOUR_BYTE_UINT(aKey);
|
u64 x = FOUR_BYTE_UINT(aKey);
|
||||||
|
testcase( aKey[0]&0x80 );
|
||||||
x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
|
x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
|
||||||
return (i64)*(i64*)&x;
|
return (i64)*(i64*)&x;
|
||||||
}
|
}
|
||||||
@ -3431,6 +3447,7 @@ int sqlite3VdbeRecordCompare(
|
|||||||
/* RHS is an integer */
|
/* RHS is an integer */
|
||||||
if( pRhs->flags & MEM_Int ){
|
if( pRhs->flags & MEM_Int ){
|
||||||
serial_type = aKey1[idx1];
|
serial_type = aKey1[idx1];
|
||||||
|
testcase( serial_type==12 );
|
||||||
if( serial_type>=12 ){
|
if( serial_type>=12 ){
|
||||||
rc = +1;
|
rc = +1;
|
||||||
}else if( serial_type==0 ){
|
}else if( serial_type==0 ){
|
||||||
@ -3481,12 +3498,15 @@ int sqlite3VdbeRecordCompare(
|
|||||||
/* RHS is a string */
|
/* RHS is a string */
|
||||||
else if( pRhs->flags & MEM_Str ){
|
else if( pRhs->flags & MEM_Str ){
|
||||||
getVarint32(&aKey1[idx1], serial_type);
|
getVarint32(&aKey1[idx1], serial_type);
|
||||||
|
testcase( serial_type==12 );
|
||||||
if( serial_type<12 ){
|
if( serial_type<12 ){
|
||||||
rc = -1;
|
rc = -1;
|
||||||
}else if( !(serial_type & 0x01) ){
|
}else if( !(serial_type & 0x01) ){
|
||||||
rc = +1;
|
rc = +1;
|
||||||
}else{
|
}else{
|
||||||
mem1.n = (serial_type - 12) / 2;
|
mem1.n = (serial_type - 12) / 2;
|
||||||
|
testcase( (d1+mem1.n)==(unsigned)nKey1 );
|
||||||
|
testcase( (d1+mem1.n+1)==(unsigned)nKey1 );
|
||||||
if( (d1+mem1.n) > (unsigned)nKey1 ){
|
if( (d1+mem1.n) > (unsigned)nKey1 ){
|
||||||
rc = 1; /* Corruption */
|
rc = 1; /* Corruption */
|
||||||
}else if( pKeyInfo->aColl[i] ){
|
}else if( pKeyInfo->aColl[i] ){
|
||||||
@ -3506,10 +3526,13 @@ int sqlite3VdbeRecordCompare(
|
|||||||
/* RHS is a blob */
|
/* RHS is a blob */
|
||||||
else if( pRhs->flags & MEM_Blob ){
|
else if( pRhs->flags & MEM_Blob ){
|
||||||
getVarint32(&aKey1[idx1], serial_type);
|
getVarint32(&aKey1[idx1], serial_type);
|
||||||
|
testcase( serial_type==12 );
|
||||||
if( serial_type<12 || (serial_type & 0x01) ){
|
if( serial_type<12 || (serial_type & 0x01) ){
|
||||||
rc = -1;
|
rc = -1;
|
||||||
}else{
|
}else{
|
||||||
int nStr = (serial_type - 12) / 2;
|
int nStr = (serial_type - 12) / 2;
|
||||||
|
testcase( (d1+nStr)==(unsigned)nKey1 );
|
||||||
|
testcase( (d1+nStr+1)==(unsigned)nKey1 );
|
||||||
if( (d1+nStr) > (unsigned)nKey1 ){
|
if( (d1+nStr) > (unsigned)nKey1 ){
|
||||||
rc = 1; /* Corruption */
|
rc = 1; /* Corruption */
|
||||||
}else{
|
}else{
|
||||||
@ -3583,29 +3606,35 @@ static int vdbeRecordCompareInt(
|
|||||||
switch( serial_type ){
|
switch( serial_type ){
|
||||||
case 1: { /* 1-byte signed integer */
|
case 1: { /* 1-byte signed integer */
|
||||||
lhs = ONE_BYTE_INT(aKey);
|
lhs = ONE_BYTE_INT(aKey);
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: { /* 2-byte signed integer */
|
case 2: { /* 2-byte signed integer */
|
||||||
lhs = TWO_BYTE_INT(aKey);
|
lhs = TWO_BYTE_INT(aKey);
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: { /* 3-byte signed integer */
|
case 3: { /* 3-byte signed integer */
|
||||||
lhs = THREE_BYTE_INT(aKey);
|
lhs = THREE_BYTE_INT(aKey);
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4: { /* 4-byte signed integer */
|
case 4: { /* 4-byte signed integer */
|
||||||
y = FOUR_BYTE_UINT(aKey);
|
y = FOUR_BYTE_UINT(aKey);
|
||||||
lhs = (i64)*(int*)&y;
|
lhs = (i64)*(int*)&y;
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5: { /* 6-byte signed integer */
|
case 5: { /* 6-byte signed integer */
|
||||||
lhs = FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
|
lhs = FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6: { /* 8-byte signed integer */
|
case 6: { /* 8-byte signed integer */
|
||||||
x = FOUR_BYTE_UINT(aKey);
|
x = FOUR_BYTE_UINT(aKey);
|
||||||
x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
|
x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
|
||||||
lhs = *(i64*)&x;
|
lhs = *(i64*)&x;
|
||||||
|
testcase( lhs<0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 8:
|
case 8:
|
||||||
@ -3742,9 +3771,11 @@ RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
|
|||||||
if( (flags & MEM_Int) ){
|
if( (flags & MEM_Int) ){
|
||||||
return vdbeRecordCompareInt;
|
return vdbeRecordCompareInt;
|
||||||
}
|
}
|
||||||
if( (flags & (MEM_Int|MEM_Real|MEM_Null|MEM_Blob))==0
|
testcase( flags & MEM_Real );
|
||||||
&& p->pKeyInfo->aColl[0]==0
|
testcase( flags & MEM_Null );
|
||||||
){
|
testcase( flags & MEM_Blob );
|
||||||
|
if( (flags & (MEM_Real|MEM_Null|MEM_Blob))==0 && p->pKeyInfo->aColl[0]==0 ){
|
||||||
|
assert( flags & MEM_Str );
|
||||||
return vdbeRecordCompareString;
|
return vdbeRecordCompareString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user