Skip to content

Commit 523eb84

Browse files
committed
rationalize the code for 'cross join' emulation
and add cross join emulation to Informix
1 parent 8556f0e commit 523eb84

File tree

12 files changed

+89
-191
lines changed

12 files changed

+89
-191
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/AltibaseDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,11 @@ public boolean supportsOuterJoinForUpdate() {
590590
return false;
591591
}
592592

593+
@Override
594+
public boolean supportsCrossJoin() {
595+
return false;
596+
}
597+
593598
@Override
594599
public SequenceSupport getSequenceSupport() {
595600
return AltibaseSequenceSupport.INSTANCE;

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/AltibaseSqlAstTranslator.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.hibernate.query.common.FrameExclusion;
1313
import org.hibernate.query.common.FrameKind;
1414
import org.hibernate.sql.ast.Clause;
15-
import org.hibernate.sql.ast.SqlAstJoinType;
1615
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1716
import org.hibernate.sql.ast.tree.Statement;
1817
import org.hibernate.sql.ast.tree.delete.DeleteStatement;
@@ -21,14 +20,11 @@
2120
import org.hibernate.sql.ast.tree.expression.FunctionExpression;
2221
import org.hibernate.sql.ast.tree.expression.Literal;
2322
import org.hibernate.sql.ast.tree.expression.Over;
24-
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
2523
import org.hibernate.sql.ast.tree.expression.Summarization;
2624
import org.hibernate.sql.ast.tree.from.NamedTableReference;
2725
import org.hibernate.sql.ast.tree.from.QueryPartTableReference;
28-
import org.hibernate.sql.ast.tree.from.TableGroupJoin;
2926
import org.hibernate.sql.ast.tree.from.ValuesTableReference;
3027
import org.hibernate.sql.ast.tree.insert.InsertSelectStatement;
31-
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
3228
import org.hibernate.sql.ast.tree.predicate.Predicate;
3329
import org.hibernate.sql.ast.tree.select.QueryPart;
3430
import org.hibernate.sql.ast.tree.select.QuerySpec;
@@ -95,31 +91,6 @@ protected boolean shouldEmulateFetchClause(QueryPart queryPart) {
9591
&& getDialect().supportsWindowFunctions() && !isRowsOnlyFetchClauseType( queryPart );
9692
}
9793

98-
@Override
99-
protected void renderTableGroupJoin(TableGroupJoin tableGroupJoin, List<TableGroupJoin> tableGroupJoinCollector) {
100-
// Use join instead because Altibase does not support cross apply
101-
appendSql( WHITESPACE );
102-
if ( tableGroupJoin.getJoinType() != SqlAstJoinType.CROSS ) {
103-
// No support for cross joins, so we emulate it with an inner join and always true on condition
104-
appendSql( tableGroupJoin.getJoinType().getText() );
105-
}
106-
appendSql( "join " );
107-
108-
final Predicate predicate;
109-
if ( tableGroupJoin.getPredicate() == null ) {
110-
predicate = new BooleanExpressionPredicate( new QueryLiteral<>( true, getBooleanType() ) );
111-
}
112-
else {
113-
predicate = tableGroupJoin.getPredicate();
114-
}
115-
if ( predicate != null && !predicate.isEmpty() ) {
116-
renderTableGroup( tableGroupJoin.getJoinedGroup(), predicate, tableGroupJoinCollector );
117-
}
118-
else {
119-
renderTableGroup( tableGroupJoin.getJoinedGroup(), null, tableGroupJoinCollector );
120-
}
121-
}
122-
12394
@Override
12495
protected void renderPartitionItem(Expression expression) {
12596
if ( expression instanceof Literal ) {

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,11 @@ public String getDual() {
10501050
return "(select 0 from systables where tabid=1)";
10511051
}
10521052

1053+
@Override
1054+
public boolean supportsCrossJoin() {
1055+
return false;
1056+
}
1057+
10531058
@Override
10541059
public boolean supportsRowValueConstructorSyntax() {
10551060
return false;

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseASELegacyDialect.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,4 +739,8 @@ public boolean supportsJoinsInDelete() {
739739
return true;
740740
}
741741

742+
@Override
743+
public boolean supportsCrossJoin() {
744+
return false;
745+
}
742746
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseASELegacySqlAstTranslator.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.hibernate.query.IllegalQueryOperationException;
1616
import org.hibernate.query.sqm.ComparisonOperator;
1717
import org.hibernate.sql.ast.Clause;
18-
import org.hibernate.sql.ast.SqlAstJoinType;
1918
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
2019
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
2120
import org.hibernate.sql.ast.spi.SqlSelection;
@@ -28,19 +27,15 @@
2827
import org.hibernate.sql.ast.tree.expression.ColumnReference;
2928
import org.hibernate.sql.ast.tree.expression.Expression;
3029
import org.hibernate.sql.ast.tree.expression.Literal;
31-
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
3230
import org.hibernate.sql.ast.tree.expression.SqlTuple;
3331
import org.hibernate.sql.ast.tree.expression.Summarization;
3432
import org.hibernate.sql.ast.tree.from.NamedTableReference;
3533
import org.hibernate.sql.ast.tree.from.TableGroup;
36-
import org.hibernate.sql.ast.tree.from.TableGroupJoin;
3734
import org.hibernate.sql.ast.tree.from.UnionTableReference;
3835
import org.hibernate.sql.ast.tree.from.ValuesTableReference;
3936
import org.hibernate.sql.ast.tree.insert.ConflictClause;
4037
import org.hibernate.sql.ast.tree.insert.InsertSelectStatement;
4138
import org.hibernate.sql.ast.tree.insert.Values;
42-
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
43-
import org.hibernate.sql.ast.tree.predicate.Predicate;
4439
import org.hibernate.sql.ast.tree.select.QueryGroup;
4540
import org.hibernate.sql.ast.tree.select.QueryPart;
4641
import org.hibernate.sql.ast.tree.select.QuerySpec;
@@ -236,30 +231,6 @@ private void renderLockHint(LockMode lockMode) {
236231
}
237232
}
238233

239-
@Override
240-
protected void renderTableGroupJoin(TableGroupJoin tableGroupJoin, List<TableGroupJoin> tableGroupJoinCollector) {
241-
appendSql( WHITESPACE );
242-
if ( tableGroupJoin.getJoinType() != SqlAstJoinType.CROSS ) {
243-
// No support for cross joins, so we emulate it with an inner join and always true on condition
244-
appendSql( tableGroupJoin.getJoinType().getText() );
245-
}
246-
appendSql( "join " );
247-
248-
final Predicate predicate;
249-
if ( tableGroupJoin.getPredicate() == null ) {
250-
predicate = new BooleanExpressionPredicate( new QueryLiteral<>( true, getBooleanType() ) );
251-
}
252-
else {
253-
predicate = tableGroupJoin.getPredicate();
254-
}
255-
if ( predicate != null && !predicate.isEmpty() ) {
256-
renderTableGroup( tableGroupJoin.getJoinedGroup(), predicate, tableGroupJoinCollector );
257-
}
258-
else {
259-
renderTableGroup( tableGroupJoin.getJoinedGroup(), null, tableGroupJoinCollector );
260-
}
261-
}
262-
263234
@Override
264235
protected LockStrategy determineLockingStrategy(
265236
QuerySpec querySpec,

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TimesTenDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,11 @@ public boolean isCurrentTimestampSelectStringCallable() {
353353
return false;
354354
}
355355

356+
@Override
357+
public boolean supportsCrossJoin() {
358+
return false;
359+
}
360+
356361
@Override
357362
public SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy(
358363
EntityMappingType rootEntityDescriptor,

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TimesTenSqlAstTranslator.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,13 @@
99
import org.hibernate.engine.spi.SessionFactoryImplementor;
1010
import org.hibernate.query.IllegalQueryOperationException;
1111
import org.hibernate.query.sqm.ComparisonOperator;
12-
import org.hibernate.sql.ast.SqlAstJoinType;
1312
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1413
import org.hibernate.sql.ast.spi.SqlSelection;
1514
import org.hibernate.sql.ast.tree.Statement;
1615
import org.hibernate.sql.ast.tree.expression.Expression;
1716
import org.hibernate.sql.ast.tree.expression.Literal;
18-
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
1917
import org.hibernate.sql.ast.tree.expression.SqlTuple;
2018
import org.hibernate.sql.ast.tree.expression.Summarization;
21-
import org.hibernate.sql.ast.tree.from.TableGroupJoin;
22-
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
23-
import org.hibernate.sql.ast.tree.predicate.Predicate;
2419
import org.hibernate.sql.ast.tree.select.QueryGroup;
2520
import org.hibernate.sql.ast.tree.select.QueryPart;
2621
import org.hibernate.sql.ast.tree.select.QuerySpec;
@@ -55,30 +50,6 @@ protected LockStrategy determineLockingStrategy(
5550
return strategy;
5651
}
5752

58-
@Override
59-
protected void renderTableGroupJoin(TableGroupJoin tableGroupJoin, List<TableGroupJoin> tableGroupJoinCollector) {
60-
appendSql( WHITESPACE );
61-
if ( tableGroupJoin.getJoinType() != SqlAstJoinType.CROSS ) {
62-
// No support for cross joins, so we emulate it with an inner join and always true on condition
63-
appendSql( tableGroupJoin.getJoinType().getText() );
64-
}
65-
appendSql( "join " );
66-
67-
final Predicate predicate;
68-
if ( tableGroupJoin.getPredicate() == null ) {
69-
predicate = new BooleanExpressionPredicate( new QueryLiteral<>( true, getBooleanType() ) );
70-
}
71-
else {
72-
predicate = tableGroupJoin.getPredicate();
73-
}
74-
if ( predicate != null && !predicate.isEmpty() ) {
75-
renderTableGroup( tableGroupJoin.getJoinedGroup(), predicate, tableGroupJoinCollector );
76-
}
77-
else {
78-
renderTableGroup( tableGroupJoin.getJoinedGroup(), null, tableGroupJoinCollector );
79-
}
80-
}
81-
8253
@Override
8354
protected void visitSqlSelections(SelectClause selectClause) {
8455
renderRowsToClause( (QuerySpec) getQueryPartStack().getCurrent() );

hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6134,6 +6134,13 @@ public boolean supportsSimpleQueryGrouping() {
61346134
return true;
61356135
}
61366136

6137+
/**
6138+
* Is the {@code cross join} syntax supported?
6139+
*/
6140+
public boolean supportsCrossJoin() {
6141+
return true;
6142+
}
6143+
61376144
/**
61386145
* Is this dialect known to support what ANSI-SQL terms "row value
61396146
* constructor" syntax; sometimes called tuple syntax.

hibernate-core/src/main/java/org/hibernate/dialect/SybaseASEDialect.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,4 +764,8 @@ public boolean supportsJoinsInDelete() {
764764
return true;
765765
}
766766

767+
@Override
768+
public boolean supportsCrossJoin() {
769+
return false;
770+
}
767771
}

hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/SybaseASESqlAstTranslator.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.hibernate.query.IllegalQueryOperationException;
1818
import org.hibernate.query.sqm.ComparisonOperator;
1919
import org.hibernate.sql.ast.Clause;
20-
import org.hibernate.sql.ast.SqlAstJoinType;
2120
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
2221
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
2322
import org.hibernate.sql.ast.spi.SqlSelection;
@@ -30,19 +29,15 @@
3029
import org.hibernate.sql.ast.tree.expression.ColumnReference;
3130
import org.hibernate.sql.ast.tree.expression.Expression;
3231
import org.hibernate.sql.ast.tree.expression.Literal;
33-
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
3432
import org.hibernate.sql.ast.tree.expression.SqlTuple;
3533
import org.hibernate.sql.ast.tree.expression.Summarization;
3634
import org.hibernate.sql.ast.tree.from.NamedTableReference;
3735
import org.hibernate.sql.ast.tree.from.TableGroup;
38-
import org.hibernate.sql.ast.tree.from.TableGroupJoin;
3936
import org.hibernate.sql.ast.tree.from.UnionTableReference;
4037
import org.hibernate.sql.ast.tree.from.ValuesTableReference;
4138
import org.hibernate.sql.ast.tree.insert.ConflictClause;
4239
import org.hibernate.sql.ast.tree.insert.InsertSelectStatement;
4340
import org.hibernate.sql.ast.tree.insert.Values;
44-
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
45-
import org.hibernate.sql.ast.tree.predicate.Predicate;
4641
import org.hibernate.sql.ast.tree.select.QueryGroup;
4742
import org.hibernate.sql.ast.tree.select.QueryPart;
4843
import org.hibernate.sql.ast.tree.select.QuerySpec;
@@ -224,30 +219,6 @@ private void renderLockHint(LockMode lockMode) {
224219
}
225220
}
226221

227-
@Override
228-
protected void renderTableGroupJoin(TableGroupJoin tableGroupJoin, List<TableGroupJoin> tableGroupJoinCollector) {
229-
appendSql( WHITESPACE );
230-
if ( tableGroupJoin.getJoinType() != SqlAstJoinType.CROSS ) {
231-
// No support for cross joins, so we emulate it with an inner join and always true on condition
232-
appendSql( tableGroupJoin.getJoinType().getText() );
233-
}
234-
appendSql( "join " );
235-
236-
final Predicate predicate;
237-
if ( tableGroupJoin.getPredicate() == null ) {
238-
predicate = new BooleanExpressionPredicate( new QueryLiteral<>( true, getBooleanType() ) );
239-
}
240-
else {
241-
predicate = tableGroupJoin.getPredicate();
242-
}
243-
if ( predicate != null && !predicate.isEmpty() ) {
244-
renderTableGroup( tableGroupJoin.getJoinedGroup(), predicate, tableGroupJoinCollector );
245-
}
246-
else {
247-
renderTableGroup( tableGroupJoin.getJoinedGroup(), null, tableGroupJoinCollector );
248-
}
249-
}
250-
251222
@Override
252223
protected LockStrategy determineLockingStrategy(
253224
QuerySpec querySpec,

0 commit comments

Comments
 (0)