mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
New testcase macros to ensure that MEM_IntReal is fully tested.
FossilOrigin-Name: 8b8ef445ccccc148af2cda5975986af0d134352fe16283f65d0f8a91c9ffa932
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Add\sthe\sSQLITE_TESTCTRL_RESULT_INTREAL\stest-control\sand\suse\sit\sto\screate\nthe\sintreal()\sSQL\sfunction\sin\stestfixture.\s\sWrite\sa\sfew\ssimple\stests\sto\nprove\sthis\sall\sworks.\s\sTH3\swill\shold\smost\sof\sthe\sINTREAL\stests,\sprobably.
|
C New\stestcase\smacros\sto\sensure\sthat\sMEM_IntReal\sis\sfully\stested.
|
||||||
D 2019-05-03T21:17:28.623
|
D 2019-05-04T01:29:13.397
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -591,13 +591,13 @@ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
|
|||||||
F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
|
F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
|
||||||
F src/util.c 5061987401c2e8003177fa30d73196aa036727c8f04bf36a2df0c82b1904a236
|
F src/util.c 5061987401c2e8003177fa30d73196aa036727c8f04bf36a2df0c82b1904a236
|
||||||
F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
|
F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
|
||||||
F src/vdbe.c ddb6bb7289e017870636a60914bca64a545f70413e71c0e791513211b22f307c
|
F src/vdbe.c b0c87760d0e2460a48aa7ff70d9e96fb845cd9af02cf7d7a66de4e2ac39a72bc
|
||||||
F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
|
F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
|
||||||
F src/vdbeInt.h 3ba14553508d66f58753952d6dd287dce4ec735de02c6440858b4891aed51c17
|
F src/vdbeInt.h 3ba14553508d66f58753952d6dd287dce4ec735de02c6440858b4891aed51c17
|
||||||
F src/vdbeapi.c 3e8a5dacbce3375a967343d2aa4816121c9b1cd32ff6fc715e2d62afa5f6c456
|
F src/vdbeapi.c f9161e5c77f512fbb80091ce8af621d19c9556bda5e734cffaac1198407400da
|
||||||
F src/vdbeaux.c 326e049995ca75ba158bbc09ef59347fd600c8e7bb3958db9e66d575fdcc243d
|
F src/vdbeaux.c 94f5bea5db40f6c26a2db320788745a3852202a2ab4472928247955619027906
|
||||||
F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
|
F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
|
||||||
F src/vdbemem.c e102c625dae2d5657a086b97f46ea7645cce23379fcae74737fbe00454399a81
|
F src/vdbemem.c 81dc93a8b6a02b874920bc20be7d529cfce84229ecbd53a7cd3170a0fa115440
|
||||||
F src/vdbesort.c 66592d478dbb46f19aed0b42222325eadb84deb40a90eebe25c6e7c1d8468f47
|
F src/vdbesort.c 66592d478dbb46f19aed0b42222325eadb84deb40a90eebe25c6e7c1d8468f47
|
||||||
F src/vdbetrace.c fa3bf238002f0bbbdfb66cc8afb0cea284ff9f148d6439bc1f6f2b4c3b7143f0
|
F src/vdbetrace.c fa3bf238002f0bbbdfb66cc8afb0cea284ff9f148d6439bc1f6f2b4c3b7143f0
|
||||||
F src/vtab.c 1fa256c6ddad7a81e2a4dc080d015d4b0a7135767717d311298e47f6fca64bb3
|
F src/vtab.c 1fa256c6ddad7a81e2a4dc080d015d4b0a7135767717d311298e47f6fca64bb3
|
||||||
@@ -1823,7 +1823,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P f73a7de7a53f6aa6517221550a9c9882893206edfd7433e80e5fc0f441db9fc4
|
P c9838731325e0ca73bd8784c10c74ae043fed7861e6de269fd90e29fa4a19955
|
||||||
R 8eb9fb04cc1483ad2c0c96b5f3e94e7c
|
R 90de5cd79636b0a1b576e1c339f26a72
|
||||||
U drh
|
U drh
|
||||||
Z f5b7804d98a17ecda4dff9fb2344fde1
|
Z bb3da40e826b6604a073d2d31bc7ecda
|
||||||
|
@@ -1 +1 @@
|
|||||||
c9838731325e0ca73bd8784c10c74ae043fed7861e6de269fd90e29fa4a19955
|
8b8ef445ccccc148af2cda5975986af0d134352fe16283f65d0f8a91c9ffa932
|
12
src/vdbe.c
12
src/vdbe.c
@@ -353,6 +353,9 @@ static void applyAffinity(
|
|||||||
** CPU cycles. */
|
** CPU cycles. */
|
||||||
if( 0==(pRec->flags&MEM_Str) ){ /*OPTIMIZATION-IF-FALSE*/
|
if( 0==(pRec->flags&MEM_Str) ){ /*OPTIMIZATION-IF-FALSE*/
|
||||||
if( (pRec->flags&(MEM_Real|MEM_Int|MEM_IntReal)) ){
|
if( (pRec->flags&(MEM_Real|MEM_Int|MEM_IntReal)) ){
|
||||||
|
testcase( pRec->flags & MEM_Int );
|
||||||
|
testcase( pRec->flags & MEM_Real );
|
||||||
|
testcase( pRec->flags & MEM_IntReal );
|
||||||
sqlite3VdbeMemStringify(pRec, enc, 1);
|
sqlite3VdbeMemStringify(pRec, enc, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -416,9 +419,14 @@ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
|
|||||||
*/
|
*/
|
||||||
static u16 numericType(Mem *pMem){
|
static u16 numericType(Mem *pMem){
|
||||||
if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){
|
if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){
|
||||||
|
testcase( pMem->flags & MEM_Int );
|
||||||
|
testcase( pMem->flags & MEM_Real );
|
||||||
|
testcase( pMem->flags & MEM_IntReal );
|
||||||
return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal);
|
return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal);
|
||||||
}
|
}
|
||||||
if( pMem->flags & (MEM_Str|MEM_Blob) ){
|
if( pMem->flags & (MEM_Str|MEM_Blob) ){
|
||||||
|
testcase( pMem->flags & MEM_Str );
|
||||||
|
testcase( pMem->flags & MEM_Blob );
|
||||||
return computeNumericType(pMem);
|
return computeNumericType(pMem);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1802,6 +1810,8 @@ case OP_MustBeInt: { /* jump, in1 */
|
|||||||
case OP_RealAffinity: { /* in1 */
|
case OP_RealAffinity: { /* in1 */
|
||||||
pIn1 = &aMem[pOp->p1];
|
pIn1 = &aMem[pOp->p1];
|
||||||
if( pIn1->flags & (MEM_Int|MEM_IntReal) ){
|
if( pIn1->flags & (MEM_Int|MEM_IntReal) ){
|
||||||
|
testcase( pIn1->flags & MEM_Int );
|
||||||
|
testcase( pIn1->flags & MEM_IntReal );
|
||||||
sqlite3VdbeMemRealify(pIn1);
|
sqlite3VdbeMemRealify(pIn1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4382,6 +4392,8 @@ case OP_SeekRowid: { /* jump, in3 */
|
|||||||
u64 iKey;
|
u64 iKey;
|
||||||
|
|
||||||
pIn3 = &aMem[pOp->p3];
|
pIn3 = &aMem[pOp->p3];
|
||||||
|
testcase( pIn3->flags & MEM_Int );
|
||||||
|
testcase( pIn3->flags & MEM_IntReal );
|
||||||
if( (pIn3->flags & (MEM_Int|MEM_IntReal))==0 ){
|
if( (pIn3->flags & (MEM_Int|MEM_IntReal))==0 ){
|
||||||
/* Make sure pIn3->u.i contains a valid integer representation of
|
/* Make sure pIn3->u.i contains a valid integer representation of
|
||||||
** the key value, but do not change the datatype of the register, as
|
** the key value, but do not change the datatype of the register, as
|
||||||
|
@@ -1865,6 +1865,8 @@ int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
|
|||||||
*ppValue = (sqlite3_value *)columnNullValue();
|
*ppValue = (sqlite3_value *)columnNullValue();
|
||||||
}else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){
|
}else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){
|
||||||
if( pMem->flags & (MEM_Int|MEM_IntReal) ){
|
if( pMem->flags & (MEM_Int|MEM_IntReal) ){
|
||||||
|
testcase( pMem->flags & MEM_Int );
|
||||||
|
testcase( pMem->flags & MEM_IntReal );
|
||||||
sqlite3VdbeMemRealify(pMem);
|
sqlite3VdbeMemRealify(pMem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3437,6 +3437,8 @@ u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
|
|||||||
# define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
|
# define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
|
||||||
i64 i = pMem->u.i;
|
i64 i = pMem->u.i;
|
||||||
u64 u;
|
u64 u;
|
||||||
|
testcase( flags & MEM_Int );
|
||||||
|
testcase( flags & MEM_IntReal );
|
||||||
if( i<0 ){
|
if( i<0 ){
|
||||||
u = ~i;
|
u = ~i;
|
||||||
}else{
|
}else{
|
||||||
@@ -4112,7 +4114,12 @@ int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
|
|||||||
/* At least one of the two values is a number
|
/* At least one of the two values is a number
|
||||||
*/
|
*/
|
||||||
if( combined_flags&(MEM_Int|MEM_Real|MEM_IntReal) ){
|
if( combined_flags&(MEM_Int|MEM_Real|MEM_IntReal) ){
|
||||||
|
testcase( combined_flags & MEM_Int );
|
||||||
|
testcase( combined_flags & MEM_Real );
|
||||||
|
testcase( combined_flags & MEM_IntReal );
|
||||||
if( (f1 & f2 & (MEM_Int|MEM_IntReal))!=0 ){
|
if( (f1 & f2 & (MEM_Int|MEM_IntReal))!=0 ){
|
||||||
|
testcase( f1 & f2 & MEM_Int );
|
||||||
|
testcase( f1 & f2 & MEM_IntReal );
|
||||||
if( pMem1->u.i < pMem2->u.i ) return -1;
|
if( pMem1->u.i < pMem2->u.i ) return -1;
|
||||||
if( pMem1->u.i > pMem2->u.i ) return +1;
|
if( pMem1->u.i > pMem2->u.i ) return +1;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -4123,6 +4130,8 @@ int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if( (f1&(MEM_Int|MEM_IntReal))!=0 ){
|
if( (f1&(MEM_Int|MEM_IntReal))!=0 ){
|
||||||
|
testcase( f1 & MEM_Int );
|
||||||
|
testcase( f1 & MEM_IntReal );
|
||||||
if( (f2&MEM_Real)!=0 ){
|
if( (f2&MEM_Real)!=0 ){
|
||||||
return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r);
|
return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r);
|
||||||
}else if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
|
}else if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
|
||||||
@@ -4135,6 +4144,8 @@ int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
|
|||||||
}
|
}
|
||||||
if( (f1&MEM_Real)!=0 ){
|
if( (f1&MEM_Real)!=0 ){
|
||||||
if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
|
if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
|
||||||
|
testcase( f2 & MEM_Int );
|
||||||
|
testcase( f2 & MEM_IntReal );
|
||||||
return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r);
|
return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r);
|
||||||
}else{
|
}else{
|
||||||
return -1;
|
return -1;
|
||||||
@@ -4284,6 +4295,8 @@ int sqlite3VdbeRecordCompareWithSkip(
|
|||||||
|
|
||||||
/* RHS is an integer */
|
/* RHS is an integer */
|
||||||
if( pRhs->flags & (MEM_Int|MEM_IntReal) ){
|
if( pRhs->flags & (MEM_Int|MEM_IntReal) ){
|
||||||
|
testcase( pRhs->flags & MEM_Int );
|
||||||
|
testcase( pRhs->flags & MEM_IntReal );
|
||||||
serial_type = aKey1[idx1];
|
serial_type = aKey1[idx1];
|
||||||
testcase( serial_type==12 );
|
testcase( serial_type==12 );
|
||||||
if( serial_type>=10 ){
|
if( serial_type>=10 ){
|
||||||
|
@@ -564,6 +564,7 @@ i64 sqlite3VdbeIntValue(Mem *pMem){
|
|||||||
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
|
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
|
||||||
flags = pMem->flags;
|
flags = pMem->flags;
|
||||||
if( flags & (MEM_Int|MEM_IntReal) ){
|
if( flags & (MEM_Int|MEM_IntReal) ){
|
||||||
|
testcase( flags & MEM_IntReal );
|
||||||
return pMem->u.i;
|
return pMem->u.i;
|
||||||
}else if( flags & MEM_Real ){
|
}else if( flags & MEM_Real ){
|
||||||
return doubleToInt64(pMem->u.r);
|
return doubleToInt64(pMem->u.r);
|
||||||
@@ -593,6 +594,7 @@ double sqlite3VdbeRealValue(Mem *pMem){
|
|||||||
if( pMem->flags & MEM_Real ){
|
if( pMem->flags & MEM_Real ){
|
||||||
return pMem->u.r;
|
return pMem->u.r;
|
||||||
}else if( pMem->flags & (MEM_Int|MEM_IntReal) ){
|
}else if( pMem->flags & (MEM_Int|MEM_IntReal) ){
|
||||||
|
testcase( pMem->flags & MEM_IntReal );
|
||||||
return (double)pMem->u.i;
|
return (double)pMem->u.i;
|
||||||
}else if( pMem->flags & (MEM_Str|MEM_Blob) ){
|
}else if( pMem->flags & (MEM_Str|MEM_Blob) ){
|
||||||
return memRealValue(pMem);
|
return memRealValue(pMem);
|
||||||
@@ -607,6 +609,7 @@ double sqlite3VdbeRealValue(Mem *pMem){
|
|||||||
** Return the value ifNull if pMem is NULL.
|
** Return the value ifNull if pMem is NULL.
|
||||||
*/
|
*/
|
||||||
int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){
|
int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){
|
||||||
|
testcase( pMem->flags & MEM_IntReal );
|
||||||
if( pMem->flags & (MEM_Int|MEM_IntReal) ) return pMem->u.i!=0;
|
if( pMem->flags & (MEM_Int|MEM_IntReal) ) return pMem->u.i!=0;
|
||||||
if( pMem->flags & MEM_Null ) return ifNull;
|
if( pMem->flags & MEM_Null ) return ifNull;
|
||||||
return sqlite3VdbeRealValue(pMem)!=0.0;
|
return sqlite3VdbeRealValue(pMem)!=0.0;
|
||||||
@@ -688,6 +691,10 @@ static int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){
|
|||||||
** as much of the string as we can and ignore the rest.
|
** as much of the string as we can and ignore the rest.
|
||||||
*/
|
*/
|
||||||
int sqlite3VdbeMemNumerify(Mem *pMem){
|
int sqlite3VdbeMemNumerify(Mem *pMem){
|
||||||
|
testcase( pMem->flags & MEM_Int );
|
||||||
|
testcase( pMem->flags & MEM_Real );
|
||||||
|
testcase( pMem->flags & MEM_IntReal );
|
||||||
|
testcase( pMem->flags & MEM_Null );
|
||||||
if( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))==0 ){
|
if( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))==0 ){
|
||||||
int rc;
|
int rc;
|
||||||
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
|
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
|
||||||
@@ -1496,7 +1503,12 @@ static int valueFromExpr(
|
|||||||
}else{
|
}else{
|
||||||
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
|
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
|
||||||
}
|
}
|
||||||
if( pVal->flags & (MEM_Int|MEM_IntReal|MEM_Real) ) pVal->flags &= ~MEM_Str;
|
assert( (pVal->flags & MEM_IntReal)==0 );
|
||||||
|
if( pVal->flags & (MEM_Int|MEM_IntReal|MEM_Real) ){
|
||||||
|
testcase( pVal->flags & MEM_Int );
|
||||||
|
testcase( pVal->flags & MEM_Real );
|
||||||
|
pVal->flags &= ~MEM_Str;
|
||||||
|
}
|
||||||
if( enc!=SQLITE_UTF8 ){
|
if( enc!=SQLITE_UTF8 ){
|
||||||
rc = sqlite3VdbeChangeEncoding(pVal, enc);
|
rc = sqlite3VdbeChangeEncoding(pVal, enc);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user