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