Index: openacs-4/packages/acs-kernel/sql/postgresql/acs-relationships-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/postgresql/acs-relationships-create.sql,v diff -u -r1.32.4.2 -r1.32.4.3 --- openacs-4/packages/acs-kernel/sql/postgresql/acs-relationships-create.sql 1 Jul 2016 08:57:55 -0000 1.32.4.2 +++ openacs-4/packages/acs-kernel/sql/postgresql/acs-relationships-create.sql 31 Aug 2016 18:57:41 -0000 1.32.4.3 @@ -48,6 +48,8 @@ max_n_rels_two integer constraint acs_rel_types_max_n_2_ck check (max_n_rels_two >= 0), + composable_p boolean + default 't' not null, constraint acs_rel_types_n_rels_one_ck check (min_n_rels_one <= max_n_rels_one), constraint acs_rel_types_n_rels_two_ck @@ -59,7 +61,7 @@ create index acs_rel_types_objtypetwo_idx on acs_rel_types (object_type_two); create index acs_rel_types_role_two_idx on acs_rel_types (role_two); -comment on table acs_rel_types is ' +comment on table acs_rel_types is $$ Each row in acs_rel_types represents a type of relationship between objects. For example, the following DML statement: @@ -69,17 +71,17 @@ object_type_one, role_one, min_n_rels_one, max_n_rels_one, object_type_two, role_two, min_n_rels_two, max_n_rels_two) values - (''employment'', - ''person'', ''employee'', 0, null, - ''company'', ''employer'', 0, null) + ('employment', + 'person', 'employee', 0, null, + 'company', 'employer', 0, null) defines an "employment" relationship type that can be expressed in in natural language as:
A person may be the employee of zero or more companies, and a company may be the employer of zero or more people.
-'; +$$; @@ -197,11 +199,39 @@ -- procedure create_type --- added -select define_function_args('acs_rel_type__create_type','rel_type,pretty_name,pretty_plural,supertype;relationship,table_name,id_column,package_name,object_type_one,role_one;null,min_n_rels_one,max_n_rels_one,object_type_two,role_two;null,min_n_rels_two,max_n_rels_two'); +-- procedure create_type +-- acs_rel_type__create_type /15 vs. /16 has +-- /15 has no "roles" (one and two), but "type_extension_table" + +-- /16 +-- pos 1-7: same as /15 +-- pos 08: object_type_one (varchar) +-- pos 09: role_one (varchar) +-- pos 10: min_n_rels_one (integer) +-- pos 11: max_n_rels (integer) +-- pos 12: object_type_one (varchar) +-- pos 13: role_two (varchar) +-- pos 14: min_n_rels_two (integer) +-- pos 15: max_n_rels_two (integer) +-- pos 16: composable_p (boolean) + +-- /15 +-- pos 1-7: same as /15 +-- pos 08: type_extension_table (varchar) +-- pos 09: object_type_one (varchar) +-- pos 10: min_n_rels_one (integer) +-- pos 11: max_n_rels (integer) +-- pos 12: object_type_two (varchar) +-- pos 13: min_n_rels_two (integer) +-- pos 14: max_n_rels_two (integer) +-- pos 15: composable_p (boolean) + + +select define_function_args('acs_rel_type__create_type','rel_type,pretty_name,pretty_plural,supertype;relationship,table_name,id_column,package_name,object_type_one,role_one;null,min_n_rels_one,max_n_rels_one,object_type_two,role_two;null,min_n_rels_two,max_n_rels_two,composable_p;t'); + -- --- procedure acs_rel_type__create_type/15 +-- procedure acs_rel_type__create_type/16 -- CREATE OR REPLACE FUNCTION acs_rel_type__create_type( create_type__rel_type varchar, @@ -218,7 +248,8 @@ create_type__object_type_two varchar, create_type__role_two varchar, -- default null create_type__min_n_rels_two integer, - create_type__max_n_rels_two integer + create_type__max_n_rels_two integer, + create_type__composable_p boolean default true ) RETURNS integer AS $$ DECLARE @@ -245,25 +276,26 @@ object_type_one, role_one, min_n_rels_one, max_n_rels_one, object_type_two, role_two, - min_n_rels_two, max_n_rels_two) + min_n_rels_two, max_n_rels_two, + composable_p) values (create_type__rel_type, create_type__object_type_one, create_type__role_one, create_type__min_n_rels_one, create_type__max_n_rels_one, create_type__object_type_two, create_type__role_two, - create_type__min_n_rels_two, create_type__max_n_rels_two); + create_type__min_n_rels_two, create_type__max_n_rels_two, + create_type__composable_p); return 0; END; $$ LANGUAGE plpgsql; --- procedure create_type -- --- procedure acs_rel_type__create_type/14 +-- procedure acs_rel_type__create_type/15 -- CREATE OR REPLACE FUNCTION acs_rel_type__create_type( create_type__rel_type varchar, @@ -279,7 +311,8 @@ create_type__max_n_rels_one integer, create_type__object_type_two varchar, create_type__min_n_rels_two integer, - create_type__max_n_rels_two integer + create_type__max_n_rels_two integer, + create_type__composable_p boolean default true ) RETURNS integer AS $$ DECLARE @@ -308,13 +341,15 @@ object_type_one, role_one, min_n_rels_one, max_n_rels_one, object_type_two, role_two, - min_n_rels_two, max_n_rels_two) + min_n_rels_two, max_n_rels_two, + composable_p) values (create_type__rel_type, create_type__object_type_one, create_type__role_one, create_type__min_n_rels_one, create_type__max_n_rels_one, create_type__object_type_two, create_type__role_two, - create_type__min_n_rels_two, create_type__max_n_rels_two); + create_type__min_n_rels_two, create_type__max_n_rels_two, + create_type__composable_p); return 0; END; @@ -522,9 +557,10 @@ END; $$ LANGUAGE plpgsql; -create trigger acs_rels_in_tr before insert or update on acs_rels -for each row execute procedure acs_rels_in_tr (); + create trigger acs_rels_in_tr before insert or update on acs_rels + for each row execute procedure acs_rels_in_tr (); + -- show errors