Re: [HACKERS] ERROR: operator does not exist: integer !=- integer
I get it. scan.l converts '!=' to '<>': 644 /* Convert "!=" operator to "<>" for compatibility */ 645 if (strcmp(yytext, "!=") == 0) 646 yylval.str = pstrdup("<>"); 647 else 648 yylval.str = pstrdup(yytext); ""Joshua D. Drake"" <[EMAIL PROTECTED]> > > Well yes it will work if you add a space, but technically the problem is > the query should be written like this: > > 1 <>-1 or 1 <> -1 > > Joshua D. Drake ---(end of broadcast)--- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly
Re: [HACKERS] ERROR: operator does not exist: integer !=- integer
I missed the first post and can't seem to search for it - so correct me if I am missing something. Isn't the problem here a missing space? != is a valid operator and -1 is the value you are comparing to. !=-1 is not valid but != -1 is correct and what I assume you are looking to achieve. Well yes it will work if you add a space, but technically the problem is the query should be written like this: 1 <>-1 or 1 <> -1 Joshua D. Drake The negation operator goes with the int being negated and is not part of the comparison operator != the space is needed there to separate the two. ---(end of broadcast)--- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate
Re: [HACKERS] ERROR: operator does not exist: integer !=- integer
"William ZHANG" <[EMAIL PROTECTED]> writes: > backend> select -1 !=-1; > ERROR: operator does not exist: integer !=- integer at character 11 This is not a bug. regards, tom lane ---(end of broadcast)--- TIP 6: explain analyze is your friend
[HACKERS] ERROR: operator does not exist: integer !=- integer
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
Re: [HACKERS] ERROR: operator does not exist: integer !=- integer
Andrew - Supernews wrote: On 2007-03-04, William ZHANG <[EMAIL PROTECTED]> wrote: Here is the steps to reproduce it in CVS HEAD: backend> select -1 !=-1; This arguably isn't a bug, because != is not a standard SQL operator, and therefore !=- can legitimately be defined as a single operator by the user. I missed the first post and can't seem to search for it - so correct me if I am missing something. Isn't the problem here a missing space? != is a valid operator and -1 is the value you are comparing to. !=-1 is not valid but != -1 is correct and what I assume you are looking to achieve. The negation operator goes with the int being negated and is not part of the comparison operator != the space is needed there to separate the two. -- Shane Ambler [EMAIL PROTECTED] Get Sheeky @ http://Sheeky.Biz ---(end of broadcast)--- TIP 2: Don't 'kill -9' the postmaster
Re: [HACKERS] ERROR: operator does not exist: integer !=- integer
On 2007-03-04, William ZHANG <[EMAIL PROTECTED]> wrote: > Here is the steps to reproduce it in CVS HEAD: > backend> select -1 !=-1; This arguably isn't a bug, because != is not a standard SQL operator, and therefore !=- can legitimately be defined as a single operator by the user. -- Andrew, Supernews http://www.supernews.com - individual and corporate NNTP services ---(end of broadcast)--- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly