This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch past-M2 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit a6eecd48b1b6435f586a6cf1157532b447013d23 Author: Andrus Adamchik <[email protected]> AuthorDate: Sat May 30 21:13:19 2026 -0400 Straighten SQL translator flow... cleanup --- .../velocity/VelocitySQLTemplateTranslator.java | 10 +++--- .../VelocitySQLTemplateTranslatorTest.java | 28 +++++++-------- .../VelocitySQLTemplateTranslator_ChainTest.java | 24 ++++++------- .../VelocitySQLTemplateTranslator_SelectTest.java | 12 +++---- .../cayenne/access/jdbc/SQLTemplateAction.java | 13 +++---- .../sqltemplate/CayenneSQLTemplateTranslator.java | 9 +++-- .../sqltemplate/SQLTemplateTranslator.java | 6 ++-- .../sqltemplate/TranslatedSQL.java} | 8 +++-- .../dba/frontbase/FrontBaseTemplateAction.java | 4 +-- .../dba/oracle/Oracle8SQLTemplateAction.java | 4 +-- .../dba/oracle/OracleSQLTemplateAction.java | 8 ++--- .../dba/sqlite/SQLiteSQLTemplateAction.java | 4 +-- .../cayenne/access/jdbc/SQLStatementTest.java | 41 ---------------------- .../CayenneSQLTemplateTranslatorTest.java | 29 +++++++-------- 14 files changed, 79 insertions(+), 121 deletions(-) diff --git a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator.java b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator.java index 04d66a65e..704a0d6a0 100644 --- a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator.java +++ b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator.java @@ -21,7 +21,7 @@ package org.apache.cayenne.velocity; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.jdbc.ColumnDescriptor; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.translator.sqltemplate.SQLTemplateTranslator; import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.exp.ExpressionException; @@ -123,7 +123,7 @@ public class VelocitySQLTemplateTranslator implements SQLTemplateTranslator { * as a "helper" variable and SQLStatement object as "statement" variable. */ @Override - public SQLStatement translate(String template, Map<String, ?> parameters) { + public TranslatedSQL translate(String template, Map<String, ?> parameters) { // have to make a copy of parameter map since we are gonna modify it.. Map<String, Object> internalParameters = (parameters != null && !parameters.isEmpty()) ? new HashMap<>( parameters) : new HashMap<String, Object>(5); @@ -133,7 +133,7 @@ public class VelocitySQLTemplateTranslator implements SQLTemplateTranslator { } @Override - public SQLStatement translate(String template, List<Object> positionalParameters) { + public TranslatedSQL translate(String template, List<Object> positionalParameters) { SimpleNode parsedTemplate = parse(template); @@ -146,7 +146,7 @@ public class VelocitySQLTemplateTranslator implements SQLTemplateTranslator { return translate(template, parsedTemplate, internalParameters); } - SQLStatement translate(String template, SimpleNode parsedTemplate, Map<String, Object> parameters) { + TranslatedSQL translate(String template, SimpleNode parsedTemplate, Map<String, Object> parameters) { List<ParameterBinding> bindings = new ArrayList<>(); List<ColumnDescriptor> results = new ArrayList<>(); parameters.put(BINDINGS_LIST_KEY, bindings); @@ -166,7 +166,7 @@ public class VelocitySQLTemplateTranslator implements SQLTemplateTranslator { ColumnDescriptor[] resultsArray = new ColumnDescriptor[results.size()]; results.toArray(resultsArray); - return new SQLStatement(sql, resultsArray, bindingsArray); + return new TranslatedSQL(sql, resultsArray, bindingsArray); } String buildStatement(VelocityContext context, String template, SimpleNode parsedTemplate) throws Exception { diff --git a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslatorTest.java b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslatorTest.java index 69507f9ae..f3daaf396 100644 --- a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslatorTest.java +++ b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslatorTest.java @@ -31,7 +31,7 @@ import java.util.Map; import org.apache.cayenne.GenericPersistentObject; import org.apache.cayenne.ObjectId; import org.apache.cayenne.Persistent; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.translator.ParameterBinding; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -49,7 +49,7 @@ public class VelocitySQLTemplateTranslatorTest { public void processTemplateUnchanged1() throws Exception { String sqlTemplate = "SELECT * FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals(sqlTemplate, compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -59,7 +59,7 @@ public class VelocitySQLTemplateTranslatorTest { public void processTemplateUnchanged2() throws Exception { String sqlTemplate = "SELECT a.b as XYZ FROM $SYSTEM_TABLE"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals(sqlTemplate, compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -70,7 +70,7 @@ public class VelocitySQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE $a"; Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE VALUE_OF_A", compiled.sql()); @@ -83,7 +83,7 @@ public class VelocitySQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE " + "COLUMN1 = #bind($a 'VARCHAR') AND COLUMN2 = #bind($b 'INTEGER')"; Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 = ? AND COLUMN2 = ?", compiled.sql()); assertEquals(2, compiled.bindings().length); @@ -96,7 +96,7 @@ public class VelocitySQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)"; Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals(1, compiled.bindings().length); assertBindingType(Types.VARCHAR, compiled.bindings()[0]); @@ -107,7 +107,7 @@ public class VelocitySQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)"; Map<String, Object> map = Collections.<String, Object> singletonMap("a", 4); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals(1, compiled.bindings().length); assertBindingType(Types.INTEGER, compiled.bindings()[0]); @@ -117,7 +117,7 @@ public class VelocitySQLTemplateTranslatorTest { public void processTemplateBindEqual() throws Exception { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindEqual($a 'VARCHAR')"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT * FROM ME WHERE COLUMN IS NULL", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -135,7 +135,7 @@ public class VelocitySQLTemplateTranslatorTest { public void processTemplateBindNotEqual() throws Exception { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindNotEqual($a 'VARCHAR')"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT * FROM ME WHERE COLUMN IS NOT NULL", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -158,7 +158,7 @@ public class VelocitySQLTemplateTranslatorTest { Map<String, Object> map = Collections.<String, Object> singletonMap("a", persistent); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 = ?", compiled.sql()); assertEquals(1, compiled.bindings().length); @@ -180,7 +180,7 @@ public class VelocitySQLTemplateTranslatorTest { Map<String, Object> map = Collections.<String, Object> singletonMap("a", persistent); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 <> ? AND COLUMN2 <> ?", compiled.sql()); assertEquals(2, compiled.bindings().length); @@ -194,7 +194,7 @@ public class VelocitySQLTemplateTranslatorTest { Map<String, Object> map = Collections.<String, Object> singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 > ?", compiled.sql()); assertEquals(1, compiled.bindings().length); @@ -211,7 +211,7 @@ public class VelocitySQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN IN (#bind($list 'VARCHAR'))"; Map<String, Object> map = Collections.<String, Object> singletonMap("list", Arrays.asList("a", "b", "c")); - SQLStatement compiled = new VelocitySQLTemplateTranslator().translate(sqlTemplate, map); + TranslatedSQL compiled = new VelocitySQLTemplateTranslator().translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN IN (?,?,?)", compiled.sql()); assertEquals(3, compiled.bindings().length); @@ -225,7 +225,7 @@ public class VelocitySQLTemplateTranslatorTest { @Test public void unknownDirective() throws Exception { String sqlTemplate = "SELECT #from(1) FROM a"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals("SELECT #from(1) FROM a", compiled.sql()); } diff --git a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_ChainTest.java b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_ChainTest.java index 8084950b8..a8b707e64 100644 --- a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_ChainTest.java +++ b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_ChainTest.java @@ -25,7 +25,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -43,7 +43,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { // whatever is inside the chain, it should render as empty if there // is no chunks... - SQLStatement compiled = processor.translate("#chain(' AND ') #end", + TranslatedSQL compiled = processor.translate("#chain(' AND ') #end", Collections.<String, Object> emptyMap()); assertEquals("", compiled.sql()); @@ -68,7 +68,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("b", "[B]"); map.put("c", "[C]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("[A] OR [B] OR [C]", compiled.sql()); } @@ -82,7 +82,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("b", "[B]"); map.put("c", "[C]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [A] OR [B] OR [C]", compiled.sql()); } @@ -95,7 +95,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("a", "[A]"); map.put("c", "[C]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [A] OR [C]", compiled.sql()); } @@ -108,7 +108,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("b", "[B]"); map.put("c", "[C]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [B] OR [C]", compiled.sql()); } @@ -121,7 +121,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("a", "[A]"); map.put("b", "[B]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [A] OR [B]", compiled.sql()); } @@ -134,7 +134,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("a", "[A]"); map.put("c", "[C]"); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [A] some other stuff OR [C]", compiled.sql()); } @@ -142,7 +142,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { public void processTemplateChainUnconditionalChunks() throws Exception { String template = "#chain(' OR ' 'WHERE ')" + "#chunk()C1#end" + "#chunk()C2#end" + "#chunk()C3#end" + "#end"; - SQLStatement compiled = processor.translate(template, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(template, Collections.<String, Object> emptyMap()); assertEquals("WHERE C1 OR C2 OR C3", compiled.sql()); } @@ -151,7 +151,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { String template = "#chain(' OR ' 'WHERE ')" + "#chunk($a)$a#end" + "#chunk($b)$b#end" + "#chunk($c)$c#end" + "#end"; - SQLStatement compiled = processor.translate(template, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(template, Collections.<String, Object> emptyMap()); assertEquals("", compiled.sql()); } @@ -164,7 +164,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("a", false); map.put("b", 0); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE [A] OR [B]", compiled.sql()); } @@ -177,7 +177,7 @@ public class VelocitySQLTemplateTranslator_ChainTest { map.put("a", false); map.put("b", 0); - SQLStatement compiled = processor.translate(template, map); + TranslatedSQL compiled = processor.translate(template, map); assertEquals("WHERE false OR 0", compiled.sql()); } diff --git a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java index 6507ca2e7..cc7369be1 100644 --- a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java +++ b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java @@ -25,7 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import java.util.Collections; import org.apache.cayenne.access.jdbc.ColumnDescriptor; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,7 +42,7 @@ public class VelocitySQLTemplateTranslator_SelectTest { public void processTemplateUnchanged() throws Exception { String sqlTemplate = "SELECT * FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals(sqlTemplate, compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -53,7 +53,7 @@ public class VelocitySQLTemplateTranslator_SelectTest { public void processSelectTemplate1() throws Exception { String sqlTemplate = "SELECT #result('A') FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT A FROM ME", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -66,7 +66,7 @@ public class VelocitySQLTemplateTranslator_SelectTest { public void processSelectTemplate2() throws Exception { String sqlTemplate = "SELECT #result('A' 'String') FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT A FROM ME", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -80,7 +80,7 @@ public class VelocitySQLTemplateTranslator_SelectTest { public void processSelectTemplate3() throws Exception { String sqlTemplate = "SELECT #result('A' 'String' 'B') FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT A AS B FROM ME", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -96,7 +96,7 @@ public class VelocitySQLTemplateTranslator_SelectTest { public void processSelectTemplate4() throws Exception { String sqlTemplate = "SELECT #result('A'), #result('B'), #result('C') FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.<String, Object> emptyMap()); assertEquals("SELECT A, B, C FROM ME", compiled.sql()); assertEquals(0, compiled.bindings().length); diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java index b33946421..444c14e13 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java @@ -25,6 +25,7 @@ import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.OperationObserver; import org.apache.cayenne.access.jdbc.reader.RowReader; import org.apache.cayenne.access.translator.ParameterBinding; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.access.types.ExtendedTypeMap; import org.apache.cayenne.dba.DbAdapter; @@ -139,7 +140,7 @@ public class SQLTemplateAction implements SQLAction { private void runWithPositionalParameters(Connection connection, OperationObserver callback, String template, Collection<Number> counts, boolean loggable) throws Exception { - SQLStatement compiled = dataNode.getSqlTemplateTranslator().translate(template, + TranslatedSQL compiled = dataNode.getSqlTemplateTranslator().translate(template, query.getPositionalParams()); bindExtendedTypes(compiled.bindings()); @@ -171,7 +172,7 @@ public class SQLTemplateAction implements SQLAction { for (int i = 0; i < batchSize; i++) { Map<String, ?> nextParameters = it.next(); - SQLStatement compiled = dataNode.getSqlTemplateTranslator().translate(template, nextParameters); + TranslatedSQL compiled = dataNode.getSqlTemplateTranslator().translate(template, nextParameters); bindExtendedTypes(compiled.bindings()); if (loggable) { dataNode.getJdbcEventLogger().logQuery(compiled.sql(), compiled.bindings()); @@ -182,7 +183,7 @@ public class SQLTemplateAction implements SQLAction { } - protected void execute(Connection connection, OperationObserver callback, SQLStatement compiled, + protected void execute(Connection connection, OperationObserver callback, TranslatedSQL compiled, Collection<Number> updateCounts) throws Exception { long t1 = System.currentTimeMillis(); @@ -247,7 +248,7 @@ public class SQLTemplateAction implements SQLAction { } @SuppressWarnings({ "unchecked", "rawtypes" }) - protected void processSelectResult(SQLStatement compiled, Connection connection, Statement statement, + protected void processSelectResult(TranslatedSQL compiled, Connection connection, Statement statement, ResultSet resultSet, OperationObserver callback, final long startTime) throws Exception { boolean iteratedResult = callback.isIteratedResult(); @@ -300,7 +301,7 @@ public class SQLTemplateAction implements SQLAction { /** * Creates column descriptors based on compiled statement and query metadata */ - private ColumnDescriptor[] createColumnDescriptors(SQLStatement compiled) { + private ColumnDescriptor[] createColumnDescriptors(TranslatedSQL compiled) { // SQLTemplate #result columns take precedence over other ways to determine the type if (compiled.resultColumns().length > 0) { if(query.getResultColumnsTypes() != null) { @@ -328,7 +329,7 @@ public class SQLTemplateAction implements SQLAction { /** * @since 3.0 */ - protected RowDescriptorBuilder configureRowDescriptorBuilder(SQLStatement compiled, ResultSet resultSet) + protected RowDescriptorBuilder configureRowDescriptorBuilder(TranslatedSQL compiled, ResultSet resultSet) throws SQLException { RowDescriptorBuilder builder = new RowDescriptorBuilder() .setResultSet(resultSet) diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslator.java index f2136e351..1710a0550 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslator.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslator.java @@ -20,7 +20,6 @@ package org.apache.cayenne.access.translator.sqltemplate; import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.access.jdbc.SQLStatement; import org.apache.cayenne.di.Inject; import org.apache.cayenne.access.translator.sqltemplate.parser.Node; import org.apache.cayenne.access.translator.sqltemplate.parser.ParseException; @@ -51,13 +50,13 @@ public class CayenneSQLTemplateTranslator implements SQLTemplateTranslator { } @Override - public SQLStatement translate(String template, Map<String, ?> parameters) { + public TranslatedSQL translate(String template, Map<String, ?> parameters) { Context context = contextFactory.createContext(parameters); return process(template, context); } @Override - public SQLStatement translate(String template, List<Object> positionalParameters) { + public TranslatedSQL translate(String template, List<Object> positionalParameters) { Map<String, Object> parameters = new HashMap<>(); int i=0; for(Object param : positionalParameters) { @@ -67,7 +66,7 @@ public class CayenneSQLTemplateTranslator implements SQLTemplateTranslator { return process(template, context); } - protected SQLStatement process(String template, Context context) { + protected TranslatedSQL process(String template, Context context) { Node node = templateCache.get(template); if(node == null) { SQLTemplateParser parser = parserPool.get(); @@ -85,6 +84,6 @@ public class CayenneSQLTemplateTranslator implements SQLTemplateTranslator { node.evaluate(context); - return new SQLStatement(context.buildTemplate(), context.getColumnDescriptors(), context.getParameterBindings()); + return new TranslatedSQL(context.buildTemplate(), context.getColumnDescriptors(), context.getParameterBindings()); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/SQLTemplateTranslator.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/SQLTemplateTranslator.java index 41eda201f..70a7df95f 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/SQLTemplateTranslator.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/SQLTemplateTranslator.java @@ -18,8 +18,6 @@ ****************************************************************/ package org.apache.cayenne.access.translator.sqltemplate; -import org.apache.cayenne.access.jdbc.SQLStatement; - import java.util.List; import java.util.Map; @@ -34,7 +32,7 @@ public interface SQLTemplateTranslator { * * @since 5.0 */ - SQLStatement translate(String template, Map<String, ?> parameters); + TranslatedSQL translate(String template, Map<String, ?> parameters); /** * Builds and returns a SQLStatement based on SQL template String and a list @@ -42,5 +40,5 @@ public interface SQLTemplateTranslator { * * @since 5.0 */ - SQLStatement translate(String template, List<Object> positionalParameters); + TranslatedSQL translate(String template, List<Object> positionalParameters); } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLStatement.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/TranslatedSQL.java similarity index 82% rename from cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLStatement.java rename to cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/TranslatedSQL.java index 1cf46f90b..94e0b6e85 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLStatement.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/TranslatedSQL.java @@ -17,8 +17,9 @@ * under the License. ****************************************************************/ -package org.apache.cayenne.access.jdbc; +package org.apache.cayenne.access.translator.sqltemplate; +import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.translator.ParameterBinding; /** @@ -26,5 +27,8 @@ import org.apache.cayenne.access.translator.ParameterBinding; * * @since 1.1 */ -public record SQLStatement(String sql, ColumnDescriptor[] resultColumns, ParameterBinding[] bindings) { +public record TranslatedSQL( + String sql, + ColumnDescriptor[] resultColumns, + ParameterBinding[] bindings) { } diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseTemplateAction.java index 6c484aab3..99d1f41b8 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseTemplateAction.java @@ -21,7 +21,7 @@ package org.apache.cayenne.dba.frontbase; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.OperationObserver; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.jdbc.SQLTemplateAction; import org.apache.cayenne.query.SQLTemplate; @@ -42,7 +42,7 @@ public class FrontBaseTemplateAction extends SQLTemplateAction { } @Override - protected void execute(Connection connection, OperationObserver callback, SQLStatement compiled, + protected void execute(Connection connection, OperationObserver callback, TranslatedSQL compiled, Collection<Number> updateCounts) throws SQLException, Exception { long t1 = System.currentTimeMillis(); diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/Oracle8SQLTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/Oracle8SQLTemplateAction.java index 5413906de..4999bfc9b 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/Oracle8SQLTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/Oracle8SQLTemplateAction.java @@ -21,7 +21,7 @@ package org.apache.cayenne.dba.oracle; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.OperationObserver; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.jdbc.SQLTemplateAction; import org.apache.cayenne.query.SQLTemplate; @@ -48,7 +48,7 @@ class Oracle8SQLTemplateAction extends SQLTemplateAction { * not work in Oracle 8.* drivers. */ @Override - protected void execute(Connection connection, OperationObserver callback, SQLStatement compiled, + protected void execute(Connection connection, OperationObserver callback, TranslatedSQL compiled, Collection<Number> updateCounts) throws Exception { String sql = compiled.sql().trim(); diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleSQLTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleSQLTemplateAction.java index 79d8053e0..cb8c39c46 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleSQLTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleSQLTemplateAction.java @@ -26,7 +26,7 @@ import java.sql.Statement; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.OperationObserver; import org.apache.cayenne.access.jdbc.RowDescriptorBuilder; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.jdbc.SQLTemplateAction; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.query.SQLTemplate; @@ -44,8 +44,8 @@ class OracleSQLTemplateAction extends SQLTemplateAction { } @Override - protected void processSelectResult(SQLStatement compiled, Connection connection, Statement statement, - ResultSet resultSet, OperationObserver callback, long startTime) throws Exception { + protected void processSelectResult(TranslatedSQL compiled, Connection connection, Statement statement, + ResultSet resultSet, OperationObserver callback, long startTime) throws Exception { // wrap ResultSet to distinguish between Integer and BigDecimal for // Oracle NUMBER @@ -62,7 +62,7 @@ class OracleSQLTemplateAction extends SQLTemplateAction { * @since 3.0 */ @Override - protected RowDescriptorBuilder configureRowDescriptorBuilder(SQLStatement compiled, ResultSet resultSet) + protected RowDescriptorBuilder configureRowDescriptorBuilder(TranslatedSQL compiled, ResultSet resultSet) throws SQLException { RowDescriptorBuilder builder = super.configureRowDescriptorBuilder(compiled, resultSet); diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteSQLTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteSQLTemplateAction.java index 21b1997ed..e9024a442 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteSQLTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteSQLTemplateAction.java @@ -20,7 +20,7 @@ package org.apache.cayenne.dba.sqlite; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.OperationObserver; -import org.apache.cayenne.access.jdbc.SQLStatement; +import org.apache.cayenne.access.translator.sqltemplate.TranslatedSQL; import org.apache.cayenne.access.jdbc.SQLTemplateAction; import org.apache.cayenne.query.SQLTemplate; @@ -47,7 +47,7 @@ class SQLiteSQLTemplateAction extends SQLTemplateAction { protected void execute( Connection connection, OperationObserver callback, - SQLStatement compiled, + TranslatedSQL compiled, Collection<Number> updateCounts) throws Exception { String sql = compiled.sql().trim(); diff --git a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLStatementTest.java b/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLStatementTest.java deleted file mode 100644 index 17b45bcd9..000000000 --- a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLStatementTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.jdbc; - -import org.apache.cayenne.access.translator.ParameterBinding; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertSame; - -/** - */ -public class SQLStatementTest { - - @Test - public void constructor() throws Exception { - ParameterBinding[] bindings = new ParameterBinding[0]; - SQLStatement statement = new SQLStatement("abc", null, bindings); - assertEquals("abc", statement.sql()); - assertSame(bindings, statement.bindings()); - assertNull(statement.resultColumns()); - } -} diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslatorTest.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslatorTest.java index 2fd952c0d..0097bb7f8 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslatorTest.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/sqltemplate/CayenneSQLTemplateTranslatorTest.java @@ -28,10 +28,7 @@ import java.util.Map; import org.apache.cayenne.GenericPersistentObject; import org.apache.cayenne.ObjectId; import org.apache.cayenne.Persistent; -import org.apache.cayenne.access.jdbc.SQLStatement; import org.apache.cayenne.access.translator.ParameterBinding; -import org.apache.cayenne.access.translator.sqltemplate.CayenneSQLTemplateTranslator; -import org.apache.cayenne.access.translator.sqltemplate.DefaultTemplateContextFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -50,7 +47,7 @@ public class CayenneSQLTemplateTranslatorTest { public void processTemplateUnchanged1() throws Exception { String sqlTemplate = "SELECT * FROM ME"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals(sqlTemplate, compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -60,7 +57,7 @@ public class CayenneSQLTemplateTranslatorTest { public void processTemplateUnchanged2() throws Exception { String sqlTemplate = "SELECT a.b as XYZ FROM $SYSTEM_TABLE"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals(sqlTemplate, compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -71,7 +68,7 @@ public class CayenneSQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE $a"; Map<String, Object> map = Collections.singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE VALUE_OF_A", compiled.sql()); @@ -84,7 +81,7 @@ public class CayenneSQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE " + "COLUMN1 = #bind($a 'VARCHAR') AND COLUMN2 = #bind($b 'INTEGER')"; Map<String, Object> map = Collections.singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 = ? AND COLUMN2 = ?", compiled.sql()); assertEquals(2, compiled.bindings().length); @@ -97,7 +94,7 @@ public class CayenneSQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)"; Map<String, Object> map = Collections.singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals(1, compiled.bindings().length); assertBindingType(Types.VARCHAR, compiled.bindings()[0]); @@ -108,7 +105,7 @@ public class CayenneSQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN1 = #bind($a)"; Map<String, Object> map = Collections.singletonMap("a", 4); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals(1, compiled.bindings().length); assertBindingType(Types.INTEGER, compiled.bindings()[0]); @@ -118,7 +115,7 @@ public class CayenneSQLTemplateTranslatorTest { public void processTemplateBindEqual() throws Exception { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindEqual($a 'VARCHAR')"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals("SELECT * FROM ME WHERE COLUMN IS NULL", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -136,7 +133,7 @@ public class CayenneSQLTemplateTranslatorTest { public void processTemplateBindNotEqual() throws Exception { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN #bindNotEqual($a 'VARCHAR')"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals("SELECT * FROM ME WHERE COLUMN IS NOT NULL", compiled.sql()); assertEquals(0, compiled.bindings().length); @@ -159,7 +156,7 @@ public class CayenneSQLTemplateTranslatorTest { Map<String, Object> map = Collections.singletonMap("a", persistent); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 = ?", compiled.sql()); assertEquals(1, compiled.bindings().length); @@ -181,7 +178,7 @@ public class CayenneSQLTemplateTranslatorTest { Map<String, Object> map = Collections.singletonMap("a", persistent); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 <> ? AND COLUMN2 <> ?", compiled.sql()); assertEquals(2, compiled.bindings().length); @@ -195,7 +192,7 @@ public class CayenneSQLTemplateTranslatorTest { Map<String, Object> map = Collections.singletonMap("a", "VALUE_OF_A"); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN1 > ?", compiled.sql()); assertEquals(1, compiled.bindings().length); @@ -212,7 +209,7 @@ public class CayenneSQLTemplateTranslatorTest { String sqlTemplate = "SELECT * FROM ME WHERE COLUMN IN (#bind($list 'VARCHAR'))"; Map<String, Object> map = Collections.singletonMap("list", Arrays.asList("a", "b", "c")); - SQLStatement compiled = processor.translate(sqlTemplate, map); + TranslatedSQL compiled = processor.translate(sqlTemplate, map); assertEquals("SELECT * FROM ME WHERE COLUMN IN (?,?,?)", compiled.sql()); assertEquals(3, compiled.bindings().length); @@ -224,7 +221,7 @@ public class CayenneSQLTemplateTranslatorTest { @Test public void unknownDirective() throws Exception { String sqlTemplate = "SELECT #from(1) FROM a"; - SQLStatement compiled = processor.translate(sqlTemplate, Collections.emptyMap()); + TranslatedSQL compiled = processor.translate(sqlTemplate, Collections.emptyMap()); assertEquals("SELECT FROM a", compiled.sql()); }
