X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fcommand-object.lisp;h=f6c57693dbb5c9db6eea7ddee51012696f488aae;hb=6828cb461404126aa0c334fe2b669d435304f73e;hp=47dad33e28e651007533f0c516d84ab2d10444ae;hpb=d704ea35ebc38b6b9efd5cbb0417d0340bee3c5c;p=clsql.git diff --git a/sql/command-object.lisp b/sql/command-object.lisp index 47dad33..f6c5769 100644 --- a/sql/command-object.lisp +++ b/sql/command-object.lisp @@ -32,6 +32,31 @@ :documentation "Have we already prepared this command object") )) -(export '(expression parameters prepared-name has-been-prepared command-object)) +(defmethod initialize-instance :after ((o command-object) &key &allow-other-keys ) + ;; Inits parameter nulls + (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 (parameters o) + collect (cond ((null p) :null) + ((member p (list :false :F)) nil) + (T p))))) + +(defun reset-command-object (co) + "Resets the command object to have no name and to be unprepared + (This is useful if you want to run a command against a second database)" + (setf (prepared-name co) "" + (has-been-prepared co) nil)) + +(defun command-object (expression &optional parameters (prepared-name "")) + (make-instance 'command-object + :expression expression + :parameters parameters + :prepared-name prepared-name)) + +(export '(expression parameters prepared-name has-been-prepared command-object reset-command-object))