1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; ======================================================================
3 ;;;; File: test-ooddl.lisp
4 ;;;; Author: Marcus Pearce <m.t.pearce@city.ac.uk>
5 ;;;; Created: 30/03/2004
8 ;;;; Tests for the CLSQL Object Oriented Data Definition Language
11 ;;;; This file is part of CLSQL.
13 ;;;; CLSQL users are granted the rights to distribute and use this software
14 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
15 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
16 ;;;; ======================================================================
19 (in-package #:clsql-tests
)
21 #.
(clsql:locally-enable-sql-reader-syntax
)
26 ;; Ensure slots inherited from standard-classes are :virtual
27 (deftest :ooddl
/metaclass
/1
29 (clsql-sys::view-class-slot-db-kind
30 (clsql-sys::slotdef-for-slot-with-class
'extraterrestrial
31 (find-class 'person
)))
32 (clsql-sys::view-class-slot-db-kind
33 (clsql-sys::slotdef-for-slot-with-class
'hobby
(find-class 'person
))))
36 ;; Ensure all slots in view-class are view-class-effective-slot-definition
37 (deftest :ooddl
/metaclass
/2
39 (every #'(lambda (slotd)
40 (typep slotd
'clsql-sys
::view-class-effective-slot-definition
))
41 (clsql-sys::class-slots
(find-class 'person
)))
42 (every #'(lambda (slotd)
43 (typep slotd
'clsql-sys
::view-class-effective-slot-definition
))
44 (clsql-sys::class-slots
(find-class 'employee
)))
45 (every #'(lambda (slotd)
46 (typep slotd
'clsql-sys
::view-class-effective-slot-definition
))
47 (clsql-sys::class-slots
(find-class 'company
))))
50 (deftest :ooddl
/join
/1
51 (mapcar #'(lambda (e) (slot-value e
'ecompanyid
))
52 (company-employees company1
))
53 (1 1 1 1 1 1 1 1 1 1))
55 (deftest :ooddl
/join
/2
56 (slot-value (president company1
) 'last-name
)
59 (deftest :ooddl
/join
/3
60 (slot-value (employee-manager employee2
) 'last-name
)
63 (deftest :ooddl
/time
/1
64 (let* ((now (clsql:get-time
)))
65 (when (member *test-database-underlying-type
* '(:postgresql
:postgresql-socket
))
66 (clsql:execute-command
"set datestyle to 'iso'"))
67 (clsql:update-records
[employee] :av-pairs `((birthday ,now))
68 :where [= [emplid] 1])
69 (let ((dbobj (car (clsql:select 'employee :where [= [birthday] now]
72 (slot-value dbobj 'last-name)
73 (clsql:time= (slot-value dbobj 'birthday) now))))
76 (deftest :ooddl/time/2
77 (let* ((now (clsql:get-time))
79 (when (member *test-database-underlying-type* '(:postgresql :postgresql-socket))
80 (clsql:execute-command "set datestyle to 'iso'"))
82 (clsql:update-records [employee] :av-pairs
`((birthday ,now
))
83 :where
[= [emplid] 1])
84 (let ((dbobj (car (clsql:select 'employee :where [= [birthday] now]
86 (unless (clsql:time= (slot-value dbobj 'birthday) now)
88 (setf now (clsql:roll now :day (* 10 x)))))
92 (deftest :ooddl/time/3
94 (when (member *test-database-underlying-type* '(:postgresql :postgresql-socket))
95 (clsql:execute-command "set datestyle to 'iso'"))
96 (let ((dbobj (car (clsql:select 'employee :where [= [emplid] 10]
99 (eql *test-start-utime
* (slot-value dbobj
'bd-utime
))
100 (clsql:time
= (slot-value dbobj
'birthday
)
101 (clsql:utime-
>time
(slot-value dbobj
'bd-utime
))))))
106 #.
(clsql:restore-sql-reader-syntax-state
)