-
-
Notifications
You must be signed in to change notification settings - Fork 267
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Define
author_search_vector_trigger
via Author.Meta.triggers
Previously, triggers lived only in a particular migration file. With this change, code for the triggers resides in the model, and their lifecycle is managed through normal Django migrations.
- Loading branch information
Showing
5 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
50 changes: 50 additions & 0 deletions
50
bookwyrm/migrations/0191_migrate_search_vec_triggers_to_pgtriggers.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# Generated by Django 3.2.20 on 2023-11-25 00:47 | ||
|
||
from importlib import import_module | ||
import re | ||
|
||
from django.db import migrations | ||
import pgtrigger.compiler | ||
import pgtrigger.migrations | ||
|
||
trigger_migration = import_module("bookwyrm.migrations.0077_auto_20210623_2155") | ||
|
||
# it's _very_ convenient for development that this migration be reversible | ||
search_vector_trigger = trigger_migration.Migration.operations[4] | ||
author_search_vector_trigger = trigger_migration.Migration.operations[5] | ||
|
||
|
||
assert re.search(r"\bCREATE TRIGGER search_vector_trigger\b", search_vector_trigger.sql) | ||
assert re.search( | ||
r"\bCREATE TRIGGER author_search_vector_trigger\b", | ||
author_search_vector_trigger.sql, | ||
) | ||
|
||
|
||
class Migration(migrations.Migration): | ||
dependencies = [ | ||
("bookwyrm", "0190_book_search_updates"), | ||
] | ||
|
||
operations = [ | ||
pgtrigger.migrations.AddTrigger( | ||
model_name="author", | ||
trigger=pgtrigger.compiler.Trigger( | ||
name="reset_search_vector_on_author_edit", | ||
sql=pgtrigger.compiler.UpsertTriggerSql( | ||
func="WITH book AS (SELECT bookwyrm_book.id AS row_id FROM bookwyrm_author LEFT OUTER JOIN bookwyrm_book_authors ON bookwyrm_book_authors.id = new.id LEFT OUTER JOIN bookwyrm_book ON bookwyrm_book.id = bookwyrm_book_authors.book_id) UPDATE bookwyrm_book SET search_vector = '' FROM book WHERE id = book.row_id;RETURN NEW;", | ||
hash="9c0a472e2bf60e63d593cce49f47972c7b227a00", | ||
operation='UPDATE OF "name"', | ||
pgid="pgtrigger_reset_search_vector_on_author_edit_a447c", | ||
table="bookwyrm_author", | ||
when="AFTER", | ||
), | ||
), | ||
), | ||
migrations.RunSQL( | ||
sql="""DROP TRIGGER IF EXISTS author_search_vector_trigger ON bookwyrm_author; | ||
DROP FUNCTION IF EXISTS author_trigger; | ||
""", | ||
reverse_sql=author_search_vector_trigger.sql, | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -104,6 +104,7 @@ | |
"celery", | ||
"django_celery_beat", | ||
"imagekit", | ||
"pgtrigger", | ||
"storages", | ||
] | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
""" Database utilities """ | ||
|
||
import sqlparse | ||
|
||
|
||
def format_trigger(sql: str) -> str: | ||
"""format SQL trigger before storing | ||
we remove whitespace and use consistent casing so as to avoid migrations | ||
due to formatting changes. | ||
""" | ||
return sqlparse.format( | ||
sql, | ||
strip_comments=True, | ||
strip_whitespace=True, | ||
keyword_case="upper", | ||
identifier_case="lower", | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters