(defun float-to-sql-string (num)
"Convert exponent character for SQL"
(let ((str (write-to-string num :readably t)))
+ (declare (type string str))
(cond
((find #\f str)
(substitute #\e #\f str))
(defun substitute-string-for-char (procstr match-char subst-str)
"Substitutes a string for a single matching character of a string"
+ (declare (type string procstr))
(let ((pos (position match-char procstr)))
(if pos
(concatenate 'string
(setq pos (1+ end))))
(defun string-to-list-connection-spec (str)
+ (declare (type string str))
(let ((at-pos (position-char #\@ str 0 (length str))))
(cond
((and at-pos (> (length str) at-pos))
(eval-when (:compile-toplevel :load-toplevel :execute)
(setq cl:*features* (delete :clsql-lowercase-reader cl:*features*)))
+(defun replace-all (string part replacement &key (test #'char=) stream)
+ "Returns a new string in which all the occurences of the part
+is replaced with replacement. [FROM http://cl-cookbook.sourceforge.net/strings.html#manip]"
+ (let ((out (or stream (make-string-output-stream))))
+ (loop with part-length = (length part)
+ for old-pos = 0 then (+ pos part-length)
+ for pos = (search part string
+ :start2 old-pos
+ :test test)
+ do (write-string string out
+ :start old-pos
+ :end (or pos (length string)))
+ when pos do (write-string replacement out)
+ while pos)
+ (unless stream
+ (get-output-stream-string out))))
\ No newline at end of file