1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; ======================================================================
3 ;;;; File: test-oodml.lisp
4 ;;;; Author: Marcus Pearce <m.t.pearce@city.ac.uk>
5 ;;;; Created: 01/04/2004
7 ;;;; ======================================================================
9 ;;;; Description ==========================================================
10 ;;;; ======================================================================
12 ;;;; Tests for the CLSQL Object Oriented Data Definition Language
15 ;;;; ======================================================================
17 (in-package #:clsql-tests)
19 #.(clsql:locally-enable-sql-reader-syntax)
24 (deftest :oodml/select/1
25 (mapcar #'(lambda (e) (slot-value e 'last-name))
26 (clsql:select 'employee :order-by [last-name]))
27 ("Andropov" "Brezhnev" "Chernenko" "Gorbachev" "Kruschev" "Lenin" "Putin"
28 "Stalin" "Trotsky" "Yeltsin"))
30 (deftest :oodml/select/2
31 (mapcar #'(lambda (e) (slot-value e 'name))
32 (clsql:select 'company))
35 (deftest :oodml/select/3
36 (mapcar #'(lambda (e) (slot-value e 'companyid))
37 (clsql:select 'employee
38 :where [and [= [slot-value 'employee 'companyid]
39 [slot-value 'company 'companyid]]
40 [= [slot-value 'company 'name]
42 (1 1 1 1 1 1 1 1 1 1))
44 (deftest :oodml/select/4
46 (concatenate 'string (slot-value e 'first-name)
48 (slot-value e 'last-name)))
49 (clsql:select 'employee :where [= [slot-value 'employee 'first-name]
51 :order-by [last-name]))
52 ("Vladamir Lenin" "Vladamir Putin"))
54 ;; sqlite fails this because it is typeless
55 (deftest :oodml/select/5
56 (length (clsql:select 'employee :where [married]))
59 ;; tests update-records-from-instance
60 (deftest :oodml/update-records/1
63 (let ((lenin (car (clsql:select 'employee
64 :where [= [slot-value 'employee 'emplid]
71 (employee-email lenin))))
73 (setf (slot-value employee1 'first-name) "Dimitriy"
74 (slot-value employee1 'last-name) "Ivanovich"
75 (slot-value employee1 'email) "ivanovich@soviet.org")
76 (clsql:update-records-from-instance employee1)
77 (let ((lenin (car (clsql:select 'employee
78 :where [= [slot-value 'employee 'emplid]
85 (employee-email lenin))))
87 (setf (slot-value employee1 'first-name) "Vladamir"
88 (slot-value employee1 'last-name) "Lenin"
89 (slot-value employee1 'email) "lenin@soviet.org")
90 (clsql:update-records-from-instance employee1)
91 (let ((lenin (car (clsql:select 'employee
92 :where [= [slot-value 'employee 'emplid]
99 (employee-email lenin)))))
100 "Vladamir Lenin: lenin@soviet.org"
101 "Dimitriy Ivanovich: ivanovich@soviet.org"
102 "Vladamir Lenin: lenin@soviet.org")
104 ;; tests update-record-from-slot
105 (deftest :oodml/update-records/2
108 (car (clsql:select 'employee
109 :where [= [slot-value 'employee 'emplid] 1])))
111 (setf (slot-value employee1 'email) "lenin-nospam@soviet.org")
112 (clsql:update-record-from-slot employee1 'email)
114 (car (clsql:select 'employee
115 :where [= [slot-value 'employee 'emplid] 1]))))
117 (setf (slot-value employee1 'email) "lenin@soviet.org")
118 (clsql:update-record-from-slot employee1 'email)
120 (car (clsql:select 'employee
121 :where [= [slot-value 'employee 'emplid] 1])))))
122 "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org")
124 ;; tests update-record-from-slots
125 (deftest :oodml/update-records/3
127 (let ((lenin (car (clsql:select 'employee
128 :where [= [slot-value 'employee 'emplid]
135 (employee-email lenin)))
137 (setf (slot-value employee1 'first-name) "Dimitriy"
138 (slot-value employee1 'last-name) "Ivanovich"
139 (slot-value employee1 'email) "ivanovich@soviet.org")
140 (clsql:update-record-from-slots employee1 '(first-name last-name email))
141 (let ((lenin (car (clsql:select 'employee
142 :where [= [slot-value 'employee 'emplid]
149 (employee-email lenin))))
151 (setf (slot-value employee1 'first-name) "Vladamir"
152 (slot-value employee1 'last-name) "Lenin"
153 (slot-value employee1 'email) "lenin@soviet.org")
154 (clsql:update-record-from-slots employee1 '(first-name last-name email))
155 (let ((lenin (car (clsql:select 'employee
156 :where [= [slot-value 'employee 'emplid]
163 (employee-email lenin)))))
164 "Vladamir Lenin: lenin@soviet.org"
165 "Dimitriy Ivanovich: ivanovich@soviet.org"
166 "Vladamir Lenin: lenin@soviet.org")
168 ;; tests update-instance-from-records
169 (deftest :oodml/update-instance/1
172 (slot-value employee1 'first-name)
174 (slot-value employee1 'last-name)
176 (slot-value employee1 'email))
178 (clsql:update-records [employee]
179 :av-pairs '(([first-name] "Ivan")
180 ([last-name] "Petrov")
181 ([email] "petrov@soviet.org"))
182 :where [= [emplid] 1])
183 (clsql:update-instance-from-records employee1)
185 (slot-value employee1 'first-name)
187 (slot-value employee1 'last-name)
189 (slot-value employee1 'email)))
191 (clsql:update-records [employee]
192 :av-pairs '(([first-name] "Vladamir")
193 ([last-name] "Lenin")
194 ([email] "lenin@soviet.org"))
195 :where [= [emplid] 1])
196 (clsql:update-instance-from-records employee1)
198 (slot-value employee1 'first-name)
200 (slot-value employee1 'last-name)
202 (slot-value employee1 'email))))
203 "Vladamir Lenin: lenin@soviet.org"
204 "Ivan Petrov: petrov@soviet.org"
205 "Vladamir Lenin: lenin@soviet.org")
207 ;; tests update-slot-from-record
208 (deftest :oodml/update-instance/2
210 (slot-value employee1 'email)
212 (clsql:update-records [employee]
213 :av-pairs '(([email] "lenin-nospam@soviet.org"))
214 :where [= [emplid] 1])
215 (clsql:update-slot-from-record employee1 'email)
216 (slot-value employee1 'email))
218 (clsql:update-records [employee]
219 :av-pairs '(([email] "lenin@soviet.org"))
220 :where [= [emplid] 1])
221 (clsql:update-slot-from-record employee1 'email)
222 (slot-value employee1 'email)))
223 "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org")
226 ;(deftest :oodml/iteration/1
227 ; (clsql:do-query ((e) [select 'clsql-tests::employee :where [married]
228 ; :order-by [emplid]])
229 ; (slot-value e last-name))
230 ; ("Lenin" "Stalin" "Trotsky"))
232 ;(deftest :oodml/iteration/2
233 ; (clsql:map-query 'list #'last-name [select 'employee :where [married]
234 ; :order-by [emplid]])
235 ; ("Lenin" "Stalin" "Trotsky"))
237 ;(deftest :oodml/iteration/3
238 ; (loop for (e) being the tuples in
239 ; [select 'employee :where [married] :order-by [emplid]]
240 ; collect (slot-value e 'last-name))
241 ; ("Lenin" "Stalin" "Trotsky"))
245 #.(clsql:restore-sql-reader-syntax-state)