Re: || operator - Mailing list pgsql-general

From Szymon Guz
Subject Re: || operator
Date
Msg-id CAFjNrYuJfNYKWiupFgy7ZwfYpnzY1-P0sRQwbmD6ASk5RJoVZw@mail.gmail.com
Whole thread Raw
In response to Re: || operator  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: || operator
Re: || operator
List pgsql-general



On 3 September 2014 15:20, Pavel Stehule <pavel.stehule@gmail.com> wrote:
Hi

you can define || operator for char(N) type

postgres=# select oprname, oprleft::regtype, oprright::regtype from pg_operator where oprname = '||'
;
 oprname |   oprleft   |  oprright  
---------+-------------+-------------
 ||      | bytea       | bytea
 ||      | text        | text
 ||      | text        | anynonarray
 ||      | bit varying | bit varying
 ||      | anyarray    | anyarray
 ||      | anyarray    | anyelement
 ||      | anyelement  | anyarray
 ||      | anynonarray | text
 ||      | tsvector    | tsvector
 ||      | tsquery     | tsquery
(10 rows)


it is defined only for text, and value char(n) is reduced when it is converted probably

postgres=# create or replace function concat_character(character, character) returns text as $$ select concat($1,$1)$$ language sql;
CREATE FUNCTION

postgres=# create operator || (procedure = concat_character, leftarg = character, rightarg = character);
CREATE OPERATOR
postgres=# select 'abc   '::char(7) || 'dbe   '::char(6);
    ?column?   
----------------
 abc    abc   
(1 row)

concat is variadic "any" function, so implicit casting character(n) -> text is not used there


Pavel



Hi Pavel,
I think we should have this in core, as this definitely is a bug.

Szymon

pgsql-general by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: || operator
Next
From: Pavel Stehule
Date:
Subject: Re: || operator