{"id":"json-array-left-join","version":"1.0.0","description":"Left join two JSON arrays of objects on exact keys.","supported_operations":["json array left join","left join json arrays","left join json objects on keys"],"unsupported_operations":["outer join","fuzzy keys"],"semantics":["Matches objects from the left and right arrays based on strict equality of the specified keys.","Returns a new array containing the cartesian product of all matching rows.","If a left row has no matches, it is included in the output once with only its original properties.","Output array is ordered first by the left array's order, then by the right array's order.","If a row is missing any of the join keys, it is treated as having no match (missing keys never match each other).","A key tuple with more than 64 rows on either side is rejected."],"limits":{"max_array_items":10000,"max_output_items":10000,"max_keys":32,"max_join_duplicates":64},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"array","maxItems":10000,"items":{"type":"object"}},"right":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}},"output_schema":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"examples":[{"input":{"left":[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}],"right":[{"id":1,"role":"Admin"}],"keys":["id"]},"output":{"result":[{"id":1,"name":"Alice","role":"Admin"},{"id":2,"name":"Bob"}],"count":2}}],"execute_url":"/v1/tools/json-array-left-join/versions/1.0.0/execute"}