X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Foodml.lisp;h=78fd88648db8ca12cd081605d7d7bcf84d3c5e6c;hp=82f166e1da642108a48556f958bf90abf61c143e;hb=b5890c31a60303397efedb2110f46c6388426170;hpb=b08c25a7a9e56fb125caa9f7d7a56a473615007e diff --git a/sql/oodml.lisp b/sql/oodml.lisp index 82f166e..78fd886 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -307,17 +307,31 @@ (sql-expression :table (view-table class)))) -(defparameter *default-varchar-length* 255) - (defmethod database-get-type-specifier (type args database db-type) (declare (ignore type args database db-type)) - (format nil "VARCHAR(~D)" *default-varchar-length*)) + (format nil "VARCHAR(~D)" *default-string-length*)) (defmethod database-get-type-specifier ((type (eql 'integer)) args database db-type) (declare (ignore database db-type)) (if args (format nil "INT(~A)" (car args)) - "INT")) + "INT")) + +(deftype tinyint () + "An 8-bit integer, this width may vary by SQL implementation." + 'integer) + +(defmethod database-get-type-specifier ((type (eql 'tinyint)) args database db-type) + (declare (ignore args database db-type)) + "INT") + +(deftype smallint () + "An integer smaller than a 32-bit integer, this width may vary by SQL implementation." + 'integer) + +(defmethod database-get-type-specifier ((type (eql 'smallint)) args database db-type) + (declare (ignore args database db-type)) + "INT") (deftype bigint () "An integer larger than a 32-bit integer, this width may vary by SQL implementation." @@ -336,13 +350,13 @@ (declare (ignore database db-type)) (if args (format nil "VARCHAR(~A)" (car args)) - (format nil "VARCHAR(~D)" *default-varchar-length*))) + (format nil "VARCHAR(~D)" *default-string-length*))) (defmethod database-get-type-specifier ((type (eql 'string)) args database db-type) (declare (ignore database db-type)) (if args (format nil "CHAR(~A)" (car args)) - (format nil "VARCHAR(~D)" *default-varchar-length*))) + (format nil "VARCHAR(~D)" *default-string-length*))) (deftype universal-time () "A positive integer as returned by GET-UNIVERSAL-TIME." @@ -501,6 +515,14 @@ (parse-integer val))) (number val))) +(defmethod read-sql-value (val (type (eql 'smallint)) database db-type) + (declare (ignore database db-type)) + (etypecase val + (string + (unless (string-equal "NIL" val) + (parse-integer val))) + (number val))) + (defmethod read-sql-value (val (type (eql 'bigint)) database db-type) (declare (ignore database db-type)) (etypecase val