Gauche DBI(Postgresql) の NULL は "" を返す。

Gauche DBI(Postgresql) の NULL は "" を返す。

(use dbi)
(use gauche.collection)
 
(define (select-db dbname sql)
  (guard (e ((<dbi-error> e) (raise e)))
    (let* ((conn   (dbi-connect (string-append "dbi:pg:dbname=" dbname)))
           (result (dbi-execute (dbi-prepare conn sql)))
           (getter (relation-accessor result)))
       (let ((dat (map (lambda (row)
                             (map (lambda (x) (getter row x)) 
                                  (relation-column-names result)))
                       result)))
          (dbi-close conn)
          dat))))

(define dbname "hogedb") 
(define sql "SELECT hoge FROM kaiin where hoge is NULL LIMIT 10") 

(let ((n (select-db dbname sql)))
  (print n)                      ;;=> (() () () () () () () () () ())
  (print (car n))                ;;=> ()
  (print (length (car n)))       ;;=> 1
  (let ((hoge (car (car n))))
    (print (string? hoge))       ;;=> #t
    (print (string-length hoge)) ;;=> 0
    (print (string=? "" hoge)))) ;;=> #t