Thread

  1. BUG #2426: perl function that returns setof composite type

    Chana Slutzkin <chana@cs.huji.ac.il> — 2006-05-09T07:52:05Z

    The following bug has been logged online:
    
    Bug reference:      2426
    Logged by:          Chana Slutzkin
    Email address:      chana@cs.huji.ac.il
    PostgreSQL version: 8.1.3
    Operating system:   FreeBSD 6.1
    Description:        perl function that returns setof composite type
    Details: 
    
    The code below works fine on version 8.0.3.
    However, on version 8.1.3, the last query returns
    the following error:
    
    set-valued function called in context that cannot accept a set
    
    Hence there does not seem to be an way to use
    a perl function that returns 'setof composite' 
    on non-constant input.
    
    ------------------------------------------------------
    DROP TABLE num CASCADE;
    CREATE TABLE num (n int);
    COPY num FROM stdin;
    1
    2
    3
    \.
    
    CREATE OR REPLACE FUNCTION sqlget(num) RETURNS SETOF num AS $$
       SELECT $1.n
    $$ LANGUAGE SQL;
    
    CREATE OR REPLACE FUNCTION perlget(num) RETURNS SETOF num AS $$
      return [{n=>$_[0]->{n}}];
    $$ LANGUAGE plperl;
    
    SELECT (sqlget(num.*)).* FROM num;
    SELECT (perlget(num.*)).* FROM num;