Обсуждение: array constructor can't construct empty array

Поиск
Список
Период
Сортировка

array constructor can't construct empty array

От
Pavel Stehule
Дата:
Hello

I have function 

CREATE FUNCTION foo(date, date, INTEGER[]) RETURNS INTEGER 

Array and array's functions works fine, but I need call this function 
with empty array. I can't use array constructor for empty array. When 
I call function foo with e.a. ,I get syntax error. I can call with '{}'.

What is coorect style?

Thank You 
Pavel Stehule







Re: array constructor can't construct empty array

От
Bruce Momjian
Дата:
Pavel Stehule wrote:
> Hello
> 
> I have function 
> 
> CREATE FUNCTION foo(date, date, INTEGER[]) RETURNS INTEGER 
> 
> Array and array's functions works fine, but I need call this function 
> with empty array. I can't use array constructor for empty array. When 
> I call function foo with e.a. ,I get syntax error. I can call with '{}'.

Are you running 7.4beta?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


Re: array constructor can't construct empty array

От
Pavel Stehule
Дата:
On Mon, 1 Sep 2003, Bruce Momjian wrote:

> Pavel Stehule wrote:
> > Hello
> > 
> > I have function 
> > 
> > CREATE FUNCTION foo(date, date, INTEGER[]) RETURNS INTEGER 
> > 
> > Array and array's functions works fine, but I need call this function 
> > with empty array. I can't use array constructor for empty array. When 
> > I call function foo with e.a. ,I get syntax error. I can call with '{}'.
> 
> Are you running 7.4beta?
> 
I am sorry, yes, of course :->,
testdb=> SELECT version();                                 version
---------------------------------------------------------------------------PostgreSQL 7.4beta1 on i586-pc-linux-gnu,
compiledby GCC gcc (GCC) 3.2.2
 
(1 řádka)


> 



Re: array constructor can't construct empty array

От
jconway
Дата:
Pavel Stehule wrote:
>>>CREATE FUNCTION foo(date, date, INTEGER[]) RETURNS INTEGER 
>>>
>>>Array and array's functions works fine, but I need call this function 
>>>with empty array. I can't use array constructor for empty array. When 
>>>I call function foo with e.a. ,I get syntax error. I can call with '{}'.
>>
>>Are you running 7.4beta?
>>
> 
> I am sorry, yes, of course :->,
> testdb=> SELECT version();
>                                   version
> ---------------------------------------------------------------------------
>  PostgreSQL 7.4beta1 on i586-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2.2

You haven't shown us your function or how you're trying to call it. In
any case, works here:

regression=# CREATE FUNCTION foo(INTEGER[], INTEGER) RETURNS INTEGER AS
'select ss.f[1] from (select $1 || $2 as f) as ss' language sql;
CREATE FUNCTION
regression=# select foo('{}'::int4[], 3);  foo
-----    3
(1 row)

Joe





Re: array constructor can't construct empty array

От
Tom Lane
Дата:
Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:
> Array and array's functions works fine, but I need call this function 
> with empty array. I can't use array constructor for empty array.

Yeah.  We have not figured out how to assign a type to "ARRAY[]".
You can do something like '{}'::integer[], however.
        regards, tom lane


Re: array constructor can't construct empty array

От
Pavel Stehule
Дата:
On Mon, 1 Sep 2003, jconway wrote:

> 
> You haven't shown us your function or how you're trying to call it. In
> any case, works here:
> 
> regression=# CREATE FUNCTION foo(INTEGER[], INTEGER) RETURNS INTEGER AS
> 'select ss.f[1] from (select $1 || $2 as f) as ss' language sql;
> CREATE FUNCTION
> regression=# select foo('{}'::int4[], 3);
>    foo
> -----
>      3
> (1 row)
> 
> Joe

I didn't show my function, because this function is unimportant. Header of 
my function was important. My question was about using array constructor 
ARRAY. Is possible construct empty array via this constructor? . For 
example

I can select foo('{}'::int4[]) -- ok select foo('{}')         -- ok too
but select foo(array[])      -- syntax error, 

my function can by like

Function FirstDay(date, integer[]) returns date as '
declare s;
begin s := $1; loop   if extract(dow from s) = ANY($2) then     s := s + 1;   else     return s;   end if end loop
end' language plpgsq;

Sometime I need call this function with empty array. That is all.

Regards
Pavel Stehule




Re: array constructor can't construct empty array

От
Joe Conway
Дата:
> I can
>   select foo('{}'::int4[]) -- ok
>   select foo('{}')         -- ok too
> but
>   select foo(array[])      -- syntax error, 
> 
> my function can by like

Correct -- you cannot use the ARRAY constructor empty. If you need an 
empty array, use '{}'. Search the archives for previous discussions on 
this topic during the June/July timeframe. This might change for 7.5, 
but don't count on it (at least not yet).

Joe