Skip to content

Commit 7374630

Browse files
committed
Straighten SQL translator flow...
cleanup
1 parent 3ab8c30 commit 7374630

14 files changed

Lines changed: 79 additions & 121 deletions

File tree

cayenne-velocity/src/main/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.apache.cayenne.CayenneRuntimeException;
2323
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
24-
import org.apache.cayenne.access.jdbc.SQLStatement;
24+
import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL;
2525
import org.apache.cayenne.access.translator.sqltemplate.SQLTemplateTranslator;
2626
import org.apache.cayenne.access.translator.ParameterBinding;
2727
import org.apache.cayenne.exp.ExpressionException;
@@ -123,7 +123,7 @@ public VelocitySQLTemplateTranslator() {
123123
* as a "helper" variable and SQLStatement object as "statement" variable.
124124
*/
125125
@Override
126-
public SQLStatement translate(String template, Map<String, ?> parameters) {
126+
public TranslatedSQL translate(String template, Map<String, ?> parameters) {
127127
// have to make a copy of parameter map since we are gonna modify it..
128128
Map<String, Object> internalParameters = (parameters != null && !parameters.isEmpty()) ? new HashMap<>(
129129
parameters) : new HashMap<String, Object>(5);
@@ -133,7 +133,7 @@ public SQLStatement translate(String template, Map<String, ?> parameters) {
133133
}
134134

135135
@Override
136-
public SQLStatement translate(String template, List<Object> positionalParameters) {
136+
public TranslatedSQL translate(String template, List<Object> positionalParameters) {
137137

138138
SimpleNode parsedTemplate = parse(template);
139139

@@ -146,7 +146,7 @@ public SQLStatement translate(String template, List<Object> positionalParameters
146146
return translate(template, parsedTemplate, internalParameters);
147147
}
148148

149-
SQLStatement translate(String template, SimpleNode parsedTemplate, Map<String, Object> parameters) {
149+
TranslatedSQL translate(String template, SimpleNode parsedTemplate, Map<String, Object> parameters) {
150150
List<ParameterBinding> bindings = new ArrayList<>();
151151
List<ColumnDescriptor> results = new ArrayList<>();
152152
parameters.put(BINDINGS_LIST_KEY, bindings);
@@ -166,7 +166,7 @@ SQLStatement translate(String template, SimpleNode parsedTemplate, Map<String, O
166166
ColumnDescriptor[] resultsArray = new ColumnDescriptor[results.size()];
167167
results.toArray(resultsArray);
168168

169-
return new SQLStatement(sql, resultsArray, bindingsArray);
169+
return new TranslatedSQL(sql, resultsArray, bindingsArray);
170170
}
171171

172172
String buildStatement(VelocityContext context, String template, SimpleNode parsedTemplate) throws Exception {

cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslatorTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.apache.cayenne.GenericPersistentObject;
3232
import org.apache.cayenne.ObjectId;
3333
import org.apache.cayenne.Persistent;
34-
import org.apache.cayenne.access.jdbc.SQLStatement;
34+
import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL;
3535
import org.apache.cayenne.access.translator.ParameterBinding;
3636
import org.junit.jupiter.api.BeforeEach;
3737
import org.junit.jupiter.api.Test;
@@ -49,7 +49,7 @@ public void before() {
4949
public void processTemplateUnchanged1() throws Exception {
5050
String sqlTemplate = "SELECT * FROM ME";
5151

52-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
52+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
5353

5454
assertEquals(sqlTemplate, compiled.sql());
5555
assertEquals(0, compiled.bindings().length);
@@ -59,7 +59,7 @@ public void processTemplateUnchanged1() throws Exception {
5959
public void processTemplateUnchanged2() throws Exception {
6060
String sqlTemplate = "SELECT a.b as XYZ FROM $SYSTEM_TABLE";
6161

62-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
62+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
6363

6464
assertEquals(sqlTemplate, compiled.sql());
6565
assertEquals(0, compiled.bindings().length);
@@ -70,7 +70,7 @@ public void processTemplateSimpleDynamicContent() throws Exception {
7070
String sqlTemplate = "SELECT * FROM ME WHERE $a";
7171

7272
Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A");
73-
SQLStatement compiled = processor.translate(sqlTemplate, map);
73+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
7474

7575
assertEquals("SELECT * FROM ME WHERE VALUE_OF_A", compiled.sql());
7676

@@ -83,7 +83,7 @@ public void processTemplateBind() throws Exception {
8383
String sqlTemplate = "SELECT * FROM ME WHERE "
8484
+ "COLUMN1 = #bind($a 'VARCHAR') AND COLUMN2 = #bind($b 'INTEGER')";
8585
Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A");
86-
SQLStatement compiled = processor.translate(sqlTemplate, map);
86+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
8787

8888
assertEquals("SELECT * FROM ME WHERE COLUMN1 = ? AND COLUMN2 = ?", compiled.sql());
8989
assertEquals(2, compiled.bindings().length);
@@ -96,7 +96,7 @@ public void processTemplateBindGuessVarchar() throws Exception {
9696
String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)";
9797
Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A");
9898

99-
SQLStatement compiled = processor.translate(sqlTemplate, map);
99+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
100100

101101
assertEquals(1, compiled.bindings().length);
102102
assertBindingType(Types.VARCHAR, compiled.bindings()[0]);
@@ -107,7 +107,7 @@ public void processTemplateBindGuessInteger() throws Exception {
107107
String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)";
108108
Map<String, Object> map = Collections.<String, Object> singletonMap("a", 4);
109109

110-
SQLStatement compiled = processor.translate(sqlTemplate, map);
110+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
111111

112112
assertEquals(1, compiled.bindings().length);
113113
assertBindingType(Types.INTEGER, compiled.bindings()[0]);
@@ -117,7 +117,7 @@ public void processTemplateBindGuessInteger() throws Exception {
117117
public void processTemplateBindEqual() throws Exception {
118118
String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindEqual($a 'VARCHAR')";
119119

120-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
120+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
121121

122122
assertEquals("SELECT * FROM ME WHERE COLUMN IS NULL", compiled.sql());
123123
assertEquals(0, compiled.bindings().length);
@@ -135,7 +135,7 @@ public void processTemplateBindEqual() throws Exception {
135135
public void processTemplateBindNotEqual() throws Exception {
136136
String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindNotEqual($a 'VARCHAR')";
137137

138-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
138+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
139139

140140
assertEquals("SELECT * FROM ME WHERE COLUMN IS NOT NULL", compiled.sql());
141141
assertEquals(0, compiled.bindings().length);
@@ -158,7 +158,7 @@ public void processTemplateID() throws Exception {
158158

159159
Map<String, Object> map = Collections.<String, Object> singletonMap("a", persistent);
160160

161-
SQLStatement compiled = processor.translate(sqlTemplate, map);
161+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
162162

163163
assertEquals("SELECT * FROM ME WHERE COLUMN1 = ?", compiled.sql());
164164
assertEquals(1, compiled.bindings().length);
@@ -180,7 +180,7 @@ public void processTemplateNotEqualID() throws Exception {
180180

181181
Map<String, Object> map = Collections.<String, Object> singletonMap("a", persistent);
182182

183-
SQLStatement compiled = processor.translate(sqlTemplate, map);
183+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
184184

185185
assertEquals("SELECT * FROM ME WHERE COLUMN1 <> ? AND COLUMN2 <> ?", compiled.sql());
186186
assertEquals(2, compiled.bindings().length);
@@ -194,7 +194,7 @@ public void processTemplateConditions() throws Exception {
194194

195195
Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A");
196196

197-
SQLStatement compiled = processor.translate(sqlTemplate, map);
197+
TranslatedSQL compiled = processor.translate(sqlTemplate, map);
198198

199199
assertEquals("SELECT * FROM ME WHERE COLUMN1 > ?", compiled.sql());
200200
assertEquals(1, compiled.bindings().length);
@@ -211,7 +211,7 @@ public void processTemplateBindCollection() throws Exception {
211211
String sqlTemplate = "SELECT * FROM ME WHERE COLUMN IN (#bind($list 'VARCHAR'))";
212212

213213
Map<String, Object> map = Collections.<String, Object> singletonMap("list", Arrays.asList("a", "b", "c"));
214-
SQLStatement compiled = new VelocitySQLTemplateTranslator().translate(sqlTemplate, map);
214+
TranslatedSQL compiled = new VelocitySQLTemplateTranslator().translate(sqlTemplate, map);
215215

216216
assertEquals("SELECT * FROM ME WHERE COLUMN IN (?,?,?)", compiled.sql());
217217
assertEquals(3, compiled.bindings().length);
@@ -225,7 +225,7 @@ public void processTemplateBindCollection() throws Exception {
225225
@Test
226226
public void unknownDirective() throws Exception {
227227
String sqlTemplate = "SELECT #from(1) FROM a";
228-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap());
228+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap());
229229
assertEquals("SELECT #from(1) FROM a", compiled.sql());
230230
}
231231

cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_ChainTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import java.util.HashMap;
2626
import java.util.Map;
2727

28-
import org.apache.cayenne.access.jdbc.SQLStatement;
28+
import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL;
2929
import org.junit.jupiter.api.BeforeEach;
3030
import org.junit.jupiter.api.Test;
3131

@@ -43,7 +43,7 @@ public void processTemplateNoChunks() throws Exception {
4343
// whatever is inside the chain, it should render as empty if there
4444
// is no chunks...
4545

46-
SQLStatement compiled = processor.translate("#chain(' AND ') #end",
46+
TranslatedSQL compiled = processor.translate("#chain(' AND ') #end",
4747
Collections.<String, Object> emptyMap());
4848
assertEquals("", compiled.sql());
4949

@@ -68,7 +68,7 @@ public void processTemplateFullChain() throws Exception {
6868
map.put("b", "[B]");
6969
map.put("c", "[C]");
7070

71-
SQLStatement compiled = processor.translate(template, map);
71+
TranslatedSQL compiled = processor.translate(template, map);
7272
assertEquals("[A] OR [B] OR [C]", compiled.sql());
7373
}
7474

@@ -82,7 +82,7 @@ public void processTemplateFullChainAndPrefix() throws Exception {
8282
map.put("b", "[B]");
8383
map.put("c", "[C]");
8484

85-
SQLStatement compiled = processor.translate(template, map);
85+
TranslatedSQL compiled = processor.translate(template, map);
8686
assertEquals("WHERE [A] OR [B] OR [C]", compiled.sql());
8787
}
8888

@@ -95,7 +95,7 @@ public void processTemplatePartialChainMiddle() throws Exception {
9595
map.put("a", "[A]");
9696
map.put("c", "[C]");
9797

98-
SQLStatement compiled = processor.translate(template, map);
98+
TranslatedSQL compiled = processor.translate(template, map);
9999
assertEquals("WHERE [A] OR [C]", compiled.sql());
100100
}
101101

@@ -108,7 +108,7 @@ public void processTemplatePartialChainStart() throws Exception {
108108
map.put("b", "[B]");
109109
map.put("c", "[C]");
110110

111-
SQLStatement compiled = processor.translate(template, map);
111+
TranslatedSQL compiled = processor.translate(template, map);
112112
assertEquals("WHERE [B] OR [C]", compiled.sql());
113113
}
114114

@@ -121,7 +121,7 @@ public void processTemplatePartialChainEnd() throws Exception {
121121
map.put("a", "[A]");
122122
map.put("b", "[B]");
123123

124-
SQLStatement compiled = processor.translate(template, map);
124+
TranslatedSQL compiled = processor.translate(template, map);
125125
assertEquals("WHERE [A] OR [B]", compiled.sql());
126126
}
127127

@@ -134,15 +134,15 @@ public void processTemplateChainWithGarbage() throws Exception {
134134
map.put("a", "[A]");
135135
map.put("c", "[C]");
136136

137-
SQLStatement compiled = processor.translate(template, map);
137+
TranslatedSQL compiled = processor.translate(template, map);
138138
assertEquals("WHERE [A] some other stuff OR [C]", compiled.sql());
139139
}
140140

141141
@Test
142142
public void processTemplateChainUnconditionalChunks() throws Exception {
143143
String template = "#chain(' OR ' 'WHERE ')" + "#chunk()C1#end" + "#chunk()C2#end" + "#chunk()C3#end" + "#end";
144144

145-
SQLStatement compiled = processor.translate(template, Collections.<String, Object> emptyMap());
145+
TranslatedSQL compiled = processor.translate(template, Collections.<String, Object> emptyMap());
146146
assertEquals("WHERE C1 OR C2 OR C3", compiled.sql());
147147
}
148148

@@ -151,7 +151,7 @@ public void processTemplateEmptyChain() throws Exception {
151151
String template = "#chain(' OR ' 'WHERE ')" + "#chunk($a)$a#end" + "#chunk($b)$b#end" + "#chunk($c)$c#end"
152152
+ "#end";
153153

154-
SQLStatement compiled = processor.translate(template, Collections.<String, Object> emptyMap());
154+
TranslatedSQL compiled = processor.translate(template, Collections.<String, Object> emptyMap());
155155
assertEquals("", compiled.sql());
156156
}
157157

@@ -164,7 +164,7 @@ public void processTemplateWithFalseOrZero1() throws Exception {
164164
map.put("a", false);
165165
map.put("b", 0);
166166

167-
SQLStatement compiled = processor.translate(template, map);
167+
TranslatedSQL compiled = processor.translate(template, map);
168168
assertEquals("WHERE [A] OR [B]", compiled.sql());
169169
}
170170

@@ -177,7 +177,7 @@ public void processTemplateWithFalseOrZero2() throws Exception {
177177
map.put("a", false);
178178
map.put("b", 0);
179179

180-
SQLStatement compiled = processor.translate(template, map);
180+
TranslatedSQL compiled = processor.translate(template, map);
181181
assertEquals("WHERE false OR 0", compiled.sql());
182182
}
183183

cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import java.util.Collections;
2626

2727
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
28-
import org.apache.cayenne.access.jdbc.SQLStatement;
28+
import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL;
2929
import org.junit.jupiter.api.BeforeEach;
3030
import org.junit.jupiter.api.Test;
3131

@@ -42,7 +42,7 @@ public void before() {
4242
public void processTemplateUnchanged() throws Exception {
4343
String sqlTemplate = "SELECT * FROM ME";
4444

45-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
45+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
4646

4747
assertEquals(sqlTemplate, compiled.sql());
4848
assertEquals(0, compiled.bindings().length);
@@ -53,7 +53,7 @@ public void processTemplateUnchanged() throws Exception {
5353
public void processSelectTemplate1() throws Exception {
5454
String sqlTemplate = "SELECT #result('A') FROM ME";
5555

56-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
56+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
5757

5858
assertEquals("SELECT A FROM ME", compiled.sql());
5959
assertEquals(0, compiled.bindings().length);
@@ -66,7 +66,7 @@ public void processSelectTemplate1() throws Exception {
6666
public void processSelectTemplate2() throws Exception {
6767
String sqlTemplate = "SELECT #result('A' 'String') FROM ME";
6868

69-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
69+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
7070

7171
assertEquals("SELECT A FROM ME", compiled.sql());
7272
assertEquals(0, compiled.bindings().length);
@@ -80,7 +80,7 @@ public void processSelectTemplate2() throws Exception {
8080
public void processSelectTemplate3() throws Exception {
8181
String sqlTemplate = "SELECT #result('A' 'String' 'B') FROM ME";
8282

83-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
83+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
8484

8585
assertEquals("SELECT A AS B FROM ME", compiled.sql());
8686
assertEquals(0, compiled.bindings().length);
@@ -96,7 +96,7 @@ public void processSelectTemplate3() throws Exception {
9696
public void processSelectTemplate4() throws Exception {
9797
String sqlTemplate = "SELECT #result('A'), #result('B'), #result('C') FROM ME";
9898

99-
SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
99+
TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap());
100100

101101
assertEquals("SELECT A, B, C FROM ME", compiled.sql());
102102
assertEquals(0, compiled.bindings().length);

cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.cayenne.access.OperationObserver;
2626
import org.apache.cayenne.access.jdbc.reader.RowReader;
2727
import org.apache.cayenne.access.translator.ParameterBinding;
28+
import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL;
2829
import org.apache.cayenne.access.types.ExtendedType;
2930
import org.apache.cayenne.access.types.ExtendedTypeMap;
3031
import org.apache.cayenne.dba.DbAdapter;
@@ -139,7 +140,7 @@ private void bindExtendedTypes(ParameterBinding[] bindings) {
139140
private void runWithPositionalParameters(Connection connection, OperationObserver callback, String template,
140141
Collection<Number> counts, boolean loggable) throws Exception {
141142

142-
SQLStatement compiled = dataNode.getSqlTemplateTranslator().translate(template,
143+
TranslatedSQL compiled = dataNode.getSqlTemplateTranslator().translate(template,
143144
query.getPositionalParams());
144145

145146
bindExtendedTypes(compiled.bindings());
@@ -171,7 +172,7 @@ private void runWithNamedParametersBatch(Connection connection, OperationObserve
171172

172173
for (int i = 0; i < batchSize; i++) {
173174
Map<String, ?> nextParameters = it.next();
174-
SQLStatement compiled = dataNode.getSqlTemplateTranslator().translate(template, nextParameters);
175+
TranslatedSQL compiled = dataNode.getSqlTemplateTranslator().translate(template, nextParameters);
175176
bindExtendedTypes(compiled.bindings());
176177
if (loggable) {
177178
dataNode.getJdbcEventLogger().logQuery(compiled.sql(), compiled.bindings());
@@ -182,7 +183,7 @@ private void runWithNamedParametersBatch(Connection connection, OperationObserve
182183

183184
}
184185

185-
protected void execute(Connection connection, OperationObserver callback, SQLStatement compiled,
186+
protected void execute(Connection connection, OperationObserver callback, TranslatedSQL compiled,
186187
Collection<Number> updateCounts) throws Exception {
187188

188189
long t1 = System.currentTimeMillis();
@@ -247,7 +248,7 @@ protected void execute(Connection connection, OperationObserver callback, SQLSta
247248
}
248249

249250
@SuppressWarnings({ "unchecked", "rawtypes" })
250-
protected void processSelectResult(SQLStatement compiled, Connection connection, Statement statement,
251+
protected void processSelectResult(TranslatedSQL compiled, Connection connection, Statement statement,
251252
ResultSet resultSet, OperationObserver callback, final long startTime) throws Exception {
252253

253254
boolean iteratedResult = callback.isIteratedResult();
@@ -300,7 +301,7 @@ private void recreateQueryMetadata(ResultSet resultSet) throws SQLException {
300301
/**
301302
* Creates column descriptors based on compiled statement and query metadata
302303
*/
303-
private ColumnDescriptor[] createColumnDescriptors(SQLStatement compiled) {
304+
private ColumnDescriptor[] createColumnDescriptors(TranslatedSQL compiled) {
304305
// SQLTemplate #result columns take precedence over other ways to determine the type
305306
if (compiled.resultColumns().length > 0) {
306307
if(query.getResultColumnsTypes() != null) {
@@ -328,7 +329,7 @@ private ColumnDescriptor[] createColumnDescriptors(SQLStatement compiled) {
328329
/**
329330
* @since 3.0
330331
*/
331-
protected RowDescriptorBuilder configureRowDescriptorBuilder(SQLStatement compiled, ResultSet resultSet)
332+
protected RowDescriptorBuilder configureRowDescriptorBuilder(TranslatedSQL compiled, ResultSet resultSet)
332333
throws SQLException {
333334
RowDescriptorBuilder builder = new RowDescriptorBuilder()
334335
.setResultSet(resultSet)

0 commit comments

Comments
 (0)