From c9aafc323643bcb2a55b99494e43eb5570c023c8 Mon Sep 17 00:00:00 2001 From: Martin Butter Date: Thu, 4 Jun 2026 13:17:27 +0200 Subject: [PATCH] Put type modifier between parentheses and quotes The type modifier (if any) for a collection or icollection is specified as the text representation of a data type, like: collection('text') But when displaying the type, it showed as collectiontext instead of collection('text'). --- Makefile | 2 +- src/collection_common.c | 8 +++++++- test/expected/typemod.out | 18 ++++++++++++++++++ test/sql/typemod.sql | 9 +++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 test/expected/typemod.out create mode 100644 test/sql/typemod.sql diff --git a/Makefile b/Makefile index c605ef2..6de4695 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ OBJS = src/collection.o \ src/icollection_subs.o \ src/icollection_parse.o -REGRESS = basics subscript iteration srf persistence inout_params mixed_types stress edge_cases array_interop +REGRESS = basics subscript iteration srf persistence inout_params mixed_types stress edge_cases array_interop typemod REGRESS_OPTS = --inputdir=test --outputdir=test --load-extension=collection EXTRA_CLEAN = test/results/ test/regression.diffs test/regression.out \ diff --git a/src/collection_common.c b/src/collection_common.c index 439525d..f070d01 100644 --- a/src/collection_common.c +++ b/src/collection_common.c @@ -104,7 +104,13 @@ collection_typmodin_common(ArrayType *ta, const char *type_name) char * collection_typmodout_common(Oid typmod) { - return DatumGetCString(DirectFunctionCall1(regtypeout, typmod)); + char *typeName; + char *res; + + typeName = DatumGetCString(DirectFunctionCall1(regtypeout, typmod)); + res = (char*)palloc(strlen(typeName) + 5); + sprintf(res, "('%s')", typeName); + return res; } /* diff --git a/test/expected/typemod.out b/test/expected/typemod.out new file mode 100644 index 0000000..60a25c3 --- /dev/null +++ b/test/expected/typemod.out @@ -0,0 +1,18 @@ +create schema typemodtest; +create type typemodtest.my_rec as ( + coll_no_typemod collection, + coll_typemod_int collection('int'), + icoll_no_typemod icollection, + icollection_typemod_varchar icollection('varchar') +); +\d typemodtest.my_rec + Composite type "typemodtest.my_rec" + Column | Type | Collation | Nullable | Default +-----------------------------+----------------------------------+-----------+----------+--------- + coll_no_typemod | collection | | | + coll_typemod_int | collection('integer') | | | + icoll_no_typemod | icollection | | | + icollection_typemod_varchar | icollection('character varying') | | | + +drop schema typemodtest cascade; +NOTICE: drop cascades to type typemodtest.my_rec diff --git a/test/sql/typemod.sql b/test/sql/typemod.sql new file mode 100644 index 0000000..bfd25b7 --- /dev/null +++ b/test/sql/typemod.sql @@ -0,0 +1,9 @@ +create schema typemodtest; +create type typemodtest.my_rec as ( + coll_no_typemod collection, + coll_typemod_int collection('int'), + icoll_no_typemod icollection, + icollection_typemod_varchar icollection('varchar') +); +\d typemodtest.my_rec +drop schema typemodtest cascade; \ No newline at end of file