]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix rounding behavior for all-9s decimals in the decimal extension.
authordrh <>
Tue, 23 Jun 2026 10:07:50 +0000 (10:07 +0000)
committerdrh <>
Tue, 23 Jun 2026 10:07:50 +0000 (10:07 +0000)
[bugs:/info/2026-06-23T05:07:48Z|Bug 2026-06-23T05:07:48Z]

FossilOrigin-Name: 21b2692c8363f2c0629beef4860400a1d27f499a3f27745c23391bcfa09da898

ext/misc/decimal.c
manifest
manifest.uuid
test/decimal.test

index 9427cab8e20f0b12610806809312288ecea7894c..478eb2f9375be9713e0cb607d5a4d796721f80fe 100644 (file)
@@ -319,7 +319,7 @@ static void decimal_round(Decimal *p, int N){
     ** by adding a new 0 to the front */
     for(i=0; i<N && p->a[i]==9; i++){}
     if( i==N ){
-      decimal_expand(p, p->nDigit+1, 0);
+      decimal_expand(p, p->nDigit+1, p->nFrac);
       if( p->oom ) return;
     }
 
@@ -477,6 +477,7 @@ static void decimal_expand(Decimal *p, int nDigit, int nFrac){
   signed char *a;
   if( p==0 ) return;
   nAddFrac = nFrac - p->nFrac;
+  assert( nAddFrac>=0 );
   nAddSig = (nDigit - p->nDigit) - nAddFrac;
   if( nAddFrac==0 && nAddSig==0 ) return;
   if( nDigit+1>SQLITE_DECIMAL_MAX_DIGIT ){ p->oom = 1; return; }
index 6b6af0e084d7365c86350394bdd7f2db0f682aef..b0f0d043ea2dee98c149d3162d662188d180b9a7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\sBTREE_HINT_TABLECURSOR\scursor-hint.\sThis\sis\snot\scurrently\sused\sby\sstock\sSQLite.
-D 2026-06-22T11:02:28.169
+C Fix\srounding\sbehavior\sfor\sall-9s\sdecimals\sin\sthe\sdecimal\sextension.\n[bugs:/info/2026-06-23T05:07:48Z|Bug\s2026-06-23T05:07:48Z]
+D 2026-06-23T10:07:50.396
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -373,7 +373,7 @@ F ext/misc/completion.c 3f5db28e88c3313103b2dd86d910a2944fd500c46754e473493968ce
 F ext/misc/compress.c 5cc142aa82d1589a31c384657d0418c0eb0871348a2201e5dca32d24a0dd6654
 F ext/misc/csv.c 5ca451b9ce77322c4ce8476766e7ed18160e5c8b19e7cab76e13006d631b9e8f
 F ext/misc/dbdump.c 678f1b9ae2317b4473f65d03132a2482c3f4b08920799ed80feedd2941a06680
-F ext/misc/decimal.c 75f206e86072bd772041e6731d153517094e298a4b8c763a9f68d73d21b52651
+F ext/misc/decimal.c 7b32d10364a1b958f49d800ddca59692d6ac6aec0dd4974ab3c1734bd6dfecda
 F ext/misc/diskused.c 8acb4f27488fd8b9bdb0a3d300a7bd761b797b6e7858ac8038398263cededc48
 F ext/misc/eval.c 04bc9aada78c888394204b4ed996ab834b99726fb59603b0ee3ed6e049755dc1
 F ext/misc/explain.c 9670c8ff7b255eea7845abc5123a4958e74016c16990b10497e56380f91704b9
@@ -1049,7 +1049,7 @@ F test/dbpage.test 2e3a50548edea551ef974b8f121f975852de9c5b16cb3284ac4bf2c9f2ed5
 F test/dbpagefault.test ea39de2ca86041a9c6df1135645180a76d0a8da93ac159e2fafe38e39636530b
 F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759
 F test/dbstatus2.test a36518c0f0951d8fd5a3dc36f99948ad1af93fb7fc0d2e03e5bb5a643186cf52
-F test/decimal.test 9e1c40ff2835775a3dae88e1e2f0d81438070e987aafa4d9aeb0a22d60e5bf44
+F test/decimal.test e5a85d6b81313fa50a4361b041a8702c99eca2ff7ad147ea6e2525132550cb19
 F test/default.test c7124864cded213a3f118bc7e2e26f34b7c36dfa26cf6945cc8b7f5db1191277
 F test/delete.test 2686e1c98d552ef37d79ad55b17b93fe96fad9737786917ce3839767f734c48f
 F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa
@@ -2208,9 +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 c9171221160f241b450d425f41bb53b42362dccfad4c3fdf64dd5c3562ed4096 d48c6d2dcd50128f35bba8931371e708d24b63f2ea7a5988af8864d18ef5d14e
-R ac3180d079383592c198cf1b45b910ff
-T +closed d48c6d2dcd50128f35bba8931371e708d24b63f2ea7a5988af8864d18ef5d14e
-U dan
-Z 136a44434452d883960fef6aa0671265
+P 35b3ff4007fc1abd36233a6b3b75bb6a123edc062f36437247c3dfe779868b70
+R 589e4e119bdcfa5227636f28530d49e1
+U drh
+Z 1ad0ee0e5ebc15b4f22dec731bcd9fe9
 # Remove this line to create a well-formed Fossil manifest.
index 1af266994ab298f68da378b3d74c0d2fc6f74b8c..b494db522ac22e725643f2e1bb124bcb53bb82f5 100644 (file)
@@ -1 +1 @@
-35b3ff4007fc1abd36233a6b3b75bb6a123edc062f36437247c3dfe779868b70
+21b2692c8363f2c0629beef4860400a1d27f499a3f27745c23391bcfa09da898
index f6a2c6eff5d967d2b0975c341479e28642043766..89456bf91929ad728fe3d39cd95ce20b4cfd8f71 100644 (file)
@@ -237,6 +237,11 @@ do_execsql_test 7080 {
   SELECT decimal('998999999999999', 14);
 } {999000000000000}
 
+# Bug 2026-06-23T05:07:48Z
+#
+do_execsql_test 8000 {
+  SELECT decimal('999.999',3);
+} {1000.000}
 
 
 finish_test