@@ -144,14 +144,24 @@ private[r2dbc] class PostgresQueryDao(executorProvider: R2dbcExecutorProvider) e
144
144
protected def selectEventsSql (slice : Int ): String =
145
145
sqlCache.get(slice, " selectEventsSql" ) {
146
146
sql """
147
- SELECT slice, entity_type, persistence_id, seq_nr, db_timestamp, CURRENT_TIMESTAMP AS read_db_timestamp, event_ser_id, event_ser_manifest, event_payload, writer, adapter_manifest, meta_ser_id, meta_ser_manifest, meta_payload, tags
147
+ SELECT slice, entity_type, seq_nr, db_timestamp, CURRENT_TIMESTAMP AS read_db_timestamp, event_ser_id, event_ser_manifest, event_payload, writer, adapter_manifest, meta_ser_id, meta_ser_manifest, meta_payload, tags
148
148
from ${journalTable(slice)}
149
149
WHERE persistence_id = ? AND seq_nr >= ? AND seq_nr <= ?
150
150
AND deleted = false
151
151
ORDER BY seq_nr
152
152
LIMIT ? """
153
153
}
154
154
155
+ protected def selectEventsIncludeDeletedSql (slice : Int ): String =
156
+ sqlCache.get(slice, " selectEventsIncludeDeletedSql" ) {
157
+ sql """
158
+ SELECT slice, entity_type, seq_nr, db_timestamp, CURRENT_TIMESTAMP AS read_db_timestamp, event_ser_id, event_ser_manifest, event_payload, writer, adapter_manifest, meta_ser_id, meta_ser_manifest, meta_payload, tags, deleted
159
+ from ${journalTable(slice)}
160
+ WHERE persistence_id = ? AND seq_nr >= ? AND seq_nr <= ?
161
+ ORDER BY seq_nr
162
+ LIMIT ? """
163
+ }
164
+
155
165
protected def bindSelectEventsSql (
156
166
stmt : Statement ,
157
167
persistenceId : String ,
@@ -378,28 +388,47 @@ private[r2dbc] class PostgresQueryDao(executorProvider: R2dbcExecutorProvider) e
378
388
override def eventsByPersistenceId (
379
389
persistenceId : String ,
380
390
fromSequenceNr : Long ,
381
- toSequenceNr : Long ): Source [SerializedJournalRow , NotUsed ] = {
391
+ toSequenceNr : Long ,
392
+ includeDeleted : Boolean ): Source [SerializedJournalRow , NotUsed ] = {
382
393
val slice = persistenceExt.sliceForPersistenceId(persistenceId)
383
394
val executor = executorProvider.executorFor(slice)
384
395
val result = executor.select(s " select eventsByPersistenceId [ $persistenceId] " )(
385
396
connection => {
386
- val stmt = connection.createStatement(selectEventsSql(slice))
397
+ val selectSql = if (includeDeleted) selectEventsIncludeDeletedSql(slice) else selectEventsSql(slice)
398
+ val stmt = connection.createStatement(selectSql)
387
399
bindSelectEventsSql(stmt, persistenceId, fromSequenceNr, toSequenceNr, settings.querySettings.bufferSize)
388
400
},
389
401
row =>
390
- SerializedJournalRow (
391
- slice = row.get[Integer ](" slice" , classOf [Integer ]),
392
- entityType = row.get(" entity_type" , classOf [String ]),
393
- persistenceId = row.get(" persistence_id" , classOf [String ]),
394
- seqNr = row.get[java.lang.Long ](" seq_nr" , classOf [java.lang.Long ]),
395
- dbTimestamp = row.getTimestamp(" db_timestamp" ),
396
- readDbTimestamp = row.getTimestamp(" read_db_timestamp" ),
397
- payload = Some (row.getPayload(" event_payload" )),
398
- serId = row.get[Integer ](" event_ser_id" , classOf [Integer ]),
399
- serManifest = row.get(" event_ser_manifest" , classOf [String ]),
400
- writerUuid = row.get(" writer" , classOf [String ]),
401
- tags = row.getTags(" tags" ),
402
- metadata = readMetadata(row)))
402
+ if (includeDeleted && row.get[java.lang.Boolean ](" deleted" , classOf [java.lang.Boolean ])) {
403
+ // deleted row
404
+ SerializedJournalRow (
405
+ slice = row.get[Integer ](" slice" , classOf [Integer ]),
406
+ entityType = row.get(" entity_type" , classOf [String ]),
407
+ persistenceId = persistenceId,
408
+ seqNr = row.get[java.lang.Long ](" seq_nr" , classOf [java.lang.Long ]),
409
+ dbTimestamp = row.getTimestamp(" db_timestamp" ),
410
+ readDbTimestamp = row.getTimestamp(" read_db_timestamp" ),
411
+ payload = None ,
412
+ serId = 0 ,
413
+ serManifest = " " ,
414
+ writerUuid = " " ,
415
+ tags = Set .empty,
416
+ metadata = None )
417
+ } else {
418
+ SerializedJournalRow (
419
+ slice = row.get[Integer ](" slice" , classOf [Integer ]),
420
+ entityType = row.get(" entity_type" , classOf [String ]),
421
+ persistenceId = persistenceId,
422
+ seqNr = row.get[java.lang.Long ](" seq_nr" , classOf [java.lang.Long ]),
423
+ dbTimestamp = row.getTimestamp(" db_timestamp" ),
424
+ readDbTimestamp = row.getTimestamp(" read_db_timestamp" ),
425
+ payload = Some (row.getPayload(" event_payload" )),
426
+ serId = row.get[Integer ](" event_ser_id" , classOf [Integer ]),
427
+ serManifest = row.get(" event_ser_manifest" , classOf [String ]),
428
+ writerUuid = row.get(" writer" , classOf [String ]),
429
+ tags = row.getTags(" tags" ),
430
+ metadata = readMetadata(row))
431
+ })
403
432
404
433
if (log.isDebugEnabled)
405
434
result.foreach(rows => log.debug(" Read [{}] events for persistenceId [{}]" , rows.size, persistenceId))
0 commit comments