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

View File

@ -10,7 +10,7 @@ import com.digitalasset.platform.store.Conversions._
private[events] trait EventsTableFlatEvents { this: EventsTable => private[events] trait EventsTableFlatEvents { this: EventsTable =>
private val createdFlatEventParser: RowParser[Entry[Event]] = private def createdFlatEventParser(verbose: Boolean): RowParser[Entry[Event]] =
createdEventRow map { createdEventRow map {
case eventOffset ~ transactionId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templatePackageId ~ templateName ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue => case eventOffset ~ transactionId ~ eventId ~ contractId ~ ledgerEffectiveTime ~ templatePackageId ~ templateName ~ commandId ~ workflowId ~ eventWitnesses ~ createArgument ~ createSignatories ~ createObservers ~ createAgreementText ~ createKeyValue =>
Entry( Entry(
@ -32,6 +32,7 @@ private[events] trait EventsTableFlatEvents { this: EventsTable =>
createAgreementText = createAgreementText, createAgreementText = createAgreementText,
createKeyValue = createKeyValue, createKeyValue = createKeyValue,
eventWitnesses = eventWitnesses, 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 = private val selectColumns =
Seq( Seq(

View File

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

View File

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