Changeset: a728df96fd76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a728df96fd76
Modified Files:
        gdk/gdk_atoms.c
        testing/Mtest.py.in
Branch: default
Log Message:

Merge with Aug2024 branch.


diffs (truncated from 648 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1177,10 +1177,16 @@ TESTrenderer(MapiHdl hdl)
                                if (strcmp(s, "-0") == 0) /* normalize -0 */
                                        s = "0";
                                v = strtod(s, NULL);
-                               for (j = 4; j < 11; j++) {
-                                       snprintf(buf, sizeof(buf), "%.*g", j, 
v);
-                                       if (v == strtod(buf, NULL))
-                                               break;
+                               if (v > (double) 999999999999999 ||
+                                       v < (double) -999999999999999 ||
+                                       (double) (int) v != v ||
+                                       snprintf(buf, sizeof(buf), "%.0f", v) 
<= 0 ||
+                                       strtod(buf, NULL) != v) {
+                                       for (j = 4; j < 11; j++) {
+                                               snprintf(buf, sizeof(buf), 
"%.*g", j, v);
+                                               if (v == strtod(buf, NULL))
+                                                       break;
+                                       }
                                }
                                mnstr_printf(toConsole, "%s", buf);
                        } else if (strcmp(tp, "real") == 0) {
@@ -1190,10 +1196,16 @@ TESTrenderer(MapiHdl hdl)
                                if (strcmp(s, "-0") == 0) /* normalize -0 */
                                        s = "0";
                                v = strtof(s, NULL);
-                               for (j = 4; j < 6; j++) {
-                                       snprintf(buf, sizeof(buf), "%.*g", j, 
v);
-                                       if (v == strtof(buf, NULL))
-                                               break;
+                               if (v > (float) 9999999 ||
+                                       v < (float) -9999999 ||
+                                       (float) (int) v != v ||
+                                       snprintf(buf, sizeof(buf), "%.0f", v) 
<= 0 ||
+                                       strtof(buf, NULL) != v) {
+                                       for (j = 4; j < 6; j++) {
+                                               snprintf(buf, sizeof(buf), 
"%.*g", j, v);
+                                               if (v == strtof(buf, NULL))
+                                                       break;
+                                       }
                                }
                                mnstr_printf(toConsole, "%s", buf);
                        } else
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1086,7 +1086,7 @@ dblFromStr(const char *src, size_t *len,
 ssize_t
 dblToStr(char **dst, size_t *len, const dbl *src, bool external)
 {
-       int i;
+       int l = 0;
 
        atommem(dblStrlen);
        if (is_dbl_nil(*src)) {
@@ -1097,12 +1097,19 @@ dblToStr(char **dst, size_t *len, const 
                strcpy(*dst, str_nil);
                return 1;
        }
-       for (i = 4; i < 18; i++) {
-               snprintf(*dst, *len, "%.*g", i, *src);
+       if (*src <= (dbl) 999999999999999 &&
+           *src >= (dbl) -999999999999999 &&
+           (dbl) (int) *src == *src) {
+               l = snprintf(*dst, *len, "%.0f", *src);
+               if (strtod(*dst, NULL) == *src)
+                       return (ssize_t) l;
+       }
+       for (int i = 4; i < 18; i++) {
+               l = snprintf(*dst, *len, "%.*g", i, *src);
                if (strtod(*dst, NULL) == *src)
                        break;
        }
-       return (ssize_t) strlen(*dst);
+       return (ssize_t) l;
 }
 
 atom_io(dbl, Lng, lng)
@@ -1160,7 +1167,7 @@ fltFromStr(const char *src, size_t *len,
 ssize_t
 fltToStr(char **dst, size_t *len, const flt *src, bool external)
 {
-       int i;
+       int l = 0;
 
        atommem(fltStrlen);
        if (is_flt_nil(*src)) {
@@ -1171,12 +1178,19 @@ fltToStr(char **dst, size_t *len, const 
                strcpy(*dst, str_nil);
                return 1;
        }
-       for (i = 4; i < 10; i++) {
-               snprintf(*dst, *len, "%.*g", i, *src);
+       if (*src <= (flt) 9999999 &&
+           *src >= (flt) -9999999 &&
+           (flt) (int) *src == *src) {
+               l = snprintf(*dst, *len, "%.0f", *src);
+               if (strtof(*dst, NULL) == *src)
+                       return (ssize_t) l;
+       }
+       for (int i = 4; i < 10; i++) {
+               l = snprintf(*dst, *len, "%.*g", i, *src);
                if (strtof(*dst, NULL) == *src)
                        break;
        }
-       return (ssize_t) strlen(*dst);
+       return (ssize_t) l;
 }
 
 atom_io(flt, Int, int)
diff --git a/sql/test/2024/Tests/check.test b/sql/test/2024/Tests/check.test
--- a/sql/test/2024/Tests/check.test
+++ b/sql/test/2024/Tests/check.test
@@ -83,3 +83,4 @@ update bar set i = 10
 
 statement ok
 update bar set i = 1
+
diff --git a/sql/test/BugTracker-2024/Tests/7580-date-diff.test 
b/sql/test/BugTracker-2024/Tests/7580-date-diff.test
--- a/sql/test/BugTracker-2024/Tests/7580-date-diff.test
+++ b/sql/test/BugTracker-2024/Tests/7580-date-diff.test
@@ -1,5 +1,4 @@
-
-query IIIIII
+query TTIIIT nosort
 select t.d1, t.d2
 , cast(extract(day from (t.d1 - t.d2)) as integer) as verschil
 , cast(extract(day from (t.d1 - t.d2)) as integer) < 100 as f -- false
@@ -8,3 +7,4 @@ select t.d1, t.d2
 from (select cast('2024-01-18' as date) as d1, cast('2013-06-06' as date) as 
d2) t
 where abs(cast(extract(day from (t.d1 - t.d2)) as integer)) < 100 -- this is 
false, not true, so this shouldn't produce any result.
 ----
+
diff --git a/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test 
b/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
--- a/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
+++ b/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
@@ -1,3 +1,4 @@
 statement ok
 CREATE OR REPLACE FUNCTION test () RETURNS boolean
-BEGIN RETURN CASE WHEN EXISTS (SELECT id FROM sys._tables) THEN TRUE ELSE 
FALSE END; END;
+BEGIN RETURN CASE WHEN EXISTS (SELECT id FROM sys._tables) THEN TRUE ELSE 
FALSE END; END
+
diff --git a/sql/test/BugTracker-2024/Tests/7587-rejectmismatch.test 
b/sql/test/BugTracker-2024/Tests/7587-rejectmismatch.test
--- a/sql/test/BugTracker-2024/Tests/7587-rejectmismatch.test
+++ b/sql/test/BugTracker-2024/Tests/7587-rejectmismatch.test
@@ -1,11 +1,11 @@
 statement ok
-START TRANSACTION;
+START TRANSACTION
 
 statement ok
-CALL sys.clearrejects();
+CALL sys.clearrejects()
 
 statement ok
-CREATE TABLE foo(i INT, t TEXT, j INT);
+CREATE TABLE foo(i INT, t TEXT, j INT)
 
 -- The file rejectmismatch.csv contains lines of the form
 -- 
16,"bananabananabananabananabananabananabananabananabananabananabananabananabananabananabananabanana16",16
@@ -23,7 +23,7 @@ BEST EFFORT
 
 -- 111 rejected lines, to be precise
 
-query I
+query I nosort
 SELECT COUNT(*) FROM sys.rejects
 ----
 111
@@ -44,7 +44,6 @@ ORDER BY n
 LIMIT 1
 ----
 
-
-
 statement ok
 ROLLBACK
+
diff --git a/sql/test/BugTracker-2024/Tests/7591-logical-expr.test 
b/sql/test/BugTracker-2024/Tests/7591-logical-expr.test
--- a/sql/test/BugTracker-2024/Tests/7591-logical-expr.test
+++ b/sql/test/BugTracker-2024/Tests/7591-logical-expr.test
@@ -33,3 +33,4 @@ SELECT * FROM t7591 WHERE (t7591.c0 = ''
 
 statement ok
 drop table t7591
+
diff --git 
a/sql/test/BugTracker-2024/Tests/7593-double-as-text-notation-issue.test 
b/sql/test/BugTracker-2024/Tests/7593-double-as-text-notation-issue.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7593-double-as-text-notation-issue.test
@@ -0,0 +1,207 @@
+-- certain doubles (ending with a 0 and (> 9999 or < -9990)) are converted to 
scientific notation by the server, which is undesired.
+-- this started with Aug2024, older servers didn't do this, so a regression 
issue.
+
+query T nosort
+select cast(cast(202909 as double) as varchar) as "expect 202909"
+----
+202909
+
+query T nosort
+select cast(cast(202910 as double) as varchar) as "expect 202910"
+----
+202910
+
+query T nosort
+select cast(cast(202911 as double) as varchar) as "expect 202911"
+----
+202911
+
+query T nosort
+select cast(cast(20290 as double) as varchar) as "expect 20290"
+----
+20290
+
+query T nosort
+select cast(cast(2020 as double) as varchar) as "expect 2020"
+----
+2020
+
+query T nosort
+select cast(cast(20900 as double) as varchar) as "expect 20900"
+----
+20900
+
+query T nosort
+select cast(cast(202900 as double) as varchar) as "expect 202900"
+----
+202900
+
+query T nosort
+select cast(cast(202990 as double) as varchar) as "expect 202990"
+----
+202990
+
+query T nosort
+select cast(cast(2029900 as double) as varchar) as "expect 2029900"
+----
+2029900
+
+query T nosort
+select cast(cast(2029980 as double) as varchar) as "expect 2029980"
+----
+2029980
+
+query T nosort
+select cast(cast(2029981 as double) as varchar) as "expect 2029981"
+----
+2029981
+
+query T nosort
+select cast(cast(value as double) as varchar) from generate_series(9985, 
10133) where value % 10 in (9,0,1)
+----
+9989
+9990
+9991
+9999
+10000
+10001
+10009
+10010
+10011
+10019
+10020
+10021
+10029
+10030
+10031
+10039
+10040
+10041
+10049
+10050
+10051
+10059
+10060
+10061
+10069
+10070
+10071
+10079
+10080
+10081
+10089
+10090
+10091
+10099
+10100
+10101
+10109
+10110
+10111
+10119
+10120
+10121
+10129
+10130
+10131
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to