source upload
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
/// command-line tool for compressing/uncompressing .dbsynlz files
|
||||
program DBSynLZ;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
{$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads
|
||||
SynCommons,
|
||||
SysUtils;
|
||||
|
||||
{$R SynDBExplorer.res}
|
||||
|
||||
const
|
||||
/// the "magic" number used to identify .dbsynlz compressed files, as
|
||||
// created by TSQLDataBase.BackupSynLZ() or if SynLZCompress parameter is TRUE
|
||||
// for the TSQLDataBase.BackupBackground() method
|
||||
// - note that the SynDBExplorer tool is able to recognize such files, and
|
||||
// open them directly - or use this DBSynLZ.dpr command-line sample tool
|
||||
SQLITE3_MAGIC = $ABA5A5AB;
|
||||
|
||||
function IsSQLite3File(const FileName: TFileName): boolean;
|
||||
var F: integer;
|
||||
Header: array[0..15] of AnsiChar;
|
||||
begin
|
||||
F := FileOpen(FileName,fmOpenRead or fmShareDenyNone);
|
||||
if F<0 then
|
||||
result := false else begin
|
||||
result := (FileRead(F,Header,sizeof(Header))=SizeOf(Header)) and
|
||||
(Header='SQLite format 3');
|
||||
FileClose(F);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Process(const FN: TFileName);
|
||||
var f, dest: TFileName;
|
||||
timer: TPrecisionTimer;
|
||||
begin
|
||||
timer.Start;
|
||||
f := ExtractFileName(FN);
|
||||
if ParamCount = 2 then
|
||||
dest := ParamStr(2);
|
||||
if FileIsSynLZ(FN, SQLITE3_MAGIC) then begin
|
||||
if dest = '' then
|
||||
dest := ChangeFileExt(FN, '.db');
|
||||
write('Decompressing ', f, #13#10' into ', ExtractFileName(dest), '...');
|
||||
if FileExists(dest) then
|
||||
writeln(' FAILED: already existing')
|
||||
else if FileUnSynLZ(FN, dest, SQLITE3_MAGIC) then
|
||||
writeln(' OK in ', timer.Stop)
|
||||
else
|
||||
writeln(' FAILED');
|
||||
end else
|
||||
if IsSQlite3File(FN) then begin
|
||||
if dest = '' then
|
||||
dest := ChangeFileExt(FN, '.dbsynlz');
|
||||
write('Compressing ', f, #13#10' into ', ExtractFileName(dest), '...');
|
||||
if FileExists(dest) then
|
||||
writeln(' FAILED: already existing')
|
||||
else if FileSynLZ(FN, dest, SQLITE3_MAGIC) then
|
||||
writeln(' OK in ', timer.Stop)
|
||||
else
|
||||
writeln(' FAILED');
|
||||
end else
|
||||
writeln(f, ' is not a Sqlite3 compressed/uncompressed file');
|
||||
end;
|
||||
|
||||
begin
|
||||
if ParamCount < 1 then begin
|
||||
TextColor(ccLightGreen);
|
||||
writeln(#13#10' SQLite3 database files compression/decompression tool via SynLZ');
|
||||
writeln(StringOfChar('-',65));
|
||||
TextColor(ccGreen);
|
||||
writeln(' Using SynLZ compression from Synopse mORMot ', SYNOPSE_FRAMEWORK_VERSION);
|
||||
TextColor(ccLightGray);
|
||||
writeln(#13#10' DBSynLZ filename.dbsynlz [outfilename.db]'#13#10 +
|
||||
'or'#13#10' DBSynLZ filename.db [outfilename.dbsynlz]');
|
||||
end
|
||||
else
|
||||
Process(ParamStr(1));
|
||||
end.
|
||||
|
Reference in New Issue
Block a user