r9457: Reworked CLSQL file structure.
[clsql.git] / db-oracle / oracle-objects.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name: oracle-objects.lisp
6 ;;;;
7 ;;;; $Id$
8 ;;;;
9 ;;;; This file is part of CLSQL.
10 ;;;;
11 ;;;; CLSQL users are granted the rights to distribute and use this software
12 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
13 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
14 ;;;; *************************************************************************
15
16 (in-package #:clsql-oracle)
17
18 (defparameter *oracle-default-varchar2-length* "512")
19
20 (defmethod database-get-type-specifier (type args database (db-type (eql :oracle)))
21   (declare (ignore type args database))
22   (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))
23
24 (defmethod database-get-type-specifier ((type (eql 'integer)) args 
25                                         database (db-type (eql :oracle)))
26   (declare (ignore database))
27   (if args
28       (format nil "NUMBER(~A,~A)"
29               (or (first args) 38) (or (second args) 0))
30     "INTEGER"))
31
32 (defmethod database-get-type-specifier ((type (eql 'bigint)) args
33                                         database (db-type (eql :oracle)))
34   (declare (ignore database)) 
35   (if args
36       (format nil "NUMBER(~A,~A)"
37               (or (first args) 38) (or (second args) 0))
38     "NUMBER(38,0)"))
39
40 (defmethod database-get-type-specifier ((type (eql 'simple-base-string)) args
41                                         database (db-type (eql :oracle)))
42   (declare (ignore database)) 
43   (if args
44       (format nil "VARCHAR2(~A)" (car args))
45     (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
46
47 (defmethod database-get-type-specifier ((type (eql 'simple-string)) args
48                                         database (db-type (eql :oracle)))
49   (declare (ignore database)) 
50   (if args
51       (format nil "VARCHAR2(~A)" (car args))
52     (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
53
54 (defmethod database-get-type-specifier ((type (eql 'string)) args
55                                         database (db-type (eql :oracle)))
56   (declare (ignore database)) 
57   (if args
58       (format nil "VARCHAR2(~A)" (car args))
59     (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
60
61 (defmethod database-get-type-specifier ((type (eql 'raw-string)) args
62                                         database (db-type (eql :oracle)))
63   (declare (ignore database)) 
64   (if args
65       (format nil "VARCHAR2(~A)" (car args))
66     (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")))
67
68 (defmethod database-get-type-specifier ((type (eql 'float)) args
69                                         database (db-type (eql :oracle)))
70   (declare (ignore database)) 
71   (if args
72       (format nil "NUMBER(~A,~A)" (or (first args) 38) (or (second args) 38))
73     "double precision"))
74
75 (defmethod database-get-type-specifier ((type (eql 'long-float)) args
76                                         database (db-type (eql :oracle)))
77   (declare (ignore database)) 
78   (if args
79       (format nil "NUMBER(~A,~A)"
80               (or (first args) 38) (or (second args) 38))
81     "double precision"))
82
83 (defmethod database-get-type-specifier ((type (eql 'boolean)) args
84                                         database (db-type (eql :oracle)))
85   (declare (ignore args database))
86   "CHAR(1)")
87
88 (defmethod read-sql-value (val type
89                            database (db-type (eql :oracle)))
90   ;;(format t "value is \"~A\" of type ~A~%" val (type-of val))
91   (declare (ignore type database))
92   (etypecase val
93     (string
94      (read-from-string val))
95     (symbol
96      nil)))
97
98 (defmethod read-sql-value (val (type (eql 'integer))
99                            database (db-type (eql :oracle)))
100   (declare (ignore database))
101   val)
102
103 (defmethod read-sql-value (val (type (eql 'float))
104                            database (db-type (eql :oracle)))
105   (declare (ignore database))
106   val)
107
108 (defmethod read-sql-value (val (type (eql 'boolean))
109                            database (db-type (eql :oracle)))
110   (declare (ignore database))
111   (when (char-equal #\t (schar val 0))
112     t))
113
114 (defmethod database-get-type-specifier ((type (eql 'wall-time)) args
115                                         database (db-type (eql :oracle)))
116   (declare (ignore args database))
117   "DATE")
118
119 (defmethod database-get-type-specifier ((type (eql 'duration)) args
120                                         database (db-type (eql :oracle)))
121   (declare (ignore args database))
122   "NUMBER(38)")