Error code missing for "wrong length of inner sequence" error
От | Heikki Linnakangas |
---|---|
Тема | Error code missing for "wrong length of inner sequence" error |
Дата | |
Msg-id | 634ced13-1cc5-6a88-c880-3b1410238450@iki.fi обсуждение исходный текст |
Ответы |
Re: Error code missing for "wrong length of inner sequence" error
|
Список | pgsql-hackers |
In PLySequence_ToArray_recurse(), there's this check: > if (PySequence_Length(list) != dims[dim]) > ereport(ERROR, > (errmsg("wrong length of inner sequence: has length %d, but %d was expected", > (int) PySequence_Length(list), dims[dim]), > (errdetail("To construct a multidimensional array, the inner sequences must all have the same length.")))); It's missing an error code, making it implicitly ERRCODE_INTERNAL_ERROR, which is surely not right. That's simple to fix, but what error code should we use? I'm inclined to use ERRCODE_ARRAY_SUBSCRIPT_ERROR, because that's used in the similar error message with SQL ARRAY expression, like "ARRAY[[1], [2, 3]]". Most checks when converting between SQL and Python types use the PLy_elog() function, which uses the genericc ERRCODE_EXTERNAL_ROUTINE_EXCEPTION error code, but I think ERRCODE_ARRAY_SUBSCRIPT_ERROR is better. You get this error e.g. if you try to return a python lists of lists from a PL/python function as a multi-dimensional array, but the sublists have different lengths: create function return_array() returns int[] as $$ return [[1], [1,2]] $$ language plpythonu; postgres=# select return_array(); ERROR: wrong length of inner sequence: has length 2, but 1 was expected DETAIL: To construct a multidimensional array, the inner sequences must all have the same length. CONTEXT: while creating return value PL/Python function "return_array" Thoughts? If not, I'm going to add errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR) to that. - Heikki
В списке pgsql-hackers по дате отправления: