SQLite Archiver

Check-in [4824e73896]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Update the README.md file to talk about the difference between the zlib compression format and the raw deflate compression format and why SQLAR uses the zlib format.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | trunk
Files: files | file ages | folders
SHA1: 4824e7389653a46fb628922182d732cf935a1c82
User & Date: drh 2018-01-07 19:37:12
Context
2018-01-07
19:37
Update the README.md file to talk about the difference between the zlib compression format and the raw deflate compression format and why SQLAR uses the zlib format. Leaf check-in: 4824e73896 user: drh tags: trunk
2017-12-04
16:24
Update README.md to describe how symbolic links are stored in an archive. check-in: ef2844a7e0 user: dan tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to README.md.

1
2
3
4
5
6
7
8
9
10
<h1 align="center">SQLAR - SQLite Archiver</h1>

This repository contains sources for a proof-of-concept "SQLite Archiver"
program.  This program (named "sqlar") operates much like "zip", except that
the compressed archive it builds is stored in an SQLite database instead
of a ZIP archive.

The motivation for this is to see how much larger an SQLite database file
is compared to a ZIP archive containing the same content.  The answer depends
on the filenames, but 2% seems to be a reasonable guess.  In other words,


|







1
2
3
4
5
6
7
8
9
10
<h1 align="center">SQLAR - SQLite Archiver</h1>

This repository contains sources for the "SQLite Archiver"
program.  This program (named "sqlar") operates much like "zip", except that
the compressed archive it builds is stored in an SQLite database instead
of a ZIP archive.

The motivation for this is to see how much larger an SQLite database file
is compared to a ZIP archive containing the same content.  The answer depends
on the filenames, but 2% seems to be a reasonable guess.  In other words,
64
65
66
67
68
69
70












71
72
73
74
75
76
77
Both directories and empty files have sqlar.sz==0.  Directories can be
distinguished from empty files because directories have sqlar.data IS NULL.
The file is compressed if length(sqlar.blob)<sqlar.sz and is stored
as plaintext if length(sqlar.blob)==sqlar.sz.

Symbolic links have sqlar.sz set to -1, and the link target stored as
a text value in the sqlar.data field.













## Fuse Filesystem

An SQLite Archive file can be mounted as a 
[Fuse Filesystem](http://fuse.sourceforge.net) using the "sqlarfs"
utility, including with this project.








>
>
>
>
>
>
>
>
>
>
>
>







64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Both directories and empty files have sqlar.sz==0.  Directories can be
distinguished from empty files because directories have sqlar.data IS NULL.
The file is compressed if length(sqlar.blob)<sqlar.sz and is stored
as plaintext if length(sqlar.blob)==sqlar.sz.

Symbolic links have sqlar.sz set to -1, and the link target stored as
a text value in the sqlar.data field.

SQLAR uses the "zlib format" for compression.  ZIP uses the raw deflate format.
The difference is that the zlib format contains a two byte compression-type
indentification header (0x78 0x9c) and a 4-byte checksum at the end.  Thus
the "data" for SQLAR is always 6 bytes larger than the equivalent data for
ZIP.  The SQLAR program uses the zlib format rather than the slightly smaller
raw deflate format because that is what the 
[zlib documentation](https://www.zlib.net/manual.html) recommends.

SQLAR might someday be extended to support additional compression formats
other than deflate.  If so, the data field will contain new header values to
identify entries compressed using the new formats.

## Fuse Filesystem

An SQLite Archive file can be mounted as a 
[Fuse Filesystem](http://fuse.sourceforge.net) using the "sqlarfs"
utility, including with this project.