-- added jon@jongriffin.com -- updated 2002-08-17 vinod@kurup.com -- acs-kernel-create.sql \i ../site-node-object-map-create.sql -- acs-objects-create.sql create function acs_object__update_last_modified (integer) returns integer as ' declare acs_object__update_last_modified__object_id alias for $1; begin return acs_object__update_last_modified(acs_object__update_last_modified__object_id, now()); end;' language 'plpgsql'; create function acs_object__update_last_modified (integer, timestamptz) returns integer as ' declare acs_object__update_last_modified__object_id alias for $1; acs_object__update_last_modified__last_modified alias for $2; -- default now() v_parent_id integer; v_last_modified timestamp; begin if acs_object__update_last_modified__last_modified is null then v_last_modified := now(); else v_last_modified := acs_object__update_last_modified__last_modified; end if; update acs_objects set last_modified = v_last_modified where object_id = acs_object__update_last_modified__object_id; select context_id into v_parent_id from acs_objects where object_id = acs_object__update_last_modified__object_id; if v_parent_id is not null and v_parent_id != 0 then perform acs_object__update_last_modified(v_parent_id, v_last_modified); end if; return acs_object__update_last_modified__object_id; end;' language 'plpgsql'; -- apm-create.sql create function apm_package__parent_id (integer) returns integer as ' declare apm_package__parent_id__package_id alias for $1; v_package_id apm_packages.package_id%TYPE; begin select sn1.object_id into v_package_id from site_nodes sn1 where sn1.node_id = (select sn2.parent_id from site_nodes sn2 where sn2.object_id = apm_package__parent_id__package_id); if NOT FOUND then return -1; else return v_package_id; end if; end;' language 'plpgsql'; -- postgresql.sql create function inline_0 () returns integer as ' -- Create a bitfromint4(integer) function if it doesn''t exists. -- Due to a bug in PG 7.3 this function is absent in PG 7.3. declare v_bitfromint4_count integer; begin select into v_bitfromint4_count count(*) from pg_proc where proname = ''bitfromint4''; if v_bitfromint4_count = 0 then create or replace function bitfromint4 (integer) returns bit varying as '' begin return "bit"($1); end;'' language ''plpgsql''; end if; return 1; end;' language 'plpgsql'; select inline_0(); drop function inline_0(); create function inline_1 () returns integer as ' -- Create a bitfromint4(integer) function if it doesn''t exists. -- Due to a bug in PG 7.3 this function is absent in PG 7.3. declare v_bittoint4_count integer; begin select into v_bittoint4_count count(*) from pg_proc where proname = ''bittoint4''; if v_bittoint4_count = 0 then create or replace function bittoint4 (bit varying) returns integer as '' begin return "int4"($1); end;'' language ''plpgsql''; end if; return 1; end;' language 'plpgsql'; select inline_1(); drop function inline_1(); create function tree_increment_key(varbit) returns varbit as ' declare p_child_sort_key alias for $1; v_child_sort_key integer; begin if p_child_sort_key is null then v_child_sort_key := 0; else v_child_sort_key := tree_leaf_key_to_int(p_child_sort_key) + 1; end if; return int_to_tree_key(v_child_sort_key); end;' language 'plpgsql' with(iscachable); -- drop function int_to_tree_key(integer); create function int_to_tree_key(integer) returns varbit as ' -- Convert an integer into the bit string format used to store -- tree sort keys. Using 4 bytes for the long keys requires -- using -2^31 rather than 2^31 to avoid a twos-complement -- "integer out of range" error in PG - if for some reason you -- want to use a smaller value use positive powers of two! -- There was an "out of range" check in here when I was using 15 -- bit long keys but the only check that does anything with the long -- keys is to check for negative numbers. declare p_intkey alias for $1; begin if p_intkey < 0 then raise exception ''int_to_tree_key: key must be a positive integer''; end if; if p_intkey < 128 then return substring(bitfromint4(p_intkey), 25, 8); else return substring(bitfromint4(-2^31 + p_intkey), 1, 32); end if; end;' language 'plpgsql' with (isstrict, iscachable); --- -- vinodk: create_user_col_comments is changed, but only with comments -- also, the function is dropped after it creates the view, so the comments -- persist only in the SQL file --- -- need to drop the view that the function is going to create -- otherwise, we'll get 'relation already exists' errors drop view user_tab_comments; 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'; select create_user_tab_comments(); drop function create_user_tab_comments(); -- rel-constraints-create.sql create function rel_segment__new (varchar,integer,varchar) returns integer as ' declare new__segment_name alias for $1; new__group_id alias for $2; new__rel_type alias for $3; v_segment_id rel_segments.segment_id%TYPE; begin v_segment_id := rel_segment__new(null, ''rel_segment'', now(), null, null, null, null, new__segment_name, new__group\ _id, new__rel_type, null); return v_segment_id; end;' language 'plpgsql'; -- site-nodes-create.sql create index site_nodes_parent_id_idx on site_nodes(parent_id,object_id,node_id); select define_function_args ('site_node__new', 'node_id,parent_id,name,object_id,directory_p,pattern_p,creation_user,cr\ eation_ip'); -- Hope this all works for you!