7.0beta bug (or feature)? - Mailing list pgsql-sql

From Kyle Bateman
Subject 7.0beta bug (or feature)?
Date
Msg-id 38C0022D.B30A7536@actarg.com
Whole thread Raw
Responses Casts in 7.0 vs 6.5 (was Re: [SQL] 7.0beta bug (or feature)?)
List pgsql-sql
This function would load OK in 6.5 but doesn't work in 7.0beta1:

The problem is in the very last function definition  where date_week is defined with a date argument.  It simply calls the date_week function that has a text argument, but apparently, the parser does not recognize the fact that a cast is present and tries to look for an existing function date_week(date) instead of date_week(text).

It looks like either there is a problem in the parser with casting, or there is a new way of doing things I should adapt to.  Anyone know which it is?

Here is the error message:
ERROR:  No such function 'date_week' with the specified attributes
 

Here is the SQL to recreate the problem:

-- Define PLPSQL Language ********************************
drop function plpgsql_call_handler ();
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
        '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';

-- This creates the plpgsql language
drop PROCEDURAL LANGUAGE 'plpgsql';
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
        HANDLER plpgsql_call_handler
        LANCOMPILER 'PL/pgSQL';

-- Define PLTCL Language *********************************
drop function pltcl_call_handler ();
CREATE FUNCTION pltcl_call_handler () RETURNS OPAQUE AS
        '/usr/local/pgsql/lib/pltcl.so' LANGUAGE 'C';

-- This creates the plpgsql language
drop PROCEDURAL LANGUAGE 'pltcl';
CREATE TRUSTED PROCEDURAL LANGUAGE 'pltcl'
        HANDLER pltcl_call_handler
        LANCOMPILER 'PL/TCL';

-- Convert date in 1999-01-15 format to the month of the year (1999,35)
-- calling sequence: date_week(ISO_date)
drop function date_week(text);
create function date_week(text) returns text as '
        set spl [split $1 {-/. }]
        set year [lindex $spl 0]
        set month [string trimleft [lindex $spl 1] 0]
        set day [lindex $spl 2]
        if {$month > 0 && $month <= 31} {
            set secs [clock scan "$month/$day/$year"]
        } else {
            set secs [clock scan "$month $day, $year"]
        }
        set week [clock format $secs -format "%U"]
        if {$week == 0} {
            return "[expr $year - 1]-52"
        }
        return "$year-$week"
        ' LANGUAGE 'pltcl';

drop function date_week(date);
create function date_week(date) returns text as '
        select date_week($1::text);
        ' LANGUAGE 'sql';
 
 
 

Attachment

pgsql-sql by date:

Previous
From: "Emils Klotins"
Date:
Subject: Re: [SQL] date_part - multiple values in format?
Next
From: Kyle Bateman
Date:
Subject: Strange error message with 7.0beta1