From deb8e6def1ad99902534777a0ed0023ed3ede9d2 Mon Sep 17 00:00:00 2001 From: DarkAthena Date: Tue, 13 Aug 2024 09:20:50 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Drecord=5Fin=E5=9C=A8A?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E8=A7=A3=E6=9E=90=E7=A9=BA=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E6=B2=A1=E6=9C=89=E8=BD=AC=E6=8D=A2=E6=88=90?= =?UTF-8?q?null=E7=9A=84=E9=97=AE=E9=A2=98=20=EF=BC=88cherry=20picked=20co?= =?UTF-8?q?mmit=20from=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/utils/adt/rowtypes.cpp | 9 ++++++-- .../regress/expected/create_compositetype.out | 23 +++++++++++++++++++ src/test/regress/sql/create_compositetype.sql | 13 +++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/common/backend/utils/adt/rowtypes.cpp b/src/common/backend/utils/adt/rowtypes.cpp index e784da8ac1..9aec01b4b1 100644 --- a/src/common/backend/utils/adt/rowtypes.cpp +++ b/src/common/backend/utils/adt/rowtypes.cpp @@ -194,8 +194,13 @@ Datum record_in(PG_FUNCTION_ARGS) } } - column_data = buf.data; - nulls[i] = false; + if ((0 == buf.len) && u_sess->attr.attr_sql.sql_compatibility == A_FORMAT && !ACCEPT_EMPTY_STR) { + column_data = NULL; + nulls[i] = true; + } else { + column_data = buf.data; + nulls[i] = false; + } } /* diff --git a/src/test/regress/expected/create_compositetype.out b/src/test/regress/expected/create_compositetype.out index c3e5ffd220..9327f83e2b 100644 --- a/src/test/regress/expected/create_compositetype.out +++ b/src/test/regress/expected/create_compositetype.out @@ -206,6 +206,29 @@ select * from t_type1; 1 | ("a ",abc,×ÜÎñºì¼õ·Ê°¡,jeoifjÔÚ#$@!#$½¨ê±½ð¶î·Ça121) (1 row) +drop table t_type1; +drop type comp1; +create type comp1 as(c1 char(10), c2 varchar(100), c3 text, c4 clob); +create table t_type1(a serial, b comp1); +NOTICE: CREATE TABLE will create implicit sequence "t_type1_a_seq" for serial column "t_type1.a" +set behavior_compat_options=''; +insert into t_type1(b) values(('','','','')); +select * from t_type1; + a | b +---+------- + 1 | (,,,) +(1 row) + +delete from t_type1; +set behavior_compat_options='accept_empty_str'; +insert into t_type1(b) values(('','','','')); +select * from t_type1; + a | b +---+------------------------- + 2 | (" ","","","") +(1 row) + +reset behavior_compat_options; drop table t_type1; drop type comp1; --date/time type diff --git a/src/test/regress/sql/create_compositetype.sql b/src/test/regress/sql/create_compositetype.sql index 90d3a1fcd7..e42ceac077 100644 --- a/src/test/regress/sql/create_compositetype.sql +++ b/src/test/regress/sql/create_compositetype.sql @@ -114,6 +114,19 @@ select * from t_type1; drop table t_type1; drop type comp1; +create type comp1 as(c1 char(10), c2 varchar(100), c3 text, c4 clob); +create table t_type1(a serial, b comp1); +set behavior_compat_options=''; +insert into t_type1(b) values(('','','','')); +select * from t_type1; +delete from t_type1; +set behavior_compat_options='accept_empty_str'; +insert into t_type1(b) values(('','','','')); +select * from t_type1; +reset behavior_compat_options; +drop table t_type1; +drop type comp1; + --date/time type create type comp1 as(c1 date, c2 timestamp with time zone, c3 INTERVAL DAY(3) TO SECOND (4)); create table t_type1(a serial, b comp1) ; -- Gitee