chickadee » postgresql » default-type-unparsers

default-type-unparsers #!optional ALISTparameter

Just as PostgreSQL types are converted to Scheme types in result sets, Scheme types need to be converted to PostgreSQL types when providing positional parameters to queries. For this, the library uses type unparsers. Just like type parsers, you can override them either per-connection using the TYPE-UNPARSERS parameter to the connect procedure, or globally by changing a parameter.

This alist is a mapping of predicates to unparsers. Predicates are procedures which accept a scheme object and return a true value if the object is of the type for which the unparser is intended. Unparsers are procedures which accept two arguments; the connection object and the scheme object to unparse. Unparsers return either a string, a blob or an sql-null object to be used in the query.

It is not necessary to reload type unparsers after defining a new data type in the database.

Order matters; the type unparser alist is traversed from left to right, trying predicates in order and invoking the unparser linked to the first predicate that does not return #f. If none of the predicates match, the type must be of string, blob or sql-null type. If not, the query procedure will raise an error.

The default unparsers look like this:

`((,string? . ,(lambda (conn s) s))
  (,u8vector? . ,(lambda (conn v) (u8vector->blob/shared v)))
  (,char? . ,(lambda (conn c) (string c)))
  (,boolean? . ,bool-unparser)
  (,number? . ,(lambda (conn n) (number->string n)))
  (,vector? . ,vector-unparser)
  (,pair? . ,list-unparser))