Skip to content

Instantly share code, notes, and snippets.

@sebersole
Created January 10, 2019 15:21
Show Gist options
  • Save sebersole/6b2213acaffc893731c4b69c6596ff2d to your computer and use it in GitHub Desktop.
Save sebersole/6b2213acaffc893731c4b69c6596ff2d to your computer and use it in GitHub Desktop.
public abstract class BaseSqmToSqlAstConverter {
...
@Override
public ComparisonPredicate visitComparisonPredicate(SqmComparisonPredicate predicate) {
class TypeResolver implements BiFunction<SqmExpression,Supplier<ExpressableType<?>>,ExpressableType<?>> {
private final SqmExpression otherSide;
private TypeResolver(SqmExpression otherSide) {
this.otherSide = otherSide;
}
@Override
public ExpressableType<?> apply(
SqmExpression sqmExpression,
Supplier<ExpressableType<?>> fallbackTypeAccess) {
return otherSide.getExpressableType() == null ? fallbackTypeAccess.get() : otherSide.getExpressableType();
}
}
final Expression lhs;
final Expression rhs;
expressableTypeResolverStack.push( new TypeResolver( predicate.getRightHandExpression() ) );
try {
lhs = toExpression( predicate.getLeftHandExpression().accept( this ) );
}
finally {
expressableTypeResolverStack.pop();
}
expressableTypeResolverStack.push( new TypeResolver( predicate.getLeftHandExpression() ) );
try {
rhs = toExpression( predicate.getRightHandExpression().accept( this ) );
}
finally {
expressableTypeResolverStack.pop();
}
return new ComparisonPredicate(
lhs, interpret( predicate.getOperator() ),
rhs
);
}
...
@Override
public Expression visitNamedParameterExpression(SqmNamedParameter expression) {
final AllowableParameterType<?> resolvedType = (AllowableParameterType<?>) expressableTypeResolverStack.getCurrent().apply( expression, () -> parameterFallbackType );
...
}
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment