Получение полного списка снимков
This commit is contained in:
		
							parent
							
								
									9ba43b0e38
								
							
						
					
					
						commit
						e42aacbed7
					
				
					 4 changed files with 18 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -3,16 +3,11 @@ module cdcdb.cdc.cas;
 | 
			
		|||
import cdcdb.db;
 | 
			
		||||
import cdcdb.cdc.core;
 | 
			
		||||
 | 
			
		||||
import std.digest.sha : SHA256, digest;
 | 
			
		||||
import std.format : format;
 | 
			
		||||
 | 
			
		||||
import zstd;
 | 
			
		||||
 | 
			
		||||
import std.digest.sha : SHA256, digest;
 | 
			
		||||
import std.format : format;
 | 
			
		||||
import std.exception : enforce;
 | 
			
		||||
import std.stdio : writeln;
 | 
			
		||||
import std.conv : to;
 | 
			
		||||
 | 
			
		||||
import std.file : write;
 | 
			
		||||
 | 
			
		||||
// Content-Addressable Storage (Контентно-адресуемая система хранения)
 | 
			
		||||
// CAS-хранилище со снапшотами
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +49,10 @@ public:
 | 
			
		|||
 | 
			
		||||
	size_t newSnapshot(string label, const(ubyte)[] data, string description = string.init)
 | 
			
		||||
	{
 | 
			
		||||
		if (data.length == 0) {
 | 
			
		||||
			throw new Exception("Данные имеют нулевой размер");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ubyte[32] sha256 = digest!SHA256(data);
 | 
			
		||||
 | 
			
		||||
		// Если последний снимок файла соответствует текущему состоянию
 | 
			
		||||
| 
						 | 
				
			
			@ -132,9 +131,9 @@ public:
 | 
			
		|||
		return idSnapshot;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Snapshot[] getSnapshotList(string filePath)
 | 
			
		||||
	Snapshot[] getSnapshots(string label = "")
 | 
			
		||||
	{
 | 
			
		||||
		return _db.getSnapshots(filePath);
 | 
			
		||||
		return _db.getSnapshots(label);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ubyte[] getSnapshotData(const ref Snapshot snapshot)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,13 +8,3 @@ struct Chunk
 | 
			
		|||
	size_t size; // размер чанка
 | 
			
		||||
	ubyte[32] sha256; // hex(SHA-256) содержимого
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Метаданные снимка
 | 
			
		||||
struct SnapshotInfo
 | 
			
		||||
{
 | 
			
		||||
	size_t id;
 | 
			
		||||
	string createdUTC; // ISO-8601
 | 
			
		||||
	string label;
 | 
			
		||||
	size_t sourceLength;
 | 
			
		||||
	size_t chunks;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,6 @@ import cdcdb.db.types;
 | 
			
		|||
 | 
			
		||||
import arsd.sqlite;
 | 
			
		||||
 | 
			
		||||
import std.file : exists;
 | 
			
		||||
import std.exception : enforce;
 | 
			
		||||
import std.conv : to;
 | 
			
		||||
import std.string : join, replace, toLower;
 | 
			
		||||
| 
						 | 
				
			
			@ -151,9 +150,11 @@ public:
 | 
			
		|||
			snapshot.status.to!int
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		if (!queryResult.empty())
 | 
			
		||||
		if (queryResult.empty()) {
 | 
			
		||||
			throw new Exception("Ошибка при добавлении нового снимока в базу данных");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return queryResult.front()["id"].to!long;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void addBlob(Blob blob)
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +212,7 @@ public:
 | 
			
		|||
			q{
 | 
			
		||||
				SELECT id, label, sha256, description, created_utc, source_length,
 | 
			
		||||
					algo_min, algo_normal, algo_max, mask_s, mask_l, status
 | 
			
		||||
				FROM snapshots WHERE label = ?
 | 
			
		||||
				FROM snapshots WHERE (length(?) = 0 OR label = ?1);
 | 
			
		||||
			}, label
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,10 +7,12 @@ import std.file : read;
 | 
			
		|||
void main()
 | 
			
		||||
{
 | 
			
		||||
	auto cas = new CAS("/tmp/base.db", true);
 | 
			
		||||
	cas.newSnapshot("/tmp/text", cast(ubyte[]) read("/tmp/text"));
 | 
			
		||||
	cas.newSnapshot("/tmp/texts", cast(ubyte[]) read("/tmp/text"));
 | 
			
		||||
	// import std.stdio : writeln;
 | 
			
		||||
 | 
			
		||||
	writeln(cas.getSnapshotList("/tmp/text"));
 | 
			
		||||
	foreach (snapshot; cas.getSnapshots()) {
 | 
			
		||||
		writeln(snapshot);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// writeln(cas.getVersion);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue