summaryrefslogtreecommitdiff
path: root/src/postgres-record.lisp
blob: 5115a68b45a46aa6f03ffe95bd3511e063410510 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
(declaim (optimize (speed 0) (safety 3) (debug 3)))

(in-package :org-ckons-sql)

(defclass postgres-record (record) ())

(defun sysdate ()
  (simple-date-to-date (caar (execute-query (format nil "select now()")))))

(defun date-or-nothing (value)
  (handler-case
      (simple-date-to-date value)
    (error (e)
      (declare (ignore e))
      nil)))

(defmethod to-date ((postgres-record postgres-record) date-string)
  (quote-string date-string))

(defmethod sanitize ((postgres-record postgres-record) field)
  (cond ((numberp field)
         (if (integerp field)
             (format nil "~a" (parse-integer (format nil "~a" field) :junk-allowed t))
             (org-ckons-core::real-to-string field :places 4)))
        ((org-ckons-core::null-or-empty-p field)
         "NULL")
        ((stringp field)
         (cond ((org-ckons-core::match-it "^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d" field)
                (to-date postgres-record field))
               (t
                (quote-string field))))
        (t
         field)))

(defmethod call-pg-function* ((postgres-record postgres-record))
  (execute-query (format nil "select * from ~a" (*table postgres-record))))