Coverage report: /development/source/library/org/datagraph/spocq-shard/src/odbc/sql/sql-join-exp.lisp
| Kind | Covered | All | % |
| expression | 0 | 111 | 0.0 |
| branch | 0 | 14 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
2
;;; http://osdir.com/ml/lisp.clsql.general/2008-09/msg00003.html
4
(in-package :clsql-sys)
6
(eval-when (:compile-toplevel :load-toplevel :execute)
7
(export '(sql-join sql-cross-join sql-right-join sql-outer-join sql-inner-join)
9
(import '(sql-join sql-cross-join sql-left-join sql-right-join sql-outer-join sql-inner-join)
11
(export '(sql-join sql-cross-join sql-left-join sql-right-join sql-outer-join sql-inner-join)
14
(defclass sql-join-exp (sql-ident)
15
((components :initarg :components)
16
(modifier :initarg :modifier)
18
(on :initarg :on :initform nil)))
20
(defmethod initialize-instance :after ((sql sql-join-exp) &rest rest)
21
(let ((name (first (last (getf rest :components)))))
22
(when (typep name 'sql-ident)
23
(setf name (slot-value name 'name)))
24
(setf (slot-value sql 'name) name)))
26
(defmethod make-load-form ((sql sql-join-exp) &optional environment)
27
(declare (ignore environment))
28
(with-slots (components modifier on) sql
29
`(make-instance 'sql-join-exp :components ',components :modifier
30
',modifier :on ',on)))
32
(defmethod output-sql ((expr sql-join-exp) database)
33
(with-slots (modifier components on) expr
34
(output-sql (first components) database)
35
(write-string " " *sql-stream*)
36
(output-sql modifier database)
37
(write-string " " *sql-stream*)
38
(output-sql (second components) database)
40
(write-string " ON " *sql-stream*)
41
(output-sql on database))))
44
(defsql sql-join (:symbol "join") (&rest rest)
45
(if (= (length rest) 3)
46
(make-instance 'sql-join-exp
48
:components (butlast rest)
50
(error 'sql-user-error "JOIN must have three arguments")))
52
(defsql sql-cross-join (:symbol "cross-join") (&rest rest)
53
(if (= (length rest) 2)
54
(make-instance 'sql-join-exp
55
:modifier '|CROSS JOIN|
58
(error 'sql-user-error "CROSS-JOIN must have two arguments")))
60
(defsql sql-left-join (:symbol "left-join") (&rest rest)
61
(if (= (length rest) 3)
62
(make-instance 'sql-join-exp
63
:modifier '|LEFT JOIN|
64
:components (butlast rest)
66
(error 'sql-user-error "LEFT-JOIN must have three arguments")))
68
(defsql sql-right-join (:symbol "right-join") (&rest rest)
69
(if (= (length rest) 3)
70
(make-instance 'sql-join-exp
71
:modifier '|RIGHT JOIN| :components
72
(butlast rest) :on (third rest))
73
(error 'sql-user-error "RIGHT-JOIN must have three arguments")))
75
(defsql sql-inner-join (:symbol "inner-join") (&rest rest)
76
(if (= (length rest) 3)
77
(make-instance 'sql-join-exp
78
:modifier '|INNER JOIN| :components
79
(butlast rest) :on (third rest))
80
(error 'sql-user-error "INNER-JOIN must have three arguments")))
82
(defsql sql-outer-join (:symbol "outer-join") (&rest rest)
83
(if (= (length rest) 3)
84
(make-instance 'sql-join-exp
85
:modifier '|OUTER JOIN| :components
86
(butlast rest) :on (third rest))
87
(error 'sql-user-error "OUTER-JOIN must have three arguments")))