r11859: Canonicalize whitespace
[clsql.git] / tests / test-ooddl.lisp
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
6 ;;;; Updated: $Id$
7 ;;;;
8 ;;;; Tests for the CLSQL Object Oriented Data Definition Language
9 ;;;; (OODDL).
10 ;;;;
11 ;;;; This file is part of CLSQL.
12 ;;;;
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 ;;;; ======================================================================
17
18
19 (in-package #:clsql-tests)
20
21 #.(clsql:locally-enable-sql-reader-syntax)
22
23 (setq *rt-ooddl*
24       '(
25
26 ;; Ensure slots inherited from standard-classes are :virtual
27 (deftest :ooddl/metaclass/1
28     (values
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))))
34   :virtual :virtual)
35
36 ;; Ensure all slots in view-class are view-class-effective-slot-definition
37 (deftest :ooddl/metaclass/2
38     (values
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))))
48   t t t)
49
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))
54
55 (deftest :ooddl/join/2
56     (slot-value (president company1) 'last-name)
57   "Lenin")
58
59 (deftest :ooddl/join/3
60     (slot-value (employee-manager employee2) 'last-name)
61   "Lenin")
62
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]
70                                       :flatp t))))
71         (values
72          (slot-value dbobj 'last-name)
73          (clsql:time= (slot-value dbobj 'birthday) now))))
74   "Lenin" t)
75
76 (deftest :ooddl/time/2
77     (let* ((now (clsql:get-time))
78            (fail-index -1))
79       (when (member *test-database-underlying-type* '(:postgresql :postgresql-socket))
80         (clsql:execute-command "set datestyle to 'iso'"))
81       (dotimes (x 40)
82         (clsql:update-records [employee] :av-pairs `((birthday ,now))
83                              :where [= [emplid] 1])
84         (let ((dbobj (car (clsql:select 'employee :where [= [birthday] now]
85                                         :flatp t))))
86           (unless (clsql:time= (slot-value dbobj 'birthday) now)
87             (setf fail-index x))
88           (setf now (clsql:roll now :day (* 10 x)))))
89       fail-index)
90   -1)
91
92 (deftest :ooddl/time/3
93     (progn
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]
97                                       :flatp t))))
98         (list
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))))))
102   (t t))
103
104 ))
105
106 #.(clsql:restore-sql-reader-syntax-state)
107