Changeset: 21846b6270c9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/21846b6270c9
Branch: mtime-bug
Log Message:
Merges Aug2024
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]