77import javax .annotation .Nonnull ;
88
99import org .neo4j .cypher .internal .ast .factory .LiteralInterpreter ;
10+ import org .neo4j .cypher .internal .evaluator .EvaluationException ;
11+ import org .neo4j .cypher .internal .evaluator .Evaluator ;
12+ import org .neo4j .cypher .internal .evaluator .ExpressionEvaluator ;
1013import org .neo4j .cypher .internal .parser .javacc .Cypher ;
1114import org .neo4j .cypher .internal .parser .javacc .ParseException ;
1215import org .neo4j .shell .exception .ParameterException ;
@@ -20,6 +23,8 @@ public class ShellParameterMap implements ParameterMap
2023{
2124 private final Map <String , ParamValue > queryParams = new HashMap <>();
2225 private LiteralInterpreter interpreter = new LiteralInterpreter ();
26+ private ExpressionEvaluator evaluator = Evaluator .expressionEvaluator ();
27+
2328
2429 @ Override
2530 public Object setParameter ( @ Nonnull String name , @ Nonnull String valueString ) throws ParameterException
@@ -28,11 +33,17 @@ public Object setParameter( @Nonnull String name, @Nonnull String valueString )
2833 try {
2934 Object value = new Cypher <>( interpreter ,
3035 ParameterException .FACTORY ,
31- new StringReader ( valueString ) ).Literal ();
36+ new StringReader ( valueString ) ).Expression ();
3237 queryParams .put ( parameterName , new ParamValue ( valueString , value ) );
3338 return value ;
34- } catch (ParseException e ) {
35- throw new ParameterException (e .getMessage ());
39+ } catch (ParseException | UnsupportedOperationException e ) {
40+ try {
41+ Object value = evaluator .evaluate ( valueString , Object .class );
42+ queryParams .put ( parameterName , new ParamValue ( valueString , value ) );
43+ return value ;
44+ } catch (EvaluationException e1 ) {
45+ throw new ParameterException ( e1 .getMessage () );
46+ }
3647 }
3748 }
3849
0 commit comments