Search Postgresql Archives

Re: overloading LIKE operator to handle integer + text

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: pgsql-general-owner@xxxxxxxxxxxxxx [mailto:pgsql-general-
> owner@xxxxxxxxxxxxxx] On Behalf Of Thalis Kalfigkopoulos
> Sent: Tuesday, October 30, 2012 3:55 PM
> To: pgsql-general@xxxxxxxxxxxxxx
> Subject:  overloading LIKE operator to handle integer + text
> 
> Hi all,
> 
> I'd like to be able to operate LIKE using as arguments an integer and a
text
> value.
> 
> In postgresql 9.0 the following raises an error:
> # SELECT 123 LIKE '123';
> ERROR:  operator does not exist: integer ~~ unknown
> LINE 1: select 123 like '123';                   ^
> HINT:  No operator matches the given name and argument type(s). You
> might need to add explicit type casts.
> 
> This can be easily solved as the HINT suggests as:
> # SELECT 123::text LIKE '123';
> 
> But I cannot touch the SQL queries generated by the application, which
> generates queries like:
> SELECT * from tabname WHERE "id" LIKE '%34%';
> 
> Thus I thought I might overload the LIKE operator to be able to handle the
> case where args are integer and text.
> 
> So I create a function:
> CREATE OR REPLACE FUNCTION public.my_like(leftop integer, rightop text)
> RETURNS boolean  LANGUAGE sql AS $function$ SELECT $1::text LIKE $2;
> $function$
> 
> But then I can't create the operator:
> #  CREATE OPERATOR "LIKE" (LEFTARG=integer, RIGHTARG=text,
> PROCEDURE=my_like);
> ERROR:  syntax error at or near "("
> LINE 1: CREATE OPERATOR "LIKE" (LEFTARG=integer, RIGHTARG=text,
> PROC...
> 
> Any ideas what I'm missing? The doc's examples have a "(".
> 
> TIA,
> Thalis K.
> 

"LIKE" is apparently not an operator but a special SQL construct.  However,
from the error message it appears that internally LIKE is transformed to the
~~ operator (which is defined as being equivalent).  You should try
overloading the ~~ operator (and probably the NOT version equivalents - see
section 9.7.1 in the PostgreSQL 9.2 documentation)  and see if that works.

David J.




-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux