ERROR: invalid input syntax for type integer: "abc"
CONTEXT: while creating return value
PL/Python function "test_type_conversion_array_mixed2"
+CREATE FUNCTION test_type_conversion_array_mixed3() RETURNS text[] AS $$
+return [[], 'a']
+$$ LANGUAGE plpython3u;
+SELECT * FROM test_type_conversion_array_mixed3();
+ test_type_conversion_array_mixed3
+-----------------------------------
+ {[],a}
+(1 row)
+
CREATE FUNCTION test_type_conversion_mdarray_malformed() RETURNS int[] AS $$
return [[1,2,3],[4,5]]
$$ LANGUAGE plpython3u;
int i;
Datum *elems;
bool *nulls;
- int64 len;
+ int len;
int ndim;
int dims[MAXDIM];
int lbs[MAXDIM];
* Determine the number of dimensions, and their sizes.
*/
ndim = 0;
- len = 1;
Py_INCREF(plrv);
if (dims[ndim] < 0)
PLy_elog(ERROR, "could not determine sequence length for function return value");
- if (dims[ndim] > MaxAllocSize)
- ereport(ERROR,
- (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
- errmsg("array size exceeds the maximum allowed")));
-
- len *= dims[ndim];
- if (len > MaxAllocSize)
- ereport(ERROR,
- (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
- errmsg("array size exceeds the maximum allowed")));
-
if (dims[ndim] == 0)
{
/* empty sequence */
errmsg("return value of function with array return type is not a Python sequence")));
ndim = 1;
- len = dims[0] = PySequence_Length(plrv);
+ dims[0] = PySequence_Length(plrv);
}
+ /* Allocate space for work arrays, after detecting array size overflow */
+ len = ArrayGetNItems(ndim, dims);
+ elems = palloc(sizeof(Datum) * len);
+ nulls = palloc(sizeof(bool) * len);
+
/*
* Traverse the Python lists, in depth-first order, and collect all the
* elements at the bottom level into 'elems'/'nulls' arrays.
*/
- elems = palloc(sizeof(Datum) * len);
- nulls = palloc(sizeof(bool) * len);
currelem = 0;
PLySequence_ToArray_recurse(arg->u.array.elm, plrv,
dims, ndim, 0,
SELECT * FROM test_type_conversion_array_mixed2();
+CREATE FUNCTION test_type_conversion_array_mixed3() RETURNS text[] AS $$
+return [[], 'a']
+$$ LANGUAGE plpython3u;
+
+SELECT * FROM test_type_conversion_array_mixed3();
+
+
CREATE FUNCTION test_type_conversion_mdarray_malformed() RETURNS int[] AS $$
return [[1,2,3],[4,5]]
$$ LANGUAGE plpython3u;