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;