···1+drop trigger if exists components_changes_attach_trigger;
2+3+drop trigger if exists components_changes_update_trigger;
4+5+drop trigger if exists components_changes_detach_trigger;
+40
src/change_tracking_enable.sql
···0000000000000000000000000000000000000000
···1+-- Runs when a component is attached
2+create trigger if not exists components_changes_attach_trigger
3+after insert
4+on components for each row
5+begin
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';
16+end;
17+18+-- Runs when a component is changed
19+create trigger if not exists components_changes_update_trigger
20+after update
21+on components for each row
22+begin
23+ insert into changes (entity, component, change)
24+ values (new.entity, new.component, 'attach');
25+end;
26+27+-- Runs when a component is detached
28+create trigger if not exists components_changes_detach_trigger
29+after delete
30+on components for each row
31+begin
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+ );
40+end;
···2021end;
22000000023create table if not exists resources (
24 name text not null unique,
25 data blob,
···2021end;
2223+create table if not exists changes (
24+ sequence integer primary key autoincrement,
25+ entity integer not null,
26+ component text,
27+ change text not null
28+);
29+30create table if not exists resources (
31 name text not null unique,
32 data blob,