mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Merge in various obscure bug fixes and the removal of Mem.memType from trunk.
FossilOrigin-Name: 0828975d580d309a1c66da4b6caeb65b21a01199
This commit is contained in:
36
manifest
36
manifest
@@ -1,11 +1,11 @@
|
|||||||
C Merge\sthe\sperformance\senhancements\sof\strunk\s(and\ssome\sobscure\sbug\sfixes)\ninto\sthe\ssessions\sbranch.
|
C Merge\sin\svarious\sobscure\sbug\sfixes\sand\sthe\sremoval\sof\sMem.memType\sfrom\strunk.
|
||||||
D 2014-03-04T14:34:14.215
|
D 2014-03-05T14:49:51.294
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in e4ee6d36cdf6136aee0158675a3b24dd3bf31a5a
|
F Makefile.in e4ee6d36cdf6136aee0158675a3b24dd3bf31a5a
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
F Makefile.msc b448317831d9c364bf501538becce5cc1f0a0f8b
|
F Makefile.msc b448317831d9c364bf501538becce5cc1f0a0f8b
|
||||||
F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
|
F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
|
||||||
F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 w README
|
F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8
|
||||||
F VERSION 0dc30ad5cf90736d5fd9e540c9f05c542658abe7
|
F VERSION 0dc30ad5cf90736d5fd9e540c9f05c542658abe7
|
||||||
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
|
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
|
||||||
F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
|
F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
|
||||||
@@ -177,7 +177,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 7a81c2c6b5c0bf6334b4247e709c639c573fbcc1
|
F src/btree.c ad795be588e394a0921796f87cc27717359738cc
|
||||||
F src/btree.h 9e0f97c01b972f779eb7655cfb4f8727fd6dc26f
|
F src/btree.h 9e0f97c01b972f779eb7655cfb4f8727fd6dc26f
|
||||||
F src/btreeInt.h 0be66063468a520e4d66b80c7a1dc26d04ee6ea4
|
F src/btreeInt.h 0be66063468a520e4d66b80c7a1dc26d04ee6ea4
|
||||||
F src/build.c 00ce613bc2256e525c9195cb10d0df7bcc48d1f0
|
F src/build.c 00ce613bc2256e525c9195cb10d0df7bcc48d1f0
|
||||||
@@ -230,7 +230,7 @@ F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269
|
|||||||
F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
|
F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
|
||||||
F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66
|
F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66
|
||||||
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
||||||
F src/select.c 780bbf39e401091845ba745a38326eabe5d44293
|
F src/select.c 0adf172d33cc610ff5ffe26edfd2ba67c3551655
|
||||||
F src/shell.c 7bf07bcacb181ecc3fc3ccacfdfeb4084aee67ed
|
F src/shell.c 7bf07bcacb181ecc3fc3ccacfdfeb4084aee67ed
|
||||||
F src/sqlite.h.in a31c8b7782a0388b4bd823ed3a3a3e4b93b0cf42
|
F src/sqlite.h.in a31c8b7782a0388b4bd823ed3a3a3e4b93b0cf42
|
||||||
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
||||||
@@ -244,7 +244,7 @@ F src/test1.c 2401eee14a4309a7cfe2aeb2f30ad517a1d9c299
|
|||||||
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
||||||
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
||||||
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
|
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
|
||||||
F src/test5.c 41e6e732f14a54c7b47f753e364700760f6521b0
|
F src/test5.c 5a34feec76d9b3a86aab30fd4f6cc9c48cbab4c1
|
||||||
F src/test6.c 41cacf3b0dd180823919bf9e1fbab287c9266723
|
F src/test6.c 41cacf3b0dd180823919bf9e1fbab287c9266723
|
||||||
F src/test7.c 72b732baa5642f795655ba1126ea032af46ecfd2
|
F src/test7.c 72b732baa5642f795655ba1126ea032af46ecfd2
|
||||||
F src/test8.c 54ccd7b1df5062f0ecbf50a8f7b618f8b1f13b20
|
F src/test8.c 54ccd7b1df5062f0ecbf50a8f7b618f8b1f13b20
|
||||||
@@ -257,7 +257,7 @@ F src/test_config.c b131030783f4328beb7008dbfe7392c7f086abc7
|
|||||||
F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9
|
F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9
|
||||||
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
|
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
|
||||||
F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
|
F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
|
||||||
F src/test_func.c f8235719dff4bf9ffee04c55a190af8782ce9ab5
|
F src/test_func.c d3013ce36f19ac72a99c73864930fd1fa41832f8
|
||||||
F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
|
F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
|
||||||
F src/test_init.c 66b33120ffe9cd853b5a905ec850d51151337b32
|
F src/test_init.c 66b33120ffe9cd853b5a905ec850d51151337b32
|
||||||
F src/test_intarray.c 87847c71c3c36889c0bcc9c4baf9d31881665d61
|
F src/test_intarray.c 87847c71c3c36889c0bcc9c4baf9d31881665d61
|
||||||
@@ -291,13 +291,13 @@ F src/update.c 7bb549d61efc6853f5cc708c1de6931179f8a12d
|
|||||||
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 69e2bd96704c5f56365db050a62430c3f261b611
|
F src/vdbe.c ccddf62bcb2981b3aaa991ec72387c26aeaf65f6
|
||||||
F src/vdbe.h 6631430dddd1450dfe749ba6fa8e2acdda3933f6
|
F src/vdbe.h 6631430dddd1450dfe749ba6fa8e2acdda3933f6
|
||||||
F src/vdbeInt.h 3fecec2457cac8a57085dc8edf08eb486d370ca0
|
F src/vdbeInt.h aa52feb8bfc05ea29ea262a9ce4050715c57ad5a
|
||||||
F src/vdbeapi.c a130692dd1016cd2becdae323391437f580b2417
|
F src/vdbeapi.c d3c662762b62e330a03f29de8e2ac7098ef78030
|
||||||
F src/vdbeaux.c c50dc4f192cec40b6127c0c199f19e18f42258e6
|
F src/vdbeaux.c 955216d35e65dfc93e9b6d0226ad38c0b2e8036a
|
||||||
F src/vdbeblob.c 666ce6596264fe88dad51bf60c160668d3cd0920
|
F src/vdbeblob.c 666ce6596264fe88dad51bf60c160668d3cd0920
|
||||||
F src/vdbemem.c 10b250f09a3843ee2bcabcadf50ca21fc3ff1f87
|
F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447
|
||||||
F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59
|
F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59
|
||||||
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
||||||
F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
|
F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
|
||||||
@@ -314,7 +314,7 @@ F test/all.test 6ff7b43c2b4b905c74dc4a813d201d0fa64c5783
|
|||||||
F test/alter.test e88dfa77e020c2b48e52a8020c70171ab828e079
|
F test/alter.test e88dfa77e020c2b48e52a8020c70171ab828e079
|
||||||
F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060
|
F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060
|
||||||
F test/alter3.test 49c9d9fba2b8fcdce2dedeca97bbf1f369cc548d
|
F test/alter3.test 49c9d9fba2b8fcdce2dedeca97bbf1f369cc548d
|
||||||
F test/alter4.test 8e93bf7a7e6919b14b0c9a6c1e4908bcf21b0165
|
F test/alter4.test d6c011fa0d6227abba762498cafbb607c9609e93
|
||||||
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
|
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
|
||||||
F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
|
F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
|
||||||
F test/analyze.test 1772936d66471c65221e437b6d1999c3a03166c4
|
F test/analyze.test 1772936d66471c65221e437b6d1999c3a03166c4
|
||||||
@@ -418,7 +418,7 @@ F test/corruptE.test 193b4ca4e927e77c1d5f4f56203ddc998432a7ee
|
|||||||
F test/corruptF.test be9fde98e4c93648f1ba52b74e5318edc8f59fe4
|
F test/corruptF.test be9fde98e4c93648f1ba52b74e5318edc8f59fe4
|
||||||
F test/corruptG.test 58ec333a01997fe655e34e5bea52b7a2a6b9704d
|
F test/corruptG.test 58ec333a01997fe655e34e5bea52b7a2a6b9704d
|
||||||
F test/corruptH.test 9d8186f6f8751efdfd445d8546fd98f073499039
|
F test/corruptH.test 9d8186f6f8751efdfd445d8546fd98f073499039
|
||||||
F test/corruptI.test d9eca60cb373215d97e0994bf104f9a37e1ac0fc
|
F test/corruptI.test 88886ec9cd1bdba835263566bbf60ee009c6ea09
|
||||||
F test/count.test 42a251178e32f617eda33f76236a7f79825a50b5
|
F test/count.test 42a251178e32f617eda33f76236a7f79825a50b5
|
||||||
F test/coveridxscan.test cdb47d01acc4a634a34fd25abe85189e0d0f1e62
|
F test/coveridxscan.test cdb47d01acc4a634a34fd25abe85189e0d0f1e62
|
||||||
F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f
|
F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f
|
||||||
@@ -1043,7 +1043,7 @@ F test/vacuum3.test 77ecdd54592b45a0bcb133339f99f1ae0ae94d0d
|
|||||||
F test/vacuum4.test d3f8ecff345f166911568f397d2432c16d2867d9
|
F test/vacuum4.test d3f8ecff345f166911568f397d2432c16d2867d9
|
||||||
F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
|
F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
|
||||||
F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661
|
F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661
|
||||||
F test/view.test 4057630287bfa5955628fe90a13d4c225d1c7352
|
F test/view.test f311691d696a5cc27e3c1b875cec1b0866b4ccd9
|
||||||
F test/vtab1.test b631d147b198cfd7903ab5fed028eb2a3d321dc6
|
F test/vtab1.test b631d147b198cfd7903ab5fed028eb2a3d321dc6
|
||||||
F test/vtab2.test 7bcffc050da5c68f4f312e49e443063e2d391c0d
|
F test/vtab2.test 7bcffc050da5c68f4f312e49e443063e2d391c0d
|
||||||
F test/vtab3.test baad99fd27217f5d6db10660522e0b7192446de1
|
F test/vtab3.test baad99fd27217f5d6db10660522e0b7192446de1
|
||||||
@@ -1170,7 +1170,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 2cd35ff6512e1973077f7ffc2c902476eabbe672 9830c343bc954b828f6ca752f8ae63e2c0a980c1
|
P 7f51ad97f0b24c57453d58faf25eee68861faa23 1d134ba2edbdb8c0cf9e99590a69cd17e0b874a9
|
||||||
R 1b0e794620966a99e11eff71e0b47bdf
|
R c692d3c8218b4a70137b86898c9b58c9
|
||||||
U drh
|
U drh
|
||||||
Z bda0a10e708d562bf20c5bd0cbfd93f9
|
Z e57469197d4db84c8507a1f208631345
|
||||||
|
@@ -1 +1 @@
|
|||||||
7f51ad97f0b24c57453d58faf25eee68861faa23
|
0828975d580d309a1c66da4b6caeb65b21a01199
|
@@ -4611,7 +4611,7 @@ int sqlite3BtreeMovetoUnpacked(
|
|||||||
assert( biasRight==0 || biasRight==1 );
|
assert( biasRight==0 || biasRight==1 );
|
||||||
idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */
|
idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */
|
||||||
pCur->aiIdx[pCur->iPage] = (u16)idx;
|
pCur->aiIdx[pCur->iPage] = (u16)idx;
|
||||||
if( pPage->intKey ){
|
if( xRecordCompare==0 ){
|
||||||
for(;;){
|
for(;;){
|
||||||
i64 nCellKey;
|
i64 nCellKey;
|
||||||
pCell = findCell(pPage, idx) + pPage->childPtrSize;
|
pCell = findCell(pPage, idx) + pPage->childPtrSize;
|
||||||
|
@@ -1522,7 +1522,7 @@ static int selectColumnsFromExprList(
|
|||||||
char *zNewName;
|
char *zNewName;
|
||||||
int k;
|
int k;
|
||||||
for(k=nName-1; k>1 && sqlite3Isdigit(zName[k]); k--){}
|
for(k=nName-1; k>1 && sqlite3Isdigit(zName[k]); k--){}
|
||||||
if( zName[k]==':' ) nName = k;
|
if( k>=0 && zName[k]==':' ) nName = k;
|
||||||
zName[nName] = 0;
|
zName[nName] = 0;
|
||||||
zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
|
zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
|
||||||
sqlite3DbFree(db, zName);
|
sqlite3DbFree(db, zName);
|
||||||
|
@@ -76,7 +76,6 @@ static int test_value_overhead(
|
|||||||
|
|
||||||
val.flags = MEM_Str|MEM_Term|MEM_Static;
|
val.flags = MEM_Str|MEM_Term|MEM_Static;
|
||||||
val.z = "hello world";
|
val.z = "hello world";
|
||||||
val.memType = MEM_Str;
|
|
||||||
val.enc = SQLITE_UTF8;
|
val.enc = SQLITE_UTF8;
|
||||||
|
|
||||||
for(i=0; i<repeat_count; i++){
|
for(i=0; i<repeat_count; i++){
|
||||||
|
@@ -499,7 +499,6 @@ static void test_extract(
|
|||||||
mem.enc = ENC(db);
|
mem.enc = ENC(db);
|
||||||
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
||||||
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
||||||
sqlite3VdbeMemStoreType(&mem);
|
|
||||||
|
|
||||||
if( iCurrent==iIdx ){
|
if( iCurrent==iIdx ){
|
||||||
sqlite3_result_value(context, &mem);
|
sqlite3_result_value(context, &mem);
|
||||||
@@ -549,7 +548,6 @@ static void test_decode(
|
|||||||
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
pHdr += sqlite3GetVarint(pHdr, &iSerialType);
|
||||||
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem);
|
||||||
|
|
||||||
sqlite3VdbeMemStoreType(&mem);
|
|
||||||
switch( sqlite3_value_type(&mem) ){
|
switch( sqlite3_value_type(&mem) ){
|
||||||
case SQLITE_TEXT:
|
case SQLITE_TEXT:
|
||||||
pVal = Tcl_NewStringObj((const char*)sqlite3_value_text(&mem), -1);
|
pVal = Tcl_NewStringObj((const char*)sqlite3_value_text(&mem), -1);
|
||||||
|
@@ -303,7 +303,6 @@ int sqlite3_value_numeric_type(sqlite3_value *pVal){
|
|||||||
if( eType==SQLITE_TEXT ){
|
if( eType==SQLITE_TEXT ){
|
||||||
Mem *pMem = (Mem*)pVal;
|
Mem *pMem = (Mem*)pVal;
|
||||||
applyNumericAffinity(pMem);
|
applyNumericAffinity(pMem);
|
||||||
sqlite3VdbeMemStoreType(pMem);
|
|
||||||
eType = sqlite3_value_type(pVal);
|
eType = sqlite3_value_type(pVal);
|
||||||
}
|
}
|
||||||
return eType;
|
return eType;
|
||||||
@@ -1253,7 +1252,6 @@ case OP_ResultRow: {
|
|||||||
assert( (pMem[i].flags & MEM_Ephem)==0
|
assert( (pMem[i].flags & MEM_Ephem)==0
|
||||||
|| (pMem[i].flags & (MEM_Str|MEM_Blob))==0 );
|
|| (pMem[i].flags & (MEM_Str|MEM_Blob))==0 );
|
||||||
sqlite3VdbeMemNulTerminate(&pMem[i]);
|
sqlite3VdbeMemNulTerminate(&pMem[i]);
|
||||||
sqlite3VdbeMemStoreType(&pMem[i]);
|
|
||||||
REGISTER_TRACE(pOp->p1+i, &pMem[i]);
|
REGISTER_TRACE(pOp->p1+i, &pMem[i]);
|
||||||
}
|
}
|
||||||
if( db->mallocFailed ) goto no_mem;
|
if( db->mallocFailed ) goto no_mem;
|
||||||
@@ -1499,7 +1497,6 @@ case OP_Function: {
|
|||||||
assert( memIsValid(pArg) );
|
assert( memIsValid(pArg) );
|
||||||
apVal[i] = pArg;
|
apVal[i] = pArg;
|
||||||
Deephemeralize(pArg);
|
Deephemeralize(pArg);
|
||||||
sqlite3VdbeMemStoreType(pArg);
|
|
||||||
REGISTER_TRACE(pOp->p2+i, pArg);
|
REGISTER_TRACE(pOp->p2+i, pArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5555,7 +5552,6 @@ case OP_AggStep: {
|
|||||||
assert( memIsValid(pRec) );
|
assert( memIsValid(pRec) );
|
||||||
apVal[i] = pRec;
|
apVal[i] = pRec;
|
||||||
memAboutToChange(p, pRec);
|
memAboutToChange(p, pRec);
|
||||||
sqlite3VdbeMemStoreType(pRec);
|
|
||||||
}
|
}
|
||||||
ctx.pFunc = pOp->p4.pFunc;
|
ctx.pFunc = pOp->p4.pFunc;
|
||||||
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
||||||
@@ -5989,7 +5985,6 @@ case OP_VFilter: { /* jump */
|
|||||||
apArg = p->apArg;
|
apArg = p->apArg;
|
||||||
for(i = 0; i<nArg; i++){
|
for(i = 0; i<nArg; i++){
|
||||||
apArg[i] = &pArgc[i+1];
|
apArg[i] = &pArgc[i+1];
|
||||||
sqlite3VdbeMemStoreType(apArg[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p->inVtabMethod = 1;
|
p->inVtabMethod = 1;
|
||||||
@@ -6196,7 +6191,6 @@ case OP_VUpdate: {
|
|||||||
for(i=0; i<nArg; i++){
|
for(i=0; i<nArg; i++){
|
||||||
assert( memIsValid(pX) );
|
assert( memIsValid(pX) );
|
||||||
memAboutToChange(p, pX);
|
memAboutToChange(p, pX);
|
||||||
sqlite3VdbeMemStoreType(pX);
|
|
||||||
apArg[i] = pX;
|
apArg[i] = pX;
|
||||||
pX++;
|
pX++;
|
||||||
}
|
}
|
||||||
|
@@ -168,7 +168,6 @@ struct Mem {
|
|||||||
} u;
|
} u;
|
||||||
int n; /* Number of characters in string value, excluding '\0' */
|
int n; /* Number of characters in string value, excluding '\0' */
|
||||||
u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
|
u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
|
||||||
u8 memType; /* Lower 5 bits of flags */
|
|
||||||
u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
|
u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
|
Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
|
||||||
@@ -195,6 +194,7 @@ struct Mem {
|
|||||||
#define MEM_Int 0x0004 /* Value is an integer */
|
#define MEM_Int 0x0004 /* Value is an integer */
|
||||||
#define MEM_Real 0x0008 /* Value is a real number */
|
#define MEM_Real 0x0008 /* Value is a real number */
|
||||||
#define MEM_Blob 0x0010 /* Value is a BLOB */
|
#define MEM_Blob 0x0010 /* Value is a BLOB */
|
||||||
|
#define MEM_AffMask 0x001f /* Mask of affinity bits */
|
||||||
#define MEM_RowSet 0x0020 /* Value is a RowSet object */
|
#define MEM_RowSet 0x0020 /* Value is a RowSet object */
|
||||||
#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */
|
#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */
|
||||||
#define MEM_Undefined 0x0080 /* Value is undefined */
|
#define MEM_Undefined 0x0080 /* Value is undefined */
|
||||||
@@ -453,8 +453,6 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
|
|||||||
int sqlite3VdbeCloseStatement(Vdbe *, int);
|
int sqlite3VdbeCloseStatement(Vdbe *, int);
|
||||||
void sqlite3VdbeFrameDelete(VdbeFrame*);
|
void sqlite3VdbeFrameDelete(VdbeFrame*);
|
||||||
int sqlite3VdbeFrameRestore(VdbeFrame *);
|
int sqlite3VdbeFrameRestore(VdbeFrame *);
|
||||||
#define sqlite3VdbeMemStoreType(X) (X)->memType = (u8)((X)->flags&0x1f)
|
|
||||||
/* void sqlite3VdbeMemStoreType(Mem *pMem); */
|
|
||||||
void sqlite3VdbePreUpdateHook(
|
void sqlite3VdbePreUpdateHook(
|
||||||
Vdbe *, VdbeCursor *, int, const char*, Table *, i64, int);
|
Vdbe *, VdbeCursor *, int, const char*, Table *, i64, int);
|
||||||
int sqlite3VdbeTransferError(Vdbe *p);
|
int sqlite3VdbeTransferError(Vdbe *p);
|
||||||
|
@@ -135,7 +135,6 @@ const void *sqlite3_value_blob(sqlite3_value *pVal){
|
|||||||
Mem *p = (Mem*)pVal;
|
Mem *p = (Mem*)pVal;
|
||||||
if( p->flags & (MEM_Blob|MEM_Str) ){
|
if( p->flags & (MEM_Blob|MEM_Str) ){
|
||||||
sqlite3VdbeMemExpandBlob(p);
|
sqlite3VdbeMemExpandBlob(p);
|
||||||
p->flags &= ~MEM_Str;
|
|
||||||
p->flags |= MEM_Blob;
|
p->flags |= MEM_Blob;
|
||||||
return p->n ? p->z : 0;
|
return p->n ? p->z : 0;
|
||||||
}else{
|
}else{
|
||||||
@@ -206,7 +205,7 @@ int sqlite3_value_type(sqlite3_value* pVal){
|
|||||||
SQLITE_INTEGER, /* 0x1e */
|
SQLITE_INTEGER, /* 0x1e */
|
||||||
SQLITE_NULL, /* 0x1f */
|
SQLITE_NULL, /* 0x1f */
|
||||||
};
|
};
|
||||||
return aType[pVal->memType&0x1f];
|
return aType[pVal->flags&MEM_AffMask];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************** sqlite3_result_ *******************************
|
/**************************** sqlite3_result_ *******************************
|
||||||
@@ -732,19 +731,23 @@ int sqlite3_data_count(sqlite3_stmt *pStmt){
|
|||||||
*/
|
*/
|
||||||
static const Mem *columnNullValue(void){
|
static const Mem *columnNullValue(void){
|
||||||
/* Even though the Mem structure contains an element
|
/* Even though the Mem structure contains an element
|
||||||
** of type i64, on certain architecture (x86) with certain compiler
|
** of type i64, on certain architectures (x86) with certain compiler
|
||||||
** switches (-Os), gcc may align this Mem object on a 4-byte boundary
|
** switches (-Os), gcc may align this Mem object on a 4-byte boundary
|
||||||
** instead of an 8-byte one. This all works fine, except that when
|
** instead of an 8-byte one. This all works fine, except that when
|
||||||
** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
|
** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
|
||||||
** that a Mem structure is located on an 8-byte boundary. To prevent
|
** that a Mem structure is located on an 8-byte boundary. To prevent
|
||||||
** this assert() from failing, when building with SQLITE_DEBUG defined
|
** these assert()s from failing, when building with SQLITE_DEBUG defined
|
||||||
** using gcc, force nullMem to be 8-byte aligned using the magical
|
** using gcc, we force nullMem to be 8-byte aligned using the magical
|
||||||
** __attribute__((aligned(8))) macro. */
|
** __attribute__((aligned(8))) macro. */
|
||||||
static const Mem nullMem
|
static const Mem nullMem
|
||||||
#if defined(SQLITE_DEBUG) && defined(__GNUC__)
|
#if defined(SQLITE_DEBUG) && defined(__GNUC__)
|
||||||
__attribute__((aligned(8)))
|
__attribute__((aligned(8)))
|
||||||
#endif
|
#endif
|
||||||
= {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0, 0, 0 };
|
= {0, "", (double)0, {0}, 0, MEM_Null, 0,
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
|
0, 0, /* pScopyFrom, pFiller */
|
||||||
|
#endif
|
||||||
|
0, 0 };
|
||||||
return &nullMem;
|
return &nullMem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1420,7 +1423,6 @@ int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
|
|||||||
if( iIdx==p->iPKey ){
|
if( iIdx==p->iPKey ){
|
||||||
sqlite3VdbeMemSetInt64(*ppValue, p->iKey1);
|
sqlite3VdbeMemSetInt64(*ppValue, p->iKey1);
|
||||||
}
|
}
|
||||||
sqlite3VdbeMemStoreType(*ppValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preupdate_old_out:
|
preupdate_old_out:
|
||||||
@@ -1499,7 +1501,6 @@ int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
|
|||||||
if( iIdx==p->iPKey ){
|
if( iIdx==p->iPKey ){
|
||||||
sqlite3VdbeMemSetInt64(pMem, p->iKey2);
|
sqlite3VdbeMemSetInt64(pMem, p->iKey2);
|
||||||
}
|
}
|
||||||
sqlite3VdbeMemStoreType(pMem);
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
/* For an UPDATE, memory cell (p->iNewReg+1+iIdx) contains the required
|
/* For an UPDATE, memory cell (p->iNewReg+1+iIdx) contains the required
|
||||||
@@ -1524,7 +1525,6 @@ int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
|
|||||||
rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iIdx]);
|
rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iIdx]);
|
||||||
if( rc!=SQLITE_OK ) goto preupdate_new_out;
|
if( rc!=SQLITE_OK ) goto preupdate_new_out;
|
||||||
}
|
}
|
||||||
sqlite3VdbeMemStoreType(pMem);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*ppValue = pMem;
|
*ppValue = pMem;
|
||||||
|
@@ -1364,7 +1364,6 @@ int sqlite3VdbeList(
|
|||||||
}
|
}
|
||||||
if( p->explain==1 ){
|
if( p->explain==1 ){
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
pMem->memType = MEM_Int;
|
|
||||||
pMem->u.i = i; /* Program counter */
|
pMem->u.i = i; /* Program counter */
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
@@ -1372,7 +1371,6 @@ int sqlite3VdbeList(
|
|||||||
pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
|
pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
|
||||||
assert( pMem->z!=0 );
|
assert( pMem->z!=0 );
|
||||||
pMem->n = sqlite3Strlen30(pMem->z);
|
pMem->n = sqlite3Strlen30(pMem->z);
|
||||||
pMem->memType = MEM_Str;
|
|
||||||
pMem->enc = SQLITE_UTF8;
|
pMem->enc = SQLITE_UTF8;
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
@@ -1398,17 +1396,14 @@ int sqlite3VdbeList(
|
|||||||
|
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
pMem->u.i = pOp->p1; /* P1 */
|
pMem->u.i = pOp->p1; /* P1 */
|
||||||
pMem->memType = MEM_Int;
|
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
pMem->u.i = pOp->p2; /* P2 */
|
pMem->u.i = pOp->p2; /* P2 */
|
||||||
pMem->memType = MEM_Int;
|
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
pMem->u.i = pOp->p3; /* P3 */
|
pMem->u.i = pOp->p3; /* P3 */
|
||||||
pMem->memType = MEM_Int;
|
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */
|
if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */
|
||||||
@@ -1424,7 +1419,6 @@ int sqlite3VdbeList(
|
|||||||
pMem->n = sqlite3Strlen30(pMem->z);
|
pMem->n = sqlite3Strlen30(pMem->z);
|
||||||
pMem->enc = SQLITE_UTF8;
|
pMem->enc = SQLITE_UTF8;
|
||||||
}
|
}
|
||||||
pMem->memType = MEM_Str;
|
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
if( p->explain==1 ){
|
if( p->explain==1 ){
|
||||||
@@ -1435,7 +1429,6 @@ int sqlite3VdbeList(
|
|||||||
pMem->flags = MEM_Str|MEM_Term;
|
pMem->flags = MEM_Str|MEM_Term;
|
||||||
pMem->n = 2;
|
pMem->n = 2;
|
||||||
sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */
|
sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */
|
||||||
pMem->memType = MEM_Str;
|
|
||||||
pMem->enc = SQLITE_UTF8;
|
pMem->enc = SQLITE_UTF8;
|
||||||
pMem++;
|
pMem++;
|
||||||
|
|
||||||
@@ -1446,11 +1439,9 @@ int sqlite3VdbeList(
|
|||||||
}
|
}
|
||||||
pMem->flags = MEM_Str|MEM_Term;
|
pMem->flags = MEM_Str|MEM_Term;
|
||||||
pMem->n = displayComment(pOp, zP4, pMem->z, 500);
|
pMem->n = displayComment(pOp, zP4, pMem->z, 500);
|
||||||
pMem->memType = MEM_Str;
|
|
||||||
pMem->enc = SQLITE_UTF8;
|
pMem->enc = SQLITE_UTF8;
|
||||||
#else
|
#else
|
||||||
pMem->flags = MEM_Null; /* Comment */
|
pMem->flags = MEM_Null; /* Comment */
|
||||||
pMem->memType = MEM_Null;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3541,9 +3532,10 @@ int sqlite3VdbeRecordCompare(
|
|||||||
if( pKeyInfo->aSortOrder[i] ){
|
if( pKeyInfo->aSortOrder[i] ){
|
||||||
rc = -rc;
|
rc = -rc;
|
||||||
}
|
}
|
||||||
assert( CORRUPT_DB
|
assert( CORRUPT_DB
|
||||||
|| (rc<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0)
|
|| (rc<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0)
|
||||||
|| (rc>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0)
|
|| (rc>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0)
|
||||||
|
|| pKeyInfo->db->mallocFailed
|
||||||
);
|
);
|
||||||
assert( mem1.zMalloc==0 ); /* See comment below */
|
assert( mem1.zMalloc==0 ); /* See comment below */
|
||||||
return rc;
|
return rc;
|
||||||
@@ -3938,7 +3930,6 @@ sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff){
|
|||||||
if( pRet ){
|
if( pRet ){
|
||||||
sqlite3VdbeMemCopy((Mem *)pRet, pMem);
|
sqlite3VdbeMemCopy((Mem *)pRet, pMem);
|
||||||
sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
|
sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
|
||||||
sqlite3VdbeMemStoreType((Mem *)pRet);
|
|
||||||
}
|
}
|
||||||
return pRet;
|
return pRet;
|
||||||
}
|
}
|
||||||
|
@@ -122,6 +122,7 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
|
|||||||
}
|
}
|
||||||
if( pMem->zMalloc==0 ){
|
if( pMem->zMalloc==0 ){
|
||||||
VdbeMemRelease(pMem);
|
VdbeMemRelease(pMem);
|
||||||
|
pMem->z = 0;
|
||||||
pMem->flags = MEM_Null;
|
pMem->flags = MEM_Null;
|
||||||
return SQLITE_NOMEM;
|
return SQLITE_NOMEM;
|
||||||
}
|
}
|
||||||
@@ -320,7 +321,7 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
|
|||||||
/*
|
/*
|
||||||
** Release any memory held by the Mem. This may leave the Mem in an
|
** Release any memory held by the Mem. This may leave the Mem in an
|
||||||
** inconsistent state, for example with (Mem.z==0) and
|
** inconsistent state, for example with (Mem.z==0) and
|
||||||
** (Mem.memType==MEM_Str).
|
** (Mem.flags==MEM_Str).
|
||||||
*/
|
*/
|
||||||
void sqlite3VdbeMemRelease(Mem *p){
|
void sqlite3VdbeMemRelease(Mem *p){
|
||||||
assert( sqlite3VdbeCheckMemInvariants(p) );
|
assert( sqlite3VdbeCheckMemInvariants(p) );
|
||||||
@@ -512,7 +513,6 @@ void sqlite3VdbeMemSetNull(Mem *pMem){
|
|||||||
sqlite3RowSetClear(pMem->u.pRowSet);
|
sqlite3RowSetClear(pMem->u.pRowSet);
|
||||||
}
|
}
|
||||||
MemSetTypeFlag(pMem, MEM_Null);
|
MemSetTypeFlag(pMem, MEM_Null);
|
||||||
pMem->memType = MEM_Null;
|
|
||||||
}
|
}
|
||||||
void sqlite3ValueSetNull(sqlite3_value *p){
|
void sqlite3ValueSetNull(sqlite3_value *p){
|
||||||
sqlite3VdbeMemSetNull((Mem*)p);
|
sqlite3VdbeMemSetNull((Mem*)p);
|
||||||
@@ -525,7 +525,6 @@ void sqlite3ValueSetNull(sqlite3_value *p){
|
|||||||
void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
|
void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
|
||||||
sqlite3VdbeMemRelease(pMem);
|
sqlite3VdbeMemRelease(pMem);
|
||||||
pMem->flags = MEM_Blob|MEM_Zero;
|
pMem->flags = MEM_Blob|MEM_Zero;
|
||||||
pMem->memType = MEM_Blob;
|
|
||||||
pMem->n = 0;
|
pMem->n = 0;
|
||||||
if( n<0 ) n = 0;
|
if( n<0 ) n = 0;
|
||||||
pMem->u.nZero = n;
|
pMem->u.nZero = n;
|
||||||
@@ -548,7 +547,6 @@ void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
|
|||||||
sqlite3VdbeMemRelease(pMem);
|
sqlite3VdbeMemRelease(pMem);
|
||||||
pMem->u.i = val;
|
pMem->u.i = val;
|
||||||
pMem->flags = MEM_Int;
|
pMem->flags = MEM_Int;
|
||||||
pMem->memType = MEM_Int;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_FLOATING_POINT
|
#ifndef SQLITE_OMIT_FLOATING_POINT
|
||||||
@@ -563,7 +561,6 @@ void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
|
|||||||
sqlite3VdbeMemRelease(pMem);
|
sqlite3VdbeMemRelease(pMem);
|
||||||
pMem->r = val;
|
pMem->r = val;
|
||||||
pMem->flags = MEM_Real;
|
pMem->flags = MEM_Real;
|
||||||
pMem->memType = MEM_Real;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -772,7 +769,6 @@ int sqlite3VdbeMemSetStr(
|
|||||||
pMem->n = nByte;
|
pMem->n = nByte;
|
||||||
pMem->flags = flags;
|
pMem->flags = flags;
|
||||||
pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
|
pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
|
||||||
pMem->memType = flags&0x1f;
|
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_UTF16
|
#ifndef SQLITE_OMIT_UTF16
|
||||||
if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
|
if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
|
||||||
@@ -838,7 +834,6 @@ int sqlite3VdbeMemFromBtree(
|
|||||||
pMem->z[amt] = 0;
|
pMem->z[amt] = 0;
|
||||||
pMem->z[amt+1] = 0;
|
pMem->z[amt+1] = 0;
|
||||||
pMem->flags = MEM_Blob|MEM_Term;
|
pMem->flags = MEM_Blob|MEM_Term;
|
||||||
pMem->memType = MEM_Blob;
|
|
||||||
pMem->n = (int)amt;
|
pMem->n = (int)amt;
|
||||||
}else{
|
}else{
|
||||||
sqlite3VdbeMemRelease(pMem);
|
sqlite3VdbeMemRelease(pMem);
|
||||||
@@ -901,7 +896,6 @@ sqlite3_value *sqlite3ValueNew(sqlite3 *db){
|
|||||||
Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
|
Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
|
||||||
if( p ){
|
if( p ){
|
||||||
p->flags = MEM_Null;
|
p->flags = MEM_Null;
|
||||||
p->memType = MEM_Null;
|
|
||||||
p->db = db;
|
p->db = db;
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
@@ -950,7 +944,6 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
|
|||||||
pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord)));
|
pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord)));
|
||||||
for(i=0; i<nCol; i++){
|
for(i=0; i<nCol; i++){
|
||||||
pRec->aMem[i].flags = MEM_Null;
|
pRec->aMem[i].flags = MEM_Null;
|
||||||
pRec->aMem[i].memType = MEM_Null;
|
|
||||||
pRec->aMem[i].db = db;
|
pRec->aMem[i].db = db;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -1023,7 +1016,6 @@ static int valueFromExpr(
|
|||||||
zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
|
zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
|
||||||
if( zVal==0 ) goto no_mem;
|
if( zVal==0 ) goto no_mem;
|
||||||
sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
|
sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
|
||||||
if( op==TK_FLOAT ) pVal->memType = MEM_Real;
|
|
||||||
}
|
}
|
||||||
if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
|
if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
|
||||||
sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
|
sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
|
||||||
@@ -1041,9 +1033,9 @@ static int valueFromExpr(
|
|||||||
){
|
){
|
||||||
sqlite3VdbeMemNumerify(pVal);
|
sqlite3VdbeMemNumerify(pVal);
|
||||||
if( pVal->u.i==SMALLEST_INT64 ){
|
if( pVal->u.i==SMALLEST_INT64 ){
|
||||||
pVal->flags &= MEM_Int;
|
pVal->flags &= ~MEM_Int;
|
||||||
pVal->flags |= MEM_Real;
|
pVal->flags |= MEM_Real;
|
||||||
pVal->r = (double)LARGEST_INT64;
|
pVal->r = (double)SMALLEST_INT64;
|
||||||
}else{
|
}else{
|
||||||
pVal->u.i = -pVal->u.i;
|
pVal->u.i = -pVal->u.i;
|
||||||
}
|
}
|
||||||
@@ -1069,9 +1061,6 @@ static int valueFromExpr(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( pVal ){
|
|
||||||
sqlite3VdbeMemStoreType(pVal);
|
|
||||||
}
|
|
||||||
*ppVal = pVal;
|
*ppVal = pVal;
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
@@ -1235,7 +1224,6 @@ int sqlite3Stat4ProbeSetValue(
|
|||||||
sqlite3ValueApplyAffinity(pVal, affinity, ENC(db));
|
sqlite3ValueApplyAffinity(pVal, affinity, ENC(db));
|
||||||
}
|
}
|
||||||
pVal->db = pParse->db;
|
pVal->db = pParse->db;
|
||||||
sqlite3VdbeMemStoreType((Mem*)pVal);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
@@ -334,4 +334,25 @@ do_test alter4-8.2 {
|
|||||||
}
|
}
|
||||||
} [list $::sql]
|
} [list $::sql]
|
||||||
|
|
||||||
|
|
||||||
|
# Test that a default value equal to -1 multipied by the smallest possible
|
||||||
|
# 64-bit integer is correctly converted to a real.
|
||||||
|
do_execsql_test alter4-9.1 {
|
||||||
|
CREATE TABLE t5(
|
||||||
|
a INTEGER DEFAULT -9223372036854775808,
|
||||||
|
b INTEGER DEFAULT (-(-9223372036854775808))
|
||||||
|
);
|
||||||
|
INSERT INTO t5 DEFAULT VALUES;
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test alter4-9.2 { SELECT typeof(a), a, typeof(b), b FROM t5; } {
|
||||||
|
integer -9223372036854775808
|
||||||
|
real 9.22337203685478e+18
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test alter4-9.3 {
|
||||||
|
ALTER TABLE t5 ADD COLUMN c INTEGER DEFAULT (-(-9223372036854775808));
|
||||||
|
SELECT typeof(c), c FROM t5;
|
||||||
|
} {real 9.22337203685478e+18}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@@ -14,6 +14,11 @@ set testdir [file dirname $argv0]
|
|||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
set testprefix corruptI
|
set testprefix corruptI
|
||||||
|
|
||||||
|
if {[permutation]=="mmap"} {
|
||||||
|
finish_test
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
# Do not use a codec for tests in this file, as the database file is
|
# Do not use a codec for tests in this file, as the database file is
|
||||||
# manipulated directly using tcl scripts (using the [hexio_write] command).
|
# manipulated directly using tcl scripts (using the [hexio_write] command).
|
||||||
#
|
#
|
||||||
|
@@ -611,4 +611,17 @@ ifcapable progress {
|
|||||||
} {1 interrupted}
|
} {1 interrupted}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db close
|
||||||
|
sqlite3 db :memory:
|
||||||
|
do_execsql_test view-22.1 {
|
||||||
|
CREATE VIEW x1 AS SELECT 123 AS '', 234 AS '', 345 AS '';
|
||||||
|
SELECT * FROM x1;
|
||||||
|
} {123 234 345}
|
||||||
|
do_test view-22.2 {
|
||||||
|
unset -nocomplain x
|
||||||
|
db eval {SELECT * FROM x1} x break
|
||||||
|
lsort [array names x]
|
||||||
|
} {{} * :1 :2}
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user