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