ERROR: operator does not exist: integer !=- integer - Mailing list pgsql-hackers

From William ZHANG
Subject ERROR: operator does not exist: integer !=- integer
Date
Msg-id esdf74$6rn$1@news.hub.org
Whole thread Raw
Responses Re: ERROR: operator does not exist: integer !=- integer  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Here is the steps to reproduce it in CVS HEAD:

$ uname -a
Linux os-server 2.6.9-11.19AX #1 Fri Aug 5 05:12:07 EDT 2005 i686 i686 i386 
GNU/Linux

$ ./postgres --single -D $HOME/pgsql/data postgres

PostgreSQL stand-alone backend 8.3devel
backend> show server_version;        1: server_version      (typeid = 25, len = -1, typmod = -1, byval = 
f)       ----        1: server_version = "8.3devel" (typeid = 25, len = -1, typmod = -1, 
byval = f)       ----
backend> select -1 != -1;        1: ?column?    (typeid = 16, len = 1, typmod = -1, byval = t)       ----        1:
?column?= "f"      (typeid = 16, len = 1, typmod = -1, byval = 
 
t)       ----
backend> select -1 !=-1;
ERROR:  operator does not exist: integer !=- integer at character 11
HINT:  No operator matches the given name and argument type(s). You might 
need to add explicit type casts.
STATEMENT:  select -1 !=-1;

A quick hack in scan.l :

*** src/backend/parser/scan.l.old       2007-03-04 11:39:56.831289992 +0800
--- src/backend/parser/scan.l   2007-03-04 11:40:04.142178568 +0800
***************
*** 605,610 ****
--- 605,617 ----                                       {                                               int
ic;

+                                               /* filter out operaters end 
with '=' */
+                                               if (yytext[nchars - 2] == 
'=')
+                                               {
+                                                       nchars--;
+                                                       continue;
+                                               }
+                                               for (ic = nchars-2; ic >= 0; 
ic--)                                               {                                                       if 
(strchr("~!@#^&|`?%", yytext[ic]))

Now the result is correct:

backend> select -1 !=-1;        1: ?column?    (typeid = 16, len = 1, typmod = -1, byval = t)       ----        1:
?column?= "f"      (typeid = 16, len = 1, typmod = -1, byval = 
 
t)       ----
--
Regards,
William ZHANG




pgsql-hackers by date:

Previous
From: Ryan Cumming
Date:
Subject: Trivial HugeTLB Benchmark
Next
From: Tom Lane
Date:
Subject: Re: ERROR: operator does not exist: integer !=- integer