]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Additional tweaks and test cases for generate_series() constraints series-boundry-cases
authordrh <>
Mon, 15 Jun 2026 15:24:37 +0000 (15:24 +0000)
committerdrh <>
Mon, 15 Jun 2026 15:24:37 +0000 (15:24 +0000)
using very large floating-point numbers.

FossilOrigin-Name: 50d611404a444f23368c684dfa6dc34b057f8adb45aa058bcf3b2768e908eb3e

ext/misc/series.c
manifest
manifest.uuid
test/tabfunc01.test

index dea7301fd966104923d540ceada96fc4946fc39d..1b456d8f57041a9432882c4d1555a9e1752731ad 100644 (file)
@@ -563,15 +563,14 @@ static int seriesFilter(
           double r = sqlite3_value_double(argv[iArg++]);
           if( r>=(double)LARGEST_INT64 ){
             iMax = LARGEST_INT64;
-          }else if( r<=(double)SMALLEST_INT64
-                 && ((idxNum & 0x2000)!=0 || r<(double)SMALLEST_INT64) ){
+          }else if( r<=(double)SMALLEST_INT64 ){
             goto series_no_rows;
           }else{
             iMax = (sqlite3_int64)seriesFloor(r);
             if( iMax<0 && r>0.0 ){
               iMax = LARGEST_INT64;
             }else if( (idxNum & 0x2000)!=0 && r==seriesFloor(r) ){
-              assert( iMax>SMALLEST_INT64 );
+              if( iMax==SMALLEST_INT64 ) goto series_no_rows;
               iMax--;
             }
           }
index 730a88663aa6511b6129fcc958fc0762da55a3be..cec383b94343dd660a51c1402a95edf9d27a1661 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Better\sbehavior\sfor\sgenerate_series()\sin\scases\swhere\sconstraints\sinvolve\nfloating\spoint\snumber\sthat\sare\snear\sthe\sminimum\sand\smaximum\s64-bit\sinteger\nvalues.
-D 2026-06-15T14:16:13.474
+C Additional\stweaks\sand\stest\scases\sfor\sgenerate_series()\sconstraints\nusing\svery\slarge\sfloating-point\snumbers.
+D 2026-06-15T15:24:37.998
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -395,7 +395,7 @@ F ext/misc/randomjson.c ef835fc64289e76ac4873b85fe12f9463a036168d7683cf2b773e36e
 F ext/misc/regexp.c 378e6e84516952a4b9f3f4df88927f20e6538e2609f55b773ed78899dab8206e
 F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c
 F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c
-F ext/misc/series.c 1af4c480d479374ae6e6fa51742add28950d1fb97b597da7e78a2482706dc893
+F ext/misc/series.c 8612317330587e4cfeb0ae7ffe2f06fe86e66f94a0f5bbb80d8fb46f89e9f0ad
 F ext/misc/sha1.c 9a11826db885e8afd997c0a1b28bb799a43e462ef770ac33f19e744887c9c6fa
 F ext/misc/shathree.c fd22d70620f86a0467acfdd3acd8435d5cb54eb1e2d9ff36ae44e389826993df
 F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52
@@ -1709,7 +1709,7 @@ F test/sync.test a619e407ede58a7b6e3e44375328628559fc9695a9c24c47cb5690a866b0031
 F test/sync2.test 06152269ed73128782c450c355988fe8dd794d305833af75e1a5e79edd4dae47
 F test/syscall.test a067468b43b8cb2305e9f9fe414e5f40c875bb5d2cba5f00b8154396e95fcf37
 F test/sysfault.test c9f2b0d8d677558f74de750c75e12a5454719d04
-F test/tabfunc01.test 532087adcbf6774f1c550a73d30a4d18e9520a40ece7eb60f6fa38f29bcea5ad
+F test/tabfunc01.test 23d1f92fbbbaaef4cb3a1ee15fd5b44e70bde1f3ee1a6b9df9ce43b05cf0b630
 F test/table.test e87294bf1c80bfd7792142b84ab32ea5beb4f3f71e535d7fb263a6b2068377bf
 F test/tableapi.test e37c33e6be2276e3a96bb54b00eea7f321277115d10e5b30fdb52a112b432750
 F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
@@ -2208,11 +2208,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 0fa3345fe4464804f6846c2598774b9e700df39570e81e020de21e06e2ff044d
-R 420f1b91caadadd221bcb8d7b520cc55
-T *branch * series-boundry-cases
-T *sym-series-boundry-cases *
-T -sym-trunk *
+P 236ef21789c4ebb67a8cf0a841341fab1477a6fe8e88b575e9f450a8f868e618
+R adf6cdcfb6965c29d0bb90adee6a0dc1
 U drh
-Z accc4f998a9a8942d7566835deda0da0
+Z 99da3cd88ce4fd07ad1d85179b5e2d0d
 # Remove this line to create a well-formed Fossil manifest.
index fdac4ce365f7afb09bb147af43352319a7eede96..c8ba348a48f6a650b86ba338f0b0cead9495bfb1 100644 (file)
@@ -1 +1 @@
-236ef21789c4ebb67a8cf0a841341fab1477a6fe8e88b575e9f450a8f868e618
+50d611404a444f23368c684dfa6dc34b057f8adb45aa058bcf3b2768e908eb3e
index b7f7e8dc5f5d6136d99bf6540761e571c8754cd9..02d913bce7ff2ff382cab121cd596b98ddfc472d 100644 (file)
@@ -739,9 +739,14 @@ do_execsql_test 1505 {
    WHERE value>9223372036854775807.0
    LIMIT 3;
 } {}
+
+# NB: Large floating point values can not convert to integers exactly.
+# This affects subsequent results.
+#
 do_execsql_test 1506 {
   SELECT 9223372036854774784 = 9223372036854775000.0;
 } {1}
+
 do_execsql_test 1507 {
   SELECT value FROM generate_series(1,9223372036854775807)
    WHERE value>=9223372036854775000.0
@@ -753,6 +758,48 @@ do_execsql_test 1508 {
    LIMIT 3;
 } {9223372036854774785 9223372036854774786 9223372036854774787}
 
+do_execsql_test 1510 {
+  SELECT value FROM generate_series(-9223372036854775808,1)
+   WHERE value>=-9223372036854775000.0
+   LIMIT 3;
+} {-9223372036854774784 -9223372036854774783 -9223372036854774782}
+do_execsql_test 1511 {
+  SELECT value FROM generate_series(-9223372036854775808,1)
+   WHERE value>-9223372036854775000.0
+   LIMIT 3;
+} {-9223372036854774783 -9223372036854774782 -9223372036854774781}
+
+do_execsql_test 1520 {
+  SELECT value FROM generate_series(9223372036854774784)
+   WHERE value<=9223372036854775000.0
+   LIMIT 3;
+} {9223372036854774784}
+do_execsql_test 1521 {
+  SELECT value FROM generate_series(9223372036854774784)
+   WHERE value<9223372036854775000.0
+   LIMIT 3;
+} {}
+do_execsql_test 1522 {
+  SELECT value FROM generate_series(9223372036854775805,9223372036854775807)
+   WHERE value<=9223372036854775807.0
+   LIMIT 3;
+} {9223372036854775805 9223372036854775806 9223372036854775807}
+do_execsql_test 1522ck {
+  SELECT value FROM generate_series(9223372036854775805,9223372036854775807)
+   WHERE +value<=9223372036854775807.0
+   LIMIT 3;
+} {9223372036854775805 9223372036854775806 9223372036854775807}
+do_execsql_test 1523 {
+  SELECT value FROM generate_series(9223372036854775805,9223372036854775807)
+   WHERE value<9223372036854775807.0
+   LIMIT 3;
+} {9223372036854775805 9223372036854775806 9223372036854775807}
+do_execsql_test 1523ck {
+  SELECT value FROM generate_series(9223372036854775805,9223372036854775807)
+   WHERE +value<9223372036854775807.0
+   LIMIT 3;
+} {9223372036854775805 9223372036854775806 9223372036854775807}
+
 
 # Free up memory allocations
 intarray_addr