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
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 ;;;; ======================================================================
18 (in-package #:clsql-tests)
20 #.(clsql:locally-enable-sql-reader-syntax)
25 (deftest :oodml/select/1
26 (mapcar #'(lambda (e) (slot-value e 'last-name))
27 (clsql:select 'employee :order-by [last-name]))
28 ("Andropov" "Brezhnev" "Chernenko" "Gorbachev" "Kruschev" "Lenin" "Putin"
29 "Stalin" "Trotsky" "Yeltsin"))
31 (deftest :oodml/select/2
32 (mapcar #'(lambda (e) (slot-value e 'name))
33 (clsql:select 'company))
36 (deftest :oodml/select/3
37 (mapcar #'(lambda (e) (slot-value e 'companyid))
38 (clsql:select 'employee
39 :where [and [= [slot-value 'employee 'companyid]
40 [slot-value 'company 'companyid]]
41 [= [slot-value 'company 'name]
43 (1 1 1 1 1 1 1 1 1 1))
45 (deftest :oodml/select/4
47 (concatenate 'string (slot-value e 'first-name)
49 (slot-value e 'last-name)))
50 (clsql:select 'employee :where [= [slot-value 'employee 'first-name]
52 :order-by [last-name]))
53 ("Vladamir Lenin" "Vladamir Putin"))
55 ;; sqlite fails this because it is typeless
56 (deftest :oodml/select/5
57 (length (clsql:select 'employee :where [married]))
60 ;; tests update-records-from-instance
61 (deftest :oodml/update-records/1
64 (let ((lenin (car (clsql:select 'employee
65 :where [= [slot-value 'employee 'emplid]
72 (employee-email lenin))))
74 (setf (slot-value employee1 'first-name) "Dimitriy"
75 (slot-value employee1 'last-name) "Ivanovich"
76 (slot-value employee1 'email) "ivanovich@soviet.org")
77 (clsql:update-records-from-instance employee1)
78 (let ((lenin (car (clsql:select 'employee
79 :where [= [slot-value 'employee 'emplid]
86 (employee-email lenin))))
88 (setf (slot-value employee1 'first-name) "Vladamir"
89 (slot-value employee1 'last-name) "Lenin"
90 (slot-value employee1 'email) "lenin@soviet.org")
91 (clsql:update-records-from-instance employee1)
92 (let ((lenin (car (clsql:select 'employee
93 :where [= [slot-value 'employee 'emplid]
100 (employee-email lenin)))))
101 "Vladamir Lenin: lenin@soviet.org"
102 "Dimitriy Ivanovich: ivanovich@soviet.org"
103 "Vladamir Lenin: lenin@soviet.org")
105 ;; tests update-record-from-slot
106 (deftest :oodml/update-records/2
109 (car (clsql:select 'employee
110 :where [= [slot-value 'employee 'emplid] 1])))
112 (setf (slot-value employee1 'email) "lenin-nospam@soviet.org")
113 (clsql:update-record-from-slot employee1 'email)
115 (car (clsql:select 'employee
116 :where [= [slot-value 'employee 'emplid] 1]))))
118 (setf (slot-value employee1 'email) "lenin@soviet.org")
119 (clsql:update-record-from-slot employee1 'email)
121 (car (clsql:select 'employee
122 :where [= [slot-value 'employee 'emplid] 1])))))
123 "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org")
125 ;; tests update-record-from-slots
126 (deftest :oodml/update-records/3
128 (let ((lenin (car (clsql:select 'employee
129 :where [= [slot-value 'employee 'emplid]
136 (employee-email lenin)))
138 (setf (slot-value employee1 'first-name) "Dimitriy"
139 (slot-value employee1 'last-name) "Ivanovich"
140 (slot-value employee1 'email) "ivanovich@soviet.org")
141 (clsql:update-record-from-slots employee1 '(first-name last-name email))
142 (let ((lenin (car (clsql:select 'employee
143 :where [= [slot-value 'employee 'emplid]
150 (employee-email lenin))))
152 (setf (slot-value employee1 'first-name) "Vladamir"
153 (slot-value employee1 'last-name) "Lenin"
154 (slot-value employee1 'email) "lenin@soviet.org")
155 (clsql:update-record-from-slots employee1 '(first-name last-name email))
156 (let ((lenin (car (clsql:select 'employee
157 :where [= [slot-value 'employee 'emplid]
164 (employee-email lenin)))))
165 "Vladamir Lenin: lenin@soviet.org"
166 "Dimitriy Ivanovich: ivanovich@soviet.org"
167 "Vladamir Lenin: lenin@soviet.org")
169 ;; tests update-instance-from-records
170 (deftest :oodml/update-instance/1
173 (slot-value employee1 'first-name)
175 (slot-value employee1 'last-name)
177 (slot-value employee1 'email))
179 (clsql:update-records [employee]
180 :av-pairs '(([first-name] "Ivan")
181 ([last-name] "Petrov")
182 ([email] "petrov@soviet.org"))
183 :where [= [emplid] 1])
184 (clsql:update-instance-from-records employee1)
186 (slot-value employee1 'first-name)
188 (slot-value employee1 'last-name)
190 (slot-value employee1 'email)))
192 (clsql:update-records [employee]
193 :av-pairs '(([first-name] "Vladamir")
194 ([last-name] "Lenin")
195 ([email] "lenin@soviet.org"))
196 :where [= [emplid] 1])
197 (clsql:update-instance-from-records employee1)
199 (slot-value employee1 'first-name)
201 (slot-value employee1 'last-name)
203 (slot-value employee1 'email))))
204 "Vladamir Lenin: lenin@soviet.org"
205 "Ivan Petrov: petrov@soviet.org"
206 "Vladamir Lenin: lenin@soviet.org")
208 ;; tests update-slot-from-record
209 (deftest :oodml/update-instance/2
211 (slot-value employee1 'email)
213 (clsql:update-records [employee]
214 :av-pairs '(([email] "lenin-nospam@soviet.org"))
215 :where [= [emplid] 1])
216 (clsql:update-slot-from-record employee1 'email)
217 (slot-value employee1 'email))
219 (clsql:update-records [employee]
220 :av-pairs '(([email] "lenin@soviet.org"))
221 :where [= [emplid] 1])
222 (clsql:update-slot-from-record employee1 'email)
223 (slot-value employee1 'email)))
224 "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org")
227 ;(deftest :oodml/iteration/1
228 ; (clsql:do-query ((e) [select 'clsql-tests::employee :where [married]
229 ; :order-by [emplid]])
230 ; (slot-value e last-name))
231 ; ("Lenin" "Stalin" "Trotsky"))
233 ;(deftest :oodml/iteration/2
234 ; (clsql:map-query 'list #'last-name [select 'employee :where [married]
235 ; :order-by [emplid]])
236 ; ("Lenin" "Stalin" "Trotsky"))
238 ;(deftest :oodml/iteration/3
239 ; (loop for (e) being the tuples in
240 ; [select 'employee :where [married] :order-by [emplid]]
241 ; collect (slot-value e 'last-name))
242 ; ("Lenin" "Stalin" "Trotsky"))
246 #.(clsql:restore-sql-reader-syntax-state)