+
+(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))))
+