Allow to have both verbose and succinct row parsers (#5248)

* Allow to have both verbose and succinct row parsers

This will be used when we need to stream transactions and not individual
events.

changelog_begin
changelog_end

* Succinct parser should have verbose = false
This commit is contained in:
Stefano Baghino 2020-03-27 17:00:36 +01:00 committed by GitHub
parent 454bd127a0
commit 9522c6e4b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 12 deletions

View File

@ -202,6 +202,7 @@ private[events] trait EventsTable {
createAgreementText: Option[String],
createKeyValue: Option[InputStream],
eventWitnesses: Array[String],
verbose: Boolean,
): CreatedEvent =
CreatedEvent(
eventId = eventId,
@ -213,7 +214,7 @@ private[events] trait EventsTable {
failureContext = s"attempting to deserialize persisted key to value",
LfEngineToApi
.lfVersionedValueToApiValue(
verbose = true,
verbose = verbose,
value = deserialize(key),
),
)
@ -223,7 +224,7 @@ private[events] trait EventsTable {
failureContext = s"attempting to deserialize persisted create argument to record",
LfEngineToApi
.lfVersionedValueToApiRecord(
verbose = true,
verbose = verbose,
recordValue = deserialize(createArgument),
),
)
@ -246,6 +247,7 @@ private[events] trait EventsTable {
exerciseActors: Array[String],
exerciseChildEventIds: Array[String],
eventWitnesses: Array[String],
verbose: Boolean,
): ExercisedEvent =
ExercisedEvent(
eventId = eventId,
@ -257,7 +259,7 @@ private[events] trait EventsTable {
failureContext = s"attempting to deserialize persisted exercise argument to value",
LfEngineToApi
.lfVersionedValueToApiValue(
verbose = true,
verbose = verbose,
value = deserialize(exerciseArgument),
),
)
@ -272,7 +274,7 @@ private[events] trait EventsTable {
failureContext = s"attempting to deserialize persisted exercise result to value",
LfEngineToApi
.lfVersionedValueToApiValue(
verbose = true,
verbose = verbose,
value = deserialize(key),
),
)

View File

@ -10,7 +10,7 @@ import com.digitalasset.platform.store.Conversions._
private[events] trait EventsTableFlatEvents { this: EventsTable =>
private val createdFlatEventParser: RowParser[Entry[Event]] =
private def createdFlatEventParser(verbose: Boolean): RowParser[Entry[Event]] =
createdEventRow map {
case eventOffset ~ transactionId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templatePackageId ~ templateName ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue =>
Entry(
@ -32,6 +32,7 @@ private[events] trait EventsTableFlatEvents { this: EventsTable =>
createAgreementText = createAgreementText,
createKeyValue = createKeyValue,
eventWitnesses = eventWitnesses,
verbose = verbose,
)
)
)
@ -61,7 +62,14 @@ private[events] trait EventsTableFlatEvents { this: EventsTable =>
)
}
val flatEventParser: RowParser[Entry[Event]] = createdFlatEventParser | archivedFlatEventParser
private val verboseFlatEventParser: RowParser[Entry[Event]] =
createdFlatEventParser(verbose = true) | archivedFlatEventParser
private val succinctFlatEventParser: RowParser[Entry[Event]] =
createdFlatEventParser(verbose = false) | archivedFlatEventParser
def flatEventParser(verbose: Boolean): RowParser[Entry[Event]] =
if (verbose) verboseFlatEventParser else succinctFlatEventParser
private val selectColumns =
Seq(

View File

@ -9,7 +9,7 @@ import com.digitalasset.ledger.api.v1.transaction.TreeEvent
private[events] trait EventsTableTreeEvents { this: EventsTable =>
private val createdTreeEventParser: RowParser[Entry[TreeEvent]] =
private def createdTreeEventParser(verbose: Boolean): RowParser[Entry[TreeEvent]] =
createdEventRow map {
case eventOffset ~ transactionId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templatePackageId ~ templateName ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue =>
Entry(
@ -31,13 +31,14 @@ private[events] trait EventsTableTreeEvents { this: EventsTable =>
createAgreementText = createAgreementText,
createKeyValue = createKeyValue,
eventWitnesses = eventWitnesses,
verbose = verbose,
)
)
)
)
}
private val exercisedTreeEventParser: RowParser[Entry[TreeEvent]] =
private def exercisedTreeEventParser(verbose: Boolean): RowParser[Entry[TreeEvent]] =
exercisedEventRow map {
case eventOffset ~ transactionId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templatePackageId ~ templateName ~ commandId ~ workflowId ~ eventWitnesses ~ exerciseConsuming ~ exerciseChoice ~ exerciseArgument ~ exerciseResult ~ exerciseActors ~ exerciseChildEventIds =>
Entry(
@ -60,14 +61,21 @@ private[events] trait EventsTableTreeEvents { this: EventsTable =>
exerciseActors = exerciseActors,
exerciseChildEventIds = exerciseChildEventIds,
eventWitnesses = eventWitnesses,
verbose = verbose,
)
)
)
)
}
val treeEventParser
: RowParser[Entry[TreeEvent]] = createdTreeEventParser | exercisedTreeEventParser
private val verboseTreeEventParser: RowParser[Entry[TreeEvent]] =
createdTreeEventParser(verbose = true) | exercisedTreeEventParser(verbose = true)
private val succinctTreeEventParser: RowParser[Entry[TreeEvent]] =
createdTreeEventParser(verbose = false) | exercisedTreeEventParser(verbose = false)
def treeEventParser(verbose: Boolean): RowParser[Entry[TreeEvent]] =
if (verbose) verboseTreeEventParser else succinctTreeEventParser
def prepareLookupTransactionTreeById(
transactionId: TransactionId,

View File

@ -30,7 +30,7 @@ private[dao] object TransactionsReader {
description = "lookup_flat_transaction_by_id",
extraLog = Some(s"tx: $transactionId, parties = ${requestingParties.mkString(", ")}"),
) { implicit connection =>
query.as(EventsTable.flatEventParser.*)
query.as(EventsTable.flatEventParser(verbose = true).*)
}
.map(EventsTable.Entry.toGetFlatTransactionResponse)(executionContext)
}
@ -45,10 +45,11 @@ private[dao] object TransactionsReader {
description = "lookup_transaction_tree_by_id",
extraLog = Some(s"tx: $transactionId, parties = ${requestingParties.mkString(", ")}"),
) { implicit connection =>
query.as(EventsTable.treeEventParser.*)
query.as(EventsTable.treeEventParser(verbose = true).*)
}
.map(EventsTable.Entry.toTransactionTree)(executionContext)
}
}
}