Обновление схемы БД
This commit is contained in:
parent
d62524e185
commit
9c5d812a49
2 changed files with 39 additions and 4 deletions
|
@ -170,5 +170,40 @@ auto _scheme = [
|
||||||
SET status = 0
|
SET status = 0
|
||||||
WHERE id = OLD.snapshot_id;
|
WHERE id = OLD.snapshot_id;
|
||||||
END
|
END
|
||||||
|
},
|
||||||
|
q{
|
||||||
|
-- Проверка порядка индексов и непрерывности смещений.
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_sc_before_insert
|
||||||
|
BEFORE INSERT ON snapshot_chunks
|
||||||
|
BEGIN
|
||||||
|
-- Ожидаемое значение: max(chunk_index)+1 для данного snapshot_id (или текущий при первой вставке).
|
||||||
|
SELECT CASE
|
||||||
|
WHEN NEW.chunk_index <> COALESCE(
|
||||||
|
(SELECT MAX(chunk_index) FROM snapshot_chunks WHERE snapshot_id = NEW.snapshot_id),
|
||||||
|
NEW.chunk_index - 1
|
||||||
|
) + 1
|
||||||
|
THEN RAISE(ABORT, "snapshot_chunks: индекс chunk_index должен быть непрерывным и только возрастающим")
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Проверка: offset равен сумме размеров предыдущих чанков.
|
||||||
|
SELECT CASE
|
||||||
|
WHEN NEW.offset <> (
|
||||||
|
SELECT COALESCE(SUM(b.size), 0)
|
||||||
|
FROM snapshot_chunks sc
|
||||||
|
JOIN blobs b ON b.sha256 = sc.sha256
|
||||||
|
WHERE sc.snapshot_id = NEW.snapshot_id
|
||||||
|
AND sc.chunk_index < NEW.chunk_index
|
||||||
|
)
|
||||||
|
THEN RAISE(ABORT, "snapshot_chunks: offset должен равняться сумме размеров предыдущих чанков")
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
},
|
||||||
|
q{
|
||||||
|
-- Запрет обновления строк состава; использовать DELETE + INSERT.
|
||||||
|
CREATE TRIGGER IF NOT EXISTS trg_sc_block_update
|
||||||
|
BEFORE UPDATE ON snapshot_chunks
|
||||||
|
BEGIN
|
||||||
|
SELECT RAISE(ABORT, "snapshot_chunks: UPDATE запрещён; используйте DELETE + INSERT");
|
||||||
|
END
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -24,11 +24,11 @@ struct Snapshot
|
||||||
|
|
||||||
struct Blob
|
struct Blob
|
||||||
{
|
{
|
||||||
ubyte[32] sha256; // BLOB(32)
|
ubyte[32] sha256;
|
||||||
ubyte[32] zSha256; // BLOB(32)
|
ubyte[32] zSha256;
|
||||||
long size;
|
long size;
|
||||||
long zSize;
|
long zSize;
|
||||||
ubyte[] content; // BLOB
|
ubyte[] content;
|
||||||
string createdUtc;
|
string createdUtc;
|
||||||
string lastSeenUtc;
|
string lastSeenUtc;
|
||||||
long refcount;
|
long refcount;
|
||||||
|
@ -40,7 +40,7 @@ struct SnapshotChunk
|
||||||
long snapshotId;
|
long snapshotId;
|
||||||
long chunkIndex;
|
long chunkIndex;
|
||||||
long offset;
|
long offset;
|
||||||
ubyte[32] sha256; // BLOB(32)
|
ubyte[32] sha256;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SnapshotDataChunk {
|
struct SnapshotDataChunk {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue