X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fgeneric-postgresql.lisp;h=61d7e1529f30bc02eda9064336cbb22e8fd8aa71;hp=feeaced389b125c371f40475cfd8bb0ba79e021a;hb=151c009059521769a44ec35dfdceb86d5373af99;hpb=4972b90bab0ee31300e49c0c06b472de747cbbb6 diff --git a/sql/generic-postgresql.lisp b/sql/generic-postgresql.lisp index feeaced..61d7e15 100644 --- a/sql/generic-postgresql.lisp +++ b/sql/generic-postgresql.lisp @@ -20,44 +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))) - (warn "Could not determine a valid :postgresqlsql type specifier for ~A ~A ~A, defaulting to VARCHAR " - 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