!208 处理lpad函数对最大存储空间同为10M的字符类型在超过存储上限时的处理方式不一致的问题

Merge pull request !208 from 徐鲲鹏/master
This commit is contained in:
opengauss-bot
2020-09-10 20:50:42 +08:00
committed by Gitee
3 changed files with 21 additions and 10 deletions

View File

@ -572,12 +572,6 @@ Datum varchar(PG_FUNCTION_ARGS)
/* only reach here if string is too long... */
if (len > MaxAttrSize) {
ereport(ERROR,
(errcode(ERRCODE_STRING_DATA_RIGHT_TRUNCATION),
errmsg("value too long for type character varying maxlen(%d) input_len(%d)", MaxAttrSize, len)));
}
/* truncate multibyte string preserving multibyte boundary */
max_mb_len = pg_mbcharcliplen(s_data, len, max_len);

View File

@ -115,7 +115,20 @@ select char_length(to_char(lpad('abc', 1024 * 1024 *10, 'x')));
(1 row)
select char_length(to_char(lpad('abc', 1024 * 1024 *10 + 1, 'x')));
ERROR: value too long for type character varying maxlen(10485760) input_len(10485761)
CONTEXT: referenced column: varchar
SQL function "to_char" statement 1
referenced column: char_length
char_length
-------------
10485760
(1 row)
SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar2(10485760));
char_length
-------------
10485760
(1 row)
SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar(10485760));
char_length
-------------
10485760
(1 row)

View File

@ -68,3 +68,7 @@ SELECT '' AS four, * FROM VARCHAR_TBL ORDER BY f1;
select char_length(to_char(lpad('abc', 1024 * 1024 *10, 'x')));
select char_length(to_char(lpad('abc', 1024 * 1024 *10 + 1, 'x')));
SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar2(10485760));
SELECT char_length(lpad('abcCC',1024*1024*11,'x')::varchar(10485760));