1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package org.nuiton.topia.framework;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30 import org.junit.Assert;
31 import org.junit.Test;
32 import org.nuiton.topia.persistence.TopiaEntity;
33 import org.nuiton.topiatest.QueriedEntity;
34
35
36 public class TopiaQueryTest {
37
38 private static final Log log = LogFactory.getLog(TopiaQueryTest.class);
39
40 @Test
41 public void testAdd() {
42
43
44 String value = "topia";
45 TopiaQuery query = new TopiaQuery(QueriedEntity.class);
46 query.addEquals(QueriedEntity.PROPERTY_TEST_ADD, value);
47 Assert.assertEquals(
48 "FROM org.nuiton.topiatest.QueriedEntity " +
49 "WHERE testAdd = :testAdd",
50 query.fullQuery());
51
52
53
54 query = new TopiaQuery(QueriedEntity.class);
55 query.addEquals(QueriedEntity.PROPERTY_TEST_ADD, new Object[]{null});
56 Assert.assertEquals(
57 "FROM org.nuiton.topiatest.QueriedEntity " +
58 "WHERE testAdd IS NULL",
59 query.fullQuery());
60
61
62 String value2 = "eugene";
63 query = new TopiaQuery(QueriedEntity.class);
64 query.addEquals(QueriedEntity.PROPERTY_TEST_ADD, value, value2);
65 Assert.assertEquals(
66 "FROM org.nuiton.topiatest.QueriedEntity " +
67 "WHERE testAdd IN (:testAdd1, :testAdd2)",
68 query.fullQuery());
69
70
71 query = new TopiaQuery(QueriedEntity.class);
72 query.addEquals(QueriedEntity.PROPERTY_TEST_ADD, value, value2, null);
73 Assert.assertEquals(
74 "FROM org.nuiton.topiatest.QueriedEntity " +
75 "WHERE testAdd IN (:testAdd1, :testAdd2) OR testAdd IS NULL",
76 query.fullQuery());
77 }
78
79 @Test
80 public void testAddSubQuery() {
81
82
83 TopiaQuery query = new TopiaQuery(QueriedEntity.class).
84 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value1");
85
86 Assert.assertEquals(2, query.getParams().size());
87
88 TopiaQuery subquery = new TopiaQuery(QueriedEntity.class).
89 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value2");
90
91 query.addSubQuery("Q1 = (?)", subquery);
92 log.debug(query);
93
94 Assert.assertEquals(4, query.getParams().size());
95
96
97
98
99 query = new TopiaQuery(QueriedEntity.class).
100 addWhere(QueriedEntity.PROPERTY_TEST_ADD, TopiaQuery.Op.EQ, null);
101
102 Assert.assertEquals(0, query.getParams().size());
103
104 subquery = new TopiaQuery(QueriedEntity.class).
105 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value1");
106
107 query.addSubQuery("Q1 = (?)", subquery);
108 log.debug(query);
109
110 Assert.assertEquals(2, query.getParams().size());
111
112
113
114 query = new TopiaQuery(QueriedEntity.class, "Q1").
115 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value1");
116
117 Assert.assertEquals(2, query.getParams().size());
118
119 subquery = new TopiaQuery(QueriedEntity.class, "Q2").
120 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value1");
121
122 query.addSubQuery("Q1 = (?)", subquery);
123 log.debug(query);
124
125 Assert.assertEquals(2, query.getParams().size());
126
127
128
129
130
131
132
133 query = new TopiaQuery(QueriedEntity.class, "Q1").
134 addEquals(QueriedEntity.TOPIA_ID, "ID1");
135
136 subquery = new TopiaQuery(QueriedEntity.class, "Q2").
137 addEquals(QueriedEntity.PROPERTY_TEST_ADD, "value");
138
139 query.addSubQuery(QueriedEntity.PROPERTY_TEST_ADD + " IN (?)", subquery);
140
141 log.debug(query);
142 Assert.assertEquals(4, query.getParams().size());
143 }
144
145
146 @Test
147 public void testAddFilter() {
148 log.info("testAddFilter");
149
150 EntityFilter filter = new TopiaFilter();
151 filter.setStartIndex(1);
152 filter.setEndIndex(40);
153 filter.setOrderBy(QueriedEntity.PROPERTY_TEST_ADD);
154
155 TopiaQuery query = new TopiaQuery(QueriedEntity.class).addFilter(filter);
156
157 log.debug("Query : " + query);
158
159 Assert.assertEquals("FROM " + QueriedEntity.class.getName() +
160 " ORDER BY " + QueriedEntity.PROPERTY_TEST_ADD,
161 query.fullQuery());
162
163 filter.setOrderBy(null);
164
165 query = new TopiaQuery(QueriedEntity.class).addFilter(filter);
166
167 log.debug("Query : " + query);
168
169 Assert.assertEquals("FROM " + QueriedEntity.class.getName() +
170 " ORDER BY " + TopiaEntity.TOPIA_CREATE_DATE + " DESC",
171 query.fullQuery());
172
173 }
174
175 @Test
176
177 public void testWhereWithFunction() {
178
179 TopiaQuery query = new TopiaQuery(QueriedEntity.class);
180 query.addWhere("lower(name)", TopiaQuery.Op.LIKE, "%azerty%");
181
182 log.debug("Query : " + query);
183
184 Assert.assertEquals("FROM " + QueriedEntity.class.getName() +
185 " WHERE lower(name) LIKE :lower_name_",
186 query.fullQuery());
187 }
188
189 }