diff --git a/src/sqerl.erl b/src/sqerl.erl index eaf074d..37cde21 100644 --- a/src/sqerl.erl +++ b/src/sqerl.erl @@ -474,12 +474,15 @@ expr2(undefined, _Safe) -> <<"NULL">>; expr2(Expr, _Safe) when is_atom(Expr) -> convert(Expr); expr2(Expr, Safe) -> expr(Expr, Safe). -param({call, FuncName, []}) -> - [convert(FuncName), <<"()">>]; -param({call, FuncName, Params}) -> - [convert(FuncName), $(, make_list(Params, fun param/1), $)]; +param({call, _FuncName, _Params} = Call) -> + expr(Call, undefined); param({Key, Value}) when is_atom(Key) -> - [convert(Key), <<" := ">>, encode(Value)]; + case Value of + {call, _FuncName, _Params} = Call -> + [convert(Key), <<" := ">>, expr(Call, undefined)]; + _ -> + [convert(Key), <<" := ">>, encode(Value)] + end; param(Key) when is_atom(Key) -> convert(Key); param(Value) -> diff --git a/test/sqerl_tests.erl b/test/sqerl_tests.erl index 19832ca..167df4b 100644 --- a/test/sqerl_tests.erl +++ b/test/sqerl_tests.erl @@ -210,6 +210,9 @@ safe_test_() -> {<<"SELECT name FROM search_people(age := 18)">>, ?_safe_test({select,name,{from,{call,search_people,[{age, 18}]}}}) }, + {<<"SELECT name FROM search_people(age := 18, area := postal_code(code := 12345))">>, + ?_safe_test({select,name,{from,{call,search_people,[{age,18},{area,{call,postal_code,[{code,12345}]}}]}}}) + }, {<<"SELECT * FROM foo JOIN bar ON (foo.bar_id = bar.id)">>, ?_safe_test({select,'*',{from,{foo,join,bar,{'foo.bar_id','=','bar.id'}}}}) },