@@ -215,7 +215,7 @@ defmodule Ecto.Query.Builder do
215215 end
216216
217217 { frags , params_acc } = Enum . map_reduce ( frags , params_acc , & escape_fragment ( & 1 , & 2 , vars , env ) )
218- { { :{} , [ ] , [ :fragment , [ ] , merge_fragments ( pieces , frags ) ] } , params_acc }
218+ { { :{} , [ ] , [ :fragment , [ ] , merge_fragments ( pieces , frags , [ ] ) ] } , params_acc }
219219 end
220220
221221 # subqueries
@@ -638,7 +638,7 @@ defmodule Ecto.Query.Builder do
638638 def fragment_pieces ( frag , args ) do
639639 frag
640640 |> split_fragment ( "" )
641- |> merge_fragments ( args )
641+ |> merge_fragments ( args , [ ] )
642642 end
643643
644644 defp escape_window_description ( [ ] , params_acc , _vars , _env ) ,
@@ -816,20 +816,24 @@ defmodule Ecto.Query.Builder do
816816 escape ( expr , :any , params_acc , vars , env )
817817 end
818818
819- defp merge_fragments ( [ h1 | t1 ] , [ { :splice , exprs } | t2 ] ) ,
820- do: [ { :raw , h1 } | merge_splice ( exprs , t1 , t2 ) ]
819+ defp merge_fragments ( [ raw_h | raw_t ] , [ { :splice , exprs } | expr_t ] , [ ] ) ,
820+ do: [ { :raw , raw_h } | merge_fragments ( raw_t , expr_t , exprs ) ]
821821
822- defp merge_fragments ( [ h1 | t1 ] , [ h2 | t2 ] ) ,
823- do: [ { :raw , h1 } , { :expr , h2 } | merge_fragments ( t1 , t2 ) ]
822+ defp merge_fragments ( [ raw_h | raw_t ] , [ expr_h | expr_t ] , [ ] ) ,
823+ do: [ { :raw , raw_h } , { :expr , expr_h } | merge_fragments ( raw_t , expr_t , [ ] ) ]
824824
825- defp merge_fragments ( [ h1 ] , [ ] ) ,
826- do: [ { :raw , h1 } ]
825+ defp merge_fragments ( [ raw_h ] , [ ] , [ ] ) ,
826+ do: [ { :raw , raw_h } ]
827827
828- defp merge_splice ( [ splice_h ] , raw_t , expr_t ) ,
829- do: [ { :expr , splice_h } | merge_fragments ( raw_t , expr_t ) ]
828+ defp merge_fragments ( raw , expr , [ { :splice , exprs } | splice_t ] ) ,
829+ do: merge_fragments ( raw , expr , exprs ++ splice_t )
830+
831+ defp merge_fragments ( raw , expr , [ splice_h ] ) ,
832+ do: [ { :expr , splice_h } | merge_fragments ( raw , expr , [ ] ) ]
833+
834+ defp merge_fragments ( raw , expr , [ splice_h | splice_t ] ) ,
835+ do: [ { :expr , splice_h } , { :raw , "," } | merge_fragments ( raw , expr , splice_t ) ]
830836
831- defp merge_splice ( [ splice_h | splice_t ] , raw_t , expr_t ) ,
832- do: [ { :expr , splice_h } , { :raw , "," } | merge_splice ( splice_t , raw_t , expr_t ) ]
833837
834838 for { agg , arity } <- @ dynamic_aggregates do
835839 defp call_type ( unquote ( agg ) , unquote ( arity ) ) , do: { :any , :any }
0 commit comments