Got unary +, - working again
(They were unimplemented on the new 6 branch)
This commit is contained in:
parent
9565d499af
commit
28232427ce
|
@ -1504,9 +1504,8 @@ public abstract class BaseSqmToSqlAstConverter
|
||||||
try {
|
try {
|
||||||
return new UnaryOperation(
|
return new UnaryOperation(
|
||||||
interpret( expression.getOperation() ),
|
interpret( expression.getOperation() ),
|
||||||
(Expression) expression.getOperand().accept( this ),
|
toSqlExpression( expression.getOperand().accept(this) ),
|
||||||
determineValueMapping( expression )
|
(BasicValuedMapping) determineValueMapping( expression.getOperand() )
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
@ -1813,7 +1812,7 @@ public abstract class BaseSqmToSqlAstConverter
|
||||||
magnitude = new UnaryOperation(
|
magnitude = new UnaryOperation(
|
||||||
UNARY_MINUS,
|
UNARY_MINUS,
|
||||||
magnitude,
|
magnitude,
|
||||||
magnitude.getExpressionType()
|
(BasicValuedMapping) magnitude.getExpressionType()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,19 +57,6 @@ public class Conversion
|
||||||
walker.visitConversion(this);
|
walker.visitConversion(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DomainResult createDomainResult(
|
public DomainResult createDomainResult(
|
||||||
String resultVariable,
|
String resultVariable,
|
||||||
|
|
|
@ -82,19 +82,6 @@ public abstract class AbstractLiteral<T>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitJdbcTypes(
|
public void visitJdbcTypes(
|
||||||
Consumer<JdbcMapping> action,
|
Consumer<JdbcMapping> action,
|
||||||
|
|
|
@ -68,19 +68,6 @@ public class BinaryArithmeticExpression implements Expression, DomainResultProdu
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the left-hand operand.
|
* Get the left-hand operand.
|
||||||
*
|
*
|
||||||
|
|
|
@ -83,19 +83,6 @@ public class CaseSearchedExpression implements Expression, DomainResultProducer
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(SqlAstWalker walker) {
|
public void accept(SqlAstWalker walker) {
|
||||||
walker.visitCaseSearchedExpression( this );
|
walker.visitCaseSearchedExpression( this );
|
||||||
|
|
|
@ -87,19 +87,6 @@ public class ColumnReference implements Expression, Assignable {
|
||||||
interpreter.visitColumnReference( this );
|
interpreter.visitColumnReference( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
|
|
||||||
// todo (6.0) : potential use for runtime database model - interpretation of table and column references
|
|
||||||
// into metadata info such as java/sql type, binder, extractor
|
|
||||||
|
|
||||||
return new SqlSelectionImpl( jdbcPosition, valuesArrayPosition, this );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format(
|
return String.format(
|
||||||
|
|
|
@ -56,19 +56,6 @@ public class Duration implements Expression, DomainResultProducer {
|
||||||
walker.visitDuration(this);
|
walker.visitDuration(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DomainResult createDomainResult(
|
public DomainResult createDomainResult(
|
||||||
String resultVariable,
|
String resultVariable,
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.sql.ast.tree.expression;
|
package org.hibernate.sql.ast.tree.expression;
|
||||||
|
|
||||||
import org.hibernate.NotYetImplementedFor6Exception;
|
|
||||||
import org.hibernate.metamodel.mapping.MappingModelExpressable;
|
import org.hibernate.metamodel.mapping.MappingModelExpressable;
|
||||||
import org.hibernate.sql.ast.spi.SqlSelection;
|
import org.hibernate.sql.ast.spi.SqlSelection;
|
||||||
import org.hibernate.sql.ast.spi.SqlSelectionProducer;
|
import org.hibernate.sql.ast.spi.SqlSelectionProducer;
|
||||||
import org.hibernate.sql.ast.tree.SqlAstNode;
|
import org.hibernate.sql.ast.tree.SqlAstNode;
|
||||||
|
import org.hibernate.sql.results.internal.SqlSelectionImpl;
|
||||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
|
@ -31,6 +31,10 @@ public interface Expression extends SqlAstNode, SqlSelectionProducer {
|
||||||
int valuesArrayPosition,
|
int valuesArrayPosition,
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
JavaTypeDescriptor javaTypeDescriptor,
|
||||||
TypeConfiguration typeConfiguration) {
|
TypeConfiguration typeConfiguration) {
|
||||||
throw new NotYetImplementedFor6Exception( getClass() );
|
return new SqlSelectionImpl(
|
||||||
|
jdbcPosition,
|
||||||
|
valuesArrayPosition,
|
||||||
|
this
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,16 +160,4 @@ public class JdbcLiteral<T> implements Literal, MappingModelExpressable<T>, Doma
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,19 +84,6 @@ public class QueryLiteral<T> implements Literal, DomainResultProducer<T> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SqlSelection createSqlSelection(
|
|
||||||
int jdbcPosition,
|
|
||||||
int valuesArrayPosition,
|
|
||||||
JavaTypeDescriptor javaTypeDescriptor,
|
|
||||||
TypeConfiguration typeConfiguration) {
|
|
||||||
return new SqlSelectionImpl(
|
|
||||||
jdbcPosition,
|
|
||||||
valuesArrayPosition,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitJdbcTypes(
|
public void visitJdbcTypes(
|
||||||
Consumer<JdbcMapping> action,
|
Consumer<JdbcMapping> action,
|
||||||
|
|
|
@ -8,12 +8,15 @@
|
||||||
package org.hibernate.sql.ast.tree.expression;
|
package org.hibernate.sql.ast.tree.expression;
|
||||||
|
|
||||||
import org.hibernate.NotYetImplementedFor6Exception;
|
import org.hibernate.NotYetImplementedFor6Exception;
|
||||||
|
import org.hibernate.metamodel.mapping.BasicValuedMapping;
|
||||||
import org.hibernate.metamodel.mapping.MappingModelExpressable;
|
import org.hibernate.metamodel.mapping.MappingModelExpressable;
|
||||||
import org.hibernate.query.UnaryArithmeticOperator;
|
import org.hibernate.query.UnaryArithmeticOperator;
|
||||||
import org.hibernate.query.sqm.sql.internal.DomainResultProducer;
|
import org.hibernate.query.sqm.sql.internal.DomainResultProducer;
|
||||||
import org.hibernate.sql.ast.SqlAstWalker;
|
import org.hibernate.sql.ast.SqlAstWalker;
|
||||||
|
import org.hibernate.sql.ast.spi.SqlSelection;
|
||||||
import org.hibernate.sql.results.graph.DomainResult;
|
import org.hibernate.sql.results.graph.DomainResult;
|
||||||
import org.hibernate.sql.results.graph.DomainResultCreationState;
|
import org.hibernate.sql.results.graph.DomainResultCreationState;
|
||||||
|
import org.hibernate.sql.results.graph.basic.BasicResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
|
@ -23,9 +26,9 @@ public class UnaryOperation implements Expression, DomainResultProducer {
|
||||||
private final UnaryArithmeticOperator operator;
|
private final UnaryArithmeticOperator operator;
|
||||||
|
|
||||||
private final Expression operand;
|
private final Expression operand;
|
||||||
private final MappingModelExpressable type;
|
private final BasicValuedMapping type;
|
||||||
|
|
||||||
public UnaryOperation(UnaryArithmeticOperator operator, Expression operand, MappingModelExpressable type) {
|
public UnaryOperation(UnaryArithmeticOperator operator, Expression operand, BasicValuedMapping type) {
|
||||||
this.operator = operator;
|
this.operator = operator;
|
||||||
this.operand = operand;
|
this.operand = operand;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
@ -53,7 +56,18 @@ public class UnaryOperation implements Expression, DomainResultProducer {
|
||||||
public DomainResult createDomainResult(
|
public DomainResult createDomainResult(
|
||||||
String resultVariable,
|
String resultVariable,
|
||||||
DomainResultCreationState creationState) {
|
DomainResultCreationState creationState) {
|
||||||
throw new NotYetImplementedFor6Exception( getClass() );
|
final SqlSelection sqlSelection = creationState.getSqlAstCreationState().getSqlExpressionResolver().resolveSqlSelection(
|
||||||
|
this,
|
||||||
|
type.getBasicType().getJavaTypeDescriptor(),
|
||||||
|
creationState.getSqlAstCreationState().getCreationContext().getDomainModel().getTypeConfiguration()
|
||||||
|
);
|
||||||
|
|
||||||
|
//noinspection unchecked
|
||||||
|
return new BasicResult(
|
||||||
|
sqlSelection.getValuesArrayPosition(),
|
||||||
|
resultVariable,
|
||||||
|
type.getBasicType().getJavaTypeDescriptor()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -135,9 +135,11 @@ public class FunctionTests extends SessionFactoryBasedFunctionalTest {
|
||||||
public void testMathFunctions(SessionFactoryScope scope) {
|
public void testMathFunctions(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
session.createQuery("select +e.theInt, -e.theInt from EntityOfBasics e")
|
||||||
|
.list();
|
||||||
session.createQuery("select abs(e.theInt), sign(e.theInt), mod(e.theInt, 2) from EntityOfBasics e")
|
session.createQuery("select abs(e.theInt), sign(e.theInt), mod(e.theInt, 2) from EntityOfBasics e")
|
||||||
.list();
|
.list();
|
||||||
session.createQuery("select +e.theInt, -e.theInt, e.theInt % 2 from EntityOfBasics e")
|
session.createQuery("select e.theInt % 2 from EntityOfBasics e")
|
||||||
.list();
|
.list();
|
||||||
session.createQuery("select abs(e.theDouble), sign(e.theDouble), sqrt(e.theDouble) from EntityOfBasics e")
|
session.createQuery("select abs(e.theDouble), sign(e.theDouble), sqrt(e.theDouble) from EntityOfBasics e")
|
||||||
.list();
|
.list();
|
||||||
|
|
Loading…
Reference in New Issue