Experiments in applying Entity-Component-System patterns to durable data storage APIs.
1-- Runs when a component is attached
2create trigger if not exists components_changes_attach_trigger
3after insert
4on components for each row
5begin
6 insert into changes (entity, component, change)
7 select new.entity, new.component, 'create'
8 where not exists (
9 select true from components
10 where entity = new.entity
11 and component != new.component
12 );
13
14 insert into changes (entity, component, change)
15 select new.entity, new.component, 'attach';
16end;
17
18-- Runs when a component is changed
19create trigger if not exists components_changes_update_trigger
20after update
21on components for each row
22begin
23 insert into changes (entity, component, change)
24 values (new.entity, new.component, 'attach');
25end;
26
27-- Runs when a component is detached
28create trigger if not exists components_changes_detach_trigger
29after delete
30on components for each row
31begin
32 insert into changes (entity, component, change)
33 values (old.entity, old.component, 'detach');
34
35 insert into changes (entity, component, change)
36 select old.entity, old.component, 'destroy'
37 where not exists (
38 select true from components where entity = old.entity
39 );
40end;