This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 9b0d8dcf0 CAY-2971 Remove extra spaces within SQL parenthesis
9b0d8dcf0 is described below
commit 9b0d8dcf09ba74c0704598e44ec3f23b98f82cc2
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat Jul 4 13:38:05 2026 -0400
CAY-2971 Remove extra spaces within SQL parenthesis
---
RELEASE-NOTES.txt | 1 +
.../access/sqlbuilder/DefaultSQLAppendable.java | 21 +++++++++++++
.../cayenne/access/sqlbuilder/SQLAppendable.java | 13 ++++++++
.../access/sqlbuilder/sqltree/AliasedNode.java | 4 +--
.../access/sqlbuilder/sqltree/BetweenNode.java | 6 ++--
.../access/sqlbuilder/sqltree/CaseNode.java | 4 +--
.../access/sqlbuilder/sqltree/ColumnNode.java | 4 +--
.../access/sqlbuilder/sqltree/DistinctNode.java | 2 +-
.../access/sqlbuilder/sqltree/ElseNode.java | 2 +-
.../access/sqlbuilder/sqltree/EqualNode.java | 4 +--
.../access/sqlbuilder/sqltree/ExistsNode.java | 2 +-
.../access/sqlbuilder/sqltree/ExpressionNode.java | 4 +--
.../access/sqlbuilder/sqltree/FromNode.java | 2 +-
.../access/sqlbuilder/sqltree/FunctionNode.java | 10 +++---
.../access/sqlbuilder/sqltree/GroupByNode.java | 2 +-
.../access/sqlbuilder/sqltree/HavingNode.java | 2 +-
.../cayenne/access/sqlbuilder/sqltree/InNode.java | 4 +--
.../sqlbuilder/sqltree/InsertColumnsNode.java | 2 +-
.../sqlbuilder/sqltree/InsertValuesNode.java | 4 +--
.../access/sqlbuilder/sqltree/JoinNode.java | 2 +-
.../access/sqlbuilder/sqltree/LikeNode.java | 10 +++---
.../access/sqlbuilder/sqltree/LimitOffsetNode.java | 3 +-
.../cayenne/access/sqlbuilder/sqltree/NotNode.java | 2 +-
.../sqlbuilder/sqltree/OffsetFetchNextNode.java | 4 +--
.../access/sqlbuilder/sqltree/OffsetNode.java | 2 +-
.../sqlbuilder/sqltree/OpExpressionNode.java | 2 +-
.../access/sqlbuilder/sqltree/OrderByNode.java | 2 +-
.../access/sqlbuilder/sqltree/SelectNode.java | 2 +-
.../access/sqlbuilder/sqltree/TableNode.java | 4 +--
.../access/sqlbuilder/sqltree/ThenNode.java | 2 +-
.../cayenne/access/sqlbuilder/sqltree/TopNode.java | 2 +-
.../sqlbuilder/sqltree/TrimmingColumnNode.java | 8 ++---
.../sqlbuilder/sqltree/UnescapedColumnNode.java | 4 +--
.../access/sqlbuilder/sqltree/UpdateSetNode.java | 2 +-
.../access/sqlbuilder/sqltree/ValueNode.java | 10 +++---
.../access/sqlbuilder/sqltree/WhenNode.java | 2 +-
.../access/sqlbuilder/sqltree/WhereNode.java | 2 +-
.../access/DataContextPrefetchExtrasIT.java | 17 +++++-----
.../access/sqlbuilder/DeleteBuilderTest.java | 2 +-
.../access/sqlbuilder/InsertBuilderTest.java | 6 ++--
.../access/sqlbuilder/SelectBuilderTest.java | 20 ++++++------
.../translator/batch/DeleteBatchTranslatorIT.java | 6 ++--
.../translator/batch/InsertBatchTranslatorIT.java | 8 ++---
.../translator/batch/UpdateBatchTranslatorIT.java | 6 ++--
.../QualifierTranslatorExistExpressionIT.java | 36 +++++++++++-----------
.../translator/select/QualifierTranslatorIT.java | 4 +--
.../translator/select/QualifierTranslatorTest.java | 2 +-
47 files changed, 150 insertions(+), 115 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index b74745481..45deed439 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -21,6 +21,7 @@ CAY-2962 Allow unconstrained VARCHAR
CAY-2963 Replace TypesHandler / types.xml with hardcoded map
CAY-2969 Extender API for "soft" delete
CAY-2970 Tighten deferred value resolution contract on commit
+CAY-2971 Remove extra spaces within SQL parenthesis
Bug Fixes:
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/DefaultSQLAppendable.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/DefaultSQLAppendable.java
index c6f86a8e5..0cc1b71c7 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/DefaultSQLAppendable.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/DefaultSQLAppendable.java
@@ -29,6 +29,7 @@ public class DefaultSQLAppendable implements SQLAppendable {
final StringBuilder builder;
private final SQLGenerationContext context;
private final QuotingStrategy quotingStrategy;
+ private boolean suppressNextSeparator;
public DefaultSQLAppendable(SQLGenerationContext context) {
this.builder = new StringBuilder();
@@ -44,30 +45,50 @@ public class DefaultSQLAppendable implements SQLAppendable {
@Override
public SQLAppendable append(String str) {
+ suppressNextSeparator = false;
builder.append(str);
return this;
}
@Override
public SQLAppendable append(char c) {
+ suppressNextSeparator = false;
builder.append(c);
return this;
}
@Override
public SQLAppendable append(int c) {
+ suppressNextSeparator = false;
builder.append(c);
return this;
}
@Override
public SQLAppendable appendQuoted(String str) {
+ suppressNextSeparator = false;
quotingStrategy.appendStart(builder);
builder.append(str);
quotingStrategy.appendEnd(builder);
return this;
}
+ @Override
+ public SQLAppendable appendTokenSeparator() {
+ if (suppressNextSeparator) {
+ suppressNextSeparator = false;
+ } else {
+ builder.append(' ');
+ }
+ return this;
+ }
+
+ @Override
+ public SQLAppendable suppressNextTokenSeparator() {
+ suppressNextSeparator = true;
+ return this;
+ }
+
@Override
public SQLGenerationContext getContext() {
return context;
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/SQLAppendable.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/SQLAppendable.java
index 20301e27b..c7df379a5 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/SQLAppendable.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/SQLAppendable.java
@@ -39,6 +39,19 @@ public interface SQLAppendable {
SQLAppendable append(int i);
+ /**
+ * Emits a token separator (a single space) ahead of the next SQL token.
SQL tree nodes call this instead of
+ * embedding a leading space in their literals, so inter-token spacing is
owned by the appendable rather than
+ * scattered across nodes. The separator is skipped when {@link
#suppressNextTokenSeparator()} was just called.
+ */
+ SQLAppendable appendTokenSeparator();
+
+ /**
+ * Suppresses the separator that the next {@link #appendTokenSeparator()}
call would emit. A node calls this right
+ * after opening a parenthesis so the group hugs its first token — {@code
(NAME)} rather than {@code ( NAME)}.
+ */
+ SQLAppendable suppressNextTokenSeparator();
+
SQLAppendable appendQuoted(String str);
SQLGenerationContext getContext();
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/AliasedNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/AliasedNode.java
index ecef9492c..cd5edeb6d 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/AliasedNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/AliasedNode.java
@@ -43,7 +43,7 @@ public class AliasedNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
if(skipContent()) {
- buffer.append(' ').append(alias);
+ buffer.appendTokenSeparator().append(alias);
}
return buffer;
}
@@ -63,7 +63,7 @@ public class AliasedNode extends Node {
if(skipContent()){
return;
}
- buffer.append(" ").append(alias);
+ buffer.appendTokenSeparator().append(alias);
}
public String getAlias() {
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/BetweenNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/BetweenNode.java
index 7cd9c925b..4199c4f4c 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/BetweenNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/BetweenNode.java
@@ -39,11 +39,11 @@ public class BetweenNode extends ExpressionNode {
public void appendChildrenSeparator(SQLAppendable buffer, int childIdx) {
if (childIdx == 0) {
if (not) {
- buffer.append(" NOT");
+ buffer.appendTokenSeparator().append("NOT");
}
- buffer.append(" BETWEEN");
+ buffer.appendTokenSeparator().append("BETWEEN");
} else {
- buffer.append(" AND");
+ buffer.appendTokenSeparator().append("AND");
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/CaseNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/CaseNode.java
index 4db81f533..ba83fb659 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/CaseNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/CaseNode.java
@@ -28,7 +28,7 @@ public class CaseNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" CASE");
+ return buffer.appendTokenSeparator().append("CASE");
}
@Override
@@ -38,6 +38,6 @@ public class CaseNode extends Node {
@Override
public void appendChildrenEnd(SQLAppendable buffer) {
- buffer.append(" END");
+ buffer.appendTokenSeparator().append("END");
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ColumnNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ColumnNode.java
index 0dada27f8..d989f3de3 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ColumnNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ColumnNode.java
@@ -44,13 +44,13 @@ public class ColumnNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- buffer.append(' ');
+ buffer.appendTokenSeparator();
if (table != null) {
buffer.appendQuoted(table).append('.');
}
buffer.appendQuoted(column);
if (alias != null) {
- buffer.append(' ').appendQuoted(alias);
+ buffer.appendTokenSeparator().appendQuoted(alias);
}
return buffer;
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/DistinctNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/DistinctNode.java
index 7a7c0862b..69a83ad73 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/DistinctNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/DistinctNode.java
@@ -32,7 +32,7 @@ public class DistinctNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" DISTINCT");
+ return buffer.appendTokenSeparator().append("DISTINCT");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ElseNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ElseNode.java
index 2d8c4a4eb..7f9b23b8a 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ElseNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ElseNode.java
@@ -28,7 +28,7 @@ public class ElseNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" ELSE");
+ return buffer.appendTokenSeparator().append("ELSE");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/EqualNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/EqualNode.java
index c7dda8354..5d0a6a2fe 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/EqualNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/EqualNode.java
@@ -37,9 +37,9 @@ public class EqualNode extends ExpressionNode {
&& ((ValueNode) child).getValue() == null
&& getParent() != null
&& getParent().getType() != NodeType.UPDATE_SET) {
- buffer.append(" IS");
+ buffer.appendTokenSeparator().append("IS");
} else {
- buffer.append(" =");
+ buffer.appendTokenSeparator().append('=');
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExistsNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExistsNode.java
index 55913ba44..263cb14d4 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExistsNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExistsNode.java
@@ -28,7 +28,7 @@ public class ExistsNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" EXISTS");
+ return buffer.appendTokenSeparator().append("EXISTS");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExpressionNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExpressionNode.java
index 1e6fccba1..cab202194 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExpressionNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ExpressionNode.java
@@ -45,7 +45,7 @@ public class ExpressionNode extends Node {
&& parent.type != NodeType.WHERE
&& parent.type != NodeType.JOIN
&& parent.type != NodeType.UPDATE_SET) {
- buffer.append(" (");
+
buffer.appendTokenSeparator().append('(').suppressNextTokenSeparator();
}
}
@@ -55,7 +55,7 @@ public class ExpressionNode extends Node {
&& parent.type != NodeType.WHERE
&& parent.type != NodeType.JOIN
&& parent.type != NodeType.UPDATE_SET) {
- buffer.append(" )");
+ buffer.append(")");
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FromNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FromNode.java
index f38ac97e3..a63f25e4c 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FromNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FromNode.java
@@ -32,7 +32,7 @@ public class FromNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" FROM");
+ return buffer.appendTokenSeparator().append("FROM");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FunctionNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FunctionNode.java
index ed998a471..f303b3454 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FunctionNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/FunctionNode.java
@@ -53,9 +53,9 @@ public class FunctionNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
if(skipContent()) {
- buffer.append(' ').append(alias);
+ buffer.appendTokenSeparator().append(alias);
} else {
- buffer.append(' ').append(functionName);
+ buffer.appendTokenSeparator().append(functionName);
}
return buffer;
}
@@ -76,7 +76,7 @@ public class FunctionNode extends Node {
return;
}
if (needParentheses) {
- buffer.append('(');
+ buffer.append('(').suppressNextTokenSeparator();
}
}
@@ -87,11 +87,11 @@ public class FunctionNode extends Node {
}
if (needParentheses) {
- buffer.append(" )");
+ buffer.append(")");
}
if (alias != null) {
- buffer.append(" ").appendQuoted(alias);
+ buffer.appendTokenSeparator().appendQuoted(alias);
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/GroupByNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/GroupByNode.java
index 06eff94eb..4dcc48f9d 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/GroupByNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/GroupByNode.java
@@ -28,7 +28,7 @@ public class GroupByNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" GROUP BY");
+ return buffer.appendTokenSeparator().append("GROUP BY");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/HavingNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/HavingNode.java
index f6047cb15..945fc8cc4 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/HavingNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/HavingNode.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.access.sqlbuilder.SQLAppendable;
public class HavingNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" HAVING");
+ return buffer.appendTokenSeparator().append("HAVING");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InNode.java
index 964c5edcc..9e5e97981 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InNode.java
@@ -44,9 +44,9 @@ public class InNode extends Node {
public void appendChildrenSeparator(SQLAppendable buffer, int childInd) {
if (childInd == 0) {
if (not) {
- buffer.append(" NOT");
+ buffer.appendTokenSeparator().append("NOT");
}
- buffer.append(" IN (");
+
buffer.appendTokenSeparator().append("IN").appendTokenSeparator().append('(').suppressNextTokenSeparator();
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertColumnsNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertColumnsNode.java
index cb3516940..ed736e817 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertColumnsNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertColumnsNode.java
@@ -52,6 +52,6 @@ public class InsertColumnsNode extends Node {
@Override
public void appendChildrenStart(SQLAppendable buffer) {
- buffer.append('(');
+ buffer.append('(').suppressNextTokenSeparator();
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertValuesNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertValuesNode.java
index 4d021c351..f82cfb2e5 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertValuesNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/InsertValuesNode.java
@@ -37,12 +37,12 @@ public class InsertValuesNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" VALUES");
+ return buffer.appendTokenSeparator().append("VALUES");
}
@Override
public void appendChildrenStart(SQLAppendable buffer) {
- buffer.append('(');
+ buffer.append('(').suppressNextTokenSeparator();
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/JoinNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/JoinNode.java
index 8d37c0976..d73905854 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/JoinNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/JoinNode.java
@@ -46,6 +46,6 @@ public class JoinNode extends Node {
@Override
public void appendChildrenSeparator(SQLAppendable buffer, int childInd) {
- buffer.append(" ON");
+ buffer.appendTokenSeparator().append("ON");
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LikeNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LikeNode.java
index 4aa5c403c..2990452e2 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LikeNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LikeNode.java
@@ -44,7 +44,7 @@ public class LikeNode extends ExpressionNode {
@Override
public void appendChildrenStart(SQLAppendable buffer) {
if(ignoreCase) {
- buffer.append(" UPPER(");
+ buffer.appendTokenSeparator().append("UPPER(");
}
}
@@ -54,11 +54,11 @@ public class LikeNode extends ExpressionNode {
buffer.append(')');
}
if(not) {
- buffer.append(" NOT");
+ buffer.appendTokenSeparator().append("NOT");
}
- buffer.append(" LIKE");
+ buffer.appendTokenSeparator().append("LIKE");
if(ignoreCase) {
- buffer.append(" UPPER(");
+ buffer.appendTokenSeparator().append("UPPER(");
}
}
@@ -68,7 +68,7 @@ public class LikeNode extends ExpressionNode {
buffer.append(')');
}
if(escape != 0) {
- buffer.append(" ESCAPE '").append(escape).append('\'');
+
buffer.appendTokenSeparator().append("ESCAPE").appendTokenSeparator().append('\'').append(escape).append('\'');
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LimitOffsetNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LimitOffsetNode.java
index ebae2488c..cdc695b0f 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LimitOffsetNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/LimitOffsetNode.java
@@ -42,7 +42,8 @@ public class LimitOffsetNode extends Node {
if(limit == 0 && offset == 0) {
return buffer;
}
- return buffer.append(" LIMIT ").append(limit).append(" OFFSET
").append(offset);
+ return
buffer.appendTokenSeparator().append("LIMIT").appendTokenSeparator().append(limit)
+
.appendTokenSeparator().append("OFFSET").appendTokenSeparator().append(offset);
}
public int getLimit() {
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/NotNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/NotNode.java
index 3f0cfe797..3e99df4f2 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/NotNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/NotNode.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.access.sqlbuilder.SQLAppendable;
public class NotNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" NOT");
+ return buffer.appendTokenSeparator().append("NOT");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetFetchNextNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetFetchNextNode.java
index a37645177..6082ec2b8 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetFetchNextNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetFetchNextNode.java
@@ -38,10 +38,10 @@ public class OffsetFetchNextNode extends LimitOffsetNode {
public SQLAppendable append(SQLAppendable buffer) {
// OFFSET X ROWS FETCH NEXT Y ROWS ONLY
if(offset > 0) {
- buffer.append(" OFFSET ").append(offset).append(" ROWS");
+
buffer.appendTokenSeparator().append("OFFSET").appendTokenSeparator().append(offset).appendTokenSeparator().append("ROWS");
}
if(limit > 0) {
- buffer.append(" FETCH NEXT ").append(limit).append(" ROWS ONLY");
+ buffer.appendTokenSeparator().append("FETCH
NEXT").appendTokenSeparator().append(limit).appendTokenSeparator().append("ROWS
ONLY");
}
return buffer;
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetNode.java
index f6b73fbaf..2eb1e756d 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OffsetNode.java
@@ -35,7 +35,7 @@ public class OffsetNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" OFFSET ").append(offset);
+ return
buffer.appendTokenSeparator().append("OFFSET").appendTokenSeparator().append(offset);
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OpExpressionNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OpExpressionNode.java
index b0e68a471..b8eb40640 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OpExpressionNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OpExpressionNode.java
@@ -36,7 +36,7 @@ public class OpExpressionNode extends ExpressionNode {
@Override
public void appendChildrenSeparator(SQLAppendable buffer, int childInd) {
- buffer.append(' ').append(op);
+ buffer.appendTokenSeparator().append(op);
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OrderByNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OrderByNode.java
index 309c9d409..eb0a082f5 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OrderByNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/OrderByNode.java
@@ -28,7 +28,7 @@ public class OrderByNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" ORDER BY");
+ return buffer.appendTokenSeparator().append("ORDER BY");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/SelectNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/SelectNode.java
index 4b28c32bf..950b93b96 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/SelectNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/SelectNode.java
@@ -29,7 +29,7 @@ public class SelectNode extends Node {
@Override
public SQLAppendable append(SQLAppendable builder) {
if(parent != null) {
- builder.append(" (");
+ builder.appendTokenSeparator().append('(');
}
return builder.append("SELECT");
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TableNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TableNode.java
index 2b23beca2..0b16891b6 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TableNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TableNode.java
@@ -47,7 +47,7 @@ public class TableNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- buffer.append(' ');
+ buffer.appendTokenSeparator();
if(dbEntity != null) {
if(dbEntity.getCatalog() != null) {
@@ -62,7 +62,7 @@ public class TableNode extends Node {
}
if (alias != null) {
- buffer.append(' ').appendQuoted(alias);
+ buffer.appendTokenSeparator().appendQuoted(alias);
}
return buffer;
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ThenNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ThenNode.java
index b64fbc787..7b6ccc76a 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ThenNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ThenNode.java
@@ -28,7 +28,7 @@ public class ThenNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" THEN");
+ return buffer.appendTokenSeparator().append("THEN");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TopNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TopNode.java
index cb5174799..35d0cc265 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TopNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TopNode.java
@@ -36,7 +36,7 @@ public class TopNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" TOP ").append(count);
+ return
buffer.appendTokenSeparator().append("TOP").appendTokenSeparator().append(count);
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TrimmingColumnNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TrimmingColumnNode.java
index 9af170575..7cba285a2 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TrimmingColumnNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/TrimmingColumnNode.java
@@ -66,7 +66,7 @@ public class TrimmingColumnNode extends Node {
}
protected void appendRtrim(SQLAppendable buffer) {
- buffer.append(" RTRIM(");
+ buffer.appendTokenSeparator().append("RTRIM(");
appendColumnNode(buffer);
buffer.append(")");
}
@@ -110,9 +110,9 @@ public class TrimmingColumnNode extends Node {
}
protected void appendClobColumnNode(SQLAppendable buffer) {
- buffer.append(" CAST(");
+ buffer.appendTokenSeparator().append("CAST(");
appendColumnNode(buffer);
- buffer.append(" AS VARCHAR(").append(getColumnSize()).append("))");
+
buffer.appendTokenSeparator().append("AS").appendTokenSeparator().append("VARCHAR(").append(getColumnSize()).append("))");
}
protected void appendColumnNode(SQLAppendable buffer) {
@@ -127,7 +127,7 @@ public class TrimmingColumnNode extends Node {
return;
}
if (columnNode.getAlias() != null) {
- buffer.append(' ').appendQuoted(columnNode.getAlias());
+ buffer.appendTokenSeparator().appendQuoted(columnNode.getAlias());
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UnescapedColumnNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UnescapedColumnNode.java
index 4483b325c..7f397910b 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UnescapedColumnNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UnescapedColumnNode.java
@@ -33,13 +33,13 @@ public class UnescapedColumnNode extends ColumnNode {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- buffer.append(' ');
+ buffer.appendTokenSeparator();
if (table != null) {
buffer.append(table).append('.');
}
buffer.append(column);
if (alias != null) {
- buffer.append(' ').appendQuoted(alias);
+ buffer.appendTokenSeparator().appendQuoted(alias);
}
return buffer;
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UpdateSetNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UpdateSetNode.java
index cc4c49205..8c92789d5 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UpdateSetNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/UpdateSetNode.java
@@ -37,7 +37,7 @@ public class UpdateSetNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" SET");
+ return buffer.appendTokenSeparator().append("SET");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ValueNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ValueNode.java
index 3aea5cdff..123b2acff 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ValueNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/ValueNode.java
@@ -69,7 +69,7 @@ public class ValueNode extends Node {
}
protected void appendNullValue(SQLAppendable buffer) {
- buffer.append(" NULL");
+ buffer.appendTokenSeparator().append("NULL");
}
private void appendValue(Object val, SQLAppendable buffer) {
@@ -108,19 +108,19 @@ public class ValueNode extends Node {
return;
}
if (buffer.getContext() == null || !needBinding) {
- buffer.append(' ').append(value.toString());
+ buffer.appendTokenSeparator().append(value.toString());
} else {
- buffer.append(" ?");
+ buffer.appendTokenSeparator().append('?');
addValueBinding(buffer, value);
}
}
protected void appendStringValue(SQLAppendable buffer, CharSequence value)
{
if (buffer.getContext() == null || !needBinding) {
- buffer.append(" '").append(value.toString()).append("'");
+
buffer.appendTokenSeparator().append('\'').append(value.toString()).append('\'');
} else {
// value can't be null here
- buffer.append(" ?");
+ buffer.appendTokenSeparator().append('?');
addValueBinding(buffer, value);
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhenNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhenNode.java
index 3848a2841..13bc92cdd 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhenNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhenNode.java
@@ -28,7 +28,7 @@ public class WhenNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" WHEN");
+ return buffer.appendTokenSeparator().append("WHEN");
}
@Override
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhereNode.java
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhereNode.java
index 8e20dc94c..6f47db403 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhereNode.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/sqlbuilder/sqltree/WhereNode.java
@@ -32,7 +32,7 @@ public class WhereNode extends Node {
@Override
public SQLAppendable append(SQLAppendable buffer) {
- return buffer.append(" WHERE");
+ return buffer.appendTokenSeparator().append("WHERE");
}
@Override
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextPrefetchExtrasIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextPrefetchExtrasIT.java
index 0dc0d004d..cecd8147d 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/DataContextPrefetchExtrasIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/DataContextPrefetchExtrasIT.java
@@ -19,7 +19,6 @@
package org.apache.cayenne.access;
-import java.util.List;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.PersistentObject;
@@ -34,8 +33,10 @@ import
org.apache.cayenne.testdo.compound.CompoundPkTestEntity;
import org.apache.cayenne.unit.CayenneProjects;
import org.apache.cayenne.unit.CayenneTestsEnv;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@@ -96,14 +97,14 @@ public class DataContextPrefetchExtrasIT {
List<CharPkTestEntity> pks = q.select(env.context());
assertEquals(2, pks.size());
- CharPkTestEntity pk1 = pks.get(0);
+ CharPkTestEntity pk1 = pks.getFirst();
assertEquals("n1", pk1.getOtherCol());
List<?> toMany = (List<?>) pk1.readPropertyDirectly("charFKs");
assertNotNull(toMany);
assertFalse(((ValueHolder) toMany).isFault());
assertEquals(3, toMany.size());
- CharFkTestEntity fk1 = (CharFkTestEntity) toMany.get(0);
+ CharFkTestEntity fk1 = (CharFkTestEntity) toMany.getFirst();
assertEquals(PersistenceState.COMMITTED, fk1.getPersistenceState());
assertSame(pk1, fk1.getToCharPK());
}
@@ -121,13 +122,11 @@ public class DataContextPrefetchExtrasIT {
List<CompoundFkTestEntity> objects = q.select(env.context());
assertEquals(1, objects.size());
- PersistentObject fk1 = objects.get(0);
+ PersistentObject fk1 = objects.getFirst();
Object toOnePrefetch = fk1.readNestedProperty("toCompoundPk");
assertNotNull(toOnePrefetch);
- assertTrue(
- toOnePrefetch instanceof Persistent,
- "Expected Persistent, got: " +
toOnePrefetch.getClass().getName());
+ assertInstanceOf(Persistent.class, toOnePrefetch, "Expected
Persistent, got: " + toOnePrefetch.getClass().getName());
Persistent pk1 = (Persistent) toOnePrefetch;
assertEquals(PersistenceState.COMMITTED, pk1.getPersistenceState());
@@ -147,7 +146,7 @@ public class DataContextPrefetchExtrasIT {
List<CompoundPkTestEntity> pks = q.select(env.context());
assertEquals(1, pks.size());
- PersistentObject pk1 = pks.get(0);
+ PersistentObject pk1 = pks.getFirst();
List<?> toMany = (List<?>) pk1.readPropertyDirectly("compoundFkArray");
assertNotNull(toMany);
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/DeleteBuilderTest.java
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/DeleteBuilderTest.java
index 501478ca3..eb7b713dd 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/DeleteBuilderTest.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/DeleteBuilderTest.java
@@ -46,7 +46,7 @@ public class DeleteBuilderTest extends BaseSqlBuilderTest {
.and(column("col3").eq(value(null)))
).build();
assertInstanceOf(DeleteNode.class, node);
- assertSQL("DELETE FROM test WHERE ( ( col1 = 1 ) AND ( col2 = 'test' )
) AND ( col3 IS NULL )", node);
+ assertSQL("DELETE FROM test WHERE ((col1 = 1) AND (col2 = 'test')) AND
(col3 IS NULL)", node);
}
@Test
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/InsertBuilderTest.java
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/InsertBuilderTest.java
index 09b7cc14b..a8305ef18 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/InsertBuilderTest.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/InsertBuilderTest.java
@@ -70,7 +70,7 @@ public class InsertBuilderTest extends BaseSqlBuilderTest {
Node node = builder.build();
assertInstanceOf(InsertNode.class, node);
- assertSQL("INSERT INTO test( col1, col2, col3)", node);
+ assertSQL("INSERT INTO test(col1, col2, col3)", node);
}
@Test
@@ -83,7 +83,7 @@ public class InsertBuilderTest extends BaseSqlBuilderTest {
Node node = builder.build();
assertInstanceOf(InsertNode.class, node);
- assertSQL("INSERT INTO test VALUES( 1, 'test', NULL)", node);
+ assertSQL("INSERT INTO test VALUES(1, 'test', NULL)", node);
}
@Test
@@ -99,7 +99,7 @@ public class InsertBuilderTest extends BaseSqlBuilderTest {
Node node = builder.build();
assertInstanceOf(InsertNode.class, node);
- assertSQL("INSERT INTO test( col1, col2, col3) VALUES( 1, 'test',
NULL)", node);
+ assertSQL("INSERT INTO test(col1, col2, col3) VALUES(1, 'test',
NULL)", node);
}
}
\ No newline at end of file
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/SelectBuilderTest.java
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/SelectBuilderTest.java
index a44f781e4..6c86c3ced 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/SelectBuilderTest.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/sqlbuilder/SelectBuilderTest.java
@@ -96,7 +96,7 @@ public class SelectBuilderTest extends BaseSqlBuilderTest {
.where(column("a").eq(value(123)).and(column("c").lt(column("d"))));
Node node = builder.build();
assertInstanceOf(SelectNode.class, node);
- assertSQL("SELECT a FROM b WHERE ( a = 123 ) AND ( c < d )", node);
+ assertSQL("SELECT a FROM b WHERE (a = 123) AND (c < d)", node);
}
@Test
@@ -114,8 +114,8 @@ public class SelectBuilderTest extends BaseSqlBuilderTest {
assertInstanceOf(SelectNode.class, node);
assertSQL("SELECT OrderID, Quantity, " +
"CASE " +
- "WHEN ( ( Quantity > 30 ) AND ( Quantity < 100 ) ) THEN
'The quantity from 30 to 100' " +
- "WHEN ( Quantity = 30 ) THEN 'The quantity is 30' " +
+ "WHEN ((Quantity > 30) AND (Quantity < 100)) THEN 'The
quantity from 30 to 100' " +
+ "WHEN (Quantity = 30) THEN 'The quantity is 30' " +
"ELSE 'The quantity is under 30' " +
"END QuantityText " +
"FROM OrderDetails", node);
@@ -151,7 +151,7 @@ public class SelectBuilderTest extends BaseSqlBuilderTest {
.build();
assertInstanceOf(SelectNode.class, node);
- assertSQL("SELECT test( p.PAINTING_TITLE ) f FROM PAINTING p ORDER BY
f", node);
+ assertSQL("SELECT test(p.PAINTING_TITLE) f FROM PAINTING p ORDER BY
f", node);
}
@Test
@@ -180,14 +180,14 @@ public class SelectBuilderTest extends BaseSqlBuilderTest
{
.build();
assertInstanceOf(SelectNode.class, node);
assertSQL("SELECT DISTINCT" +
- " a.ARTIST_ID a_id, COUNT( p.PAINTING_TITLE ) p_count" +
+ " a.ARTIST_ID a_id, COUNT(p.PAINTING_TITLE) p_count" +
" FROM ARTIST a" +
- " LEFT JOIN PAINTING p ON ( a.ARTIST_ID = p.ARTIST_ID ) AND (
p.ESTIMATED_PRICE > 10 )" +
- " WHERE ( ( ( a.ARTIST_NAME = 'Picasso' )" +
- " AND EXISTS (SELECT * FROM GALLERY g WHERE g.GALLERY_ID =
p.GALLERY_ID) )" +
- " AND ( 1 = 1 ) ) OR false" +
+ " LEFT JOIN PAINTING p ON (a.ARTIST_ID = p.ARTIST_ID) AND
(p.ESTIMATED_PRICE > 10)" +
+ " WHERE (((a.ARTIST_NAME = 'Picasso')" +
+ " AND EXISTS (SELECT * FROM GALLERY g WHERE g.GALLERY_ID =
p.GALLERY_ID))" +
+ " AND (1 = 1)) OR false" +
" GROUP BY a.ARTIST_ID" +
- " HAVING NOT ( COUNT( p.PAINTING_TITLE ) > 3 )" +
+ " HAVING NOT (COUNT(p.PAINTING_TITLE) > 3)" +
" ORDER BY p_count DESC, a_id", node);
}
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
index ba646a9a1..017e563ec 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslatorIT.java
@@ -90,7 +90,7 @@ public class DeleteBatchTranslatorIT {
DbAdapter adapter = objectFactory.newInstance(DbAdapter.class,
JdbcAdapter.class.getName());
String generatedSql = new
DeleteBatchTranslator().translate(deleteQuery, adapter).sql();
assertNotNull(generatedSql);
- assertEquals("DELETE FROM " + entity.getName() + " WHERE (
LOCKING_TEST_ID = ? ) AND ( NAME IS NULL )", generatedSql);
+ assertEquals("DELETE FROM " + entity.getName() + " WHERE
(LOCKING_TEST_ID = ?) AND (NAME IS NULL)", generatedSql);
}
@Test
@@ -138,8 +138,8 @@ public class DeleteBatchTranslatorIT {
String charEnd = unitAdapter.getIdentifiersEndQuote();
assertNotNull(generatedSql);
- assertEquals("DELETE FROM " + charStart + entity.getName() +
charEnd + " WHERE ( " + charStart
- + "LOCKING_TEST_ID" + charEnd + " = ? ) AND ( " +
charStart + "NAME" + charEnd + " IS NULL )",
+ assertEquals("DELETE FROM " + charStart + entity.getName() +
charEnd + " WHERE (" + charStart
+ + "LOCKING_TEST_ID" + charEnd + " = ?) AND (" + charStart
+ "NAME" + charEnd + " IS NULL)",
generatedSql);
} finally {
entity.getDataMap().setQuotingSQLIdentifiers(false);
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
index fcd4e7a9f..78060c75c 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslatorIT.java
@@ -64,8 +64,8 @@ public class InsertBatchTranslatorIT {
InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
String generatedSql = new
InsertBatchTranslator().translate(insertQuery, adapter).sql();
assertNotNull(generatedSql);
- assertEquals("INSERT INTO " + entity.getName() + "( DESCRIPTION,
INT_COLUMN_NOTNULL, INT_COLUMN_NULL, LOCKING_TEST_ID, NAME) " +
- "VALUES( ?, ?, ?, ?, ?)",
+ assertEquals("INSERT INTO " + entity.getName() + "(DESCRIPTION,
INT_COLUMN_NOTNULL, INT_COLUMN_NULL, LOCKING_TEST_ID, NAME) " +
+ "VALUES(?, ?, ?, ?, ?)",
generatedSql);
}
@@ -83,11 +83,11 @@ public class InsertBatchTranslatorIT {
String charEnd = unitAdapter.getIdentifiersEndQuote();
assertNotNull(generatedSql);
assertEquals("INSERT INTO " + charStart + entity.getName() +
charEnd
- + "( " + charStart + "DESCRIPTION" + charEnd + ", "
+ + "(" + charStart + "DESCRIPTION" + charEnd + ", "
+ charStart + "INT_COLUMN_NOTNULL" + charEnd + ", "
+ charStart + "INT_COLUMN_NULL" + charEnd + ", "
+ charStart + "LOCKING_TEST_ID" + charEnd + ", "
- + charStart + "NAME" + charEnd + ") VALUES( ?, ?, ?, ?,
?)", generatedSql);
+ + charStart + "NAME" + charEnd + ") VALUES(?, ?, ?, ?,
?)", generatedSql);
} finally {
entity.getDataMap().setQuotingSQLIdentifiers(false);
}
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
index 053a03d22..fcaccfd56 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslatorIT.java
@@ -94,7 +94,7 @@ public class UpdateBatchTranslatorIT {
String generatedSql = new
UpdateBatchTranslator().translate(updateQuery, adapter).sql();
assertNotNull(generatedSql);
- assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ?
WHERE ( LOCKING_TEST_ID = ? ) AND ( NAME IS NULL )",
+ assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ?
WHERE (LOCKING_TEST_ID = ?) AND (NAME IS NULL)",
generatedSql);
}
@@ -145,8 +145,8 @@ public class UpdateBatchTranslatorIT {
String charStart = unitAdapter.getIdentifiersStartQuote();
String charEnd = unitAdapter.getIdentifiersEndQuote();
assertEquals("UPDATE " + charStart + entity.getName() + charEnd +
" SET " + charStart + "DESCRIPTION"
- + charEnd + " = ? WHERE ( " + charStart +
"LOCKING_TEST_ID" + charEnd + " = ? ) AND ( " + charStart
- + "NAME" + charEnd + " IS NULL )", generatedSql);
+ + charEnd + " = ? WHERE (" + charStart + "LOCKING_TEST_ID"
+ charEnd + " = ?) AND (" + charStart
+ + "NAME" + charEnd + " IS NULL)", generatedSql);
} finally {
entity.getDataMap().setQuotingSQLIdentifiers(false);
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorExistExpressionIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorExistExpressionIT.java
index aaf3d9efc..fcea075a0 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorExistExpressionIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorExistExpressionIT.java
@@ -113,7 +113,7 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( t1.PAINTING_TITLE IS NOT NULL ) AND ( t1.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t1.PAINTING_TITLE IS NOT NULL) AND (t1.ARTIST_ID =
t0.ARTIST_ID)" +
")", node);
}
@@ -134,7 +134,7 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( t1.GALLERY_ID IS NOT NULL ) AND ( t1.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t1.GALLERY_ID IS NOT NULL) AND (t1.ARTIST_ID =
t0.ARTIST_ID)" +
")", node);
}
@@ -157,7 +157,7 @@ public class QualifierTranslatorExistExpressionIT {
"SELECT DISTINCT t1.ARTIST_ID, t1.GROUP_ID FROM ARTIST_GROUP
t1 " +
"JOIN ARTGROUP t2 ON t1.GROUP_ID = t2.GROUP_ID " +
"JOIN ARTGROUP t3 ON t2.GROUP_ID = t3.PARENT_GROUP_ID " +
- "WHERE ( t3.GROUP_ID IS NOT NULL ) AND ( t1.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t3.GROUP_ID IS NOT NULL) AND (t1.ARTIST_ID =
t0.ARTIST_ID)" +
")", node);
}
@@ -178,7 +178,7 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( t1.PAINTING_TITLE = 'test' ) AND ( t1.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t1.PAINTING_TITLE = 'test') AND (t1.ARTIST_ID =
t0.ARTIST_ID)" +
")", node);
}
@@ -200,8 +200,8 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( ( t1.PAINTING_TITLE = 'test' ) OR ( t1.PAINTING_TITLE
= 'test2' ) ) " +
- "AND ( t1.ARTIST_ID = t0.ARTIST_ID )" +
+ "WHERE ((t1.PAINTING_TITLE = 'test') OR (t1.PAINTING_TITLE =
'test2')) " +
+ "AND (t1.ARTIST_ID = t0.ARTIST_ID)" +
")", node);
}
@@ -222,8 +222,8 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( ( t1.PAINTING_TITLE = 'test' ) OR ( t1.PAINTING_TITLE
= 'test2' ) ) " +
- "AND ( t1.ARTIST_ID = t0.ARTIST_ID )" +
+ "WHERE ((t1.PAINTING_TITLE = 'test') OR (t1.PAINTING_TITLE =
'test2')) " +
+ "AND (t1.ARTIST_ID = t0.ARTIST_ID)" +
")", node);
}
@@ -245,13 +245,13 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( ( t1.PAINTING_TITLE = 'test' ) OR (
t1.PAINTING_TITLE = 'test2' ) ) " +
- "AND ( t1.ARTIST_ID = t0.ARTIST_ID )" +
+ "WHERE ((t1.PAINTING_TITLE = 'test') OR (t1.PAINTING_TITLE
= 'test2')) " +
+ "AND (t1.ARTIST_ID = t0.ARTIST_ID)" +
") " +
"AND EXISTS (" +
"SELECT t2.ARTIST_ID, t2.GROUP_ID FROM ARTIST_GROUP t2 " +
"JOIN ARTGROUP t3 ON t2.GROUP_ID = t3.GROUP_ID " +
- "WHERE ( t3.NAME = 'test' ) AND ( t2.ARTIST_ID =
t0.ARTIST_ID ))", node);
+ "WHERE (t3.NAME = 'test') AND (t2.ARTIST_ID =
t0.ARTIST_ID))", node);
}
@Test
@@ -272,19 +272,19 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE ( t1.PAINTING_TITLE = 'test' ) AND ( t1.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t1.PAINTING_TITLE = 'test') AND (t1.ARTIST_ID =
t0.ARTIST_ID)" +
") " +
- "AND ( " +
+ "AND (" +
"EXISTS (" +
"SELECT t2.ARTIST_ID, t2.GROUP_ID FROM ARTIST_GROUP t2
" +
"JOIN ARTGROUP t3 ON t2.GROUP_ID = t3.GROUP_ID " +
- "WHERE ( t3.NAME = 'test' ) AND ( t2.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (t3.NAME = 'test') AND (t2.ARTIST_ID =
t0.ARTIST_ID)" +
") " +
"OR " +
"EXISTS (" +
"SELECT t4.PAINTING_ID FROM PAINTING t4 " +
- "WHERE ( t4.PAINTING_TITLE = 'test2' ) AND (
t4.ARTIST_ID = t0.ARTIST_ID )" +
- ") " +
+ "WHERE (t4.PAINTING_TITLE = 'test2') AND (t4.ARTIST_ID
= t0.ARTIST_ID)" +
+ ")" +
")", node);
}
@@ -305,12 +305,12 @@ public class QualifierTranslatorExistExpressionIT {
assertSQL(" EXISTS (" +
"SELECT t1.PAINTING_ID FROM PAINTING t1 " +
- "WHERE LENGTH( t1.PAINTING_TITLE ) IN ( 1, 2, 3) AND (
t1.ARTIST_ID = t0.ARTIST_ID )" +
+ "WHERE LENGTH(t1.PAINTING_TITLE) IN (1, 2, 3) AND
(t1.ARTIST_ID = t0.ARTIST_ID)" +
") OR " +
"EXISTS (" +
"SELECT t2.ARTIST_ID, t2.GROUP_ID FROM ARTIST_GROUP t2 " +
"JOIN ARTGROUP t3 ON t2.GROUP_ID = t3.GROUP_ID " +
- "WHERE ( LENGTH( t3.NAME ) < 10 ) AND ( t2.ARTIST_ID =
t0.ARTIST_ID )" +
+ "WHERE (LENGTH(t3.NAME) < 10) AND (t2.ARTIST_ID =
t0.ARTIST_ID)" +
")", node);
}
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorIT.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorIT.java
index 3159a6d14..c833b979c 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorIT.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorIT.java
@@ -73,7 +73,7 @@ public class QualifierTranslatorIT {
SQLGenerationVisitor visitor = new SQLGenerationVisitor(new
DefaultSQLAppendable(null));
node.visit(visitor);
- assertEquals(" ( ( ( t0.F_KEY1 = 'PK1' ) AND ( t0.F_KEY2 = 'PK2' ) )
AND t0.NAME LIKE 'test%' ) AND t0.NAME LIKE '%a%'", visitor.getSQLString());
+ assertEquals(" (((t0.F_KEY1 = 'PK1') AND (t0.F_KEY2 = 'PK2')) AND
t0.NAME LIKE 'test%') AND t0.NAME LIKE '%a%'", visitor.getSQLString());
}
@Test
@@ -98,7 +98,7 @@ public class QualifierTranslatorIT {
SQLGenerationVisitor visitor = new SQLGenerationVisitor(new
DefaultSQLAppendable(null));
node.visit(visitor);
- assertEquals(" ( ( t0.F_KEY1 = 'PK1' ) AND ( t0.F_KEY2 = 'PK2' ) ) OR
( ( t0.F_KEY1 = 'PK3' ) AND ( t0.F_KEY2 = 'PK4' ) )", visitor.getSQLString());
+ assertEquals(" ((t0.F_KEY1 = 'PK1') AND (t0.F_KEY2 = 'PK2')) OR
((t0.F_KEY1 = 'PK3') AND (t0.F_KEY2 = 'PK4'))", visitor.getSQLString());
}
@Test
diff --git
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorTest.java
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorTest.java
index 625603b6e..8054ebce7 100644
---
a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorTest.java
+++
b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/QualifierTranslatorTest.java
@@ -485,7 +485,7 @@ public class QualifierTranslatorTest {
SQLGenerationVisitor visitor = new SQLGenerationVisitor(new
DefaultSQLAppendable(null));
and.visit(visitor);
- assertEquals(" ( t0.a < 2 ) AND t0.b IN ( 5, 6) AND ( t0.b = 7 )",
visitor.getSQLString());
+ assertEquals(" (t0.a < 2) AND t0.b IN (5, 6) AND (t0.b = 7)",
visitor.getSQLString());
}
@Test