]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Allow an "IntReal" value to count as a REAL when checking types for
authordrh <>
Mon, 17 Jan 2022 23:53:22 +0000 (23:53 +0000)
committerdrh <>
Mon, 17 Jan 2022 23:53:22 +0000 (23:53 +0000)
insertion into a generated column on a STRICT table.
[forum:/forumpost/fa012c77796d9399|Forum post fa012c77796d9399].

FossilOrigin-Name: b6fb223d90f453d67fcfc71c973c9fa0b6ad2a8826f59a25435ccf72d2f6fbc6

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

index 8adddf8d8a0c77429326caa4ecf58210acc8a631..0f6edab17d465caf3c0cafbfdf7c94a36780fe0d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.37.2
-D 2022-01-06T13:25:41.295
+C Allow\san\s"IntReal"\svalue\sto\scount\sas\sa\sREAL\swhen\schecking\stypes\sfor\ninsertion\sinto\sa\sgenerated\scolumn\son\sa\sSTRICT\stable.\n[forum:/forumpost/fa012c77796d9399|Forum\spost\sfa012c77796d9399].
+D 2022-01-17T23:53:22.530
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -623,7 +623,7 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
 F src/util.c 30df8356e231dad33be10bb27897655002668343280004ba28c734489414a167
 F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3
-F src/vdbe.c 84cc51edc36f773a97433c0a1388833557806f56562b6a2cb9fefeadc5e236b0
+F src/vdbe.c 8c2f37ac6c323248b16a1827ee16bc8e0d206e1e8725142bd314f180b12d84a7
 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
 F src/vdbeInt.h 31fbabdc1ed61d9695337dfe5269ea94e1cf615c17f5cafeaa1bb01066820bab
 F src/vdbeapi.c 22c79072ae7d8a01e9bcae8ba16e918d60d202eaa9553b5fda38f99f7464d99a
@@ -1436,7 +1436,7 @@ F test/stat.test 123212a20ceb496893d5254a5f6c76442ce549fdc08d1702d8288a2bbaac840
 F test/statfault.test 55f86055f9cd7b2d962a621b8a04215c1cebd4eaaecde92d279442327fe648a0
 F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec75
 F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5
-F test/strict1.test a3ec495471f24c1a6e1a1664bd23e24ccdb27ae93b1a763ee1942ec955b68e71
+F test/strict1.test 4d2b492152b984fd7e8196d23eb88e2ccb0ef9e46ca2f96c2ce7147ceef9d168
 F test/strict2.test b22c7a98b5000aef937f1990776497f0e979b1a23bc4f63e2d53b00e59b20070
 F test/subjournal.test 8d4e2572c0ee9a15549f0d8e40863161295107e52f07a3e8012a2e1fdd093c49
 F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f
@@ -1936,11 +1936,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P e1871201e73c1d970f0434d3c7190da2c1c49ded3a359640d959ec0c0450b8ed
-R 6d4acf62ee33d6425f8616c1e2a2b241
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.37.2 *
+P 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
+Q +1ec44d55da2ced1a1b0b78b489caff628652464f5709ee827e35409eb20ea794
+R 1e5db94997199ebe827df82b2178e3d9
 U drh
-Z bc8f65914f35757c2569ece42ec5d728
+Z 2cf0f43a19a814e8bddd48c1cf5ad151
 # Remove this line to create a well-formed Fossil manifest.
index 994eaca062af9e706bed8da631e48b44a341a6b9..ec682ceb1e552b6558eb697aa8521477d4255373 100644 (file)
@@ -1 +1 @@
-872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
\ No newline at end of file
+b6fb223d90f453d67fcfc71c973c9fa0b6ad2a8826f59a25435ccf72d2f6fbc6
\ No newline at end of file
index 5ca253a078a1c944bfd9ce3f350355e7e999ce71..b1fc653e6f92e02e8179544432dbb0e94254f4c0 100644 (file)
@@ -2959,6 +2959,8 @@ case OP_TypeCheck: {
           break;
         }
         case COLTYPE_REAL: {
+          testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_Real );
+          testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_IntReal );
           if( pIn1->flags & MEM_Int ){
             /* When applying REAL affinity, if the result is still an MEM_Int
             ** that will fit in 6 bytes, then change the type to MEM_IntReal
@@ -2976,7 +2978,7 @@ case OP_TypeCheck: {
               pIn1->flags |= MEM_Real;
               pIn1->flags &= ~MEM_Int;
             }
-          }else if( (pIn1->flags & MEM_Real)==0 ){
+          }else if( (pIn1->flags & (MEM_Real|MEM_IntReal))==0 ){
             goto vdbe_type_error;
           }
           break;
index 67483413fab92f33f69aa3caca4d6335cbe8595c..fc6438843f4715beaeef4de21e4adf52a1461d08 100644 (file)
@@ -135,4 +135,31 @@ ifcapable altertable {
   } {1 {error in table t4 after add column: missing datatype for t4.d}}
 }
 
+# 2022-01-17 https://sqlite.org/forum/forumpost/fa012c77796d9399
+# 
+reset_db
+do_execsql_test strict1-8.1 {
+  CREATE TABLE csv_import_table (
+    "debit" TEXT,
+    "credit" TEXT
+  );
+  INSERT INTO csv_import_table VALUES ('', '250.00');
+  CREATE TABLE IF NOT EXISTS transactions (
+      debit REAL,
+      credit REAL,
+      amount REAL GENERATED ALWAYS AS (ifnull(credit, 0.0) - ifnull(debit, 0.0))
+  ) STRICT;
+  INSERT INTO transactions
+  SELECT
+      nullif(debit, '') AS debit,
+      nullif(credit, '') AS credit
+  FROM csv_import_table;
+  SELECT * FROM transactions;
+} {{} 250.0 250.0}
+do_execsql_test strict1-8.2 {
+  CREATE TABLE t1(x REAL, y REAL AS (x)) STRICT;
+  INSERT INTO t1 VALUES(5),(4611686018427387904);
+  SELECT *, '|' FROM t1;
+} {/5.0 5.0 4.6116\d*e\+18 4.6116\d+e\+18 |/}
+
 finish_test