forked from dlang/cdcdb
		
	Обновление схемы БД
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
 | 
			
		||||
			WHERE id = OLD.snapshot_id;
 | 
			
		||||
		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
 | 
			
		||||
{
 | 
			
		||||
	ubyte[32] sha256; // BLOB(32)
 | 
			
		||||
	ubyte[32] zSha256; // BLOB(32)
 | 
			
		||||
	ubyte[32] sha256;
 | 
			
		||||
	ubyte[32] zSha256;
 | 
			
		||||
	long size;
 | 
			
		||||
	long zSize;
 | 
			
		||||
	ubyte[] content; // BLOB
 | 
			
		||||
	ubyte[] content;
 | 
			
		||||
	string createdUtc;
 | 
			
		||||
	string lastSeenUtc;
 | 
			
		||||
	long refcount;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ struct SnapshotChunk
 | 
			
		|||
	long snapshotId;
 | 
			
		||||
	long chunkIndex;
 | 
			
		||||
	long offset;
 | 
			
		||||
	ubyte[32] sha256; // BLOB(32)
 | 
			
		||||
	ubyte[32] sha256;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct SnapshotDataChunk {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue