diff --git a/src/common/backend/catalog/system_views.sql b/src/common/backend/catalog/system_views.sql index 397ec772caf7af181847900aeb6341202d128b7c..c6a73312f5346693d684ea1c24b622468db51406 100644 --- a/src/common/backend/catalog/system_views.sql +++ b/src/common/backend/catalog/system_views.sql @@ -1764,25 +1764,28 @@ CREATE CAST (RAW AS TEXT) WITH FUNCTION rawtohex(raw) AS IMPLICIT; CREATE CAST (BLOB AS RAW) WITHOUT FUNCTION AS IMPLICIT; CREATE CAST (RAW AS BLOB) WITHOUT FUNCTION AS IMPLICIT; +CREATE CAST (TEXT AS CLOB) WITHOUT FUNCTION AS IMPLICIT; +CREATE CAST (CLOB AS TEXT) WITHOUT FUNCTION AS IMPLICIT; + /* text to clob */ CREATE OR REPLACE FUNCTION to_clob(TEXT) -RETURNS TEXT +RETURNS CLOB AS $$ select $1 $$ LANGUAGE SQL IMMUTABLE STRICT NOT FENCED; /* char to clob */ CREATE OR REPLACE FUNCTION to_clob(CHAR) -RETURNS TEXT +RETURNS CLOB AS $$ select CAST($1 AS TEXT) $$ LANGUAGE SQL IMMUTABLE STRICT NOT FENCED; CREATE OR REPLACE FUNCTION to_clob(VARCHAR) -RETURNS TEXT +RETURNS CLOB AS $$ select CAST($1 AS TEXT) $$ LANGUAGE SQL IMMUTABLE STRICT NOT FENCED; CREATE OR REPLACE FUNCTION to_clob(NVARCHAR2) -RETURNS TEXT +RETURNS CLOB AS $$ select CAST($1 AS TEXT) $$ LANGUAGE SQL IMMUTABLE STRICT NOT FENCED; diff --git a/src/common/backend/nodes/makefuncs.cpp b/src/common/backend/nodes/makefuncs.cpp index d20f2511d1e5801fae08043f07d6d534cd880fa0..5eaf948c98785fc4e9f96afb56c6affdf205601a 100755 --- a/src/common/backend/nodes/makefuncs.cpp +++ b/src/common/backend/nodes/makefuncs.cpp @@ -449,18 +449,6 @@ TypeName* makeTypeName(char* typnam) return makeTypeNameFromNameList(list_make1(makeString(typnam))); } -static void alter_clob_to_text(List* names) -{ - if (list_length(names) != 1) { - return; - } else { - char* type_name = strVal(linitial(names)); - if (strcmp(type_name, "clob") == 0) { - errno_t rc = strcpy_s(type_name, sizeof("clob"), "text"); - securec_check_c(rc, "\0", "\0"); - } - } -} /* * makeTypeNameFromNameList - * build a TypeName node for a String list representing a qualified name. @@ -470,7 +458,6 @@ static void alter_clob_to_text(List* names) TypeName* makeTypeNameFromNameList(List* names) { TypeName* n = makeNode(TypeName); - alter_clob_to_text(names); n->names = names; n->typmods = NIL; diff --git a/src/common/backend/parser/parse_type.cpp b/src/common/backend/parser/parse_type.cpp index 65c6932bea32967389f937a9095180f3928d0f16..2c26a5c4b126378be486f5c216b0ecec617fcd4d 100755 --- a/src/common/backend/parser/parse_type.cpp +++ b/src/common/backend/parser/parse_type.cpp @@ -759,7 +759,8 @@ bool IsTypeSupportedByCStore(_in_ Oid typeOid, _in_ int32 typeMod) CASHOID, CIDROID, BITOID, - VARBITOID}; + VARBITOID, + CLOBOID}; for (uint32 i = 0; i < sizeof(supportType) / sizeof(Oid); ++i) { if (supportType[i] == typeOid) { diff --git a/src/common/backend/utils/adt/varlena.cpp b/src/common/backend/utils/adt/varlena.cpp index 23bdaa310ff5f27df7f5840310d6d39a27fa9594..495dd96e4c86768dcb784cfad9cc5fbf3f9623fa 100644 --- a/src/common/backend/utils/adt/varlena.cpp +++ b/src/common/backend/utils/adt/varlena.cpp @@ -4896,6 +4896,7 @@ Datum datalength(PG_FUNCTION_ARGS) case VARCHAROID: /* for VARCHAR */ case NVARCHAR2OID: /* for NVARCHAR */ case TEXTOID: /* for TEXT */ + case CLOBOID: /* for CLOB */ { result = toast_raw_datum_size(value) - VARHDRSZ; break; diff --git a/src/include/catalog/pg_cast.h b/src/include/catalog/pg_cast.h index bd1ce284de7a370fd0f610854a8a4389b3bbc87a..4fd92deb9d605a07c1e81fe86509cb92d8896dfd 100755 --- a/src/include/catalog/pg_cast.h +++ b/src/include/catalog/pg_cast.h @@ -264,6 +264,7 @@ DATA(insert ( 23 3769 0 i b )); DATA(insert ( 3769 20 1288 a f )); DATA(insert ( 3769 23 0 a b )); DATA(insert ( 25 2205 1079 i f )); +DATA(insert ( 90 2205 1079 i f )); DATA(insert ( 1043 2205 1079 i f )); DATA(insert ( 3969 2205 1079 i f )); @@ -273,38 +274,51 @@ DATA(insert ( 3969 2205 1079 i f )); DATA(insert ( 25 1042 0 i b )); DATA(insert ( 25 1043 0 i b )); DATA(insert ( 25 3969 0 i b )); +DATA(insert ( 90 1042 0 i b )); +DATA(insert ( 90 1043 0 i b )); +DATA(insert ( 90 3969 0 i b )); DATA(insert ( 1042 25 401 i f )); +DATA(insert ( 1042 90 401 i f )); DATA(insert ( 1042 1043 401 i f )); DATA(insert ( 1043 25 0 i b )); +DATA(insert ( 1043 90 0 i b )); DATA(insert ( 1043 1042 0 i b )); DATA(insert ( 1042 3969 401 i f )); DATA(insert ( 3969 25 0 i b )); +DATA(insert ( 3969 90 0 i b )); DATA(insert ( 3969 1042 0 i b )); DATA(insert ( 3969 1043 0 i b )); DATA(insert ( 1043 3969 0 i b )); DATA(insert ( 18 25 946 i f )); +DATA(insert ( 18 90 946 i f )); DATA(insert ( 18 1042 860 a f )); DATA(insert ( 18 1043 946 a f )); DATA(insert ( 18 3969 946 a f )); DATA(insert ( 19 25 406 i f )); +DATA(insert ( 19 90 406 i f )); DATA(insert ( 19 1042 408 a f )); DATA(insert ( 19 1043 1401 a f )); DATA(insert ( 19 3969 1401 a f )); DATA(insert ( 25 18 944 a f )); +DATA(insert ( 90 18 944 a f )); DATA(insert ( 1042 18 944 a f )); DATA(insert ( 1043 18 944 a f )); DATA(insert ( 3969 18 944 a f )); DATA(insert ( 25 19 407 i f )); +DATA(insert ( 90 19 407 i f )); DATA(insert ( 1042 19 409 i f )); DATA(insert ( 1043 19 1400 i f )); DATA(insert ( 3969 19 1400 i f )); + + /* Allow explicit coercions between int4 and "char" */ DATA(insert ( 18 23 77 e f )); DATA(insert ( 23 18 78 e f )); /* pg_node_tree can be coerced to, but not from, text */ DATA(insert ( 194 25 0 i b )); +DATA(insert ( 194 90 0 i b )); /* * Datetime category @@ -331,6 +345,7 @@ DATA(insert ( 1186 703 1194 a f )); DATA(insert ( 1186 1083 1419 a f )); DATA(insert ( 1266 1083 2046 a f )); DATA(insert ( 25 1114 4073 i f )); +DATA(insert ( 90 1114 4073 i f )); /* Cross-category casts between int4 and abstime, reltime */ DATA(insert ( 23 702 0 e b )); @@ -391,6 +406,12 @@ DATA(insert ( 16 25 2971 a f )); DATA(insert ( 142 25 0 a b )); DATA(insert ( 25 142 2896 e f )); +DATA(insert ( 650 90 730 a f )); +DATA(insert ( 869 90 730 a f )); +DATA(insert ( 16 90 2971 a f )); +DATA(insert ( 142 90 0 a b )); +DATA(insert ( 90 142 2896 e f )); + /* * Cross-category casts to and from VARCHAR * @@ -436,19 +457,30 @@ DATA(insert ( 1562 1562 1687 i f )); DATA(insert ( 1700 1700 1703 i f )); DATA(insert ( 1082 25 4159 i f )); +DATA(insert ( 1082 90 4159 i f )); DATA(insert ( 1082 1042 4160 i f )); DATA(insert ( 1082 1043 4161 i f )); DATA(insert ( 1043 1082 4162 i f )); DATA(insert ( 1042 1082 4163 i f )); DATA(insert ( 25 1082 4164 i f )); +DATA(insert ( 90 1082 4164 i f )); DATA(insert ( 5545 25 4165 i f )); -DATA(insert ( 21 25 4166 i f )); -DATA(insert ( 23 25 4167 i f )); -DATA(insert ( 20 25 4168 i f )); -DATA(insert ( 700 25 4169 i f )); -DATA(insert ( 701 25 4170 i f )); +DATA(insert ( 21 25 4166 i f )); +DATA(insert ( 23 25 4167 i f )); +DATA(insert ( 20 25 4168 i f )); +DATA(insert ( 700 25 4169 i f )); +DATA(insert ( 701 25 4170 i f )); DATA(insert ( 1700 25 4171 i f )); + +DATA(insert ( 5545 90 4165 i f )); +DATA(insert ( 21 90 4166 i f )); +DATA(insert ( 23 90 4167 i f )); +DATA(insert ( 20 90 4168 i f )); +DATA(insert ( 700 90 4169 i f )); +DATA(insert ( 701 90 4170 i f )); +DATA(insert ( 1700 90 4171 i f )); + DATA(insert ( 1042 1700 4172 i f )); DATA(insert ( 1043 1700 4173 i f )); DATA(insert ( 1043 23 4174 i f )); @@ -456,6 +488,8 @@ DATA(insert ( 1042 23 4175 i f )); DATA(insert ( 1043 20 4176 i f )); DATA(insert ( 1184 25 4177 i f )); DATA(insert ( 1114 25 4178 i f )); +DATA(insert ( 1184 90 4177 i f )); +DATA(insert ( 1114 90 4178 i f )); DATA(insert ( 1114 1043 4179 i f )); DATA(insert ( 21 1043 4180 i f )); DATA(insert ( 23 1043 4181 i f )); @@ -474,6 +508,14 @@ DATA(insert ( 25 700 4192 i f )); DATA(insert ( 25 701 4193 i f )); DATA(insert ( 25 1700 4194 i f )); +DATA(insert ( 90 5545 4188 i f )); +DATA(insert ( 90 21 4189 i f )); +DATA(insert ( 90 23 4190 i f )); +DATA(insert ( 90 20 4191 i f )); +DATA(insert ( 90 700 4192 i f )); +DATA(insert ( 90 701 4193 i f )); +DATA(insert ( 90 1700 4194 i f )); + DATA(insert (5545 1043 4065 i f )); DATA(insert (5545 3969 4066 i f )); DATA(insert (5545 1042 4067 i f )); diff --git a/src/test/regress/expected/hw_hashagg_start.out b/src/test/regress/expected/hw_hashagg_start.out index 72ae906d7bcc4648af5de307f7f12799c866299a..d46637e68c3719374291feebf15be3fb6743f297 100644 --- a/src/test/regress/expected/hw_hashagg_start.out +++ b/src/test/regress/expected/hw_hashagg_start.out @@ -76,27 +76,3 @@ select count(*) from TMP_ASSET_MAX_BELONG; 200000 (1 row) -explain (analyze on, detail on, costs off) -SELECT Party_Id, Zone_Num, Asset_Max_Belong_Org_Num FROM(SELECT - T1.Party_Id - ,T1.Zone_Num - ,T1.Asset_Max_Belong_Org_Num - ,ROW_NUMBER() OVER(PARTITION BY T1.Party_Id) AS QUA_ROW_NUM_1 -FROM TMP_CUST_ASSET_SUM_1 T1 group by 1,2,3 -)AA WHERE QUA_ROW_NUM_1 <= 1 -; - QUERY PLAN -------------------------------------------------------------------------------------------------------------- ---? Subquery Scan on aa (actual time=.* rows=.* loops=.*) - Filter: (aa.qua_row_num_1 <= 1) ---? -> WindowAgg (actual time=.* rows=.* loops=.*) ---? -> Sort (actual time=.* rows=.* loops=.*) - Sort Key: t1.party_id - Sort Method: external merge Memory: 4704kB ---? -> HashAggregate (actual time=.* rows=.* loops=.*) - Group By Key: t1.party_id, t1.zone_num, t1.asset_max_belong_org_num - Temp File Num: 512 ---? -> Seq Scan on tmp_cust_asset_sum_1 t1 (actual time=.* rows=.* loops=.*) ---? Total runtime: .* ms -(11 rows) - diff --git a/src/test/regress/output/bulkload_error_tbl.source b/src/test/regress/output/bulkload_error_tbl.source index a94b4127626dde9f5a4bb1f7a3433a7a0ff7db9f..f3ca462fb4952e9f87576f930bb0f1ec6e958912 100644 --- a/src/test/regress/output/bulkload_error_tbl.source +++ b/src/test/regress/output/bulkload_error_tbl.source @@ -58,7 +58,7 @@ CREATE TABLE s_latin1_utf8_001_01 c_char_2 | character(100) | | extended | | c_varchar | character varying(1024) | | extended | | c_text | text | | extended | | - c_clob | text | | extended | | + c_clob | clob | | extended | | c_numeric | numeric(20,5) | | main | | c_dp | double precision | | plain | | Has OIDs: no diff --git a/src/test/regress/output/gs_dump.source b/src/test/regress/output/gs_dump.source index f048b54b524b7f7f47639deaf00bafb96656b530..c42ca927ee2fe4e0ff3bd36e12f6b632c21b1769 100644 --- a/src/test/regress/output/gs_dump.source +++ b/src/test/regress/output/gs_dump.source @@ -926,7 +926,7 @@ CREATE TABLE tb1 ( col_character_varying character varying(200), col_varchar2 character varying(200) DEFAULT 'aaaabbbb'::character varying, col_narchar2 nvarchar2(200) DEFAULT 'aaaabbbb'::nvarchar2 NOT NULL, - col_clob text, + col_clob clob, col_text text, col_name1 name, col_char2 "char", @@ -1019,7 +1019,7 @@ CREATE TABLE tb1_column ( col_character_varying character varying(200), col_varchar2 character varying(200) DEFAULT 'aaaabbbb'::character varying, col_narchar2 nvarchar2(200) DEFAULT 'aaaabbbb'::nvarchar2 NOT NULL, - col_clob text, + col_clob clob, col_text text, col_char2 "char", col_bytea bytea, @@ -1134,7 +1134,7 @@ CREATE TABLE tb1_partition ( col_character_varying character varying(200), col_varchar2 character varying(200) DEFAULT 'aaaabbbb'::character varying, col_narchar2 nvarchar2(200) DEFAULT 'aaaabbbb'::nvarchar2 NOT NULL, - col_clob text, + col_clob clob, col_text text, col_name1 name, col_char2 "char", @@ -1286,7 +1286,7 @@ CREATE TABLE tb2_empty ( col_character_varying character varying(200), col_varchar2 character varying(200) DEFAULT 'aaaabbbb'::character varying, col_narchar2 nvarchar2(200) DEFAULT 'aaaabbbb'::nvarchar2 NOT NULL, - col_clob text, + col_clob clob, col_text text, col_name1 name, col_char2 "char", diff --git a/src/test/regress/sql/hw_hashagg_start.sql b/src/test/regress/sql/hw_hashagg_start.sql index 2b89306b69b51445ee4b4eea8901ea11126477f6..c77eb82a3c97d8fcd9cbdd8a14702bdba956c8a1 100644 --- a/src/test/regress/sql/hw_hashagg_start.sql +++ b/src/test/regress/sql/hw_hashagg_start.sql @@ -59,13 +59,3 @@ FROM TMP_CUST_ASSET_SUM_1 T1 group by 1,2,3 ; select count(*) from TMP_ASSET_MAX_BELONG; - -explain (analyze on, detail on, costs off) -SELECT Party_Id, Zone_Num, Asset_Max_Belong_Org_Num FROM(SELECT - T1.Party_Id - ,T1.Zone_Num - ,T1.Asset_Max_Belong_Org_Num - ,ROW_NUMBER() OVER(PARTITION BY T1.Party_Id) AS QUA_ROW_NUM_1 -FROM TMP_CUST_ASSET_SUM_1 T1 group by 1,2,3 -)AA WHERE QUA_ROW_NUM_1 <= 1 -; \ No newline at end of file