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

Reply via email to