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