Browse Source
Simplify R2DBC expression handling. Use new ValueExpression API instead of holding parameter binding duplicates. Reformat code. Add author tags. See #1904 Original pull request: #1906pull/1912/head
10 changed files with 96 additions and 225 deletions
@ -1,78 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2020-2024 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.r2dbc.repository.query; |
|
||||||
|
|
||||||
import org.springframework.data.expression.ValueEvaluationContext; |
|
||||||
import org.springframework.data.expression.ValueExpression; |
|
||||||
import org.springframework.data.mapping.model.SpELExpressionEvaluator; |
|
||||||
import org.springframework.data.repository.query.ValueExpressionDelegate; |
|
||||||
import org.springframework.expression.EvaluationContext; |
|
||||||
import org.springframework.expression.ExpressionParser; |
|
||||||
import org.springframework.r2dbc.core.Parameter; |
|
||||||
|
|
||||||
/** |
|
||||||
* Simple {@link R2dbcSpELExpressionEvaluator} implementation using {@link ExpressionParser} and |
|
||||||
* {@link EvaluationContext}. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
* @since 1.2 |
|
||||||
*/ |
|
||||||
class DefaultR2dbcSpELExpressionEvaluator implements R2dbcSpELExpressionEvaluator { |
|
||||||
|
|
||||||
private final ValueExpressionDelegate delegate; |
|
||||||
|
|
||||||
private final ValueEvaluationContext context; |
|
||||||
|
|
||||||
DefaultR2dbcSpELExpressionEvaluator(ValueExpressionDelegate delegate, ValueEvaluationContext context) { |
|
||||||
this.delegate = delegate; |
|
||||||
this.context = context; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return a {@link SpELExpressionEvaluator} that does not support expression evaluation. |
|
||||||
* |
|
||||||
* @return a {@link SpELExpressionEvaluator} that does not support expression evaluation. |
|
||||||
*/ |
|
||||||
public static R2dbcSpELExpressionEvaluator unsupported() { |
|
||||||
return NoOpExpressionEvaluator.INSTANCE; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public Parameter evaluate(String expression) { |
|
||||||
|
|
||||||
ValueExpression expr = delegate.parse(expression); |
|
||||||
|
|
||||||
Object value = expr.evaluate(context); |
|
||||||
Class<?> valueType = value != null ? value.getClass() : Object.class; |
|
||||||
|
|
||||||
return org.springframework.r2dbc.core.Parameter.fromOrEmpty(value, valueType); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* {@link SpELExpressionEvaluator} that does not support SpEL evaluation. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
*/ |
|
||||||
enum NoOpExpressionEvaluator implements R2dbcSpELExpressionEvaluator { |
|
||||||
|
|
||||||
INSTANCE; |
|
||||||
|
|
||||||
@Override |
|
||||||
public Parameter evaluate(String expression) { |
|
||||||
throw new UnsupportedOperationException("Expression evaluation not supported"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,35 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2020-2024 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.r2dbc.repository.query; |
|
||||||
|
|
||||||
import org.springframework.r2dbc.core.Parameter; |
|
||||||
|
|
||||||
/** |
|
||||||
* SPI for components that can evaluate Spring EL expressions and return {@link Parameter}. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
* @since 1.2 |
|
||||||
*/ |
|
||||||
interface R2dbcSpELExpressionEvaluator { |
|
||||||
|
|
||||||
/** |
|
||||||
* Evaluates the given expression. |
|
||||||
* |
|
||||||
* @param expression |
|
||||||
* @return |
|
||||||
*/ |
|
||||||
Parameter evaluate(String expression); |
|
||||||
} |
|
||||||
Loading…
Reference in new issue