diff options
| author | ckonstanski <carlos.konstanski@olo.com> | 2021-05-30 22:01:56 -0600 |
|---|---|---|
| committer | ckonstanski <carlos.konstanski@olo.com> | 2021-05-30 22:01:56 -0600 |
| commit | 7ead89d56e2d54bf65779f35ddfc63155fcce753 (patch) | |
| tree | 423ae6a5c68d5250c730a8a688e236f61f8532a0 /src/postgres-record.lisp | |
initial commit
Diffstat (limited to 'src/postgres-record.lisp')
| -rw-r--r-- | src/postgres-record.lisp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/postgres-record.lisp b/src/postgres-record.lisp new file mode 100644 index 0000000..5115a68 --- /dev/null +++ b/src/postgres-record.lisp @@ -0,0 +1,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)))) |
