r2914: rename .cl files
[clsql.git] / db-oracle / oracle-objects.lisp
diff --git a/db-oracle/oracle-objects.lisp b/db-oracle/oracle-objects.lisp
new file mode 100644 (file)
index 0000000..23f22d7
--- /dev/null
@@ -0,0 +1,91 @@
+(in-package :clsql-oracle)
+
+(defparameter *oracle-default-varchar2-length* "512")
+
+(defmethod database-get-type-specifier
+  (type args (database oracle-database))
+  (declare (ignore type args))
+  (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))
+
+(defmethod database-get-type-specifier
+  ((type (eql 'integer)) args (database oracle-database))
+  (if args
+      (format nil "NUMBER(~A,~A)"
+             (or (first args) 38) (or (second args) 0))
+    "NUMBER(38,0)"))
+
+(defmethod database-get-type-specifier
+  ((type (eql 'simple-base-string)) args (database oracle-database))
+  (if args
+      (format nil "VARCHAR2(~A)" (car args))
+    (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
+
+(defmethod database-get-type-specifier
+  ((type (eql 'simple-string)) args (database oracle-database))
+  (if args
+      (format nil "VARCHAR2(~A)" (car args))
+    (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
+
+(defmethod database-get-type-specifier
+  ((type (eql 'string)) args (database oracle-database))
+  (if args
+      (format nil "VARCHAR2(~A)" (car args))
+    (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))
+  "VARCHAR2(512)")
+
+(defmethod database-get-type-specifier
+  ((type (eql 'raw-string)) args (database oracle-database))
+  (if args
+      (format nil "VARCHAR2(~A)" (car args))
+    (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))
+  "VARCHAR2(256)")
+
+(defmethod database-get-type-specifier
+  ((type (eql 'float)) args (database oracle-database))
+  (if args
+      (format nil "NUMBER(~A,~A)"
+             (or (first args) 38) (or (second args) 38))
+    "NUMBER"))
+
+(defmethod database-get-type-specifier
+  ((type (eql 'long-float)) args (database oracle-database))
+  (if args
+      (format nil "NUMBER(~A,~A)"
+             (or (first args) 38) (or (second args) 38))
+    "NUMBER"))
+
+(defmethod read-sql-value (val type (database oracle-database))
+  (declare (ignore type database))
+  ;;(format t "value is \"~A\" of type ~A~%" val (type-of val))
+  (etypecase val
+    (string
+     (read-from-string val))
+    (symbol
+     nil)))
+
+(defmethod read-sql-value (val (type (eql 'string)) database)
+  (declare (ignore database))
+  val)
+
+(defmethod read-sql-value
+  (val (type (eql 'integer)) (database oracle-database))
+  (declare (ignore database))
+  val)
+
+(defmethod read-sql-value (val (type (eql 'float)) (database oracle-database))
+  val)
+
+;;; LOCAL-TIME stuff that needs to go into hooks
+#+local-time
+(defmethod clsql-sys::database-get-type-specifier
+  ((type (eql 'local-time::local-time)) args (database oracle-database))
+  (declare (ignore args))
+  "DATE")
+
+#+local-time
+(defmethod clsql-sys::database-get-type-specifier
+  ((type (eql 'local-time::duration))
+   args
+   (database oracle-database))
+  (declare (ignore args))
+  "NUMBER(38)")