ddcp 0.2.4

Distributed decentralized database-to-database copy
# Correctness

## DB Version

1. [x] Min int on first db creation
2. [x] Increments with every modification to a crr datum
3. [x] Restored from disk on db load
4. [x] Unique for each transaction

## Site id

1. [x] Initialized to a uuid at startup
2. [x] Persisted
3. [x] Loaded from disk if exists on disk
4. [x] Does not ever change after being set, even between restarts

## Schema modification

1. [ ] create table
   1. [ ] if not exists support
   2. [ ] temp table support
   3. [x] quoted identifiers
   4. [x] no primary keys table
   5. [x] compound primary key table
   6. [x] single primary key
2. [ ] create index
   1. [ ] create unique index not allowed
3. [ ] drop index
4. [ ] drop table
5. [ ] alter table
6. [ ] table constraints
   1. [ ] fk constraints not allowed
7. [ ] `crr_from` is idempotent

## Inserts of new rows

1. [x] version cols start at 0
2. [x] cl starts at 1
3. [x] db version incremented
4. [x] clock record written with new db version and current site id for current row
5. [ ] ~~db version is not in use on any other row~~
6. [x] cols have the inserted values
7. [x] update src is 0

## Updates of rows

1. [ ] version cols for changed rows increment by 1
2. [ ] version cols for unchanges rows do not change
3. [ ] db version is incremented
4. [ ] clock record for this row records new db version that is greater than last recorded db version
5. [ ] db version for the row is globally unique
6. [ ] local updates are always taken -- no conflict resolution required
7. [ ] update src is 0

## Deletes of rows

1. [ ] db version is incremented
2. [ ] clock record for this row records new db version that is greater than last recorded db version
3. [ ] db version for the row is globally unique
4. [ ] local deletes are always taken -- no conflict resolution required
5. [ ] if causal length was odd, it is incremented
6. [ ] if causal length was even, it is unchanged
7. [ ] version columns are unchanged
8. [ ] value columns are unchanged
9. [ ] update src is 0

## Inserts of existing rows

1. [ ] if causal length was odd, it is unchanged
2. [ ] if causal length was even, it is incremented
3. [ ] only cols referenced in insert are changed
4. [ ] version cols are incremented for changed cols
5. [ ] version cols are unchanged for unchanged cols
6. [ ] clock record for this row records new db version that is greater than last recorded db version
7. [ ] db version for the row is globally unique
8. [ ] update src is 0

## Reads

1. [ ] deleted rows (even cl) are not returned
2. [ ] undeleted (odd cl) rows are returned
3. [ ] version cols are not returned
4. [ ] cl is not returned
5. [ ] update src is note returned

## Merging remote changes

1. [ ] merges against a row are idempotent
    1. [ ] merging an old row (by vclock) does not change the new row
    2. [ ] merging a row with an identical copy of itself does not change the row
    3. [ ] reapplications of a merge, after the first, does not impact the state of the row
2. [ ] update src is set to 1
3. [ ] only columns with higher versions are taken
4. [ ] if versions match for a column, the greater value is taken
5. [ ] physical deletion is final

## Sync Bit
1. [ ] no replication on changes from sync

## Computing deltas against remote clock

## Concurrency


## Primary key only tables