Coverage report: /development/source/library/org/datagraph/spocq-shard/src/odbc/sql/sql-join-exp.lisp

KindCoveredAll%
expression0111 0.0
branch014 0.0
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;;
2
 ;;; http://osdir.com/ml/lisp.clsql.general/2008-09/msg00003.html
3
 
4
 (in-package :clsql-sys)
5
 
6
 (eval-when (:compile-toplevel :load-toplevel :execute)
7
   (export '(sql-join sql-cross-join sql-right-join sql-outer-join sql-inner-join)
8
           :clsql-sys)
9
   (import '(sql-join sql-cross-join sql-left-join sql-right-join sql-outer-join sql-inner-join)
10
           :clsql)
11
   (export '(sql-join sql-cross-join sql-left-join sql-right-join sql-outer-join sql-inner-join)
12
           :clsql))
13
 
14
 (defclass sql-join-exp (sql-ident)
15
   ((components :initarg :components)
16
    (modifier :initarg :modifier)
17
    (name :initarg :name)
18
    (on :initarg :on :initform nil)))
19
 
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)))
25
 
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)))
31
 
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)
39
     (when on
40
       (write-string " ON " *sql-stream*)
41
       (output-sql on database))))
42
 
43
 
44
 (defsql sql-join (:symbol "join") (&rest rest)
45
   (if (= (length rest) 3)
46
       (make-instance 'sql-join-exp
47
         :modifier 'JOIN
48
         :components (butlast rest)
49
         :on (third rest))
50
       (error 'sql-user-error "JOIN must have three arguments")))
51
 
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|
56
         :components rest
57
         :on nil)
58
       (error 'sql-user-error "CROSS-JOIN must have two arguments")))
59
 
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)
65
         :on (third rest))
66
       (error 'sql-user-error "LEFT-JOIN must have three arguments")))
67
 
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")))
74
 
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")))
81
 
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")))
88
 
89