X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=tests%2Ftest-oodml.lisp;h=84046fcdd20167045e0c5d411cbde4ec8356f8ac;hb=ec9b352b8205e4204a06797f98970b03cf532ab2;hp=59e57d2aa78f302872ff0d22dde9b1aee4a7c3b2;hpb=73cf858d596ad1d51c745b478292433617cf9d72;p=clsql.git diff --git a/tests/test-oodml.lisp b/tests/test-oodml.lisp index 59e57d2..84046fc 100644 --- a/tests/test-oodml.lisp +++ b/tests/test-oodml.lisp @@ -4,38 +4,43 @@ ;;;; Author: Marcus Pearce ;;;; Created: 01/04/2004 ;;;; Updated: $Id$ -;;;; ====================================================================== -;;;; -;;;; Description ========================================================== -;;;; ====================================================================== ;;;; ;;;; Tests for the CLSQL Object Oriented Data Definition Language ;;;; (OODML). ;;;; +;;;; This file is part of CLSQL. +;;;; +;;;; CLSQL users are granted the rights to distribute and use this software +;;;; as governed by the terms of the Lisp Lesser GNU Public License +;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ====================================================================== (in-package #:clsql-tests) #.(clsql:locally-enable-sql-reader-syntax) +(setq *rt-oodml* + '( + (deftest :oodml/select/1 (mapcar #'(lambda (e) (slot-value e 'last-name)) - (clsql:select 'employee :order-by [last-name])) + (clsql:select 'employee :order-by [last-name] :flatp t)) ("Andropov" "Brezhnev" "Chernenko" "Gorbachev" "Kruschev" "Lenin" "Putin" "Stalin" "Trotsky" "Yeltsin")) (deftest :oodml/select/2 (mapcar #'(lambda (e) (slot-value e 'name)) - (clsql:select 'company)) + (clsql:select 'company :flatp t)) ("Widgets Inc.")) (deftest :oodml/select/3 (mapcar #'(lambda (e) (slot-value e 'companyid)) (clsql:select 'employee - :where [and [= [slot-value 'employee 'companyid] - [slot-value 'company 'companyid]] - [= [slot-value 'company 'name] - "Widgets Inc."]])) + :where [and [= [slot-value 'employee 'companyid] + [slot-value 'company 'companyid]] + [= [slot-value 'company 'name] + "Widgets Inc."]] + :flatp t)) (1 1 1 1 1 1 1 1 1 1)) (deftest :oodml/select/4 @@ -45,21 +50,48 @@ (slot-value e 'last-name))) (clsql:select 'employee :where [= [slot-value 'employee 'first-name] "Vladamir"] + :flatp t :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])) + (length (clsql:select 'employee :where [married] :flatp t)) 3) +(deftest :oodml/select/6 + (slot-value (caar (clsql:select 'employee :where [= 1 [emplid]])) 'married) + t) + +(deftest :oodml/select/7 + (slot-value (caar (clsql:select 'employee :where [= 4 [emplid]])) 'married) + nil) + +(deftest :oodml/select/8 + (let ((a (caar (clsql:select 'address :where [= 1 [emplid]])))) + (values + (slot-value a 'street-number) + (slot-value a 'street-name) + (slot-value a 'city) + (slot-value a 'postal-code))) + 10 "Park Place" "Leningrad" 123) + +(deftest :oodml/select/9 + (let ((a (caar (clsql:select 'address :where [= 2 [emplid]])))) + (values + (slot-value a 'street-number) + (slot-value a 'street-name) + (slot-value a 'city) + (slot-value a 'postal-code))) + nil "" "no city" 0) + ;; tests update-records-from-instance (deftest :oodml/update-records/1 (values (progn (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -73,7 +105,8 @@ (clsql:update-records-from-instance employee1) (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -87,7 +120,8 @@ (clsql:update-records-from-instance employee1) (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -103,19 +137,22 @@ (values (employee-email (car (clsql:select 'employee - :where [= [slot-value 'employee 'emplid] 1]))) + :where [= [slot-value 'employee 'emplid] 1] + :flatp t))) (progn (setf (slot-value employee1 'email) "lenin-nospam@soviet.org") (clsql:update-record-from-slot employee1 'email) (employee-email (car (clsql:select 'employee - :where [= [slot-value 'employee 'emplid] 1])))) + :where [= [slot-value 'employee 'emplid] 1] + :flatp t)))) (progn (setf (slot-value employee1 'email) "lenin@soviet.org") (clsql:update-record-from-slot employee1 'email) (employee-email (car (clsql:select 'employee - :where [= [slot-value 'employee 'emplid] 1]))))) + :where [= [slot-value 'employee 'emplid] 1] + :flatp t))))) "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org") ;; tests update-record-from-slots @@ -123,7 +160,8 @@ (values (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -137,7 +175,8 @@ (clsql:update-record-from-slots employee1 '(first-name last-name email)) (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -151,7 +190,8 @@ (clsql:update-record-from-slots employee1 '(first-name last-name email)) (let ((lenin (car (clsql:select 'employee :where [= [slot-value 'employee 'emplid] - 1])))) + 1] + :flatp t)))) (concatenate 'string (first-name lenin) " " @@ -220,16 +260,35 @@ "lenin@soviet.org" "lenin-nospam@soviet.org" "lenin@soviet.org") -;(deftest :oodml/iteration/1 -; (clsql:do-query ((e) [select 'clsql-tests::employee :where [married] -; :order-by [emplid]]) -; (slot-value e last-name)) -; ("Lenin" "Stalin" "Trotsky")) +(deftest :oodml/do-query/1 + (let ((result '())) + (clsql:do-query ((e) [select 'employee :order-by [emplid]]) + (push (slot-value e 'last-name) result)) + result) + ("Putin" "Yeltsin" "Gorbachev" "Chernenko" "Andropov" "Brezhnev" "Kruschev" + "Trotsky" "Stalin" "Lenin")) -;(deftest :oodml/iteration/2 -; (clsql:map-query 'list #'last-name [select 'employee :where [married] -; :order-by [emplid]]) -; ("Lenin" "Stalin" "Trotsky")) +(deftest :oodml/do-query/2 + (let ((result '())) + (clsql:do-query ((e c) [select 'employee 'company + :where [= [slot-value 'employee 'last-name] + "Lenin"]]) + (push (list (slot-value e 'last-name) (slot-value c 'name)) + result)) + result) + (("Lenin" "Widgets Inc."))) + +(deftest :oodml/map-query/1 + (clsql:map-query 'list #'last-name [select 'employee :order-by [emplid]]) + ("Lenin" "Stalin" "Trotsky" "Kruschev" "Brezhnev" "Andropov" "Chernenko" + "Gorbachev" "Yeltsin" "Putin")) + +(deftest :oodml/map-query/2 + (clsql:map-query 'list #'(lambda (e c) (list (slot-value e 'last-name) + (slot-value c 'name))) + [select 'employee 'company :where [= [slot-value 'employee 'last-name] + "Lenin"]]) + (("Lenin" "Widgets Inc."))) ;(deftest :oodml/iteration/3 ; (loop for (e) being the tuples in @@ -237,5 +296,6 @@ ; collect (slot-value e 'last-name)) ; ("Lenin" "Stalin" "Trotsky")) +)) #.(clsql:restore-sql-reader-syntax-state)