Changeset: 96c960f12f2d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=96c960f12f2d
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2016/Tests/like_in_non_sys_schema.Bug-4062.stable.out
sql/test/pg_regress/Tests/strings.stable.out
Branch: Oct2020
Log Message:
Don't truncate when casting to a larger (var)char type
diffs (65 lines):
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3842,10 +3842,11 @@ rel_cast(sql_query *query, sql_rel **rel
if (!e)
return NULL;
- /* strings may need too be truncated */
- if (tpe ->type ->localtype == TYPE_str) {
- if (tpe->digits > 0) {
- sql_subtype *et = exp_subtype(e);
+ /* strings may need to be truncated */
+ if (EC_VARCHAR(tpe->type->eclass) && tpe->digits > 0) {
+ sql_subtype *et = exp_subtype(e);
+ /* truncate only if the number of digits are smaller or from
clob */
+ if (et && (tpe->digits < et->digits || et->digits == 0)) {
sql_subtype *it = sql_bind_localtype("int");
sql_subfunc *c = sql_bind_func(sql->sa,
sql->session->schema, "truncate", et, it, F_FUNC);
if (c)
diff --git
a/sql/test/BugTracker-2016/Tests/like_in_non_sys_schema.Bug-4062.stable.out
b/sql/test/BugTracker-2016/Tests/like_in_non_sys_schema.Bug-4062.stable.out
--- a/sql/test/BugTracker-2016/Tests/like_in_non_sys_schema.Bug-4062.stable.out
+++ b/sql/test/BugTracker-2016/Tests/like_in_non_sys_schema.Bug-4062.stable.out
@@ -71,24 +71,24 @@ stdout of test 'like_in_non_sys_schema.B
#WHERE "columns"."default" LIKE 'next value for %';
% . # table_name
% IS_AUTOINCREMENT # name
-% varchar # type
-% 0 # length
+% char # type
+% 3 # length
#set schema tmp;
#SELECT cast(CASE WHEN "columns"."default" IS NOT NULL AND "columns"."default"
LIKE 'next value for %' THEN 'YES' ELSE 'NO' END AS varchar(3)) AS
"IS_AUTOINCREMENT"
#FROM "sys"."columns"
#WHERE "columns"."default" LIKE 'next value for %';
% . # table_name
% IS_AUTOINCREMENT # name
-% varchar # type
-% 0 # length
+% char # type
+% 3 # length
#set schema profiler;
#SELECT cast(CASE WHEN "columns"."default" IS NOT NULL AND "columns"."default"
LIKE 'next value for %' THEN 'YES' ELSE 'NO' END AS varchar(3)) AS
"IS_AUTOINCREMENT"
#FROM "sys"."columns"
#WHERE "columns"."default" LIKE 'next value for %';
% . # table_name
% IS_AUTOINCREMENT # name
-% varchar # type
-% 0 # length
+% char # type
+% 3 # length
# 15:05:37 >
# 15:05:37 > "Done."
diff --git a/sql/test/pg_regress/Tests/strings.stable.out
b/sql/test/pg_regress/Tests/strings.stable.out
--- a/sql/test/pg_regress/Tests/strings.stable.out
+++ b/sql/test/pg_regress/Tests/strings.stable.out
@@ -147,7 +147,7 @@ stdout of test 'strings` in directory 's
#SELECT CAST(f1 AS varchar(1)) AS "varchar(char)" FROM CHAR_TBL;
% sys. # table_name
% varchar(char) # name
-% varchar # type
+% char # type
% 1 # length
[ "a" ]
[ "A" ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list