@@ -40,7 +40,7 @@ def __init__(self) -> None:
40
40
41
41
expression_grammar = f"""
42
42
expression_start: "@" expression_evaluation
43
- expression_evaluation: (expression_logical_bool | expression_branch | expression_call) ((EXPRESSION_NULL_CONDITIONAL_OPERATOR? (expression_field_reference | EXPRESSION_ARRAY_INDEX ))+)? EXPRESSION_WS*
43
+ expression_evaluation: (expression_logical_bool | expression_branch | expression_call) ((EXPRESSION_NULL_CONDITIONAL_OPERATOR? (expression_field_reference | expression_object_or_array_accessor ))+)? EXPRESSION_WS*
44
44
?expression_call: expression_function_call
45
45
// used to translate to expression_pipeline_reference
46
46
| expression_datafactory_parameters_reference
@@ -57,6 +57,7 @@ def __init__(self) -> None:
57
57
expression_item_reference: "item" "()"
58
58
expression_pipeline_reference: "pipeline" "()" EXPRESSION_NULL_CONDITIONAL_OPERATOR? "." EXPRESSION_PIPELINE_PROPERTY
59
59
expression_field_reference: "." EXPRESSION_PARAMETER_NAME
60
+ expression_object_or_array_accessor: "[" expression_evaluation "]" | EXPRESSION_ARRAY_INDEX | EXPRESSION_ARRAY_OBJECT_ACCESSOR // resolves array[0], array["key"] or array[<expression>]
60
61
61
62
// branch rules
62
63
expression_logical_bool: EXPRESSION_LOGICAL_BOOL "(" expression_parameter "," expression_parameter ")"
@@ -71,6 +72,7 @@ def __init__(self) -> None:
71
72
EXPRESSION_DATAFACTORY_REFERENCE: "dataset" | "linkedService"
72
73
EXPRESSION_ACTIVITY_NAME: "'" /[^']*/ "'"
73
74
EXPRESSION_ARRAY_INDEX: ARRAY_INDEX
75
+ EXPRESSION_ARRAY_OBJECT_ACCESSOR: "[" SINGLE_QUOTED_STRING "]"
74
76
EXPRESSION_BOOLEAN: BOOLEAN
75
77
EXPRESSION_FLOAT: SIGNED_FLOAT
76
78
EXPRESSION_FUNCTION_NAME: { self ._supported_functions ()}
0 commit comments