[yunqa.de] Re: Accessing sqlar and zipfile functions

  • From: Delphi Inspiration <delphi@xxxxxxxx>
  • To: yunqa@xxxxxxxxxxxxx
  • Date: Sat, 2 Mar 2019 10:15:55 +0100

On 01.03.2019 20:37, Tom Holden wrote:

1. zipfile extension adds COMPRESS() and UNCOMPRESS().

The SQLiteSpy COMPRESS() and UNCOMPRESS() SQL functions are custom
additions. They are not part of the zipfile extension. The zipfile
extension is described here: https://www.sqlite.org/zipfile.html

The SQLiteSpy COMPRESS(X) and UNCOMPRESS(Y) SQL function compress and
decompress data using the zlib library.

COMPRESS() returns the zlib raw deflate data stream. UNCOMPRESS()
inflates this stream back to its original.

Both functions handle SQLite's BLOB and TEXT types only. Other types are
passed through unchanged with no compression/decompression applied.

So SELECT UNCOMPRESS(COMPRESS(/something/)) returns /something/ that
was compressed to a Blob and then uncompressed.

2. sqlar extension adds SQLAR_COMPRESS() and SQLAR_UNCOMPRESS(),
but:

* SELECT SQLAR_COMPRESS(/something/) returns /something/, unchanged

This is only correct if /something/ is NOT a BLOB or if the BLOB input
is incompressible.

A string is returned unchanged:

  SELECT SQLAR_COMPRESS('0123456789abcdef0123456789abcdef01234567');

This BLOB is compressed to a smaller size:

  SELECT SQLAR_COMPRESS(X'0123456789abcdef0123456789abcdef01234567');

This small blob is incompressible and returned unchanged:

  SELECT SQLAR_COMPRESS('0123');

* /SELECT SQLAR_ UNCOMPRESS( SQLAR_ COMPRESS(/something/)) returns
an error 1 "wrong number of arguments to function
sqlar_uncompress()"

The SZ argument is missing from SQLAR_UNCOMPRESS(Y, SZ). SZ is the
original original uncompressed size of the input to SQLAR_COMPRESS(X)
that generated Y.

Here is a working example:

  SELECT SQLAR_UNCOMPRESS(
    SQLAR_COMPRESS(x'0123456789abcdef0123456789abcdef01234567'),
    20); -- Uncompressed size argument added.

3. The addition of these extensions does not include SQLite Archive
File functionality.

An SQLite Archive File is just a normal SQLite3 database. You can open
it in SQLiteSpy and use the SQLAR functions to read/write its
uncompressed/compressed content.

The SQLite Archive File database schema is described here:
https://www.sqlite.org/sqlar.htm

Ralf
_______________________________________________
Delphi Inspiration mailing list
yunqa@xxxxxxxxxxxxx
//www.freelists.org/list/yunqa



Other related posts: