Thread: error messages VERY misleading...!
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!
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.
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!