1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.jdbc;
17
18 import org.junit.Test;
19
20 import static org.junit.Assert.assertEquals;
21
22 public class SQLTest {
23
24 @Test
25 public void shouldDemonstrateProvidedStringBuilder() {
26
27 final StringBuilder sb = new StringBuilder();
28
29 final String sql = new SQL() {{
30 SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
31 SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
32 FROM("PERSON P");
33 FROM("ACCOUNT A");
34 INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
35 INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
36 WHERE("P.ID = A.ID");
37 WHERE("P.FIRST_NAME like ?");
38 OR();
39 WHERE("P.LAST_NAME like ?");
40 GROUP_BY("P.ID");
41 HAVING("P.LAST_NAME like ?");
42 OR();
43 HAVING("P.FIRST_NAME like ?");
44 ORDER_BY("P.ID");
45 ORDER_BY("P.FULL_NAME");
46 }}.usingAppender(sb).toString();
47
48 assertEquals("SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON\n" +
49 "FROM PERSON P, ACCOUNT A\n" +
50 "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID\n" +
51 "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID\n" +
52 "WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) \n" +
53 "OR (P.LAST_NAME like ?)\n" +
54 "GROUP BY P.ID\n" +
55 "HAVING (P.LAST_NAME like ?) \n" +
56 "OR (P.FIRST_NAME like ?)\n" +
57 "ORDER BY P.ID, P.FULL_NAME", sql);
58 }
59
60 @Test
61 public void shouldDemonstrateMixedStyle() {
62
63 final String sql = new SQL() {{
64 SELECT("id, name");
65 FROM("PERSON A");
66 WHERE("name like ?").WHERE("id = ?");
67 }}.toString();
68
69 assertEquals("" +
70 "SELECT id, name\n" +
71 "FROM PERSON A\n" +
72 "WHERE (name like ? AND id = ?)", sql);
73 }
74
75 @Test
76 public void shouldDemonstrateFluentStyle() {
77
78 final String sql = new SQL()
79 .SELECT("id, name").FROM("PERSON A")
80 .WHERE("name like ?")
81 .WHERE("id = ?").toString();
82
83 assertEquals("" +
84 "SELECT id, name\n" +
85 "FROM PERSON A\n" +
86 "WHERE (name like ? AND id = ?)", sql);
87 }
88
89 @Test
90 public void shouldProduceExpectedSimpleSelectStatement() {
91 final String expected =
92 "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME\n" +
93 "FROM PERSON P\n" +
94 "WHERE (P.ID like #id# AND P.FIRST_NAME like #firstName# AND P.LAST_NAME like #lastName#)\n" +
95 "ORDER BY P.LAST_NAME";
96 assertEquals(expected, example2("a", "b", "c"));
97 }
98
99 @Test
100 public void shouldProduceExpectedSimpleSelectStatementMissingFirstParam() {
101 final String expected =
102 "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME\n" +
103 "FROM PERSON P\n" +
104 "WHERE (P.FIRST_NAME like #firstName# AND P.LAST_NAME like #lastName#)\n" +
105 "ORDER BY P.LAST_NAME";
106 assertEquals(expected, example2(null, "b", "c"));
107 }
108
109 @Test
110 public void shouldProduceExpectedSimpleSelectStatementMissingFirstTwoParams() {
111 final String expected =
112 "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME\n" +
113 "FROM PERSON P\n" +
114 "WHERE (P.LAST_NAME like #lastName#)\n" +
115 "ORDER BY P.LAST_NAME";
116 assertEquals(expected, example2(null, null, "c"));
117 }
118
119 @Test
120 public void shouldProduceExpectedSimpleSelectStatementMissingAllParams() {
121 final String expected =
122 "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME\n" +
123 "FROM PERSON P\n" +
124 "ORDER BY P.LAST_NAME";
125 assertEquals(expected, example2(null, null, null));
126 }
127
128 @Test
129 public void shouldProduceExpectedComplexSelectStatement() {
130 final String expected =
131 "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON\n" +
132 "FROM PERSON P, ACCOUNT A\n" +
133 "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID\n" +
134 "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID\n" +
135 "WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) \n" +
136 "OR (P.LAST_NAME like ?)\n" +
137 "GROUP BY P.ID\n" +
138 "HAVING (P.LAST_NAME like ?) \n" +
139 "OR (P.FIRST_NAME like ?)\n" +
140 "ORDER BY P.ID, P.FULL_NAME";
141 assertEquals(expected, example1());
142 }
143
144 private static String example1() {
145 return new SQL() {{
146 SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
147 SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
148 FROM("PERSON P");
149 FROM("ACCOUNT A");
150 INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
151 INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
152 WHERE("P.ID = A.ID");
153 WHERE("P.FIRST_NAME like ?");
154 OR();
155 WHERE("P.LAST_NAME like ?");
156 GROUP_BY("P.ID");
157 HAVING("P.LAST_NAME like ?");
158 OR();
159 HAVING("P.FIRST_NAME like ?");
160 ORDER_BY("P.ID");
161 ORDER_BY("P.FULL_NAME");
162 }}.toString();
163 }
164
165 private static String example2(final String id, final String firstName, final String lastName) {
166 return new SQL() {{
167 SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME");
168 FROM("PERSON P");
169 if (id != null) {
170 WHERE("P.ID like #id#");
171 }
172 if (firstName != null) {
173 WHERE("P.FIRST_NAME like #firstName#");
174 }
175 if (lastName != null) {
176 WHERE("P.LAST_NAME like #lastName#");
177 }
178 ORDER_BY("P.LAST_NAME");
179 }}.toString();
180 }
181
182 }