@@ -5,7 +5,7 @@ defmodule Mongo.Stream do
5
5
6
6
import Record , only: [ defrecordp: 2 ]
7
7
8
- defstruct [ :topology_pid , :session , :cursor , :coll , :docs , :opts ]
8
+ defstruct [ :topology_pid , :session , :cursor , :coll , :docs , :cmd , : opts]
9
9
10
10
alias Mongo.Session
11
11
@@ -22,7 +22,7 @@ defmodule Mongo.Stream do
22
22
"ns" => coll ,
23
23
"firstBatch" => docs } } } when ok == 1 <- Mongo . exec_command_session ( session , cmd , opts ) do
24
24
25
- % Mongo.Stream { topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , docs: docs , opts: opts }
25
+ % Mongo.Stream { topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , docs: docs , cmd: cmd , opts: opts }
26
26
else
27
27
{ :error , error } ->
28
28
case Error . should_retry_read ( error , cmd , opts ) do
@@ -35,11 +35,11 @@ defmodule Mongo.Stream do
35
35
36
36
defimpl Enumerable do
37
37
38
- defrecordp :state , [ :topology_pid , :session , :cursor , :coll , :docs ]
38
+ defrecordp :state , [ :topology_pid , :session , :cursor , :coll , :cmd , :docs ]
39
39
40
- def reduce ( % Mongo.Stream { topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , docs: docs , opts: opts } , acc , reduce_fun ) do
40
+ def reduce ( % Mongo.Stream { topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , docs: docs , cmd: cmd , opts: opts } , acc , reduce_fun ) do
41
41
42
- start_fun = fn -> state ( topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , docs: docs ) end
42
+ start_fun = fn -> state ( topology_pid: topology_pid , session: session , cursor: cursor_id , coll: coll , cmd: cmd , docs: docs ) end
43
43
next_fun = next_fun ( opts )
44
44
after_fun = after_fun ( opts )
45
45
@@ -51,9 +51,9 @@ defmodule Mongo.Stream do
51
51
state ( docs: [ ] , cursor: 0 ) = state -> { :halt , state }
52
52
53
53
# this is a regular cursor
54
- state ( docs: [ ] , topology_pid: topology_pid , session: session , cursor: cursor , coll: coll ) = state ->
54
+ state ( docs: [ ] , topology_pid: topology_pid , session: session , cursor: cursor , coll: coll , cmd: cmd ) = state ->
55
55
case get_more ( topology_pid , session , only_coll ( coll ) , cursor , nil , opts ) do
56
- { :ok , % { cursor_id: cursor_id , docs: [ ] } } -> { : halt, state ( state , cursor: cursor_id ) }
56
+ { :ok , % { cursor_id: cursor_id , docs: [ ] } } -> { if ( cmd [ :tailable ] , do: [ ] , else: : halt) , state ( state , cursor: cursor_id ) }
57
57
{ :ok , % { cursor_id: cursor_id , docs: docs } } -> { docs , state ( state , cursor: cursor_id ) }
58
58
{ :error , error } -> raise error
59
59
end
0 commit comments