From a4660bd6956efb0a4fe235e6987bc7a17a040d48 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 4 Mar 2014 16:05:25 +0000 Subject: [PATCH 1/9] Ensure that BtreeMovetoUnpacked() does not try to invoke xRecordCompare when it is set to NULL. FossilOrigin-Name: 2879234b7c373be422af3fe180cae9840943e29a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index c0ec8eeea1..41a1585390 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improve\sclarity\sof\spresentation\sin\sthe\ssqlite3VdbeMemFromBtree()\sroutine. -D 2014-03-04T13:18:23.018 +C Ensure\sthat\sBtreeMovetoUnpacked()\sdoes\snot\stry\sto\sinvoke\sxRecordCompare\swhen\sit\sis\sset\sto\sNULL. +D 2014-03-04T16:05:25.328 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -163,7 +163,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53 F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 -F src/btree.c 7a81c2c6b5c0bf6334b4247e709c639c573fbcc1 +F src/btree.c ad795be588e394a0921796f87cc27717359738cc F src/btree.h 9e0f97c01b972f779eb7655cfb4f8727fd6dc26f F src/btreeInt.h 0be66063468a520e4d66b80c7a1dc26d04ee6ea4 F src/build.c 00ce613bc2256e525c9195cb10d0df7bcc48d1f0 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 1e57f67b20a1c01ede36d684be628e9270bf109a -R a19a15248ea3d7c53bb59593fa01c33d -U drh -Z e6c94fb8a2515aaa56cdd644b73247d7 +P 9830c343bc954b828f6ca752f8ae63e2c0a980c1 +R b15237a6eb7d81dbdc119d4772ab8878 +U dan +Z 8043d866c01ebc393e98f71c0dcb2e87 diff --git a/manifest.uuid b/manifest.uuid index 0ddf6b66df..64f338da40 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9830c343bc954b828f6ca752f8ae63e2c0a980c1 \ No newline at end of file +2879234b7c373be422af3fe180cae9840943e29a \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index ce35afbd58..eebf6f1e89 100644 --- a/src/btree.c +++ b/src/btree.c @@ -4611,7 +4611,7 @@ int sqlite3BtreeMovetoUnpacked( assert( biasRight==0 || biasRight==1 ); idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */ pCur->aiIdx[pCur->iPage] = (u16)idx; - if( pPage->intKey ){ + if( xRecordCompare==0 ){ for(;;){ i64 nCellKey; pCell = findCell(pPage, idx) + pPage->childPtrSize; From ed79b45cf7891236ff377fda971da66c61d01163 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 4 Mar 2014 16:21:18 +0000 Subject: [PATCH 2/9] Fix an assert() so that it takes OOM errors into account. FossilOrigin-Name: 53f6ec792f5f62fcdbf25e0fce5545dd1c3048a4 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbeaux.c | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 41a1585390..651dbf3147 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sBtreeMovetoUnpacked()\sdoes\snot\stry\sto\sinvoke\sxRecordCompare\swhen\sit\sis\sset\sto\sNULL. -D 2014-03-04T16:05:25.328 +C Fix\san\sassert()\sso\sthat\sit\stakes\sOOM\serrors\sinto\saccount. +D 2014-03-04T16:21:18.103 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -281,7 +281,7 @@ F src/vdbe.c 75c3f5d27ab79af214646cf37d7551bc8cec09c2 F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21 F src/vdbeInt.h 9ccca0bc7646c918d065943e44bead4bf5de213d F src/vdbeapi.c 5bc41aaea448a7fc250902c418f1795859be3820 -F src/vdbeaux.c 636a7e2eaaa48c3e3585b28b9b1673df78fc0fad +F src/vdbeaux.c 0be881d8da9c4413038bb0722de9ecc54788de39 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 F src/vdbemem.c 10b250f09a3843ee2bcabcadf50ca21fc3ff1f87 F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 9830c343bc954b828f6ca752f8ae63e2c0a980c1 -R b15237a6eb7d81dbdc119d4772ab8878 -U dan -Z 8043d866c01ebc393e98f71c0dcb2e87 +P 2879234b7c373be422af3fe180cae9840943e29a +R 2b2904237b1b4d9d5fce461560fa87d0 +U drh +Z 60f0b04eed352e57b9c570cb2f1addac diff --git a/manifest.uuid b/manifest.uuid index 64f338da40..9e0ced7e12 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2879234b7c373be422af3fe180cae9840943e29a \ No newline at end of file +53f6ec792f5f62fcdbf25e0fce5545dd1c3048a4 \ No newline at end of file diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 90cc415342..b961174c47 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -3539,9 +3539,10 @@ int sqlite3VdbeRecordCompare( if( pKeyInfo->aSortOrder[i] ){ rc = -rc; } - assert( CORRUPT_DB + assert( CORRUPT_DB || (rc<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0) || (rc>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0) + || pKeyInfo->db->mallocFailed ); assert( mem1.zMalloc==0 ); /* See comment below */ return rc; From d1053a4314b6da60d30ef622dd39c3fd5cf685ea Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 4 Mar 2014 18:06:04 +0000 Subject: [PATCH 3/9] Fix a potential memory use-after-free problem following an OOM error. FossilOrigin-Name: 767ccb1fa11b3e7b895fb8c2e91f79e3b4202907 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbemem.c | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 651dbf3147..e45868c0f7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sassert()\sso\sthat\sit\stakes\sOOM\serrors\sinto\saccount. -D 2014-03-04T16:21:18.103 +C Fix\sa\spotential\smemory\suse-after-free\sproblem\sfollowing\san\sOOM\serror. +D 2014-03-04T18:06:04.531 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -283,7 +283,7 @@ F src/vdbeInt.h 9ccca0bc7646c918d065943e44bead4bf5de213d F src/vdbeapi.c 5bc41aaea448a7fc250902c418f1795859be3820 F src/vdbeaux.c 0be881d8da9c4413038bb0722de9ecc54788de39 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 -F src/vdbemem.c 10b250f09a3843ee2bcabcadf50ca21fc3ff1f87 +F src/vdbemem.c 1b1ca620f2638e800a5bef6508d1c4320a3a4f11 F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 2879234b7c373be422af3fe180cae9840943e29a -R 2b2904237b1b4d9d5fce461560fa87d0 +P 53f6ec792f5f62fcdbf25e0fce5545dd1c3048a4 +R b289979daf151f0fbafb28fbb7956db7 U drh -Z 60f0b04eed352e57b9c570cb2f1addac +Z f463125a8b67b6cdc900f4915889d477 diff --git a/manifest.uuid b/manifest.uuid index 9e0ced7e12..38b7f2ed5c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -53f6ec792f5f62fcdbf25e0fce5545dd1c3048a4 \ No newline at end of file +767ccb1fa11b3e7b895fb8c2e91f79e3b4202907 \ No newline at end of file diff --git a/src/vdbemem.c b/src/vdbemem.c index 378de2deb7..b81e50d2e9 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -122,6 +122,7 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){ } if( pMem->zMalloc==0 ){ VdbeMemRelease(pMem); + pMem->z = 0; pMem->flags = MEM_Null; return SQLITE_NOMEM; } From 052c6784eed4dd88116872182c9ff8ec962f1bfa Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 4 Mar 2014 21:00:20 +0000 Subject: [PATCH 4/9] Fix a problem with "DEFAULT (-(-9223372036854775808))" clauses in ALTER TABLE ... ADD COLUMN commands. FossilOrigin-Name: e072cb3ee2a03d786c08230cecc6e970de2cec5b --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/vdbemem.c | 4 ++-- test/alter4.test | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index e45868c0f7..d749fdfeb6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\spotential\smemory\suse-after-free\sproblem\sfollowing\san\sOOM\serror. -D 2014-03-04T18:06:04.531 +C Fix\sa\sproblem\swith\s"DEFAULT\s(-(-9223372036854775808))"\sclauses\sin\sALTER\sTABLE\s...\sADD\sCOLUMN\scommands. +D 2014-03-04T21:00:20.840 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -283,7 +283,7 @@ F src/vdbeInt.h 9ccca0bc7646c918d065943e44bead4bf5de213d F src/vdbeapi.c 5bc41aaea448a7fc250902c418f1795859be3820 F src/vdbeaux.c 0be881d8da9c4413038bb0722de9ecc54788de39 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 -F src/vdbemem.c 1b1ca620f2638e800a5bef6508d1c4320a3a4f11 +F src/vdbemem.c ba5cbafdbf123cb51208580d2281312cc45905eb F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd @@ -300,7 +300,7 @@ F test/all.test 6ff7b43c2b4b905c74dc4a813d201d0fa64c5783 F test/alter.test e88dfa77e020c2b48e52a8020c70171ab828e079 F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060 F test/alter3.test 49c9d9fba2b8fcdce2dedeca97bbf1f369cc548d -F test/alter4.test 8e93bf7a7e6919b14b0c9a6c1e4908bcf21b0165 +F test/alter4.test d6c011fa0d6227abba762498cafbb607c9609e93 F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f F test/analyze.test 1772936d66471c65221e437b6d1999c3a03166c4 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 53f6ec792f5f62fcdbf25e0fce5545dd1c3048a4 -R b289979daf151f0fbafb28fbb7956db7 -U drh -Z f463125a8b67b6cdc900f4915889d477 +P 767ccb1fa11b3e7b895fb8c2e91f79e3b4202907 +R 8626b9d0aec4fcc431f7a3c606cbb670 +U dan +Z 5677ac60eef96d141429e6ff969758a5 diff --git a/manifest.uuid b/manifest.uuid index 38b7f2ed5c..5bcec6a617 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -767ccb1fa11b3e7b895fb8c2e91f79e3b4202907 \ No newline at end of file +e072cb3ee2a03d786c08230cecc6e970de2cec5b \ No newline at end of file diff --git a/src/vdbemem.c b/src/vdbemem.c index b81e50d2e9..5dead85208 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -1042,9 +1042,9 @@ static int valueFromExpr( ){ sqlite3VdbeMemNumerify(pVal); if( pVal->u.i==SMALLEST_INT64 ){ - pVal->flags &= MEM_Int; + pVal->flags &= ~MEM_Int; pVal->flags |= MEM_Real; - pVal->r = (double)LARGEST_INT64; + pVal->r = (double)SMALLEST_INT64; }else{ pVal->u.i = -pVal->u.i; } diff --git a/test/alter4.test b/test/alter4.test index 59704fed4c..eaad37e001 100644 --- a/test/alter4.test +++ b/test/alter4.test @@ -334,4 +334,25 @@ do_test alter4-8.2 { } } [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 From 19c6d96aec7545d5c8723c48bde5089a8f89a5c7 Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 4 Mar 2014 21:19:51 +0000 Subject: [PATCH 5/9] Avoid indexing off the front end of an array when creating a view with two or more blank column names in the SELECT statement that defines the view. FossilOrigin-Name: 554501f158534f9c27fd51900589c2ab7cf300d8 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/select.c | 2 +- test/view.test | 13 +++++++++++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index d749fdfeb6..c20e72d114 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\s"DEFAULT\s(-(-9223372036854775808))"\sclauses\sin\sALTER\sTABLE\s...\sADD\sCOLUMN\scommands. -D 2014-03-04T21:00:20.840 +C Avoid\sindexing\soff\sthe\sfront\send\sof\san\sarray\swhen\screating\sa\sview\swith\ntwo\sor\smore\sblank\scolumn\snames\sin\sthe\sSELECT\sstatement\sthat\sdefines\sthe\sview. +D 2014-03-04T21:19:51.375 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -216,7 +216,7 @@ F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 -F src/select.c 780bbf39e401091845ba745a38326eabe5d44293 +F src/select.c 0adf172d33cc610ff5ffe26edfd2ba67c3551655 F src/shell.c 7bf07bcacb181ecc3fc3ccacfdfeb4084aee67ed F src/sqlite.h.in a2ef671f92747a5a1c8a47bad5c585a8dd9eca80 F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e @@ -1028,7 +1028,7 @@ F test/vacuum3.test 77ecdd54592b45a0bcb133339f99f1ae0ae94d0d F test/vacuum4.test d3f8ecff345f166911568f397d2432c16d2867d9 F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102 F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661 -F test/view.test 4057630287bfa5955628fe90a13d4c225d1c7352 +F test/view.test f311691d696a5cc27e3c1b875cec1b0866b4ccd9 F test/vtab1.test b631d147b198cfd7903ab5fed028eb2a3d321dc6 F test/vtab2.test 7bcffc050da5c68f4f312e49e443063e2d391c0d F test/vtab3.test baad99fd27217f5d6db10660522e0b7192446de1 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 767ccb1fa11b3e7b895fb8c2e91f79e3b4202907 -R 8626b9d0aec4fcc431f7a3c606cbb670 -U dan -Z 5677ac60eef96d141429e6ff969758a5 +P e072cb3ee2a03d786c08230cecc6e970de2cec5b +R 213bc20e67a019cbd9a16484715bd6d2 +U drh +Z 02c018f7f11d0867eb15887f2517d7cb diff --git a/manifest.uuid b/manifest.uuid index 5bcec6a617..41b8fab845 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e072cb3ee2a03d786c08230cecc6e970de2cec5b \ No newline at end of file +554501f158534f9c27fd51900589c2ab7cf300d8 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 9430888c4a..850bc6a902 100644 --- a/src/select.c +++ b/src/select.c @@ -1522,7 +1522,7 @@ static int selectColumnsFromExprList( char *zNewName; int 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; zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt); sqlite3DbFree(db, zName); diff --git a/test/view.test b/test/view.test index 779f77b6ae..3ba6c0b465 100644 --- a/test/view.test +++ b/test/view.test @@ -611,4 +611,17 @@ ifcapable progress { } {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 From afc14f72ef54b9f983ca16a96da85cf6aee40b7f Mon Sep 17 00:00:00 2001 From: mistachkin Date: Wed, 5 Mar 2014 01:29:18 +0000 Subject: [PATCH 6/9] Experimental simplification of memory flags/type handling. FossilOrigin-Name: bac2820e13a79d91d0f8938c643134a9d6900327 --- manifest | 29 ++++++++++++++++------------- manifest.uuid | 2 +- src/test5.c | 1 - src/test_func.c | 2 -- src/vdbe.c | 6 ------ src/vdbeInt.h | 4 +--- src/vdbeapi.c | 4 ++-- src/vdbeaux.c | 10 ---------- src/vdbemem.c | 15 +-------------- 9 files changed, 21 insertions(+), 52 deletions(-) diff --git a/manifest b/manifest index c20e72d114..f769869fdb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sindexing\soff\sthe\sfront\send\sof\san\sarray\swhen\screating\sa\sview\swith\ntwo\sor\smore\sblank\scolumn\snames\sin\sthe\sSELECT\sstatement\sthat\sdefines\sthe\sview. -D 2014-03-04T21:19:51.375 +C Experimental\ssimplification\sof\smemory\sflags/type\shandling. +D 2014-03-05T01:29:18.160 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -230,7 +230,7 @@ F src/test1.c 2401eee14a4309a7cfe2aeb2f30ad517a1d9c299 F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35 F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df -F src/test5.c 41e6e732f14a54c7b47f753e364700760f6521b0 +F src/test5.c 5a34feec76d9b3a86aab30fd4f6cc9c48cbab4c1 F src/test6.c 41cacf3b0dd180823919bf9e1fbab287c9266723 F src/test7.c 72b732baa5642f795655ba1126ea032af46ecfd2 F src/test8.c 54ccd7b1df5062f0ecbf50a8f7b618f8b1f13b20 @@ -243,7 +243,7 @@ F src/test_config.c 0336e0bdbe541b4af89d7e3dd0656e8e6b51e585 F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc 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_init.c 66b33120ffe9cd853b5a905ec850d51151337b32 F src/test_intarray.c 87847c71c3c36889c0bcc9c4baf9d31881665d61 @@ -277,13 +277,13 @@ F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115 F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 -F src/vdbe.c 75c3f5d27ab79af214646cf37d7551bc8cec09c2 +F src/vdbe.c 8c6fc7bb9f2218c0e43f24d847e596effa8671e2 F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21 -F src/vdbeInt.h 9ccca0bc7646c918d065943e44bead4bf5de213d -F src/vdbeapi.c 5bc41aaea448a7fc250902c418f1795859be3820 -F src/vdbeaux.c 0be881d8da9c4413038bb0722de9ecc54788de39 +F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b +F src/vdbeapi.c a5c48f2b015679ddb7c25ae866abf5e2d6e42857 +F src/vdbeaux.c 43bee29ac866f7ce6af90c4f084bb22c160b8b70 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 -F src/vdbemem.c ba5cbafdbf123cb51208580d2281312cc45905eb +F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447 F src/vdbesort.c 46801acb342e5e4c07ba1777fe58880c143abb59 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd @@ -1155,7 +1155,10 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P e072cb3ee2a03d786c08230cecc6e970de2cec5b -R 213bc20e67a019cbd9a16484715bd6d2 -U drh -Z 02c018f7f11d0867eb15887f2517d7cb +P 554501f158534f9c27fd51900589c2ab7cf300d8 +R f9e55f86cd630e3c544c56ddb75f2871 +T *branch * noMemType +T *sym-noMemType * +T -sym-trunk * +U mistachkin +Z 24e103c83e028827d3da7d1aab872449 diff --git a/manifest.uuid b/manifest.uuid index 41b8fab845..91862e5073 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -554501f158534f9c27fd51900589c2ab7cf300d8 \ No newline at end of file +bac2820e13a79d91d0f8938c643134a9d6900327 \ No newline at end of file diff --git a/src/test5.c b/src/test5.c index bf574e3c3c..952e3325e5 100644 --- a/src/test5.c +++ b/src/test5.c @@ -76,7 +76,6 @@ static int test_value_overhead( val.flags = MEM_Str|MEM_Term|MEM_Static; val.z = "hello world"; - val.memType = MEM_Str; val.enc = SQLITE_UTF8; for(i=0; ip1+i, &pMem[i]); } if( db->mallocFailed ) goto no_mem; @@ -1489,7 +1487,6 @@ case OP_Function: { assert( memIsValid(pArg) ); apVal[i] = pArg; Deephemeralize(pArg); - sqlite3VdbeMemStoreType(pArg); REGISTER_TRACE(pOp->p2+i, pArg); } @@ -5494,7 +5491,6 @@ case OP_AggStep: { assert( memIsValid(pRec) ); apVal[i] = pRec; memAboutToChange(p, pRec); - sqlite3VdbeMemStoreType(pRec); } ctx.pFunc = pOp->p4.pFunc; assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); @@ -5928,7 +5924,6 @@ case OP_VFilter: { /* jump */ apArg = p->apArg; for(i = 0; iinVtabMethod = 1; @@ -6135,7 +6130,6 @@ case OP_VUpdate: { for(i=0; imemType = (u8)((X)->flags&0x1f) -/* void sqlite3VdbeMemStoreType(Mem *pMem); */ int sqlite3VdbeTransferError(Vdbe *p); int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *); diff --git a/src/vdbeapi.c b/src/vdbeapi.c index c1edbe48e2..4c9d4870d0 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -206,7 +206,7 @@ int sqlite3_value_type(sqlite3_value* pVal){ SQLITE_INTEGER, /* 0x1e */ SQLITE_NULL, /* 0x1f */ }; - return aType[pVal->memType&0x1f]; + return aType[pVal->flags&MEM_AffMask]; } /**************************** sqlite3_result_ ******************************* @@ -758,7 +758,7 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){ #if defined(SQLITE_DEBUG) && defined(__GNUC__) __attribute__((aligned(8))) #endif - = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0, + = {0, "", (double)0, {0}, 0, MEM_Null, 0, #ifdef SQLITE_DEBUG 0, 0, /* pScopyFrom, pFiller */ #endif diff --git a/src/vdbeaux.c b/src/vdbeaux.c index b961174c47..00ec901588 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -1363,7 +1363,6 @@ int sqlite3VdbeList( } if( p->explain==1 ){ pMem->flags = MEM_Int; - pMem->memType = MEM_Int; pMem->u.i = i; /* Program counter */ pMem++; @@ -1371,7 +1370,6 @@ int sqlite3VdbeList( pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ assert( pMem->z!=0 ); pMem->n = sqlite3Strlen30(pMem->z); - pMem->memType = MEM_Str; pMem->enc = SQLITE_UTF8; pMem++; @@ -1397,17 +1395,14 @@ int sqlite3VdbeList( pMem->flags = MEM_Int; pMem->u.i = pOp->p1; /* P1 */ - pMem->memType = MEM_Int; pMem++; pMem->flags = MEM_Int; pMem->u.i = pOp->p2; /* P2 */ - pMem->memType = MEM_Int; pMem++; pMem->flags = MEM_Int; pMem->u.i = pOp->p3; /* P3 */ - pMem->memType = MEM_Int; pMem++; if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */ @@ -1423,7 +1418,6 @@ int sqlite3VdbeList( pMem->n = sqlite3Strlen30(pMem->z); pMem->enc = SQLITE_UTF8; } - pMem->memType = MEM_Str; pMem++; if( p->explain==1 ){ @@ -1434,7 +1428,6 @@ int sqlite3VdbeList( pMem->flags = MEM_Str|MEM_Term; pMem->n = 2; sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */ - pMem->memType = MEM_Str; pMem->enc = SQLITE_UTF8; pMem++; @@ -1445,11 +1438,9 @@ int sqlite3VdbeList( } pMem->flags = MEM_Str|MEM_Term; pMem->n = displayComment(pOp, zP4, pMem->z, 500); - pMem->memType = MEM_Str; pMem->enc = SQLITE_UTF8; #else pMem->flags = MEM_Null; /* Comment */ - pMem->memType = MEM_Null; #endif } @@ -3937,7 +3928,6 @@ sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff){ if( pRet ){ sqlite3VdbeMemCopy((Mem *)pRet, pMem); sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8); - sqlite3VdbeMemStoreType((Mem *)pRet); } return pRet; } diff --git a/src/vdbemem.c b/src/vdbemem.c index 5dead85208..2c4aa4ad7f 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -321,7 +321,7 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){ /* ** Release any memory held by the Mem. This may leave the Mem in an ** inconsistent state, for example with (Mem.z==0) and -** (Mem.memType==MEM_Str). +** (Mem.flags==MEM_Str). */ void sqlite3VdbeMemRelease(Mem *p){ assert( sqlite3VdbeCheckMemInvariants(p) ); @@ -513,7 +513,6 @@ void sqlite3VdbeMemSetNull(Mem *pMem){ sqlite3RowSetClear(pMem->u.pRowSet); } MemSetTypeFlag(pMem, MEM_Null); - pMem->memType = MEM_Null; } void sqlite3ValueSetNull(sqlite3_value *p){ sqlite3VdbeMemSetNull((Mem*)p); @@ -526,7 +525,6 @@ void sqlite3ValueSetNull(sqlite3_value *p){ void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){ sqlite3VdbeMemRelease(pMem); pMem->flags = MEM_Blob|MEM_Zero; - pMem->memType = MEM_Blob; pMem->n = 0; if( n<0 ) n = 0; pMem->u.nZero = n; @@ -549,7 +547,6 @@ void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ sqlite3VdbeMemRelease(pMem); pMem->u.i = val; pMem->flags = MEM_Int; - pMem->memType = MEM_Int; } #ifndef SQLITE_OMIT_FLOATING_POINT @@ -564,7 +561,6 @@ void sqlite3VdbeMemSetDouble(Mem *pMem, double val){ sqlite3VdbeMemRelease(pMem); pMem->r = val; pMem->flags = MEM_Real; - pMem->memType = MEM_Real; } } #endif @@ -773,7 +769,6 @@ int sqlite3VdbeMemSetStr( pMem->n = nByte; pMem->flags = flags; pMem->enc = (enc==0 ? SQLITE_UTF8 : enc); - pMem->memType = flags&0x1f; #ifndef SQLITE_OMIT_UTF16 if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){ @@ -839,7 +834,6 @@ int sqlite3VdbeMemFromBtree( pMem->z[amt] = 0; pMem->z[amt+1] = 0; pMem->flags = MEM_Blob|MEM_Term; - pMem->memType = MEM_Blob; pMem->n = (int)amt; }else{ sqlite3VdbeMemRelease(pMem); @@ -902,7 +896,6 @@ sqlite3_value *sqlite3ValueNew(sqlite3 *db){ Mem *p = sqlite3DbMallocZero(db, sizeof(*p)); if( p ){ p->flags = MEM_Null; - p->memType = MEM_Null; p->db = db; } return p; @@ -951,7 +944,6 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){ pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord))); for(i=0; iaMem[i].flags = MEM_Null; - pRec->aMem[i].memType = MEM_Null; pRec->aMem[i].db = db; } }else{ @@ -1024,7 +1016,6 @@ static int valueFromExpr( zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken); if( zVal==0 ) goto no_mem; 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 ){ sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); @@ -1070,9 +1061,6 @@ static int valueFromExpr( } #endif - if( pVal ){ - sqlite3VdbeMemStoreType(pVal); - } *ppVal = pVal; return rc; @@ -1236,7 +1224,6 @@ int sqlite3Stat4ProbeSetValue( sqlite3ValueApplyAffinity(pVal, affinity, ENC(db)); } pVal->db = pParse->db; - sqlite3VdbeMemStoreType((Mem*)pVal); } } }else{ From d520041bc0805b50264072ed19ba603ff528632e Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 5 Mar 2014 11:22:33 +0000 Subject: [PATCH 7/9] Do not run corruptI.test with the mmap permutation. FossilOrigin-Name: 378b290da85cadc1acba081322d1f0e8d7694e17 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/corruptI.test | 5 +++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index c20e72d114..fc35092902 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sindexing\soff\sthe\sfront\send\sof\san\sarray\swhen\screating\sa\sview\swith\ntwo\sor\smore\sblank\scolumn\snames\sin\sthe\sSELECT\sstatement\sthat\sdefines\sthe\sview. -D 2014-03-04T21:19:51.375 +C Do\snot\srun\scorruptI.test\swith\sthe\smmap\spermutation. +D 2014-03-05T11:22:33.187 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -404,7 +404,7 @@ F test/corruptE.test 193b4ca4e927e77c1d5f4f56203ddc998432a7ee F test/corruptF.test be9fde98e4c93648f1ba52b74e5318edc8f59fe4 F test/corruptG.test 58ec333a01997fe655e34e5bea52b7a2a6b9704d F test/corruptH.test 9d8186f6f8751efdfd445d8546fd98f073499039 -F test/corruptI.test d9eca60cb373215d97e0994bf104f9a37e1ac0fc +F test/corruptI.test 88886ec9cd1bdba835263566bbf60ee009c6ea09 F test/count.test 42a251178e32f617eda33f76236a7f79825a50b5 F test/coveridxscan.test cdb47d01acc4a634a34fd25abe85189e0d0f1e62 F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P e072cb3ee2a03d786c08230cecc6e970de2cec5b -R 213bc20e67a019cbd9a16484715bd6d2 -U drh -Z 02c018f7f11d0867eb15887f2517d7cb +P 554501f158534f9c27fd51900589c2ab7cf300d8 +R f63b7b11b47b09d3cce73ea26cd9a6da +U dan +Z 381756cc53474accdfff4f671992e335 diff --git a/manifest.uuid b/manifest.uuid index 41b8fab845..5254bd10f5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -554501f158534f9c27fd51900589c2ab7cf300d8 \ No newline at end of file +378b290da85cadc1acba081322d1f0e8d7694e17 \ No newline at end of file diff --git a/test/corruptI.test b/test/corruptI.test index 9c9a19310b..51cf64c9be 100644 --- a/test/corruptI.test +++ b/test/corruptI.test @@ -14,6 +14,11 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix corruptI +if {[permutation]=="mmap"} { + finish_test + return +} + # 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). # From b1a1c29a0798c068dfbc9e9b87fd3ccaead6ae34 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 5 Mar 2014 12:47:55 +0000 Subject: [PATCH 8/9] Separate the column NULL value constant into a separate routine for greater commonality with the sessions branch. FossilOrigin-Name: 12cbebb997705e37769460e00a4aaa52c12f305e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbeapi.c | 47 +++++++++++++++++++++++++---------------------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/manifest b/manifest index cc4e004388..8be6959cd4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\sredundant\smemType\sfield\sfrom\sstruct\sMem. -D 2014-03-05T11:48:35.825 +C Separate\sthe\scolumn\sNULL\svalue\sconstant\sinto\sa\sseparate\sroutine\sfor\sgreater\ncommonality\swith\sthe\ssessions\sbranch. +D 2014-03-05T12:47:55.519 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -280,7 +280,7 @@ F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 F src/vdbe.c 8c6fc7bb9f2218c0e43f24d847e596effa8671e2 F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21 F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b -F src/vdbeapi.c a5c48f2b015679ddb7c25ae866abf5e2d6e42857 +F src/vdbeapi.c 77fbd57c0340a7d548a61b666143637fff726e06 F src/vdbeaux.c 43bee29ac866f7ce6af90c4f084bb22c160b8b70 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 378b290da85cadc1acba081322d1f0e8d7694e17 bac2820e13a79d91d0f8938c643134a9d6900327 -R 0b493f27b646031be527e01b67828619 -U dan -Z 2c30198d39dfe9f58d28fb7d11ffc819 +P 9e8528578966e4f1a16d63333de648fd8cdaf0f2 +R cd61be35c414ec0c232f9ea3f0efe193 +U drh +Z d8b63809d3f1784ecbab68dab389a740 diff --git a/manifest.uuid b/manifest.uuid index a974d4a9a0..ad874928a1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9e8528578966e4f1a16d63333de648fd8cdaf0f2 \ No newline at end of file +12cbebb997705e37769460e00a4aaa52c12f305e \ No newline at end of file diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 4c9d4870d0..dc11540deb 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -727,6 +727,30 @@ int sqlite3_data_count(sqlite3_stmt *pStmt){ return pVm->nResColumn; } +/* +** Return a pointer to static memory containing an SQL NULL value. +*/ +static const Mem *columnNullValue(void){ + /* Even though the Mem structure contains an element + ** of type i64, on certain architectures (x86) with certain compiler + ** 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 + ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s + ** that a Mem structure is located on an 8-byte boundary. To prevent + ** these assert()s from failing, when building with SQLITE_DEBUG defined + ** using gcc, we force nullMem to be 8-byte aligned using the magical + ** __attribute__((aligned(8))) macro. */ + static const Mem nullMem +#if defined(SQLITE_DEBUG) && defined(__GNUC__) + __attribute__((aligned(8))) +#endif + = {0, "", (double)0, {0}, 0, MEM_Null, 0, +#ifdef SQLITE_DEBUG + 0, 0, /* pScopyFrom, pFiller */ +#endif + 0, 0 }; + return &nullMem; +} /* ** Check to see if column iCol of the given statement is valid. If @@ -743,32 +767,11 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){ sqlite3_mutex_enter(pVm->db->mutex); pOut = &pVm->pResultSet[i]; }else{ - /* If the value passed as the second argument is out of range, return - ** a pointer to the following static Mem object which contains the - ** value SQL NULL. Even though the Mem structure contains an element - ** of type i64, on certain architectures (x86) with certain compiler - ** 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 - ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s - ** that a Mem structure is located on an 8-byte boundary. To prevent - ** these assert()s from failing, when building with SQLITE_DEBUG defined - ** using gcc, we force nullMem to be 8-byte aligned using the magical - ** __attribute__((aligned(8))) macro. */ - static const Mem nullMem -#if defined(SQLITE_DEBUG) && defined(__GNUC__) - __attribute__((aligned(8))) -#endif - = {0, "", (double)0, {0}, 0, MEM_Null, 0, -#ifdef SQLITE_DEBUG - 0, 0, /* pScopyFrom, pFiller */ -#endif - 0, 0 }; - if( pVm && ALWAYS(pVm->db) ){ sqlite3_mutex_enter(pVm->db->mutex); sqlite3Error(pVm->db, SQLITE_RANGE, 0); } - pOut = (Mem*)&nullMem; + pOut = (Mem*)columnNullValue(); } return pOut; } From 817492630a59c9ec4b491de15b68cd0d90106300 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 5 Mar 2014 14:40:22 +0000 Subject: [PATCH 9/9] When converting a result type from TEXT to BLOB using the sqlite3_value_blob() interface, continue to report SQLITE_TEXT as the true type from sqlite3_value_text() as long as that text is still valid. The maintains legacy behavior from before the noMemType change. FossilOrigin-Name: 1d134ba2edbdb8c0cf9e99590a69cd17e0b874a9 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbeapi.c | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 8be6959cd4..89fddcc445 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Separate\sthe\scolumn\sNULL\svalue\sconstant\sinto\sa\sseparate\sroutine\sfor\sgreater\ncommonality\swith\sthe\ssessions\sbranch. -D 2014-03-05T12:47:55.519 +C When\sconverting\sa\sresult\stype\sfrom\sTEXT\sto\sBLOB\susing\sthe\nsqlite3_value_blob()\sinterface,\scontinue\sto\sreport\sSQLITE_TEXT\sas\nthe\strue\stype\sfrom\ssqlite3_value_text()\sas\slong\sas\sthat\stext\sis\sstill\nvalid.\s\sThe\smaintains\slegacy\sbehavior\sfrom\sbefore\sthe\snoMemType\schange. +D 2014-03-05T14:40:22.888 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -280,7 +280,7 @@ F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 F src/vdbe.c 8c6fc7bb9f2218c0e43f24d847e596effa8671e2 F src/vdbe.h d189f92468a17a6f04daeec9df3b767f50557b21 F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b -F src/vdbeapi.c 77fbd57c0340a7d548a61b666143637fff726e06 +F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4 F src/vdbeaux.c 43bee29ac866f7ce6af90c4f084bb22c160b8b70 F src/vdbeblob.c d939997de046b8fcc607cfee4248f3d33dbcca50 F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447 @@ -1155,7 +1155,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 9e8528578966e4f1a16d63333de648fd8cdaf0f2 -R cd61be35c414ec0c232f9ea3f0efe193 +P 12cbebb997705e37769460e00a4aaa52c12f305e +R d261f37d595757cff592b0cc63c2909e U drh -Z d8b63809d3f1784ecbab68dab389a740 +Z 2ff0e0e9e50bbeda593af44f5801ea80 diff --git a/manifest.uuid b/manifest.uuid index ad874928a1..dbbf09faa4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -12cbebb997705e37769460e00a4aaa52c12f305e \ No newline at end of file +1d134ba2edbdb8c0cf9e99590a69cd17e0b874a9 \ No newline at end of file diff --git a/src/vdbeapi.c b/src/vdbeapi.c index dc11540deb..5d7a0b0608 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -135,7 +135,6 @@ const void *sqlite3_value_blob(sqlite3_value *pVal){ Mem *p = (Mem*)pVal; if( p->flags & (MEM_Blob|MEM_Str) ){ sqlite3VdbeMemExpandBlob(p); - p->flags &= ~MEM_Str; p->flags |= MEM_Blob; return p->n ? p->z : 0; }else{