Thread: error messages VERY misleading...!

error messages VERY misleading...!

From
will trillich
Date:
with postgresql 7.0.3 (debian/potato)--

<bitchmode attitude=on volume=really-loud>

CREATE DATABASE testorama;

\c testorama

CREATE FUNCTION int(float8) RETURNS int4 AS '
    SELECT to_number(to_char( $1 , ''9999999999'') , ''9999999999'')::int4;
' LANGUAGE 'sql';

CREATE FUNCTION showage(datetime) RETURNS varchar AS '
DECLARE
    val int4;
BEGIN
    -- minutes
    val := int( date_part(''epoch'',current_timestamp - $1) / 60 ) ;
    IF val < 60 THEN
        val := val / 5; -- round down to 5-minute chunks
        IF val < 1
            val := 1;
        END IF;
        return (val * 5) || '' min'';
    END IF;
    -- other time chunks follow
END;
' LANGUAGE 'plpgsql';


    do you see the problem? i sure didn't, not for SEVEN HOURS
    (thankyouverymuch). here's why:


psql=> SELECT showage( CURRENT_TIMESTAMP );
ERROR:  parser: parse error at or near "$2"


now WHO in their right mind would expect anyone to interpret
'parse error at $2' as '"IF" needs a "THEN", bubba; where's the
"THEN", hmm?'?

what $2? there's barely a $1! $2? WTF?

AAUGH!

</bitchmode>

now, i know parsing for compilers/interpreters is a daunting
task, and meaningful error messages aren't easy to generate...
in postgresql plpgperl, you're lucky to get a relative line
number. but i gotta admit, 'near $2' takes the cake! WOW.

--
will@serensoft.com
http://newbieDoc.sourceforge.net/ -- we need your brain!
http://www.dontUthink.com/ -- your brain needs us!

Re: error messages VERY misleading...!

From
Stephan Szabo
Date:
On Wed, 21 Mar 2001, will trillich wrote:

> DECLARE
>     val int4;
> BEGIN
>     -- minutes
>     val := int( date_part(''epoch'',current_timestamp - $1) / 60 ) ;
>     IF val < 60 THEN
>         val := val / 5; -- round down to 5-minute chunks
>         IF val < 1
>             val := 1;
>         END IF;
>         return (val * 5) || '' min'';
>     END IF;
>     -- other time chunks follow
> END;
> ' LANGUAGE 'plpgsql';
>
>
>     do you see the problem? i sure didn't, not for SEVEN HOURS
>     (thankyouverymuch). here's why:
>
>
> psql=> SELECT showage( CURRENT_TIMESTAMP );
> ERROR:  parser: parse error at or near "$2"
>
>
> now WHO in their right mind would expect anyone to interpret
> 'parse error at $2' as '"IF" needs a "THEN", bubba; where's the
> "THEN", hmm?'?
>
> what $2? there's barely a $1! $2? WTF?
>
> AAUGH!
>
> </bitchmode>
>
> now, i know parsing for compilers/interpreters is a daunting
> task, and meaningful error messages aren't easy to generate...
> in postgresql plpgperl, you're lucky to get a relative line
> number. but i gotta admit, 'near $2' takes the cake! WOW.

My guess is that the variables are treated as $ things
($1 in this case is your argument, $2 == val)

So it's complaining at the val:=1 line.

Yeah, those messages could use help.


Re: error messages VERY misleading...!

From
will trillich
Date:
On Wed, Mar 21, 2001 at 06:46:44AM -0800, Stephan Szabo wrote:
>
> On Wed, 21 Mar 2001, will trillich wrote:
>
> > DECLARE
> >     val int4;
> > BEGIN
> >     -- minutes
> >     val := int( date_part(''epoch'',current_timestamp - $1) / 60 ) ;
> >     IF val < 60 THEN
> >         val := val / 5; -- round down to 5-minute chunks
> >         IF val < 1
> >             val := 1;
> >         END IF;
> >         return (val * 5) || '' min'';
> >     END IF;
> >     -- other time chunks follow
> > END;
> > ' LANGUAGE 'plpgsql';
> >
> >
> >     do you see the problem? i sure didn't, not for SEVEN HOURS
> >     (thankyouverymuch). here's why:
> >
> >
> > psql=> SELECT showage( CURRENT_TIMESTAMP );
> > ERROR:  parser: parse error at or near "$2"
>
> My guess is that the variables are treated as $ things
> ($1 in this case is your argument, $2 == val)
>
> So it's complaining at the val:=1 line.
>
> Yeah, those messages could use help.

they need an industrial crane, lemme tellya.

even a line number or a snapshot from context would be nice:

    ERROR:  parser: parse error at or near "$2" in line 9 of 'proc'
    ERROR:  parser: parse error at or near "$2" in "val := 1;"

ah well.

--
It is always hazardous to ask "Why?" in science, but it is often
interesting to do so just the same.
        -- Isaac Asimov, 'The Genetic Code'

will@serensoft.com
http://newbieDoc.sourceforge.net/ -- we need your brain!
http://www.dontUthink.com/ -- your brain needs us!