X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fgeneric-postgresql.lisp;h=61d7e1529f30bc02eda9064336cbb22e8fd8aa71;hp=178b3b0473901ac0909fd64381a2de2b816620db;hb=151c009059521769a44ec35dfdceb86d5373af99;hpb=47d5ae2b1454553fa6d71c08862c7dfc5df97a92 diff --git a/sql/generic-postgresql.lisp b/sql/generic-postgresql.lisp index 178b3b0..61d7e15 100644 --- a/sql/generic-postgresql.lisp +++ b/sql/generic-postgresql.lisp @@ -20,43 +20,28 @@ ;; Object functions -(defmethod database-get-type-specifier (type args database +(defmethod database-get-type-specifier ((type symbol) args database (db-type (eql :postgresql))) - (declare (ignore type args database)) - "VARCHAR") - -(defmethod database-get-type-specifier ((type (eql 'string)) args database - (db-type (eql :postgresql))) - (declare (ignore database)) - (if args - (format nil "CHAR(~A)" (car args)) - "VARCHAR")) - -(defmethod database-get-type-specifier ((type (eql 'tinyint)) args database - (db-type (eql :postgresql))) - (declare (ignore args database)) - "INT2") - -(defmethod database-get-type-specifier ((type (eql 'smallint)) args database - (db-type (eql :postgresql))) - (declare (ignore args database)) - "INT2") - -(defmethod database-get-type-specifier ((type (eql 'wall-time)) args database - (db-type (eql :postgresql))) - (declare (ignore args database)) - "TIMESTAMP WITHOUT TIME ZONE") - -(defmethod database-get-type-specifier ((type (eql 'number)) args database - (db-type (eql :postgresql))) - (declare (ignore database)) - (cond - ((and (consp args) (= (length args) 2)) - (format nil "NUMERIC(~D,~D)" (first args) (second args))) - ((and (consp args) (= (length args) 1)) - (format nil "NUMERIC(~D)" (first args))) - (t - "NUMERIC"))) + "Special database types for POSTGRESQL backends" + (declare (ignore database db-type)) + (case type + (wall-time ;; TODO: why is this WITHOUT... + "TIMESTAMP WITHOUT TIME ZONE") + (string + ;; TODO: the default to CHAR here seems specious as the PG docs claim + ;; that char is slower than varchar + (if args + (format nil "CHAR(~A)" (car args)) + "VARCHAR")) + (number + (cond + ((and (consp args) (= (length args) 2)) + (format nil "NUMERIC(~D,~D)" (first args) (second args))) + ((and (consp args) (= (length args) 1)) + (format nil "NUMERIC(~D)" (first args))) + (t "NUMERIC"))) + ((tinyint smallint) "INT2") + (t (call-next-method)))) ;;; Backend functions