From: drh Date: Mon, 29 Jun 2020 20:09:04 +0000 (+0000) Subject: Document the dual-use of the P5 operand to the OP_MakeRecord opcode. X-Git-Tag: version-3.33.0~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da36933eb4192ddf4fbc836b7e419258f0b7d2c1;p=thirdparty%2Fsqlite.git Document the dual-use of the P5 operand to the OP_MakeRecord opcode. FossilOrigin-Name: a73f80f22a585d1a2f55650d5cda4ece6c4ef039ef5eae2c02c3e5c269d4c30a --- diff --git a/manifest b/manifest index 0182052eca..e6999b1792 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Change\sthe\sname\sof\sIntegrityCk.mallocFailed\sto\sIntegrityCk.bOomFault\sto\navoid\sconfusion\swith\sthe\ssqlite3\sobject\sfield\swith\sthe\ssame\sname. -D 2020-06-29T18:30:49.786 +C Document\sthe\sdual-use\sof\sthe\sP5\soperand\sto\sthe\sOP_MakeRecord\sopcode. +D 2020-06-29T20:09:04.926 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -17,6 +17,8 @@ F src/expr.c a3ab84399b3415f66d2d0c25f5bcd98ef465c0c07ea1f19bf2a418b1c8fcad74 F src/select.c bc25f48e49eca122c16c247e7d4697241156e7c32c735b219be667657aa017ef F src/shell.c.in d663152487d4bfddea0f6d21ebc2ed51575d22657a02c6828afd344bbd4651af F src/test1.c fe56c4bcaa2685ca9aa25d817a0ee9345e189aff4a5a71a3d8ba946c7776feb8 +F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 +F src/vdbe.c b9ff68008f3d9d1f38525414bdcf8f62a73f458079245c17a63b2b4763d645fd F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef F test/busy2.test 5a449cd1bd7616c6ce709484d3e2a419a151b75e87ec5d2c7cb26e05a15dbd7b F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9 @@ -29,7 +31,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P ada43e7c490bf72a50ee84e1db994e149744b2a943260449076b83d1874813b2 -R ad5c3efe8067f76e71e83d254e1b38a0 +P 87c7d962581f4bb1224086701352850ede9847dc76235b33c7c2a35ef594d382 +R b3437ef9a1ae4f8daf3306b732aab045 U drh -Z 4f978aff4a80dc385d65b8fa6dc71ff1 +Z 2bc72e4aacf2bc1633ea007a3cca16c5 diff --git a/manifest.uuid b/manifest.uuid index da260c4969..08f71d77c8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -87c7d962581f4bb1224086701352850ede9847dc76235b33c7c2a35ef594d382 \ No newline at end of file +a73f80f22a585d1a2f55650d5cda4ece6c4ef039ef5eae2c02c3e5c269d4c30a \ No newline at end of file diff --git a/src/update.c b/src/update.c index 0448759030..a6ad871eb8 100644 --- a/src/update.c +++ b/src/update.c @@ -1032,7 +1032,7 @@ static void updateVirtualTable( ** the ephemeral table. */ sqlite3MultiWrite(pParse); sqlite3VdbeAddOp3(v, OP_MakeRecord, regArg, nArg, regRec); -#ifdef SQLITE_DEBUG +#if defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_NULL_TRIM) /* Signal an assert() within OP_MakeRecord that it is allowed to ** accept no-change records with serial_type 10 */ sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC); diff --git a/src/vdbe.c b/src/vdbe.c index 2bb3f7b8c4..98897d3f72 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2922,6 +2922,17 @@ case OP_Affinity: { ** macros defined in sqliteInt.h. ** ** If P4 is NULL then all index fields have the affinity BLOB. +** +** The meaning of P5 depends on whether or not the SQLITE_ENABLE_NULL_TRIM +** compile-time option is enabled: +** +** * If SQLITE_ENABLE_NULL_TRIM is enabled, then the P5 is the index +** of the right-most table that can be null-trimmed. +** +** * If SQLITE_ENABLE_NULL_TRIM is omitted, then P5 has the value +** OPFLAG_NOCHNG_MAGIC if the OP_MakeRecord opcode is allowed to +** accept no-change records with serial_type 10. This value is +** only used inside an assert() and does not affect the end result. */ case OP_MakeRecord: { Mem *pRec; /* The new record */ @@ -3040,7 +3051,9 @@ case OP_MakeRecord: { ** Give such values a special internal-use-only serial-type of 10 ** so that they can be passed through to xUpdate and have ** a true sqlite3_value_nochange(). */ +#ifndef SQLITE_ENABLE_NULL_TRIM assert( pOp->p5==OPFLAG_NOCHNG_MAGIC || CORRUPT_DB ); +#endif pRec->uTemp = 10; }else{ pRec->uTemp = 0;