Skip to content

Commit d3c7584

Browse files
committed
fix: support keep array workaround for map
1 parent fa0a5fd commit d3c7584

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

src/jsonata/parser.py

+2
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,7 @@ def lambda1(terms):
11801180
result.position = expr.position
11811181
result.lhs = self.process_ast(expr.lhs)
11821182
result.rhs = self.process_ast(expr.rhs)
1183+
result.keep_array = result.lhs.keep_array or result.rhs.keep_array
11831184
else:
11841185
result = Parser.Infix(self, None)
11851186
result.type = expr.type
@@ -1245,6 +1246,7 @@ def lambda4(arg):
12451246

12461247
result.arguments = [lambda4(x) for x in expr.arguments]
12471248
result.procedure = self.process_ast(expr.procedure)
1249+
result.keep_array = result.procedure.keep_array
12481250
elif type == "lambda":
12491251
result = Parser.Symbol(self)
12501252
result.type = expr.type

tests/custom_function_test.py

+10
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,13 @@ def test_map_with_lambda(self):
3131
def test_map_with_function(self):
3232
expression = jsonata.Jsonata("$map([1, 2, 3], function($v) { $v * $v })")
3333
assert expression.evaluate(None) == [1, 4, 9]
34+
35+
def test_singleton_map(self):
36+
expression = jsonata.Jsonata("$map([1], $square)[]")
37+
expression.register_lambda("square", lambda x: x * x)
38+
assert expression.evaluate(None) == [1]
39+
40+
def test_singleton_map_with_chain(self):
41+
expression = jsonata.Jsonata("$ ~> $map($square)[]")
42+
expression.register_lambda("square", lambda x: x * x)
43+
assert expression.evaluate([1]) == [1]

0 commit comments

Comments
 (0)