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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list