r9576: Add generalized-boolean
[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 (defmethod database-get-type-specifier (type args database (db-type (eql :oracle)))
19   (declare (ignore type args database))
20     (format nil "VARCHAR2(~D)" *default-varchar-length*))
21
22 (defmethod database-get-type-specifier ((type (eql 'integer)) args 
23                                         database (db-type (eql :oracle)))
24   (declare (ignore database))
25   (if args
26       (format nil "NUMBER(~A,~A)"
27               (or (first args) 38) (or (second args) 0))
28     "INTEGER"))
29
30 (defmethod database-get-type-specifier ((type (eql 'bigint)) args
31                                         database (db-type (eql :oracle)))
32   (declare (ignore args database)) 
33   "CHAR(20)")
34
35 (defmethod database-get-type-specifier ((type (eql 'universal-time)) args
36                                         database (db-type (eql :oracle)))
37   (declare (ignore args database)) 
38   "CHAR(20)")
39
40 (defmethod database-get-type-specifier ((type (eql 'string)) args
41                                         database (db-type (eql :oracle)))
42   (declare (ignore database)) 
43   (if args
44       (format nil "CHAR(~A)" (car args))
45     (format nil "VARCHAR2(~D)" *default-varchar-length*)))
46
47 (defmethod database-get-type-specifier ((type (eql 'varchar)) args
48                                         database (db-type (eql :oracle)))
49   (declare (ignore database)) 
50   (if args
51       (format nil "VARCHAR2(~A)" (car args))
52     (format nil "VARCHAR2(~D)" *default-varchar-length*)))
53
54 (defmethod database-get-type-specifier ((type (eql 'float)) args
55                                         database (db-type (eql :oracle)))
56   (declare (ignore database)) 
57   (if args
58       (format nil "NUMBER(~A,~A)" (or (first args) 38) (or (second args) 38))
59     "DOUBLE PRECISION"))
60
61 (defmethod database-get-type-specifier ((type (eql 'long-float)) args
62                                         database (db-type (eql :oracle)))
63   (declare (ignore database)) 
64   (if args
65       (format nil "NUMBER(~A,~A)"
66               (or (first args) 38) (or (second args) 38))
67     "DOUBLE PRECISION"))
68
69 (defmethod database-get-type-specifier ((type (eql 'boolean)) args
70                                         database (db-type (eql :oracle)))
71   (declare (ignore args database))
72   "CHAR(1)")
73
74 (defmethod database-get-type-specifier ((type (eql 'generalized-boolean)) args
75                                         database (db-type (eql :oracle)))
76   (declare (ignore args database))
77   "CHAR(1)")
78
79 (defmethod read-sql-value (val type
80                            database (db-type (eql :oracle)))
81   ;;(format t "value is \"~A\" of type ~A~%" val (type-of val))
82   (declare (ignore type database))
83   (etypecase val
84     (string
85      (read-from-string val))
86     (symbol
87      nil)))
88
89 (defmethod read-sql-value (val (type (eql 'integer))
90                            database (db-type (eql :oracle)))
91   (declare (ignore database))
92   val)
93
94 (defmethod read-sql-value (val (type (eql 'float))
95                            database (db-type (eql :oracle)))
96   (declare (ignore database))
97   val)
98
99 (defmethod read-sql-value (val (type (eql 'boolean))
100                            database (db-type (eql :oracle)))
101   (declare (ignore database))
102   (when (char-equal #\t (schar val 0))
103     t))
104
105 (defmethod read-sql-value (val (type (eql 'generalized-boolean))
106                            database (db-type (eql :oracle)))
107   (declare (ignore database))
108   (when (char-equal #\t (schar val 0))
109     t))
110
111 (defmethod read-sql-value (val (type (eql 'bigint))
112                            database (db-type (eql :oracle)))
113   (declare (ignore database))
114   (parse-integer val))
115
116 (defmethod read-sql-value (val (type (eql 'universal-time))
117                            database (db-type (eql :oracle)))
118   (declare (ignore database))
119   (parse-integer val))
120
121
122 (defmethod database-get-type-specifier ((type (eql 'wall-time)) args
123                                         database (db-type (eql :oracle)))
124   (declare (ignore args database))
125   "DATE")
126
127 (defmethod database-get-type-specifier ((type (eql 'duration)) args
128                                         database (db-type (eql :oracle)))
129   (declare (ignore args database))
130   "NUMBER(38)")