From: Russ Tyndall Date: Tue, 30 Oct 2012 15:55:28 +0000 (-0400) Subject: added dates/times to the parameter value coersion and pulled this into X-Git-Tag: v6.4.0~14 X-Git-Url: http://git.kpe.io/?p=clsql.git;a=commitdiff_plain;h=d0f4349abfed43cdb9b618509b8e39579f224326 added dates/times to the parameter value coersion and pulled this into a new generic prepare-sql-parameter --- diff --git a/ChangeLog b/ChangeLog index 40ee2d7..0db8fd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-10-30 Russ Tyndall + * sql/command-object.lisp - added dates/times to the parameter value + coersion and pulled this into a new generic prepare-sql-parameter + 2012-09-04 Kevin Rosenberg * Version 6.3 released diff --git a/sql/command-object.lisp b/sql/command-object.lisp index d931bac..6af4bc8 100644 --- a/sql/command-object.lisp +++ b/sql/command-object.lisp @@ -35,18 +35,30 @@ :documentation "Have we already prepared this command object?") )) + +(defgeneric prepare-sql-parameter (sql-parameter) + (:documentation "This method is responsible for formatting parameters + as the database expects them (eg: :false is nil, nil is :null, dates are iso8601 strings)") + (:method (sql-parameter) + (typecase sql-parameter + (null :null) + (symbol + (if (member sql-parameter (list :false :F)) + nil + (princ-to-string sql-parameter))) + (clsql-sys:date (format-date nil sql-parameter :format :iso8601)) + (clsql-sys:wall-time (format-time nil sql-parameter :format :iso8601)) + (t sql-parameter)))) + (defmethod initialize-instance :after ((o command-object) &key &allow-other-keys ) - ;; Inits parameter nulls + ;; Inits parameter value coersion (setf (parameters o) (parameters o))) (defmethod (setf parameters) (new (o command-object)) " This causes the semantics to match cl-sql instead of cl-postgresql " (setf (slot-value o 'parameters) - (loop for p in new - collecting (cond ((null p) :null) - ((member p (list :false :F)) nil) - (T p))))) + (loop for p in new collecting (prepare-sql-parameter p)))) (defun reset-command-object (co) "Resets the command object to have no name and to be unprepared diff --git a/sql/package.lisp b/sql/package.lisp index eb5b0ed..eb6faf8 100644 --- a/sql/package.lisp +++ b/sql/package.lisp @@ -213,6 +213,7 @@ ;; Command-object.lisp #:expression #:parameters + #:prepare-sql-parameter #:prepared-name #:has-been-prepared #:command-object