Number of dimensions of an array parameter
От | Thomas Hallgren |
---|---|
Тема | Number of dimensions of an array parameter |
Дата | |
Msg-id | 445F72F4.5050906@tada.se обсуждение исходный текст |
Ответы |
Re: Number of dimensions of an array parameter
Re: Number of dimensions of an array parameter Re: Number of dimensions of an array parameter |
Список | pgsql-hackers |
I can create a function that takes a two dimension int array: CREATE FUNCTION twodims(int[][]) RETURNS void AS ... but there's nothing stopping me from calling this function with an arbitrary number of dimensions on the array. I'd like to map a parameter like the one above to a corresponding representation in Java (it would be int[][] there too). As it turns out, I can't do that. PostgreSQL will not store any information that can tell me how many dimensions that where used in the declaration, i.e. it's impossible to write a language VALIDATOR that, based on the information in pg_proc, builds a signature where the number of dimensions is reflected. This leaves me with two choices: Only allow arrays with one dimension unless the parameter is of a domain type (domains are apparently stored with the actual number of dimensions). Any call that uses an array parameter with more then one dimension will yield an exception. --OR-- Always map to Object[] instead of mapping to the correct type, . This will work since an array in Java is also an Object and all primitive types can be represented as objects (i.e. int can be a java.lang.Integer). The strong typing and the ability to use primitives are lost however. I'm leaning towards #1 and hoping that PostgreSQL will enhance the parameter type declarations to include the dimensions in future releases. ... After some more testing ... Unfortunately, I run into problems even when I use domains. Consider the following: thhal=# CREATE DOMAIN twodims as int[][]; CREATE DOMAIN thhal=# SELECT typndims FROM pg_type WHERE typname = 'twodims';typndims ---------- 2 (1 row) thhal=# SELECT array_dims('{{{1,2,3},{3,4,3}},{{5,3,2},{9,9,9}}}'::twodims); array_dims -----------------[1:2][1:2][1:3] (1 row) IMO, there is something seriously wrong here. Clearly the number of dimensions is a property of the type. Any array with a different number of dimensions should yield an error or at least be coerced into the right number of dimensions. Kind Regards, Thomas Hallgren
В списке pgsql-hackers по дате отправления: