Apply requested changes
This commit is contained in:
parent
003fddccb5
commit
1ea675d58d
|
@ -17,7 +17,6 @@ import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescript
|
|||
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
|
||||
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
|
||||
import org.hibernate.query.sqm.produce.function.internal.PatternRenderer;
|
||||
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
||||
import org.hibernate.sql.ast.SqlAstTranslator;
|
||||
import org.hibernate.sql.ast.spi.SqlAppender;
|
||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||
|
@ -64,7 +63,7 @@ public class CastFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
|
|||
|
||||
String cast = dialect.castPattern( sourceType, targetType );
|
||||
|
||||
new PatternRenderer( cast, SqlAstNodeRenderingMode.DEFAULT ).render( sqlAppender, arguments, walker );
|
||||
new PatternRenderer( cast ).render( sqlAppender, arguments, walker );
|
||||
}
|
||||
|
||||
private CastType getCastType(JdbcMapping sourceMapping) {
|
||||
|
|
|
@ -13,7 +13,6 @@ import org.hibernate.query.sqm.function.SelfRenderingFunctionSqlAstExpression;
|
|||
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
|
||||
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
|
||||
import org.hibernate.query.sqm.produce.function.internal.PatternRenderer;
|
||||
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
||||
import org.hibernate.sql.ast.SqlAstTranslator;
|
||||
import org.hibernate.sql.ast.spi.SqlAppender;
|
||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||
|
@ -56,7 +55,7 @@ public class TimestampaddFunction
|
|||
TypeConfiguration.getSqlTemporalType( to.getExpressionType() )
|
||||
);
|
||||
|
||||
new PatternRenderer( pattern, SqlAstNodeRenderingMode.DEFAULT ).render( sqlAppender, arguments, walker );
|
||||
new PatternRenderer( pattern ).render( sqlAppender, arguments, walker );
|
||||
}
|
||||
|
||||
// @Override
|
||||
|
|
|
@ -13,7 +13,6 @@ import org.hibernate.query.sqm.function.SelfRenderingFunctionSqlAstExpression;
|
|||
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
|
||||
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
|
||||
import org.hibernate.query.sqm.produce.function.internal.PatternRenderer;
|
||||
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
||||
import org.hibernate.sql.ast.SqlAstTranslator;
|
||||
import org.hibernate.sql.ast.spi.SqlAppender;
|
||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||
|
@ -59,7 +58,7 @@ public class TimestampdiffFunction
|
|||
TypeConfiguration.getSqlTemporalType( to.getExpressionType() )
|
||||
);
|
||||
|
||||
new PatternRenderer( pattern, SqlAstNodeRenderingMode.DEFAULT ).render( sqlAppender, arguments, walker );
|
||||
new PatternRenderer( pattern ).render( sqlAppender, arguments, walker );
|
||||
}
|
||||
|
||||
// @Override
|
||||
|
|
|
@ -12,7 +12,6 @@ import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescript
|
|||
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
|
||||
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
|
||||
import org.hibernate.query.sqm.produce.function.internal.PatternRenderer;
|
||||
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
||||
import org.hibernate.sql.ast.SqlAstTranslator;
|
||||
import org.hibernate.sql.ast.spi.SqlAppender;
|
||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||
|
@ -48,8 +47,7 @@ public class TrimFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
|
|||
|
||||
String trim = dialect.trimPattern( specification, trimCharacter );
|
||||
|
||||
new PatternRenderer( trim, SqlAstNodeRenderingMode.DEFAULT )
|
||||
.render( sqlAppender, Collections.singletonList( sourceExpr ), walker );
|
||||
new PatternRenderer( trim ).render( sqlAppender, Collections.singletonList( sourceExpr ), walker );
|
||||
}
|
||||
|
||||
// @Override
|
||||
|
|
|
@ -32,6 +32,10 @@ public class PatternRenderer {
|
|||
private final int maxParamIndex;
|
||||
private final SqlAstNodeRenderingMode argumentRenderingMode;
|
||||
|
||||
public PatternRenderer(String pattern) {
|
||||
this( pattern, SqlAstNodeRenderingMode.DEFAULT );
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a template renderer
|
||||
*
|
||||
|
|
|
@ -6,8 +6,20 @@
|
|||
*/
|
||||
package org.hibernate.sql.ast;
|
||||
|
||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||
|
||||
/**
|
||||
* The rendering mode to use for {@link org.hibernate.sql.ast.tree.SqlAstNode}.
|
||||
*
|
||||
* Some functions/contexts require the use of literals/expressions rather than parameters
|
||||
* like for example the `char` function in Derby which requires the length as literal.
|
||||
*
|
||||
* Another example is a function that renders a function argument into a subquery select and group by item.
|
||||
* It can use {@link #INLINE_PARAMETERS} so that a database can match such a select item to a group by item.
|
||||
* Without this, such queries would result in a query error.
|
||||
*
|
||||
* @author Christian Beikov
|
||||
* @see SqlAstTranslator#render(SqlAstNode, SqlAstNodeRenderingMode)
|
||||
*/
|
||||
public enum SqlAstNodeRenderingMode {
|
||||
/**
|
||||
|
@ -17,11 +29,15 @@ public enum SqlAstNodeRenderingMode {
|
|||
|
||||
/**
|
||||
* Render parameters as literals.
|
||||
* All parameters within the {@link org.hibernate.sql.ast.tree.SqlAstNode} are rendered as literals.
|
||||
*/
|
||||
INLINE_PARAMETERS,
|
||||
|
||||
/**
|
||||
* Don't render plain parameters. Render it as literal or as expression.
|
||||
* If the {@link org.hibernate.sql.ast.tree.SqlAstNode} to render is a parameter,
|
||||
* it will be rendered either as literal or wrapped into a semantically equivalent expression
|
||||
* such that it doesn't appear as plain parameter.
|
||||
*/
|
||||
NO_PLAIN_PARAMETER
|
||||
}
|
||||
|
|
|
@ -124,8 +124,9 @@ public abstract class AbstractSqlAstTranslator<T extends JdbcOperation>
|
|||
case Types.FLOAT:
|
||||
case Types.NUMERIC:
|
||||
case Types.DECIMAL:
|
||||
appendSql( '(' );
|
||||
sqlAstNode.accept( this );
|
||||
appendSql( "+0" );
|
||||
appendSql( "+0)" );
|
||||
break;
|
||||
case Types.CHAR:
|
||||
case Types.VARCHAR:
|
||||
|
|
Loading…
Reference in New Issue