]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Document the dual-use of the P5 operand to the OP_MakeRecord opcode.
authordrh <drh@noemail.net>
Mon, 29 Jun 2020 20:09:04 +0000 (20:09 +0000)
committerdrh <drh@noemail.net>
Mon, 29 Jun 2020 20:09:04 +0000 (20:09 +0000)
FossilOrigin-Name: a73f80f22a585d1a2f55650d5cda4ece6c4ef039ef5eae2c02c3e5c269d4c30a

manifest
manifest.uuid
src/update.c
src/vdbe.c

index 0182052ecab2da810e6894c4dbbfe9e3f5d0b583..e6999b1792780aab89079f9e0d793bb3632d5220 100644 (file)
--- 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
index da260c49692d845b7b9880a453765a183591ab2b..08f71d77c869aee0b67c00babc39dea25b8df739 100644 (file)
@@ -1 +1 @@
-87c7d962581f4bb1224086701352850ede9847dc76235b33c7c2a35ef594d382
\ No newline at end of file
+a73f80f22a585d1a2f55650d5cda4ece6c4ef039ef5eae2c02c3e5c269d4c30a
\ No newline at end of file
index 0448759030821b63ee303e57c0b4331202c82e2a..a6ad871eb8ed20ef484739281cb20eb6b0b56c7f 100644 (file)
@@ -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);
index 2bb3f7b8c41c7c28a057006b2c5a8a69e449c1c7..98897d3f727ed2a62b996c47e1c1d8116bc49798 100644 (file)
@@ -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;