Re: [HACKERS] ERROR: operator does not exist: integer !=- integer

2007-03-06 Thread William ZHANG
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

2007-03-04 Thread Joshua D. Drake


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

2007-03-04 Thread Tom Lane
"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

2007-03-04 Thread William ZHANG
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

2007-03-04 Thread Shane Ambler

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

2007-03-04 Thread Andrew - Supernews
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