Database Triggers¶
Here lies information about the Database Triggers. Here be dragons and other things that will gobble you up.
The triggers (in no particular order):
- Update latest version
- Delete latest version
- Post Publication Trigger
- Set the default module UUID
- Update the module ACLs
- Upsert users during Legacy publications
- Set the default Module ID
- Republish Collections sharing a published Module
- Set the default Module version
- Transform a Collection’s abstract to HTML
- Transform a Module’s abstract to HTML
- Upsert users for optional roles
- Computer the MD5 hash
- Computer the SHA1 hash
- Transform a Module’s document to or from CNXML to HTML
- Rebake on recipe insertion
- Set the default recipe
- Prevent deletion of used recipes
- Set the default canonical Collection for a Module
- Copy records from persons to users table
- Set the default module state for legacy publications
First acting triggers¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|
These act_##_... prefixed triggers are the first triggers
to run on insert to the modules table.
They are named with this prefix
to ensure they are the first
to run and in a specific numbered order.
Set the default module UUID¶
| name: | act_10_module_uuid_default |
|---|
This trigger runs:
-
cnxarchive.database.assign_document_controls_default_trigger(plpy, td)[source]¶ Trigger to fill in document_controls when legacy publishes.
A compatibilty trigger to fill in
uuidandlicenseidcolumns of thedocument_controlstable that are not populated when inserting publications from legacy.This uuid default is not on
modules.uuidcolumn itself, because the value needs to be loosely associated with thedocument_controlsentry to prevent uuid collisions and bridge the pending publications gap.
User shadowing¶
Upsert users for optional roles¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | optional_roles_user_insert |
This trigger runs:
-
cnxarchive.database.insert_users_for_optional_roles_trigger(plpy, td)[source]¶ Trigger to update users from optional roles entries.
A compatibility trigger to insert users from moduleoptionalroles records. This is primarily for legacy compatibility, but it is not possible to tell whether the entry came from legacy or cnx-publishing. Therefore, we only insert into users.
Copy records from persons to users table¶
| defined-in: | cnxdb/archive-sql/schema/legacy/triggers.sql |
|---|---|
| name: | update_users_from_legacy |
This trigger ensures that insertions and updates to the persons table
are copied (or shadowed) over to the users table.
Set defaults¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|
Set the default Module ID¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | module_moduleid_default |
This trigger runs:
-
cnxarchive.database.assign_moduleid_default_trigger(plpy, td)[source]¶ Trigger to fill in legacy
moduleidwhen publishing.This correctly assigns
moduleidvalue to cnx-publishing publications. This does NOT include matching themoduleidto previous revision by way ofuuid.This correctly updates the sequence values when a legacy publication specifies the
moduleidvalue. This is because legacy does not know about nor use the sequence values when setting legacymoduleid.
Set the default Module version¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | module_version_default |
This trigger runs:
-
cnxarchive.database.assign_version_default_trigger(plpy, td)[source]¶ Trigger to fill in legacy data fields.
A compatibilty trigger to fill in legacy data fields that are not populated when inserting publications from cnx-publishing.
If this is not a legacy publication the
versionwill be set based on themajor_versionvalue.
Set the default module state for legacy publications¶
| defined-in: | cnxdb/archive-sql/schema/legacy/triggers.sql |
|---|---|
| name: | update_default_modules_stateid |
Sets the default state to post-publication (stateid = 5) for insertions
into the modules table
that is classified as a Collection (i.e. portal_type = 'Collection').
Set values for computed fields¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|
Computer the MD5 hash¶
| name: | update_file_md5 |
|---|
Computes and sets the MD5 hash on insert or update to the files table.
Computer the SHA1 hash¶
| name: | update_files_sha1 |
|---|
Computes and sets the SHA1 hash on insert or update to the files table.
Republish Collections sharing a published Module¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | module_published |
This trigger runs:
-
cnxarchive.database.republish_module_trigger(plpy, td)[source]¶ Trigger called from postgres database when republishing a module.
When a module is republished, the versions of the collections that it is part of will need to be updated (a minor update).
e.g. there is a collection c1 v2.1, which contains module m1 v3
m1 is updated, we have a new row in the modules table with m1 v4
this trigger will create increment the minor version of c1, so we’ll have c1 v2.2
we need to create a collection tree for c1 v2.2 which is exactly the same as c1 v2.1, but with m1 v4 instead of m1 v3, and c1 v2.2 instead of c1 v2.2
Transformation triggers¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|
Transform a Collection’s abstract to HTML¶
| name: | collection_html_abstract_trigger |
|---|
This triggers run on Collection insert or update when a module does not have an HTML abstract. The results of this trigger are to transform the cnxml or plain text abstract to HTML.
Transform a Module’s abstract to HTML¶
| name: | module_html_abstract_trigger |
|---|
This triggers run on Module insert or update when a module does not have an HTML abstract. The results of this trigger are to transform the cnxml or plain text abstract to HTML.
Transform a Module’s document to or from CNXML to HTML¶
| name: | module_file_added |
|---|
-
cnxarchive.database.add_module_file(plpy, td)[source]¶ Database trigger for adding a module file.
When a legacy
index.cnxmlis added, this trigger transforms it into html and stores it asindex.cnxml.html. When a cnx-publishingindex.cnxml.htmlis added, this trigger checks ifindex.html.cnxmlexists before transforming it into cnxml and stores it asindex.html.cnxml.Note, we do not use
index.htmloverindex.cnxml.html, because legacy allows users to name filesindex.html.
Update latest version¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | update_latest_version |
Copies the record from modules to latest_modules
on insert or update when the highest version of a module has successfully baked.
A module is considered successfully baked
when its state has transitioned
to current (stateid = 1) or fallback (stateid = 8).
Delete latest version¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | delete_from_latest_version |
Copies the previous latest record from modules to latest_modules
on deletion of the existing latest_modules record with the same ID.
Note
As of this writing, this trigger is not baking aware. (bug!)
Post Publication Trigger¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | post_publication_trigger |
Notifies the post_publication channel
on insert or update to the modules table
when the module’s state has been set to post-publication
(stateid = 5).
Hint
The post_publication channel is observed
by cnx-publishing’s channel processing script,
which listens for events and places them into RabbitMQ.
Recipes Triggers¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|
Rebake on recipe insertion¶
| name: | ruleset_trigger |
|---|
When a recipe is manually inserted (or injected)
into the database this trigger “rebakes” the content.
This trigger is active on the module_files table
when a file named ruleset.css (aka recipe) is inserted or updated,
which in turn executes the procedure to “rebake” the associated content.
Set the default recipe¶
| name: | update_default_recipes |
|---|
When a new recipe is inserted (or old one updated)
this trigger ensures the default_print_style_recipes table updated
to with the latest revised recipe.
This also ensures that a recipe is not overwritten
if it is currently in use by one or more books (aka Collections).
Prevent deletion of used recipes¶
| name: | delete_from_default_recipes |
|---|
Prevents deletion of recipes in the print_style_recipes table
if the recipe is in use
(therefore is a recipe that has been used in baking book).
If the recipe being deleted is in default_print_style_recipes
it will be replaced with the next newest available recipe.
Set the default canonical Collection for a Module¶
| defined-in: | cnxdb/archive-sql/schema/triggers.sql |
|---|---|
| name: | set_default_canonical_trigger |
This trigger finds the first Collection containing the Module and sets it as the canonical value.