X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=db-oracle%2Foracle-objects.lisp;h=9cebea18adec007e6c454604d7ffc36fa9e8a773;hp=23f22d7cf48fb759dc8cf5a2f9edf05d783d179b;hb=e7a214b2445830219022acb5911a3f9303d938bd;hpb=7d50938ba2db52a713498e49aa1679deae6f0b6b diff --git a/db-oracle/oracle-objects.lisp b/db-oracle/oracle-objects.lisp index 23f22d7..9cebea1 100644 --- a/db-oracle/oracle-objects.lisp +++ b/db-oracle/oracle-objects.lisp @@ -1,91 +1,106 @@ -(in-package :clsql-oracle) +;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;;; ************************************************************************* +;;;; FILE IDENTIFICATION +;;;; +;;;; Name: oracle-objects.lisp +;;;; +;;;; $Id$ +;;;; +;;;; This file is part of CLSQL. +;;;; +;;;; CLSQL users are granted the rights to distribute and use this software +;;;; as governed by the terms of the Lisp Lesser GNU Public License +;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. +;;;; ************************************************************************* -(defparameter *oracle-default-varchar2-length* "512") +(in-package #:clsql-oracle) -(defmethod database-get-type-specifier - (type args (database oracle-database)) - (declare (ignore type args)) - (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")) +(defmethod database-get-type-specifier (type args database (db-type (eql :oracle))) + (declare (ignore type args database)) + (format nil "VARCHAR2(~D)" *default-varchar-length*)) -(defmethod database-get-type-specifier - ((type (eql 'integer)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'integer)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args (format nil "NUMBER(~A,~A)" (or (first args) 38) (or (second args) 0)) - "NUMBER(38,0)")) + "INTEGER")) -(defmethod database-get-type-specifier - ((type (eql 'simple-base-string)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'bigint)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args - (format nil "VARCHAR2(~A)" (car args)) - (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))) + (format nil "NUMBER(~A,~A)" + (or (first args) 38) (or (second args) 0)) + "NUMBER(38,0)")) -(defmethod database-get-type-specifier - ((type (eql 'simple-string)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'string)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args - (format nil "VARCHAR2(~A)" (car args)) - (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")"))) + (format nil "CHAR(~A)" (car args)) + (format nil "VARCHAR2(~D)" *default-varchar-length*))) -(defmethod database-get-type-specifier - ((type (eql 'string)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'varchar)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args (format nil "VARCHAR2(~A)" (car args)) - (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")) - "VARCHAR2(512)") + (format nil "VARCHAR2(~D)" *default-varchar-length*))) -(defmethod database-get-type-specifier - ((type (eql 'raw-string)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'float)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args - (format nil "VARCHAR2(~A)" (car args)) - (concatenate 'string "VARCHAR2(" *oracle-default-varchar2-length* ")")) - "VARCHAR2(256)") + (format nil "NUMBER(~A,~A)" (or (first args) 38) (or (second args) 38)) + "DOUBLE PRECISION")) -(defmethod database-get-type-specifier - ((type (eql 'float)) args (database oracle-database)) +(defmethod database-get-type-specifier ((type (eql 'long-float)) args + database (db-type (eql :oracle))) + (declare (ignore database)) (if args (format nil "NUMBER(~A,~A)" (or (first args) 38) (or (second args) 38)) - "NUMBER")) + "DOUBLE PRECISION")) -(defmethod database-get-type-specifier - ((type (eql 'long-float)) args (database oracle-database)) - (if args - (format nil "NUMBER(~A,~A)" - (or (first args) 38) (or (second args) 38)) - "NUMBER")) +(defmethod database-get-type-specifier ((type (eql 'boolean)) args + database (db-type (eql :oracle))) + (declare (ignore args database)) + "CHAR(1)") -(defmethod read-sql-value (val type (database oracle-database)) - (declare (ignore type database)) +(defmethod read-sql-value (val type + database (db-type (eql :oracle))) ;;(format t "value is \"~A\" of type ~A~%" val (type-of val)) + (declare (ignore type database)) (etypecase val (string (read-from-string val)) (symbol nil))) -(defmethod read-sql-value (val (type (eql 'string)) database) +(defmethod read-sql-value (val (type (eql 'integer)) + database (db-type (eql :oracle))) (declare (ignore database)) val) -(defmethod read-sql-value - (val (type (eql 'integer)) (database oracle-database)) +(defmethod read-sql-value (val (type (eql 'float)) + database (db-type (eql :oracle))) (declare (ignore database)) val) -(defmethod read-sql-value (val (type (eql 'float)) (database oracle-database)) - val) +(defmethod read-sql-value (val (type (eql 'boolean)) + database (db-type (eql :oracle))) + (declare (ignore database)) + (when (char-equal #\t (schar val 0)) + t)) -;;; LOCAL-TIME stuff that needs to go into hooks -#+local-time -(defmethod clsql-sys::database-get-type-specifier - ((type (eql 'local-time::local-time)) args (database oracle-database)) - (declare (ignore args)) +(defmethod database-get-type-specifier ((type (eql 'wall-time)) args + database (db-type (eql :oracle))) + (declare (ignore args database)) "DATE") -#+local-time -(defmethod clsql-sys::database-get-type-specifier - ((type (eql 'local-time::duration)) - args - (database oracle-database)) - (declare (ignore args)) +(defmethod database-get-type-specifier ((type (eql 'duration)) args + database (db-type (eql :oracle))) + (declare (ignore args database)) "NUMBER(38)")