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("[EMAIL PROTECTED]&|`?%", 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



---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to