Database connections as subprocesses Lassi Kortela (14 Sep 2019 07:30 UTC)
Re: Database connections as subprocesses John Cowan (15 Sep 2019 01:06 UTC)
Re: Database connections as subprocesses Lassi Kortela (15 Sep 2019 06:28 UTC)
Re: Database connections as subprocesses John Cowan (15 Sep 2019 23:02 UTC)
Re: Database connections as subprocesses Lassi Kortela (16 Sep 2019 08:22 UTC)
Binary S-expressions Lassi Kortela (16 Sep 2019 17:49 UTC)
(missing)
Re: Binary S-expressions Lassi Kortela (17 Sep 2019 09:46 UTC)
Re: Binary S-expressions Alaric Snell-Pym (17 Sep 2019 11:33 UTC)
Re: Binary S-expressions Lassi Kortela (17 Sep 2019 12:05 UTC)
Re: Binary S-expressions Alaric Snell-Pym (17 Sep 2019 12:23 UTC)
Re: Binary S-expressions Lassi Kortela (17 Sep 2019 13:20 UTC)
Re: Binary S-expressions Lassi Kortela (17 Sep 2019 13:48 UTC)
Re: Binary S-expressions Alaric Snell-Pym (17 Sep 2019 15:52 UTC)
Re: Binary S-expressions hga@xxxxxx (17 Sep 2019 16:25 UTC)
Re: Binary S-expressions rain1@xxxxxx (17 Sep 2019 09:28 UTC)
Re: Binary S-expressions Lassi Kortela (17 Sep 2019 10:05 UTC)
Python library for binary S-expressions Lassi Kortela (17 Sep 2019 21:51 UTC)
R7RS library for binary S-expressions Lassi Kortela (17 Sep 2019 23:56 UTC)
Re: Database connections as subprocesses Alaric Snell-Pym (16 Sep 2019 08:40 UTC)
Re: Database connections as subprocesses Lassi Kortela (16 Sep 2019 09:22 UTC)
Re: Database connections as subprocesses Alaric Snell-Pym (16 Sep 2019 11:28 UTC)
Re: Database connections as subprocesses hga@xxxxxx (16 Sep 2019 13:28 UTC)
Re: Database connections as subprocesses Lassi Kortela (16 Sep 2019 13:50 UTC)
Re: Database connections as subprocesses hga@xxxxxx (17 Sep 2019 13:59 UTC)
Re: Database connections as subprocesses John Cowan (16 Sep 2019 22:41 UTC)
Re: Database connections as subprocesses Lassi Kortela (17 Sep 2019 09:57 UTC)
Re: Database connections as subprocesses Lassi Kortela (17 Sep 2019 10:22 UTC)

Re: Binary S-expressions Alaric Snell-Pym 17 Sep 2019 15:52 UTC
On 17/09/2019 14:48, Lassi Kortela wrote:
> This is getting off-topic for a persistence list, but for lack of a
> better forum...

Oh, I think it's relevant, because this is all about the encoding
between Scheme types and database values...

Ideally, our drivers will do whatever is correct with the database at
hand to ensure that values of all types are correctly handled.

To support them in that, we need to define the types that are supported.

Something like an SRFI-19 TAI time object represents a single point in
time, which might be converted to a nice TIMESTAMP WITH TIME ZONE (of
UTC?) for storage in a database; but if we read *back* a TIMESTAMP WITH
TIME ZONE we should represent it as an object that contains the point in
time as well as the timezone, because although 2019-09-17T15:32:36+00:00
and 2019-09-17T16:32:36+01:00 represent the same point in time, they are
still different timestamp objects.

As for strings... hopefully, the driver will negotiate with the database
to find out what encoding is expected, but IIRC with MySQL this can vary
between columns in the same database so I'm not sure if there's a nice
way to automatically use the correct encoding in all cases:

https://dev.mysql.com/doc/refman/5.7/en/charset-column.html

The best we can do there is probably to have a "default encoding" set as
part of the options when making a connection, maybe with the option to
override it per-column when binding strings into queries through some
MySQL-specific mechanism. If R7RS strings are Unicode, we need the DB
driver to map from R7RS strings into whatever wire format there is!
PostgreSQL seems to have a proper string type with functions to encode
strings into byte arrays using a given encoding and decode them back;
the actual storage encoding for strings is a database-wide property, and
it lets you set the client encoding on a connection and will translate
for you, so it should be simple to correctly encode/decode strings at
the libpq level:
https://tapoueh.org/blog/2018/04/postgresql-data-types-text-encoding/

However, other users of the same database will often fail to send
correctly encoded text, due to not realising that it's a problem and
just assuming that whatever string of bytes their app has will be
interpreted the same by the database (a friend of mine works at a large
bank and has just recently had to write a tool that goes through tables
heuristically guessing the encoding of strings between latin-1, various
Windows codepages, and utf-8 *as it varies between rows* (due to the
carelessness of previous users over the years) in order to re-encode
them correctly... For normal users, we should magically do the right
thing to make their application correctly send strings to and from the
database; but we should also cater to "advanced" users having to suffer
that kind of work, if we must, perhaps by having some mechanism to
request that strings be returned from the DB as bytevectors for them to
do their own decoding on...

Ta,

--
Alaric Snell-Pym   (M7KIT)
http://www.snell-pym.org.uk/alaric/