create table operation
(
  id serial primary key
, redo text not null
, undo text not null
, parent integer references operation(id) on delete cascade
, redo_child integer references operation(id) -- must update before delete
, redo_change_set jsonb
, undo_change_set jsonb
);

insert into operation (id, redo, undo) values (0, '', '');

create table current_operation
(
  id integer primary key references operation(id) -- must update before delete
);

insert into current_operation (id) values (0);

create table snapshot_operation
(
  id integer primary key references operation(id) on delete cascade
, tag text not null unique
);
