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
7 ;;;; ======================================================================
9 ;;;; Description ==========================================================
10 ;;;; ======================================================================
12 ;;;; Tests for the CLSQL Object Oriented Data Definition Language
15 ;;;; ======================================================================
18 (in-package #:clsql-tests)
20 #.(clsql:locally-enable-sql-reader-syntax)
25 ;; Ensure slots inherited from standard-classes are :virtual
26 (deftest :ooddl/metaclass/1
28 (clsql-sys::view-class-slot-db-kind
29 (clsql-sys::slotdef-for-slot-with-class 'extraterrestrial
30 (find-class 'person)))
31 (clsql-sys::view-class-slot-db-kind
32 (clsql-sys::slotdef-for-slot-with-class 'hobby (find-class 'person))))
35 ;; Ensure all slots in view-class are view-class-effective-slot-definition
36 (deftest :ooddl/metaclass/2
38 (every #'(lambda (slotd)
39 (typep slotd 'clsql-sys::view-class-effective-slot-definition))
40 (clsql-sys::class-slots (find-class 'person)))
41 (every #'(lambda (slotd)
42 (typep slotd 'clsql-sys::view-class-effective-slot-definition))
43 (clsql-sys::class-slots (find-class 'employee)))
44 (every #'(lambda (slotd)
45 (typep slotd 'clsql-sys::view-class-effective-slot-definition))
46 (clsql-sys::class-slots (find-class 'company))))
49 (deftest :ooddl/join/1
51 (slot-value e 'companyid))
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-base:get-time)))
65 (when (member *test-database-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]))))
71 (slot-value dbobj 'last-name)
72 (clsql-base:time= (slot-value dbobj 'birthday) now))))
75 (deftest :ooddl/time/2
76 (let* ((now (clsql-base:get-time))
78 (when (member *test-database-type* '(:postgresql :postgresql-socket))
79 (clsql:execute-command "set datestyle to 'iso'"))
81 (clsql:update-records [employee] :av-pairs `((birthday ,now))
82 :where [= [emplid] 1])
83 (let ((dbobj (car (clsql:select 'employee :where [= [birthday] now]))))
84 (unless (clsql-base:time= (slot-value dbobj 'birthday) now)
86 (setf now (clsql-base:roll now :day (* 10 x)))))
92 #.(clsql:restore-sql-reader-syntax-state)