Обновление схемы БД
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