ERROR: operator does not exist: integer !=- integer

From: "William ZHANG" <uniware(at)zedware(dot)org>
To: pgsql-hackers(at)postgresql(dot)org
Subject: ERROR: operator does not exist: integer !=- integer
Date: 2007-03-04 03:42:21
Message-ID: esdf74$6rn$1@news.hub.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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("~!(at)#^&|`?%", 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

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2007-03-04 03:57:02 Re: IDENTITY/GENERATED v36 Re: Final version of IDENTITY/GENERATED patch
Previous Message Ryan Cumming 2007-03-04 02:25:02 Trivial HugeTLB Benchmark