Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-create.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,2 @@ +\i acs-interface-tables-create.sql +\i acs-interface-packages-create.sql Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-drop.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,4 @@ +\i acs-interface-packages-drop.sql +\i acs-interface-tables-drop.sql + + Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-packages-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-packages-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-packages-create.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,364 @@ +-- +-- packages/acs-interfaces/sql/acs-interface-create.sql +-- +-- @author khy@arsdigita.com +-- @creation-date 2000-11-24 +-- @cvs-id $Id: acs-interface-packages-create.sql,v 1.1 2001/08/02 19:17:48 neophytosd Exp $ +-- + +-- The acs_interface package has methods to add interface, associate methods with interfaces, +-- and associate parameters with methods + +create function acs_interface__new(varchar,varchar,boolean,text,timestamp,integer,varchar) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_enabled_p alias for $3; + p_description alias for $4; + p_creation_date alias for $5; -- default sysdate + p_creation_user alias for $6; -- default null + p_creation_ip alias for $7; -- default null + v_interface_id integer; +begin + + select nextval(''acs_interface_all_id_sequence'') into v_interface_id; + + insert into acs_interfaces ( + interface_id, + interface_name, + programming_language, + enabled_p, + description, + creation_date, + creation_user, + creation_ip + ) values ( + v_interface_id, + p_interface_name, + p_programming_language, + p_enabled_p, + p_description, + p_creation_date, + p_creation_user, + p_creation_ip + ); + + return v_interface_id; + +end;' language 'plpgsql'; + + +create function acs_interface__delete(integer) +returns integer as ' +declare + p_interface_id alias for $1; +begin + delete from acs_interfaces + where interface_id = p_interface_id; + + return 0; +end;' language 'plpgsql'; + + + +create function acs_interface__delete(varchar,varchar) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + v_interface_id integer; +begin + delete from acs_interfaces + where interface_name = p_interface_name + and programming_language = p_programming_language; + + return 0; +end;' language 'plpgsql'; + + +create function acs_interface__assoc_obj_type_with_interface (varchar,varchar,varchar,varchar) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_object_type alias for $3; + p_object_type_imp alias for $4; -- default null + v_interface_id integer; +begin + + v_interface_id := acs_interface__get_interface_id ( + p_interface_name + p_programming_language + ); + + insert into acs_interface_obj_type_map ( + interface_id, + object_type, + object_type_impl_interface + ) values ( + v_interface_id, + p_object_type, + p_object_type_imp + ); + + return 0; +end;' language 'plpgsql'; + + + +create function acs_interface__remove_obj_type_impl (varchar,varchar,varchar) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_object_type alias for $3; +begin + delete from acs_interface_obj_type_map + where object_type = p_object_type + and interface_id = acs_interface__get_interface_id (p_interface_name, p_programming_language); + + return 0; +end;' language 'plpgsql'; + + + +create function acs_interface__get_interface_id (varchar,varchar) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + v_interface_id integer; +begin + select interface_id into v_interface_id + from acs_interfaces + where interface_name = p_interface_name + and programming_language = p_programming_language; + + + if not found then + raise exception ''Interface % for % does not exist.'', p_interface_name, p_programming_language; + end if; + + + return v_interface_id; + +end;' language 'plpgsql'; + + +create function acs_interface__add_method (varchar,varchar,varchar,varchar,varchar,text) +returns integer as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_method_name alias for $3; + p_method_type alias for $4; + p_return_type alias for $5; + p_method_desc alias for $6; -- default null + v_interface_id integer; + v_method_id integer; +begin + + v_interface_id := acs_interface__get_interface_id (p_interface_name,p_programming_language); + + select nextval(acs_interface_all_id_sequence) into v_method_id; + + insert into acs_interface_methods ( + interface_id, + method_id, + method_name, + method_type, + return_type, + method_desc + ) values ( + v_interface_id, + v_method_id, + p_method_name, + p_method_type, + p_return_type, + p_method_desc + ); + + return v_method_id; + + +end;' language 'plpgsql'; + + + -- position is null indicates the last parameter + -- if not null, shift parameters to the right and insert +create function acs_interface__add_param_to_method (integer,varchar,varchar,integer,text,text,boolean,boolean) +returns integer as ' +declare + p_method_id alias for $1; + p_param_name alias for $2; + p_param_type alias for $2; + p_pos alias for $2; -- default null + p_param_desc alias for $2; -- default null + p_param_spec alias for $2; -- default null + p_param_ref_p alias for $2; -- default f + p_required_p alias for $2; -- default t + v_isnull integer; +begin + select (case when p_pos is null then 1 else 0 end) into v_isnull; + + if v_isnull = 0 then + -- if the position is not null + -- Increment the other params positions whose + -- placement is at the specified position or higher. +-- HERE +-- update acs_interface_method_params +-- set pos = pos + 1 +-- where p_method_id >= p_param_name; + + -- insert the new parameter at the specified position + insert into acs_interface_method_params ( + method_id, + param_name, + param_type, + param_ref_p, + param_desc, + param_spec, + pos, + required_p + ) values ( + p_method_id, + p_param_name, + p_param_type, + p_param_ref_p, + p_param_desc, + p_param_spec, + p_pos, + p_required_p + ); + else + -- Position was not specified, place the new parameter at the end of the parameter list. + + insert into acs_interface_method_params ( + method_id, + param_name, + param_type, + param_ref_p, + param_desc, + param_spec, + required_p, + pos + ) select p_method_id, + p_param_name, + p_param_type, + p_param_ref_p, + p_param_desc, + p_param_spec, + p_required_p, + (case when max(pos) is null then 0 else max(pos))+1 end) + from acs_interface_method_params + where method_id = p_method_id; + end if; + + return 0; +end;' language 'plpgsql'; + + + + + + +-- removes methods from the interface +create function acs_interface__remove_method (integer) +returns integer as ' +declare + p_method_id alias for $1; +begin + delete from acs_interface_methods + where method_id = p_method_id; + + return 0; +end;' language 'plpgsql'; + + +create function acs_interface__remove_param_from_method (integer,integer) +returns integer as ' +declare + p_method_id alias for $1; + p_pos alias for $2; +begin + delete from acs_interface_method_params + where method_id = p_method_id + and pos = p_pos; + + return 0; +end;' language 'plpgsql'; + + + + +create function acs_interface__object_type_implement_p (varchar,varchar,varchar) +returns boolean as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_object_type alias for $3; + v_implement_p boolean; +begin + + select (case when count(*)=0 then ''f'' else ''t'' end) into v_implement_p + from acs_interface_obj_type_map aiopm, + acs_interfaces ai + where aiopm.object_type = p_object_type + and aiopm.interface_id = ai.interface_id + and ai.interface_name = p_interface_name + and ai.programming_language = p_programming_language; + + return v_implement_p; + +end;' language 'plpgsql'; + + + + +create function acs_interface__object_id_implement_p (varchar,varchar,varchar) +returns boolean as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_object_id alias for $3; + v_implement_p boolean; +begin + + select (case when count(*)=0 then ''f'' else ''t'' end) into v_implement_p + from acs_interface_obj_type_map aiopm, + acs_interfaces ai, + acs_objects ao + where ao.object_id = object_id + and aiopm.object_type = ao.object_type + and aiopm.interface_id = ai.interface_id + and ai.interface_name = p_interface_name + and ai.programming_language = p_programming_language; + + return v_implement_p; + +end;' language 'plpgsql'; + + +create function acs_interface__obj_provide_implement (varchar,varchar,varchar) +returns varchar as ' +declare + p_interface_name alias for $1; + p_programming_language alias for $2; + p_object_type alias for $3; + v_object_type_imp varchar(30); +begin + + v_object_type_imp := p_object_type; + + for v_obj_type_impl_row in (select object_type_impl_interface + from acs_interface_obj_type_map + where interface_id =acs_interface__get_interface_id(interface_name,programming_language) + and object_type = p_object_type) loop + v_object_type_imp := obj_type_impl_row.object_type_impl_interface; + end loop; + + + return v_object_type_imp; +end;' language 'plpgsql'; + Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-packages-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-packages-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-packages-drop.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,13 @@ +drop function acs_interface__new(varchar,varchar,boolean,text,timestamp,integer,varchar); +drop function acs_interface__delete(integer); +drop function acs_interface__delete(varchar,varchar); +drop function acs_interface__assoc_obj_type_with_interface (varchar,varchar,varchar,varchar); +drop function acs_interface__remove_obj_type_impl (varchar,varchar,varchar); +drop function acs_interface__get_interface_id (varchar,varchar); +drop function acs_interface__add_method (varchar,varchar,varchar,varchar,varchar,text); +drop function acs_interface__add_param_to_method (integer,varchar,varchar,integer,text,text,boolean,boolean); +drop function acs_interface__remove_method (integer); +drop function acs_interface__remove_param_from_method (integer,integer); +drop function acs_interface__object_type_implement_p (varchar,varchar,varchar); +drop function acs_interface__object_id_implement_p (varchar,varchar,varchar); +drop function acs_interface__obj_provide_implement (varchar,varchar,varchar); Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-tables-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-tables-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-tables-create.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,124 @@ +-- +-- packages/acs-interfaces/sql/acs-interface-create.sql +-- +-- @author khy@arsdigita.com +-- @creation-date 2000-11-24 +-- @cvs-id $Id: acs-interface-tables-create.sql,v 1.1 2001/08/02 19:17:48 neophytosd Exp $ +-- + +create sequence acs_interface_all_id_sequence; + +create table acs_interfaces ( + interface_id integer + constraint acs_inter_int_id_pk primary key, + interface_name varchar(40) + constraint acs_inter_int_name_nn not null, + programming_language varchar(50) + constraint acs_inter_prog_lang_nn not null, + enabled_p boolean default 't' + constraint acs_inter_enabled_p_nn not null, + description text + constraint acs_inter_desc_nn not null, + creation_date timestamp, + creation_user integer + constraint acs_inter_creation_user_fk references users, + creation_ip varchar(50), + constraint acs_inter_name_lang_un unique (interface_name, programming_language) +); + + +comment on table acs_interfaces is 'An interface is a name for a set of methods. The methods'' +definitions are in acs_interface_methods table. Interfaces provide a facility to +add functionality to an object without adding to or changing the internal structure. When +an object type implements an interface, the object type agrees, contractual level, to +implement those methods according to the interface specification. The implementation of +those methods is dependent upon the language. In Oracle PL/SQL environment, the methods +are defined and declared in a package with the same name as the object type.'; + +comment on column acs_interfaces.programming_language is 'Programming Languages are PL/SQL, TCL, and JAVA'; +comment on column acs_interfaces.description is 'The description of the purpose and utility for the interface'; +comment on column acs_interfaces.enabled_p is 'Is the interface being used?'; + +create table acs_interface_methods ( + method_id integer + constraint acs_int_met_method_id_pk primary key, + interface_id integer + constraint acs_int_met_interface_id_fk references acs_interfaces(interface_id) on delete cascade + constraint acs_int_met_interface_id_nn not null, + method_name varchar(100) + constraint acs_int_met_interface_name_nn not null, + -- call type is either function or procedure + method_type varchar(10) default 'procedure' + constraint acs_int_met_method_type_ck check (method_type in ('function', 'procedure')), + return_type varchar(50), + method_desc text +); + +comment on table acs_interface_methods is 'Definition of interfaces'' methods'; + +comment on column acs_interface_methods.method_name is 'The name of the method'; + +comment on column acs_interface_methods.method_type is 'Is the method a function or procedure'; + +comment on column acs_interface_methods.return_type is 'The return type for a function.'; + +comment on column acs_interface_methods.method_desc is 'description of the method'; + +create table acs_interface_method_params ( + method_id integer + constraint aimp_method_id_fk references acs_interface_methods(method_id) on delete cascade + constraint aimp_method_id_nn not null, + param_name varchar(100) + constraint aimp_param_name_nn not null, + param_type varchar(50) + constraint aimp_param_type_nn not null, + -- parameter pass by reference + param_ref_p boolean default 'f', + param_desc text, + -- extra information about the parameter + param_spec text, + required_p boolean default 't', + pos integer + constraint aimp_param_order_nn not null, + constraint aimp_meth_pos_pk primary key (method_id, pos) +); + +comment on table acs_interface_method_params is 'Stores the methods'' parameter definition'; + +comment on column acs_interface_method_params.param_type is 'what is the data type of + the parameter'; + +comment on column acs_interface_method_params.param_ref_p is 'Is this param pass by value or + reference? For Oracle, it is IN or IN OUT, respectively.'; + +comment on column acs_interface_method_params.required_p is 'Is the parameter required?'; + +comment on column acs_interface_method_params.param_spec is 'Extra information about the parameter. For example +in PL/SQL it could include optimization options (i.e. NOCOPY).'; + +comment on column acs_interface_method_params.pos is 'The position of the parameter within the + method''s parameter definition.'; + +comment on column acs_interface_method_params.param_desc is 'The description of the parameter'; + +create table acs_interface_obj_type_map ( + interface_id integer + constraint acs_inter_map_int_id_fk references acs_interfaces on delete cascade + constraint acs_inter_map_int_id_nn not null, + object_type varchar(100) + constraint acs_inter_map_obj_type_fk references acs_object_types on delete cascade + constraint acs_inter_map_obj_type_nn not null, + -- another object type may provide the implementation + object_type_impl_interface varchar(30), + constraint acs_inter_map_int_obj_un unique (interface_id, object_type) +); + +comment on table acs_interface_obj_type_map is 'Mapping of acs_interfaces with object types'; +comment on column acs_interface_obj_type_map.object_type_impl_interface is 'This object type +provides the implementation details for the object type'; + + + + + + Index: openacs-4/packages/acs-interface/sql/postgresql/acs-interface-tables-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-interface/sql/postgresql/Attic/acs-interface-tables-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-interface/sql/postgresql/acs-interface-tables-drop.sql 2 Aug 2001 19:17:48 -0000 1.1 @@ -0,0 +1,8 @@ +drop table acs_interface_method_params; +drop table acs_interface_methods; +drop table acs_interface_obj_type_map; +drop table acs_interfaces; + +drop sequence acs_interface_all_id_sequence; + +