···11+drop trigger if exists components_changes_attach_trigger;
22+33+drop trigger if exists components_changes_update_trigger;
44+55+drop trigger if exists components_changes_detach_trigger;
+40
src/change_tracking_enable.sql
···11+-- Runs when a component is attached
22+create trigger if not exists components_changes_attach_trigger
33+after insert
44+on components for each row
55+begin
66+ insert into changes (entity, component, change)
77+ select new.entity, new.component, 'create'
88+ where not exists (
99+ select true from components
1010+ where entity = new.entity
1111+ and component != new.component
1212+ );
1313+1414+ insert into changes (entity, component, change)
1515+ select new.entity, new.component, 'attach';
1616+end;
1717+1818+-- Runs when a component is changed
1919+create trigger if not exists components_changes_update_trigger
2020+after update
2121+on components for each row
2222+begin
2323+ insert into changes (entity, component, change)
2424+ values (new.entity, new.component, 'attach');
2525+end;
2626+2727+-- Runs when a component is detached
2828+create trigger if not exists components_changes_detach_trigger
2929+after delete
3030+on components for each row
3131+begin
3232+ insert into changes (entity, component, change)
3333+ values (old.entity, old.component, 'detach');
3434+3535+ insert into changes (entity, component, change)
3636+ select old.entity, old.component, 'destroy'
3737+ where not exists (
3838+ select true from components where entity = old.entity
3939+ );
4040+end;
···20202121end;
22222323+create table if not exists changes (
2424+ sequence integer primary key autoincrement,
2525+ entity integer not null,
2626+ component text,
2727+ change text not null
2828+);
2929+2330create table if not exists resources (
2431 name text not null unique,
2532 data blob,