Index: openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql 23 Mar 2001 00:21:50 -0000 1.4 +++ openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql 27 Mar 2001 05:20:38 -0000 1.5 @@ -123,7 +123,105 @@ end;' language 'plpgsql'; +create function number_src(text) returns text as ' +declare + v_src alias for $1; + v_pos integer; + v_ret text default ''''; + v_tmp text; + v_cnt integer default -1; +begin + v_tmp := v_src; + LOOP + v_pos := position(''\n'' in v_tmp); + v_cnt := v_cnt + 1; + exit when v_pos = 0; + + if v_cnt != 0 then + v_ret := v_ret || rpad(v_cnt,10) || substr(v_tmp,1,v_pos); + end if; + v_tmp := substr(v_tmp,v_pos + 1); + end LOOP; + + return v_ret || rpad(v_cnt,10) || v_tmp; + +end;' language 'plpgsql'; + +create function get_func_definition (varchar,oidvector) returns text as ' +declare + fname alias for $1; + args alias for $2; + nargs integer default 0; + v_pos integer; + v_funcdef text default ''''; + v_args varchar; + v_one_arg varchar; + v_one_type varchar; + v_nargs integer; + v_src text; + v_rettype varchar; +begin + select proargtypes, pronargs, number_src(prosrc), + (select typname from pg_type where oid = p.prorettype) + into v_args, v_nargs, v_src, v_rettype + from pg_proc p + where proname = fname::name + and proargtypes = args; + + v_funcdef := v_funcdef || '' +create function '' || fname || ''(''; + + v_pos := position('' '' in v_args); + + while nargs < v_nargs loop + nargs := nargs + 1; + if nargs = v_nargs then + v_one_arg := v_args; + v_args := ''''; + else + v_one_arg := substr(v_args, 1, v_pos \- 1); + v_args := substr(v_args, v_pos + 1); + v_pos := position('' '' in v_args); + end if; + select case when nargs = 1 + then typname + else '','' || typname + end into v_one_type + from pg_type + where oid = v_one_arg; + v_funcdef := v_funcdef || v_one_type; + end loop; + v_funcdef := v_funcdef || '') returns '' || v_rettype || '' as \\\'\\n'' || v_src || ''\\\' language \\\'plpgsql\\\';''; + + return v_funcdef; + +end;' language 'plpgsql'; + +create function get_func_header(varchar,oidvector) returns text as ' +declare + fname alias for $1; + args alias for $2; + v_src text; + pos integer; +begin + v_src := get_func_definition(fname,args); + pos := position(''begin'' in lower(v_src)); + + return substr(v_src, 1, pos + 4); + +end;' language 'plpgsql'; + +create view acs_func_defs as +select get_func_definition(proname,proargtypes) as definition, + proname as fname + from pg_proc; + +create view acs_func_headers as +select get_func_header(proname,proargtypes) as definition, + proname as fname + from pg_proc; + -- tree query support, m-vgID method. CREATE TABLE tree_encodings (