Index: openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.2-2.0d1.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.2-2.0d1.sql,v
diff -u -N -r1.2 -r1.3
--- openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.2-2.0d1.sql	1 Dec 2003 09:53:19 -0000	1.2
+++ openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.2-2.0d1.sql	8 Jan 2004 13:23:08 -0000	1.3
@@ -57,3 +57,59 @@
 
 alter table workflow_fsm_states add constraint wf_fsm_states_short_name_un unique (workflow_id, short_name);
 alter table workflow_fsm_states add constraint wf_fsm_states_pretty_name_un unique (workflow_id, pretty_name);
+
+
+-- New not null constraints
+-- TODO: Test these
+alter table workflow_initial_action alter column workflow_id set not null;
+alter table workflow_roles alter column workflow_id set not null;
+
+
+-- Changing from 'on delete cascade' to 'on delete set null'
+-- TODO: Test these
+alter table workflow_fsm_actions drop constraint wf_fsm_acns_new_st_fk;
+alter table workflow_fsm_actions add 
+    constraint wf_fsm_acns_new_st_fk foreign key (new_state)
+    references workflow_fsm_states(state_id) on delete set null;
+
+-- Adding recursive actions
+-- TODO: Test these
+create table workflow_action_children(
+  child_id                  integer
+                            constraint wf_action_children_pk
+                            primary key,
+  action_id                 integer
+                            constraint wf_action_children_nn
+                            not null
+                            constraint wf_action_children_action_fk
+                            references workflow_actions(action_id)
+                            on delete cascade,
+  child_workflow            integer
+                            constraint wf_action_children_workflow_fk
+                            references workflows(workflow_id)
+                            on delete cascade
+);
+
+create table workflow_action_child_role_map(
+  child_id                  integer
+                            constraint wf_act_child_rl_map_child_fk
+                            references workflow_action_children(child_id),
+  parent_role               integer
+                            constraint wf_act_child_rl_map_prnt_rl_fk
+                            references workflow_roles(role_id),
+  child_role                integer
+                            constraint wf_act_child_rl_map_chld_rl_fk
+                            references workflow_roles(role_id),
+  mapping_type              char(40)
+                            constraint wf_act_child_rl_map_type_ck
+                            check (mapping_type in 
+                                ('per_role','per_user')),
+  constraint wf_act_chld_rl_map_pk
+  primary key (child_id, parent_role)
+);
+
+comment on column workflow_action_child_role_map.mapping_type is '
+  If per user, we create a child workflow per user who is a member of any of the parties assigned to the parent_role.
+  If per role, we create just one child workflow, with the exact same parties that are in the parent_role.
+  If more than one child_role has a mapping_type other than per_role, the cartesian product of these roles will be created.
+';
