X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=usql-tests%2Ftest-oodml.lisp;fp=usql-tests%2Ftest-oodml.lisp;h=f0cd3b01169cbf9041d96085048f50b264a3dbf6;hb=ce0e343835a040406678dff74a62d1b0cb56f317;hp=0000000000000000000000000000000000000000;hpb=edd1963395a5b5e5f91ef975fcd329975ae367e2;p=clsql.git diff --git a/usql-tests/test-oodml.lisp b/usql-tests/test-oodml.lisp new file mode 100644 index 0000000..f0cd3b0 --- /dev/null +++ b/usql-tests/test-oodml.lisp @@ -0,0 +1,241 @@ +;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;;; ====================================================================== +;;;; File: test-oodml.lisp +;;;; Author: Marcus Pearce +;;;; Created: 01/04/2004 +;;;; Updated: <04/04/2004 11:51:23 marcusp> +;;;; ====================================================================== +;;;; +;;;; Description ========================================================== +;;;; ====================================================================== +;;;; +;;;; Tests for the CLSQL-USQL Object Oriented Data Definition Language +;;;; (OODML). +;;;; +;;;; ====================================================================== + +(in-package :clsql-usql-tests) + +#.(usql:locally-enable-sql-reader-syntax) + +(deftest :oodml/select/1 + (mapcar #'(lambda (e) (slot-value e 'last-name)) + (usql:select 'employee :order-by [last-name])) + ("Andropov" "Brezhnev" "Chernenko" "Gorbachev" "Kruschev" "Lenin" "Putin" + "Stalin" "Trotsky" "Yeltsin")) + +(deftest :oodml/select/2 + (mapcar #'(lambda (e) (slot-value e 'name)) + (usql:select 'company)) + ("Widgets Inc.")) + +(deftest :oodml/select/3 + (mapcar #'(lambda (e) (slot-value e 'companyid)) + (usql:select 'employee + :where [and [= [slot-value 'employee 'companyid] + [slot-value 'company 'companyid]] + [= [slot-value 'company 'name] + "Widgets Inc."]])) + (1 1 1 1 1 1 1 1 1 1)) + +(deftest :oodml/select/4 + (mapcar #'(lambda (e) + (concatenate 'string (slot-value e 'first-name) + " " + (slot-value e 'last-name))) + (usql:select 'employee :where [= [slot-value 'employee 'first-name] + "Vladamir"] + :order-by [last-name])) + ("Vladamir Lenin" "Vladamir Putin")) + +;; sqlite fails this because it is typeless +(deftest :oodml/select/5 + (length (sql:select 'employee :where [married])) + 3) + +;; tests update-records-from-instance +(deftest :oodml/update-records/1 + (values + (progn + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin)))) + (progn + (setf (slot-value employee1 'first-name) "Dimitriy" + (slot-value employee1 'last-name) "Ivanovich" + (slot-value employee1 'email) "ivanovich@soviet.org") + (usql:update-records-from-instance employee1) + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin)))) + (progn + (setf (slot-value employee1 'first-name) "Vladamir" + (slot-value employee1 'last-name) "Lenin" + (slot-value employee1 'email) "lenin@soviet.org") + (usql:update-records-from-instance employee1) + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin))))) + "Vladamir Lenin: lenin@soviet.org" + "Dimitriy Ivanovich: ivanovich@soviet.org" + "Vladamir Lenin: lenin@soviet.org") + +;; tests update-record-from-slot +(deftest :oodml/update-records/2 + (values + (employee-email + (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] 1]))) + (progn + (setf (slot-value employee1 'email) "lenin-nospam@soviet.org") + (usql:update-record-from-slot employee1 'email) + (employee-email + (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] 1])))) + (progn + (setf (slot-value employee1 'email) "lenin@soviet.org") + (usql:update-record-from-slot employee1 'email) + (employee-email + (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] 1]))))) + "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org") + +;; tests update-record-from-slots +(deftest :oodml/update-records/3 + (values + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin))) + (progn + (setf (slot-value employee1 'first-name) "Dimitriy" + (slot-value employee1 'last-name) "Ivanovich" + (slot-value employee1 'email) "ivanovich@soviet.org") + (usql:update-record-from-slots employee1 '(first-name last-name email)) + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin)))) + (progn + (setf (slot-value employee1 'first-name) "Vladamir" + (slot-value employee1 'last-name) "Lenin" + (slot-value employee1 'email) "lenin@soviet.org") + (usql:update-record-from-slots employee1 '(first-name last-name email)) + (let ((lenin (car (usql:select 'employee + :where [= [slot-value 'employee 'emplid] + 1])))) + (concatenate 'string + (first-name lenin) + " " + (last-name lenin) + ": " + (employee-email lenin))))) + "Vladamir Lenin: lenin@soviet.org" + "Dimitriy Ivanovich: ivanovich@soviet.org" + "Vladamir Lenin: lenin@soviet.org") + +;; tests update-instance-from-records +(deftest :oodml/update-instance/1 + (values + (concatenate 'string + (slot-value employee1 'first-name) + " " + (slot-value employee1 'last-name) + ": " + (slot-value employee1 'email)) + (progn + (usql:update-records [employee] + :av-pairs '(([first-name] "Ivan") + ([last-name] "Petrov") + ([email] "petrov@soviet.org")) + :where [= [emplid] 1]) + (usql:update-instance-from-records employee1) + (concatenate 'string + (slot-value employee1 'first-name) + " " + (slot-value employee1 'last-name) + ": " + (slot-value employee1 'email))) + (progn + (usql:update-records [employee] + :av-pairs '(([first-name] "Vladamir") + ([last-name] "Lenin") + ([email] "lenin@soviet.org")) + :where [= [emplid] 1]) + (usql:update-instance-from-records employee1) + (concatenate 'string + (slot-value employee1 'first-name) + " " + (slot-value employee1 'last-name) + ": " + (slot-value employee1 'email)))) + "Vladamir Lenin: lenin@soviet.org" + "Ivan Petrov: petrov@soviet.org" + "Vladamir Lenin: lenin@soviet.org") + +;; tests update-slot-from-record +(deftest :oodml/update-instance/2 + (values + (slot-value employee1 'email) + (progn + (usql:update-records [employee] + :av-pairs '(([email] "lenin-nospam@soviet.org")) + :where [= [emplid] 1]) + (usql:update-slot-from-record employee1 'email) + (slot-value employee1 'email)) + (progn + (usql:update-records [employee] + :av-pairs '(([email] "lenin@soviet.org")) + :where [= [emplid] 1]) + (usql:update-slot-from-record employee1 'email) + (slot-value employee1 'email))) + "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org") + + +;(deftest :oodml/iteration/1 +; (usql:do-query ((e) [select 'usql-tests::employee :where [married] +; :order-by [emplid]]) +; (slot-value e last-name)) +; ("Lenin" "Stalin" "Trotsky")) + +;(deftest :oodml/iteration/2 +; (usql:map-query 'list #'last-name [select 'employee :where [married] +; :order-by [emplid]]) +; ("Lenin" "Stalin" "Trotsky")) + +;(deftest :oodml/iteration/3 +; (loop for (e) being the tuples in +; [select 'employee :where [married] :order-by [emplid]] +; collect (slot-value e 'last-name)) +; ("Lenin" "Stalin" "Trotsky")) + + +#.(usql:restore-sql-reader-syntax-state)