Newbie issue with read/write and SQL-NULL

My objective is to backup and restore a MYSQL table.
I am selecting all of the rows with (define sql-rows (query-rows...
I am dumping them to a file with (with-output-to-file "backup.dat" (lambda () (write sql-rows)...
This appears to work.
I am reading the data back with (define b-up (with-input-from-file "backup.dat" (lambda () (read)...
This fails with "read: bad syntax '#<' when it tries to read a SQL NULL, and I am puzzled as to how to get around this. On a simple test, read and write seem to handle the SQL-NULL if I don't go via a file port, but fail if I do. Probably something basic, as I am new to Racket, but I have not been able to find an answer in hunting through the documentation, so some help would be appreciated. Thanks.

4 Likes

Many of the Racket values that represent SQL scalar values are not readable (or at least do not survive write-read roundtripping). That includes the representation of NULL, dates and times, bit strings, geometric values, etc. But I believe all of them are serializable (see the racket/serialize library), so if you write the result of calling serialize on the rows and then call deserialize on the result of read, you should get back equivalent values.

3 Likes

Perfect! Much appreciated, that saved me a lot of head scratching.