]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Always store a REAL value in a column with REAL affinity if the integer equivalent...
authordan <dan@noemail.net>
Fri, 17 May 2019 15:59:11 +0000 (15:59 +0000)
committerdan <dan@noemail.net>
Fri, 17 May 2019 15:59:11 +0000 (15:59 +0000)
FossilOrigin-Name: 14c00b1016ba53ab2dc177c59a27b6b9209202973685f0f274112d296ba7dfcb

manifest
manifest.uuid
src/vdbe.c
test/intreal.test

index 292ae9a3db6659c038e7098c69061ef11b0307b7..8a6bb1f1d98a6373e6d96ae6dd69d6e94bf8f3c7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\stest\scases\sto\stest/fuzzdata7.db\sfor\s(harmless)\sdbfuzz2\sfinds.
-D 2019-05-16T20:40:08.037
+C Always\sstore\sa\sREAL\svalue\sin\sa\scolumn\swith\sREAL\saffinity\sif\sthe\sinteger\sequivalent\swould\srequire\s8\sbytes\sof\sstorage.\sFix\sfor\s[3c27b97e3].
+D 2019-05-17T15:59:11.410
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -594,7 +594,7 @@ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
 F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
 F src/util.c 4c0669e042b4e50a08a9e5fd14cecc76e5f877efa288533dccddb6fe98f4d6b5
 F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
-F src/vdbe.c 41d8cc6e12e026428997f57923b847d414235b2111a6fd5b2bebcc42cc5b3001
+F src/vdbe.c 0380e94736e0b5a0717460d1d3546ae4b1338d0fe7ea07674633d1fd9a5fc42b
 F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
 F src/vdbeInt.h 3ba14553508d66f58753952d6dd287dce4ec735de02c6440858b4891aed51c17
 F src/vdbeapi.c f9161e5c77f512fbb80091ce8af621d19c9556bda5e734cffaac1198407400da
@@ -1060,7 +1060,7 @@ F test/intarray.test 8319986182af37c8eb4879c6bfe9cf0074e9d43b193a4c728a0efa3417c
 F test/interrupt.test 16ea879ec728cb76414c148c5f24afd5d1f91054
 F test/interrupt2.test e4408ca770a6feafbadb0801e54a0dcd1a8d108d
 F test/intpkey.test ac71107a49a06492b69b82aafaf225400598d3c8
-F test/intreal.test 1d03e48c53224b69efc8cb7349f009e388c116790bfdb4d320b233d603aaba9a
+F test/intreal.test 2c80b5c90c597e65c6606b333515261c73a534b6c527b7009e97ed6b78f8b79a
 F test/io.test f95bca1783b01ea7761671560d023360d2dfa4cc
 F test/ioerr.test 470fcc78e9cd352d162baf782fe301ea807d764241f58a48fc58109c2dfcdb6b
 F test/ioerr2.test 2593563599e2cc6b6b4fcf5878b177bdd5d8df26
@@ -1826,7 +1826,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 4b05caeb1b9767ba58cb4261ecc22cdd495216b3258d45f2165cdbd3ea079495
-R a338144cc8cfe21be9496df48c4b4839
-U drh
-Z f89dd532b3c5655312d5052f04d46bf4
+P 1eb2a628e4bfae51fea43e8f40fedfe23f2118024d9cce35828c3cbe92a9b392
+R 89d153f510a379ba4d9fb0045ff12ab5
+U dan
+Z f8c6a84d28611f5f221654c971d8da9d
index b83bd3c7306ba415aa5ec02e09d4e123ee66f3b8..fe2d76e69d7d84331334c7738a1c61ca3f2f7ea4 100644 (file)
@@ -1 +1 @@
-1eb2a628e4bfae51fea43e8f40fedfe23f2118024d9cce35828c3cbe92a9b392
\ No newline at end of file
+14c00b1016ba53ab2dc177c59a27b6b9209202973685f0f274112d296ba7dfcb
\ No newline at end of file
index 0c20afbb0d869f2e052016118981552b805c6173..c8dd618adf6859d0b6ecfe041d71708013ef1e6d 100644 (file)
@@ -2884,6 +2884,10 @@ case OP_MakeRecord: {
     pRec = pData0;
     do{
       applyAffinity(pRec, zAffinity[0], encoding);
+      if( zAffinity[0]==SQLITE_AFF_REAL && (pRec->flags & MEM_Int) ){
+        pRec->flags |= MEM_IntReal;
+        pRec->flags &= ~(MEM_Int);
+      }
       REGISTER_TRACE((int)(pRec-aMem), pRec);
       zAffinity++;
       pRec++;
index a99e23d4303382e24bd8327c808f5ba24b034e9c..cf2c3b79aeaf9b1bb7145fee725a5c49d1227f0e 100644 (file)
@@ -46,7 +46,41 @@ do_execsql_test 180 {
          max(1,intreal(5),intreal(3),4);
 } {5.0 5.0}
 
+#-------------------------------------------------------------------------
+do_execsql_test 2.1 {
+  CREATE TABLE t2(a REAL);
+  INSERT INTO t2 VALUES( 836627109860825358 );
+  SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL);
+} {8.36}
 
+do_execsql_test 2.2 {
+  CREATE INDEX i2 ON t2(a);
+  SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL);
+} {8.36}
+
+do_execsql_test 2.3 {
+  CREATE TABLE t0 (c0);
+  CREATE TABLE t1 (c1 REAL);
+  INSERT INTO t1(c1) VALUES (8366271098608253588);
+  INSERT INTO t0(c0) VALUES ('a');
+}
+set D [db one {SELECT c1 FROM t1}]
+
+do_execsql_test 2.4 {
+  SELECT * FROM t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL));
+} $D
+
+do_execsql_test 2.5 {
+  SELECT * FROM t0, t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL));
+} [list a $D]
+
+do_execsql_test 2.6 {
+  SELECT * FROM t0, t1 
+  WHERE (
+        t1.c1 >= CAST(8366271098608253588 AS REAL) 
+    AND t1.c1 <= CAST(8366271098608253588 AS REAL)
+  );
+} [list a $D]
 
 
 finish_test