mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
Fix broken ruleutils support for function TRANSFORM clauses.
I chanced to notice that this dumped core due to a faulty Assert. To add insult to injury, the output has been misformatted since v11. Obviously we need some regression testing here. Discussion: https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com
This commit is contained in:
parent
9b1f8af47e
commit
41309f716e
@ -53,19 +53,29 @@ SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
|
||||
(1 row)
|
||||
|
||||
-- test python -> hstore
|
||||
CREATE FUNCTION test2() RETURNS hstore
|
||||
CREATE FUNCTION test2(a int, b text) RETURNS hstore
|
||||
LANGUAGE plpythonu
|
||||
TRANSFORM FOR TYPE hstore
|
||||
AS $$
|
||||
val = {'a': 1, 'b': 'boo', 'c': None}
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$$;
|
||||
SELECT test2();
|
||||
SELECT test2(1, 'boo');
|
||||
test2
|
||||
---------------------------------
|
||||
"a"=>"1", "b"=>"boo", "c"=>NULL
|
||||
(1 row)
|
||||
|
||||
--- test ruleutils
|
||||
\sf test2
|
||||
CREATE OR REPLACE FUNCTION public.test2(a integer, b text)
|
||||
RETURNS hstore
|
||||
TRANSFORM FOR TYPE hstore
|
||||
LANGUAGE plpythonu
|
||||
AS $function$
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$function$
|
||||
-- test python -> hstore[]
|
||||
CREATE FUNCTION test2arr() RETURNS hstore[]
|
||||
LANGUAGE plpythonu
|
||||
|
@ -45,15 +45,18 @@ SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
|
||||
|
||||
|
||||
-- test python -> hstore
|
||||
CREATE FUNCTION test2() RETURNS hstore
|
||||
CREATE FUNCTION test2(a int, b text) RETURNS hstore
|
||||
LANGUAGE plpythonu
|
||||
TRANSFORM FOR TYPE hstore
|
||||
AS $$
|
||||
val = {'a': 1, 'b': 'boo', 'c': None}
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$$;
|
||||
|
||||
SELECT test2();
|
||||
SELECT test2(1, 'boo');
|
||||
|
||||
--- test ruleutils
|
||||
\sf test2
|
||||
|
||||
|
||||
-- test python -> hstore[]
|
||||
|
@ -935,7 +935,9 @@ get_func_arg_info(HeapTuple procTup,
|
||||
/*
|
||||
* get_func_trftypes
|
||||
*
|
||||
* Returns the number of transformed types used by function.
|
||||
* Returns the number of transformed types used by the function.
|
||||
* If there are any, a palloc'd array of the type OIDs is returned
|
||||
* into *p_trftypes.
|
||||
*/
|
||||
int
|
||||
get_func_trftypes(HeapTuple procTup,
|
||||
@ -964,7 +966,6 @@ get_func_trftypes(HeapTuple procTup,
|
||||
ARR_HASNULL(arr) ||
|
||||
ARR_ELEMTYPE(arr) != OIDOID)
|
||||
elog(ERROR, "protrftypes is not a 1-D Oid array");
|
||||
Assert(nelems >= ((Form_pg_proc) GETSTRUCT(procTup))->pronargs);
|
||||
*p_trftypes = (Oid *) palloc(nelems * sizeof(Oid));
|
||||
memcpy(*p_trftypes, ARR_DATA_PTR(arr),
|
||||
nelems * sizeof(Oid));
|
||||
|
Loading…
Reference in New Issue
Block a user