@@ -56,20 +56,32 @@ func (provider *Provider) selectColumns() string {
5656 }, "," )
5757}
5858
59+ // GetEvents retrieves events from the provider
60+ // eventIndexEnd 0 means max
61+ // see https://github.com/asynkron/protoactor-go/blob/dev/persistence/plugin.go#L65
5962func (provider * Provider ) GetEvents (actorName string , eventIndexStart int , eventIndexEnd int , callback func (e interface {})) {
6063 tx , _ := provider .db .BeginTx (provider .context , pgx.TxOptions {IsoLevel : pgx .Serializable })
6164 defer tx .Commit (provider .context )
62- rows , err := tx .Query (
63- provider .context ,
64- fmt .Sprintf (
65- "SELECT %s FROM %s WHERE %s = $1 AND %s BETWEEN $2 AND $3 ORDER BY %s ASC" ,
65+ query := fmt .Sprintf (
66+ "SELECT %s FROM %s WHERE %s = $1 AND %s BETWEEN $2 AND $3 ORDER BY %s ASC" ,
67+ provider .selectColumns (),
68+ provider .tableSchema .JournalTableName (),
69+ provider .tableSchema .ActorName (),
70+ provider .tableSchema .SequenceNumber (),
71+ provider .tableSchema .SequenceNumber (),
72+ )
73+ args := []interface {}{actorName , eventIndexStart , eventIndexEnd }
74+ if eventIndexEnd == 0 {
75+ query = fmt .Sprintf (
76+ "SELECT %s FROM %s WHERE %s = $1 AND %s >= $2 ORDER BY %s ASC" ,
6677 provider .selectColumns (),
6778 provider .tableSchema .JournalTableName (),
6879 provider .tableSchema .ActorName (),
6980 provider .tableSchema .SequenceNumber (),
70- provider .tableSchema .SequenceNumber (),
71- ),
72- actorName , eventIndexStart , eventIndexEnd )
81+ provider .tableSchema .SequenceNumber ())
82+ args = []interface {}{actorName , eventIndexStart }
83+ }
84+ rows , err := tx .Query (provider .context , query , args ... )
7385 if ! errors .Is (err , sql .ErrNoRows ) && err != nil {
7486 provider .logger .Error (err .Error (), slog .String ("actor_name" , actorName ))
7587 return
0 commit comments