Skip to content

Commit 3de765f

Browse files
committed
Remove raw SQL condition from *CounterTrigger.
The `pgtrigger.Condition('''OLD.proj_epsg IS DISTINCT FROM NEW.proj_epsg''')` condition is equivalent to `pgtrigger.AnyChange('proj_epsg')`, which is easier to inspect and reason about. This change replaces the former with the latter.
1 parent c843622 commit 3de765f

2 files changed

Lines changed: 62 additions & 2 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Generated by Django 5.2.11 on 2026-06-03 06:12
2+
3+
import pgtrigger.compiler
4+
import pgtrigger.migrations
5+
6+
from django.db import migrations
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('stac_api', '0071_remove_asset_update_asset_item_file_size_trigger_and_more'),
13+
]
14+
15+
operations = [
16+
pgtrigger.migrations.RemoveTrigger(
17+
model_name='collectionasset',
18+
name='upd_dec_col_asset_proj_epsg_trigger',
19+
),
20+
pgtrigger.migrations.RemoveTrigger(
21+
model_name='collectionasset',
22+
name='upd_inc_col_asset_proj_epsg_trigger',
23+
),
24+
pgtrigger.migrations.AddTrigger(
25+
model_name='collectionasset',
26+
trigger=pgtrigger.compiler.Trigger(
27+
name='upd_dec_col_asset_proj_epsg_trigger',
28+
sql=pgtrigger.compiler.UpsertTriggerSql(
29+
condition='WHEN (OLD."proj_epsg" IS DISTINCT FROM (NEW."proj_epsg"))',
30+
declare=
31+
'DECLARE asset_instance stac_api_collectionasset%ROWTYPE; related_collection_id INT;',
32+
func=
33+
"\n asset_instance = OLD;\n\n related_collection_id = asset_instance.collection_id;\n\n -- Remove entry when count will reach 0\n DELETE FROM stac_api_projepsgcount\n WHERE collection_id = related_collection_id\n AND value = asset_instance.proj_epsg\n AND count = 1;\n\n IF NOT FOUND THEN\n UPDATE stac_api_projepsgcount\n SET count = count-1\n WHERE collection_id = related_collection_id\n AND value = asset_instance.proj_epsg;\n\n RAISE INFO\n 'stac_api_projepsgcount (collection_id, value) (% %) count updated, due to asset.name=% update.',\n related_collection_id, asset_instance.proj_epsg, asset_instance.name;\n\n RETURN asset_instance;\n END IF;\n\n RAISE INFO\n 'stac_api_projepsgcount (collection_id, value) (% %) deleted, due to asset.name=% update.',\n related_collection_id, asset_instance.proj_epsg, asset_instance.name;\n\n RETURN asset_instance;\n ",
34+
hash='56e4e1fae63cd83c85410bb5e49f1672f644c015',
35+
operation='UPDATE',
36+
pgid='pgtrigger_upd_dec_col_asset_proj_epsg_trigger_07a9d',
37+
table='stac_api_collectionasset',
38+
when='AFTER'
39+
)
40+
),
41+
),
42+
pgtrigger.migrations.AddTrigger(
43+
model_name='collectionasset',
44+
trigger=pgtrigger.compiler.Trigger(
45+
name='upd_inc_col_asset_proj_epsg_trigger',
46+
sql=pgtrigger.compiler.UpsertTriggerSql(
47+
condition='WHEN (OLD."proj_epsg" IS DISTINCT FROM (NEW."proj_epsg"))',
48+
declare=
49+
'DECLARE asset_instance stac_api_collectionasset%ROWTYPE; related_collection_id INT;',
50+
func=
51+
"\n asset_instance = NEW;\n\n related_collection_id = asset_instance.collection_id;\n\n INSERT INTO stac_api_projepsgcount (collection_id, value, count)\n VALUES (related_collection_id, asset_instance.proj_epsg, 1)\n ON CONFLICT (collection_id, value)\n DO UPDATE SET count = stac_api_projepsgcount.count+1;\n\n RAISE INFO\n 'projepsgcount (collection_id, value) (% %) count updated, due to asset.name=% update.',\n related_collection_id, asset_instance.proj_epsg, asset_instance.name;\n\n RETURN asset_instance;\n ",
52+
hash='0626a8387cba7cffb40dd81594e3d5c5c16e9ea4',
53+
operation='UPDATE',
54+
pgid='pgtrigger_upd_inc_col_asset_proj_epsg_trigger_d717d',
55+
table='stac_api_collectionasset',
56+
when='AFTER'
57+
)
58+
),
59+
),
60+
]

app/stac_api/pgtriggers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ class IncreaseCounterTrigger(pgtrigger.Trigger):
327327
DecreaseCounterTrigger(
328328
name='upd_dec_col_asset_proj_epsg_trigger',
329329
operation=pgtrigger.Update,
330-
condition=pgtrigger.Condition('''OLD.proj_epsg IS DISTINCT FROM NEW.proj_epsg''')
330+
condition=pgtrigger.AnyChange('proj_epsg')
331331
),
332332
DecreaseCounterTrigger(
333333
name='del_col_asset_proj_epsg_trigger',
@@ -336,7 +336,7 @@ class IncreaseCounterTrigger(pgtrigger.Trigger):
336336
IncreaseCounterTrigger(
337337
name='upd_inc_col_asset_proj_epsg_trigger',
338338
operation=pgtrigger.Update,
339-
condition=pgtrigger.Condition('''OLD.proj_epsg IS DISTINCT FROM NEW.proj_epsg''')
339+
condition=pgtrigger.AnyChange('proj_epsg')
340340
),
341341
IncreaseCounterTrigger(
342342
name='add_col_asset_proj_epsg_trigger',

0 commit comments

Comments
 (0)