@@ -17,6 +17,7 @@ defmodule Ecto.Adapters.SQL do
1717 @ behaviour Ecto.Adapter
1818 @ behaviour Ecto.Adapter.Migration
1919 @ behaviour Ecto.Adapter.Transaction
20+ @ behaviour Ecto.Adapter.Stage
2021
2122 @ conn __MODULE__ . Connection
2223 @ adapter unquote ( adapter )
@@ -139,13 +140,13 @@ defmodule Ecto.Adapters.SQL do
139140 ## GenStage
140141
141142 @ doc false
142- def stage_spec ( repo , meta , query , params , process , flat_map , opts ) do
143- Ecto.Adapters.SQL . stage_spec ( repo , meta , query , params , process , flat_map , opts )
143+ def start_producer ( repo , meta , query , params , process , flat_map , opts ) do
144+ Ecto.Adapters.SQL . start_producer ( repo , meta , query , params , process , flat_map , opts )
144145 end
145146
146147 defoverridable [ prepare: 2 , execute: 6 , insert: 6 , update: 6 , delete: 4 , insert_all: 7 ,
147148 execute_ddl: 3 , loaders: 2 , dumpers: 2 , autogenerate: 1 , ensure_all_started: 2 ,
148- stage_spec : 7 ]
149+ start_producer : 7 ]
149150 end
150151 end
151152
@@ -640,41 +641,29 @@ defmodule Ecto.Adapters.SQL do
640641 end
641642 end
642643
643- @ doc """
644- Return child specification for `GenStage` process running query.
645- """
646- def stage_spec ( repo , statement , params , opts ) do
647- stage_spec ( repo , statement , params , fn x -> x end , nil , opts )
648- end
649-
650- @ doc """
651- Start link `GenStage` process running query.
652- """
653- def start_stage ( repo , statement , params , opts ) do
654- case stage_spec ( repo , statement , params , opts ) do
655- { _ , { mod , fun , args } , _ , _ , _ , _ } ->
656- apply ( mod , fun , args )
657- % { start: { mod , fun , args } } ->
658- apply ( mod , fun , args )
659- end
660- end
661-
662644 @ doc false
663- def stage_spec ( repo , meta , prepared , params , mapper , flat_map , opts ) do
645+ def start_producer ( repo , meta , prepared , params , mapper , flat_map , opts ) do
664646 stream = stream ( repo , meta , prepared , params , mapper , flat_map , opts )
665647 % Ecto.Adapters.SQL.Stream { repo: repo , statement: statement , params: params ,
666648 mapper: mapper , flat_map: flat_map , opts: opts } = stream
667- stage_spec ( repo , statement , params , mapper , flat_map , opts )
649+ start_producer ( repo , statement , params , mapper , flat_map , opts )
650+ end
651+
652+ @ doc """
653+ Start link a `GenStage` producer that streams the result of a query.
654+ """
655+ def start_producer ( repo , statement , params , opts ) do
656+ start_producer ( repo , statement , params , fn x -> x end , nil , opts )
668657 end
669658
670- defp stage_spec ( repo , statement , params , mapper , flat_map , opts ) do
659+ defp start_producer ( repo , statement , params , mapper , flat_map , opts ) do
671660 { repo_mod , pool , default_opts } = lookup_pool ( repo )
672661 stage_opts = Keyword . delete ( default_opts , :name )
673662 stream_mapper = flat_map && { __MODULE__ , :stage_mapper , [ pool , flat_map ] }
674663 map_opts = [ decode_mapper: mapper , stream_mapper: stream_mapper ]
675664 opts = map_opts ++ with_log ( repo , params , opts ++ stage_opts )
676665 opts = Keyword . put_new ( opts , :caller , self ( ) )
677- apply ( repo_mod . __sql__ , :stage_spec , [ pool , statement , params , opts ] )
666+ repo_mod . __sql__ . start_producer ( pool , statement , params , opts )
678667 end
679668
680669 @ doc false
0 commit comments