/// 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.