Index: openacs-4/packages/acs-kernel/acs-kernel.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/acs-kernel.info,v
diff -u -r1.17.2.7 -r1.17.2.8
--- openacs-4/packages/acs-kernel/acs-kernel.info 6 Apr 2003 00:28:24 -0000 1.17.2.7
+++ openacs-4/packages/acs-kernel/acs-kernel.info 21 Apr 2003 01:00:55 -0000 1.17.2.8
@@ -7,7 +7,7 @@
t
t
-
+
Don Baccus
Routines and data models providing the foundation for OpenACS-based Web services.
2002-10-27
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.30.2.1 -r1.30.2.2
--- openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql 21 Jan 2003 13:46:20 -0000 1.30.2.1
+++ openacs-4/packages/acs-kernel/sql/postgresql/postgresql.sql 21 Apr 2003 01:01:55 -0000 1.30.2.2
@@ -629,79 +629,30 @@
return position(p_potential_ancestor in p_potential_child) = 1;
end;' language 'plpgsql' with(iscachable);
-create function create_tree_ancestor_keys() returns boolean as '
+-- PG does not allow recursive SQL functions during CREATE, but you can fool it easily
+-- with CREATE OR REPLACE, a feature added in 7.2.
--- PG 7.1 does not allow recursive SQL functions, but David Walker figured out how to
--- get around this with a truly inspired hack he posted to the OpenACS 4 Design Forum.
-
--- His solution involves a general "create and replace function" function written in
--- Tcl.
-
--- Rather than use the general solution I have just hacked up a PL/pgSQL function to
--- create the one recursive function we need: tree_ancestor_keys(varbit, integer).
-
--- PG 7.2 still does not allow recursive SQL functions during CREATE, but you can
--- fool it easily with CREATE OR REPLACE, a new feature in this version. Perhaps
--- someday the PG development group will see the light and just let us CREATE such
--- functions.
-
-- tree_ancestor_keys(varbit, integer) returns the set of ancestor keys starting at
-- the level passed in as the second parameter down to the key passed in as the first
-- This function should probably only be called from its overloaded cousin
-- tree_ancestor_keys(varbit), which returns the set of tree_sortkeys for all of the
-- ancestors of the given tree_sortkey...
-begin
+create function tree_ancestor_keys(varbit, integer) returns setof varbit as '
+ select $1
+' language 'sql';
- -- create tree_ancestor_keys with a dummy body
+-- The bootstrap installer has made certain that we are running a version >= 7.2 so it is safe
+-- at this point to assume create or replace is supported.
- execute ''create function tree_ancestor_keys(varbit, integer) returns setof varbit as ''''
- select $1
- '''' language ''''sql'''' '';
+create or replace function tree_ancestor_keys(varbit, integer) returns setof varbit as '
+ select tree_ancestor_key($1, $2)
+ union
+ select tree_ancestor_keys($1, $2 + 1)
+ where $2 < tree_level($1)
+' language 'sql' with (isstrict);
- if version() like ''%7.1%'' then
-
- -- create another function with the body we want
-
- execute ''create function __tree_ancestor_keys(varbit, integer) returns setof varbit as ''''
- select tree_ancestor_key($1, $2)
- union
- select tree_ancestor_keys($1, $2 + 1)
- where $2 < tree_level($1)
- '''' language ''''sql'''' with (isstrict) '';
-
- -- replace the body for tree_ancestor_keys with the body we want. Slick, eh?
-
- update pg_proc
- set prosrc = hack.prosrc, probin = hack.probin
- from (select prosrc, probin
- from pg_proc
- where proname = ''__tree_ancestor_keys'') hack
- where proname = ''tree_ancestor_keys'';
-
- execute ''drop function __tree_ancestor_keys(varbit, integer)'';
-
- else
-
- -- The bootstrap installer has made certain that we are running a version >= 7.1 so it is safe
- -- at this point to assume create or replace is supported.
-
- execute ''create or replace function tree_ancestor_keys(varbit, integer) returns setof varbit as ''''
- select tree_ancestor_key($1, $2)
- union
- select tree_ancestor_keys($1, $2 + 1)
- where $2 < tree_level($1)
- '''' language ''''sql'''' with (isstrict) '';
- end if;
-
- return true;
-end;' language 'plpgsql';
-
-select create_tree_ancestor_keys();
-
-drop function create_tree_ancestor_keys();
-
create function tree_ancestor_keys(varbit) returns setof varbit as '
-- Return the set of tree_sortkeys for all of the ancestors of the given
@@ -766,77 +717,26 @@
-- PG substitute for Oracle user_col_comments view
-create function create_user_col_comments() returns boolean as '
-begin
- -- in version 7.1 col_description was missing but is present in 7.2
- -- does it exist in 7.0?
- if version() like ''%7.1%'' then
- execute ''
- create view user_col_comments as
- select upper(c.relname) as table_name,
- upper(a.attname) as column_name,
- d.description as comments
- from pg_class c,
- pg_attribute a
- left outer join pg_description d on (a.oid = d.objoid)
- where c.oid = a.attrelid
- and a.attnum > 0'';
- else
- execute ''
- create view user_col_comments as
- select upper(c.relname) as table_name,
- upper(a.attname) as column_name,
- col_description(a.attrelid, a.attnum) as comments
- from pg_class c
- left join pg_attribute a
- on a.attrelid = c.oid
- where a.attnum > 0'';
- end if;
- return ''t'';
-end;' language 'plpgsql';
+create view user_col_comments as
+ select upper(c.relname) as table_name,
+ upper(a.attname) as column_name,
+ col_description(a.attrelid, a.attnum) as comments
+ from pg_class c left join pg_attribute a on a.attrelid = c.oid
+ where a.attnum > 0;
-select create_user_col_comments();
-
-drop function create_user_col_comments();
-
-- PG substitute for Oracle user_col_comments view
-create function create_user_tab_comments() returns boolean as '
-begin
- if version() like ''%7.2%'' then
- execute ''
- create view user_tab_comments as
- select upper(c.relname) as table_name,
- case
- when c.relkind = ''''r'''' then ''''TABLE''''
- when c.relkind = ''''v'''' then ''''VIEW''''
- else c.relkind::text
- end as table_type,
- d.description as comments
- from pg_class c
- left outer join pg_description d on (c.oid = d.objoid)
- where d.objsubid = 0'';
- else
- execute ''
- create view user_tab_comments as
- select upper(c.relname) as table_name,
- case
- when c.relkind = ''''r'''' then ''''TABLE''''
- when c.relkind = ''''v'''' then ''''VIEW''''
- else c.relkind::text
- end as table_type,
- d.description as comments
- from pg_class c
- left outer join pg_description d on (c.oid = d.objoid)'';
- end if;
- return ''t'';
-end;' language 'plpgsql';
+create view user_tab_comments as
+ select upper(c.relname) as table_name,
+ case
+ when c.relkind = 'r' then 'TABLE'
+ when c.relkind = 'v' then 'VIEW'
+ else c.relkind::text
+ end as table_type,
+ d.description as comments
+ from pg_class c left outer join pg_description d on (c.oid = d.objoid)
+ where d.objsubid = 0;
-select create_user_tab_comments();
-
-drop function create_user_tab_comments();
-
-
-- Table for storing PL/PGSQL function arguments
create table acs_function_args (
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/acs-kernel/sql/postgresql/upgrade/upgrade-4.6.2-4.6.3.sql'.
Fisheye: No comparison available. Pass `N' to diff?