@@ -3631,13 +3631,8 @@ else if ( !dialect.supportsDuplicateSelectItemsInQueryGroup() ) {
36313631 if ( queryGroupAlias != null ) {
36323632 appendSql ( OPEN_PARENTHESIS );
36333633 }
3634- visitSelectClause ( querySpec .getSelectClause () );
3635- visitFromClause ( querySpec .getFromClause () );
3636- visitWhereClause ( querySpec .getWhereClauseRestrictions () );
3637- visitGroupByClause ( querySpec , dialect .getGroupBySelectItemReferenceStrategy () );
3638- visitHavingClause ( querySpec );
3639- visitOrderBy ( querySpec .getSortSpecifications () );
3640- visitOffsetFetchClause ( querySpec );
3634+
3635+ visitQueryClauses ( querySpec );
36413636 // We render the FOR UPDATE clause in the parent query
36423637 if ( queryPartForRowNumbering == null ) {
36433638 visitForUpdateClause ( querySpec );
@@ -3660,6 +3655,16 @@ else if ( !dialect.supportsDuplicateSelectItemsInQueryGroup() ) {
36603655 }
36613656 }
36623657
3658+ protected void visitQueryClauses (QuerySpec querySpec ) {
3659+ visitSelectClause ( querySpec .getSelectClause () );
3660+ visitFromClause ( querySpec .getFromClause () );
3661+ visitWhereClause ( querySpec .getWhereClauseRestrictions () );
3662+ visitGroupByClause ( querySpec , dialect .getGroupBySelectItemReferenceStrategy () );
3663+ visitHavingClause ( querySpec );
3664+ visitOrderBy ( querySpec .getSortSpecifications () );
3665+ visitOffsetFetchClause ( querySpec );
3666+ }
3667+
36633668 private boolean hasDuplicateSelectItems (QuerySpec querySpec ) {
36643669 final List <SqlSelection > sqlSelections = querySpec .getSelectClause ().getSqlSelections ();
36653670 final Map <Expression , Boolean > map = new IdentityHashMap <>( sqlSelections .size () );
@@ -3672,9 +3677,8 @@ private boolean hasDuplicateSelectItems(QuerySpec querySpec) {
36723677 }
36733678
36743679 protected final void visitWhereClause (Predicate whereClauseRestrictions ) {
3675- final Predicate additionalWherePredicate = this .additionalWherePredicate ;
3676- if ( whereClauseRestrictions != null && !whereClauseRestrictions .isEmpty ()
3677- || additionalWherePredicate != null ) {
3680+ if ( hasWhere ( whereClauseRestrictions ) ) {
3681+ final Predicate additionalWherePredicate = this .additionalWherePredicate ;
36783682 appendSql ( " where " );
36793683
36803684 clauseStack .push ( Clause .WHERE );
@@ -3698,6 +3702,11 @@ else if ( additionalWherePredicate != null ) {
36983702 }
36993703 }
37003704
3705+ protected boolean hasWhere (Predicate whereClauseRestrictions ) {
3706+ return whereClauseRestrictions != null && !whereClauseRestrictions .isEmpty ()
3707+ || additionalWherePredicate != null ;
3708+ }
3709+
37013710 protected Expression resolveAliasedExpression (Expression expression ) {
37023711 // This can happen when using window functions for emulating the offset/fetch clause of a query group
37033712 // But in that case we always use a SqlSelectionExpression anyway, so this is fine as it doesn't need resolving
@@ -5690,8 +5699,9 @@ protected void renderLiteral(Literal literal, boolean castParameter) {
56905699 // If we encounter a plain literal in the select clause which has no literal formatter, we must render it as parameter
56915700 if ( literalFormatter == null ) {
56925701 parameterBinders .add ( literal );
5693- final String marker = parameterMarkerStrategy .createMarker ( parameterBinders .size (), literal .getJdbcMapping ().getJdbcType () );
5694- final LiteralAsParameter <Object > jdbcParameter = new LiteralAsParameter <>( literal , marker );
5702+ final JdbcType jdbcType = literal .getJdbcMapping ().getJdbcType ();
5703+ final String marker = parameterMarkerStrategy .createMarker ( parameterBinders .size (), jdbcType );
5704+ final LiteralAsParameter <?> jdbcParameter = new LiteralAsParameter <>( literal , marker );
56955705 if ( castParameter ) {
56965706 renderCasted ( jdbcParameter );
56975707 }
@@ -5715,13 +5725,17 @@ protected void renderLiteral(Literal literal, boolean castParameter) {
57155725
57165726 @ Override
57175727 public void visitFromClause (FromClause fromClause ) {
5718- if ( fromClause == null || fromClause .getRoots ().isEmpty () ) {
5719- appendSql ( getFromDualForSelectOnly () );
5720- }
5721- else {
5728+ if ( hasFrom ( fromClause ) ) {
57225729 appendSql ( " from " );
57235730 renderFromClauseSpaces ( fromClause );
57245731 }
5732+ else {
5733+ appendSql ( getFromDualForSelectOnly () );
5734+ }
5735+ }
5736+
5737+ protected boolean hasFrom (FromClause fromClause ) {
5738+ return fromClause != null && !fromClause .getRoots ().isEmpty ();
57255739 }
57265740
57275741 protected void renderFromClauseSpaces (FromClause fromClause ) {
0 commit comments