Skip to content

Commit 9ca7211

Browse files
committed
1 parent 81c6acf commit 9ca7211

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

provider.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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
5962
func (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

provider_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ func TestProvider_PersistEvent(t *testing.T) {
4646
if !reflect.DeepEqual(evt, evv) {
4747
t.Errorf("unexpected event %v", evv)
4848
}
49+
50+
var evv2 *testdata.UserCreated
51+
provider.GetEvents("user", 1, 0, func(e interface{}) {
52+
ev, ok := e.(*testdata.UserCreated)
53+
if !ok {
54+
t.Error("unexpected type")
55+
}
56+
evv2 = ev
57+
})
58+
if !reflect.DeepEqual(evt, evv2) {
59+
t.Errorf("unexpected event %v", evv2)
60+
}
4961
}
5062

5163
func TestProvider_PersistSnapshot(t *testing.T) {

0 commit comments

Comments
 (0)