@@ -3623,13 +3623,8 @@ else if ( !dialect.supportsDuplicateSelectItemsInQueryGroup() ) {
3623
3623
if ( queryGroupAlias != null ) {
3624
3624
appendSql ( OPEN_PARENTHESIS );
3625
3625
}
3626
- visitSelectClause ( querySpec .getSelectClause () );
3627
- visitFromClause ( querySpec .getFromClause () );
3628
- visitWhereClause ( querySpec .getWhereClauseRestrictions () );
3629
- visitGroupByClause ( querySpec , dialect .getGroupBySelectItemReferenceStrategy () );
3630
- visitHavingClause ( querySpec );
3631
- visitOrderBy ( querySpec .getSortSpecifications () );
3632
- visitOffsetFetchClause ( querySpec );
3626
+
3627
+ visitQueryClauses ( querySpec );
3633
3628
// We render the FOR UPDATE clause in the parent query
3634
3629
if ( queryPartForRowNumbering == null ) {
3635
3630
visitForUpdateClause ( querySpec );
@@ -3652,6 +3647,16 @@ else if ( !dialect.supportsDuplicateSelectItemsInQueryGroup() ) {
3652
3647
}
3653
3648
}
3654
3649
3650
+ protected void visitQueryClauses (QuerySpec querySpec ) {
3651
+ visitSelectClause ( querySpec .getSelectClause () );
3652
+ visitFromClause ( querySpec .getFromClause () );
3653
+ visitWhereClause ( querySpec .getWhereClauseRestrictions () );
3654
+ visitGroupByClause ( querySpec , dialect .getGroupBySelectItemReferenceStrategy () );
3655
+ visitHavingClause ( querySpec );
3656
+ visitOrderBy ( querySpec .getSortSpecifications () );
3657
+ visitOffsetFetchClause ( querySpec );
3658
+ }
3659
+
3655
3660
private boolean hasDuplicateSelectItems (QuerySpec querySpec ) {
3656
3661
final List <SqlSelection > sqlSelections = querySpec .getSelectClause ().getSqlSelections ();
3657
3662
final Map <Expression , Boolean > map = new IdentityHashMap <>( sqlSelections .size () );
@@ -3664,9 +3669,8 @@ private boolean hasDuplicateSelectItems(QuerySpec querySpec) {
3664
3669
}
3665
3670
3666
3671
protected final void visitWhereClause (Predicate whereClauseRestrictions ) {
3667
- final Predicate additionalWherePredicate = this .additionalWherePredicate ;
3668
- if ( whereClauseRestrictions != null && !whereClauseRestrictions .isEmpty ()
3669
- || additionalWherePredicate != null ) {
3672
+ if ( hasWhere ( whereClauseRestrictions ) ) {
3673
+ final Predicate additionalWherePredicate = this .additionalWherePredicate ;
3670
3674
appendSql ( " where " );
3671
3675
3672
3676
clauseStack .push ( Clause .WHERE );
@@ -3690,6 +3694,11 @@ else if ( additionalWherePredicate != null ) {
3690
3694
}
3691
3695
}
3692
3696
3697
+ protected boolean hasWhere (Predicate whereClauseRestrictions ) {
3698
+ return whereClauseRestrictions != null && !whereClauseRestrictions .isEmpty ()
3699
+ || additionalWherePredicate != null ;
3700
+ }
3701
+
3693
3702
protected Expression resolveAliasedExpression (Expression expression ) {
3694
3703
// This can happen when using window functions for emulating the offset/fetch clause of a query group
3695
3704
// But in that case we always use a SqlSelectionExpression anyway, so this is fine as it doesn't need resolving
@@ -5682,8 +5691,9 @@ protected void renderLiteral(Literal literal, boolean castParameter) {
5682
5691
// If we encounter a plain literal in the select clause which has no literal formatter, we must render it as parameter
5683
5692
if ( literalFormatter == null ) {
5684
5693
parameterBinders .add ( literal );
5685
- final String marker = parameterMarkerStrategy .createMarker ( parameterBinders .size (), literal .getJdbcMapping ().getJdbcType () );
5686
- final LiteralAsParameter <Object > jdbcParameter = new LiteralAsParameter <>( literal , marker );
5694
+ final JdbcType jdbcType = literal .getJdbcMapping ().getJdbcType ();
5695
+ final String marker = parameterMarkerStrategy .createMarker ( parameterBinders .size (), jdbcType );
5696
+ final LiteralAsParameter <?> jdbcParameter = new LiteralAsParameter <>( literal , marker );
5687
5697
if ( castParameter ) {
5688
5698
renderCasted ( jdbcParameter );
5689
5699
}
@@ -5707,13 +5717,17 @@ protected void renderLiteral(Literal literal, boolean castParameter) {
5707
5717
5708
5718
@ Override
5709
5719
public void visitFromClause (FromClause fromClause ) {
5710
- if ( fromClause == null || fromClause .getRoots ().isEmpty () ) {
5711
- appendSql ( getFromDualForSelectOnly () );
5712
- }
5713
- else {
5720
+ if ( hasFrom ( fromClause ) ) {
5714
5721
appendSql ( " from " );
5715
5722
renderFromClauseSpaces ( fromClause );
5716
5723
}
5724
+ else {
5725
+ appendSql ( getFromDualForSelectOnly () );
5726
+ }
5727
+ }
5728
+
5729
+ protected boolean hasFrom (FromClause fromClause ) {
5730
+ return fromClause != null && !fromClause .getRoots ().isEmpty ();
5717
5731
}
5718
5732
5719
5733
protected void renderFromClauseSpaces (FromClause fromClause ) {
0 commit comments