!208 处理lpad函数对最大存储空间同为10M的字符类型在超过存储上限时的处理方式不一致的问题
Merge pull request !208 from 徐鲲鹏/master
This commit is contained in:
@ -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);
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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));
|
||||
|
||||
Reference in New Issue
Block a user