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