X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fgeneric-odbc.lisp;h=fd701a9ccd9aa8d35946f53e95365ecc871222f7;hp=4995c25ff420a51112e5c553fcc6cec3e43f1545;hb=4f756ab532ff033a34597a1c8030379e252952ca;hpb=30186614582039bdc3d3f86bc5165ef300c5d3e0 diff --git a/sql/generic-odbc.lisp b/sql/generic-odbc.lisp index 4995c25..fd701a9 100644 --- a/sql/generic-odbc.lisp +++ b/sql/generic-odbc.lisp @@ -44,53 +44,22 @@ (slot-value db 'list-all-table-columns-fn) (intern (symbol-name '#:list-all-table-columns) pkg)))) -;;; Object methods - -(defmethod read-sql-value (val (type (eql 'boolean)) - (database generic-odbc-database) - (db-type (eql :postgresql))) - (if (string= "0" val) nil t)) - -(defmethod read-sql-value (val (type (eql 'generalized-boolean)) - (database generic-odbc-database) - (db-type (eql :postgresql))) - (if (string= "0" val) nil t)) - -(defmethod read-sql-value (val (type (eql 'boolean)) database - (db-type (eql :mssql))) - (declare (ignore database)) - (etypecase val - (string (if (string= "0" val) nil t)) - (integer (if (zerop val) nil t)))) - -(defmethod read-sql-value (val (type (eql 'generalized-boolean)) database - (db-type (eql :mssql))) - (declare (ignore database)) - (etypecase val - (string (if (string= "0" val) nil t)) - (integer (if (zerop val) nil t)))) - ;;; Type methods -(defmethod database-get-type-specifier ((type (eql 'wall-time)) args database - (db-type (eql :mssql))) - (declare (ignore args database)) - "DATETIME") - -(defmethod database-get-type-specifier ((type (eql 'date)) args database +(defmethod database-get-type-specifier ((type symbol) args database (db-type (eql :mssql))) - (declare (ignore args database)) - "SMALLDATETIME") - -(defmethod database-get-type-specifier ((type (eql 'boolean)) args database - (db-type (eql :mssql))) - (declare (ignore args database)) - "BIT") - -(defmethod database-get-type-specifier ((type (eql 'generalized-boolean)) args database - (db-type (eql :mssql))) - (declare (ignore args database)) - "BIT") + "Special database types for MSSQL backends" + (declare (ignore database db-type args)) + (case type + (wall-time "DATETIME") + (date "SMALLDATETIME") + ((generalized-boolean boolean) "BIT") + ((longchar text) "ntext") + ((varchar string) + (if args + (format nil "NVARCHAR(~A)" (car args)) + (format nil "NVARCHAR(~D)" *default-string-length*))) + (t (call-next-method)))) ;;; Generation of SQL strings from lisp expressions @@ -99,16 +68,6 @@ (:mssql "1") (t "'Y'"))) -(defmethod database-output-sql-as-type ((type (eql 'boolean)) val database - (db-type (eql :mssql))) - (declare (ignore database)) - (if val 1 0)) - -(defmethod database-output-sql-as-type ((type (eql 'generalized-boolean)) val database - (db-type (eql :mssql))) - (declare (ignore database)) - (if val 1 0)) - ;;; Database backend capabilities (defmethod db-type-use-fully-qualified-column-on-drop-index? ((db-type (eql :mssql)))