I've started looking at moving to a single DB per WC, and written some
notes in 'notes/wc-ng/single-db-per-wc'. I haven't looked into the
current state of the code yet, other than building it (success) and
running it (50% of tests pass, which isn't bad, considering).
Any comments on this "how to upgrade the DB tables" part (copied from
that document)?
[[[
Upgrade: Migration of DB tables from subdir DBs to root DB
==========================================================
"Move into root's table" means move each row into the same table in the WC
root's DB, and we expect no duplicates.
"Merge into root's table" means we move the row into the root's table,
unless a row that's identical apart from its id is already present, in which
case we use the existing row's id.
REPOSITORY
Merge into root's table, which may result in assigning new id's.
Change all repos id's accordingly in the other tables being migrated:
BASE_NODE.repos_id
WORKING_NODE.copyfrom_repos_id
LOCK.repos_id
# and in tree conflict info?
Note: I already have two repos id's in some parts of some of my svn
working copies, so this is not purely theoretical.
WCROOT
Merge into root's table;
theoretically we should assign new id's and change them where they
appear in other tables, but in practice the id is always 1 so we can
just assert that.
BASE_NODE
Move into root's table;
omit if .kind == subdir
change .local_relpath
set .parent_relpath
WORKING_NODE
Move into root's table;
omit if .kind == subdir (?)
change .local_relpath
set .parent_relpath
ACTUAL_NODE
Move into root's table;
change .local_relpath
set .parent_relpath
LOCK
Move into root's table.
PRISTINE
Move into root's table.
Move the corresponding pristine text files into root's 'pristine' dir.
Change root's pristine directory to sharded (or this could be a
separate upgrade).
WC_LOCK
Move into root's table;
change .local_dir_relpath
WORK_QUEUE
Ensure WORK_QUEUE is empty.
]]]
- Julian