Skip to content

Commit

Permalink
Add missing operation result fields for storage size and paid diff
Browse files Browse the repository at this point in the history
 * add the fields in sql and the resulting slick definitions
 * convert from the tezos type
 * add tests
  • Loading branch information
ivanopagano committed Apr 15, 2019
1 parent 601bd31 commit f332cf4
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 15 deletions.
2 changes: 2 additions & 0 deletions doc/conseil.sql
Expand Up @@ -163,6 +163,8 @@ CREATE TABLE public.operations (
storage character varying,
status character varying,
consumed_gas numeric,
storage_size numeric,
paid_storage_size_diff numeric,
block_hash character varying NOT NULL,
block_level integer NOT NULL,
"timestamp" timestamp without time zone NOT NULL
Expand Down
Expand Up @@ -201,6 +201,8 @@ object DatabaseConversions {
parameters = parameters.map(_.expression),
status = Some(metadata.operation_result.status),
consumedGas = metadata.operation_result.consumed_gas.flatMap(extractBigDecimal),
storageSize = metadata.operation_result.storage_size.flatMap(extractBigDecimal),
paidStorageSizeDiff = metadata.operation_result.paid_storage_size_diff.flatMap(extractBigDecimal),
blockHash = block.data.hash.value,
blockLevel = block.data.header.level,
timestamp = toSql(block.data.header.timestamp)
Expand All @@ -227,6 +229,8 @@ object DatabaseConversions {
storage = script.map(_.storage.expression),
status = Some(metadata.operation_result.status),
consumedGas = metadata.operation_result.consumed_gas.flatMap(extractBigDecimal),
storageSize = metadata.operation_result.storage_size.flatMap(extractBigDecimal),
paidStorageSizeDiff = metadata.operation_result.paid_storage_size_diff.flatMap(extractBigDecimal),
blockHash = block.data.hash.value,
blockLevel = block.data.header.level,
timestamp = toSql(block.data.header.timestamp)
Expand Down
14 changes: 10 additions & 4 deletions src/main/scala/tech/cryptonomic/conseil/tezos/Tables.scala
Expand Up @@ -412,20 +412,22 @@ trait Tables {
* @param storage Database column storage SqlType(varchar), Default(None)
* @param status Database column status SqlType(varchar), Default(None)
* @param consumedGas Database column consumed_gas SqlType(numeric), Default(None)
* @param storageSize Database column storage_size SqlType(numeric), Default(None)
* @param paidStorageSizeDiff Database column paid_storage_size_diff SqlType(numeric), Default(None)
* @param blockHash Database column block_hash SqlType(varchar)
* @param blockLevel Database column block_level SqlType(int4)
* @param timestamp Database column timestamp SqlType(timestamp) */
case class OperationsRow(operationId: Int, operationGroupHash: String, kind: String, level: Option[Int] = None, delegate: Option[String] = None, slots: Option[String] = None, nonce: Option[String] = None, pkh: Option[String] = None, secret: Option[String] = None, source: Option[String] = None, fee: Option[scala.math.BigDecimal] = None, counter: Option[scala.math.BigDecimal] = None, gasLimit: Option[scala.math.BigDecimal] = None, storageLimit: Option[scala.math.BigDecimal] = None, publicKey: Option[String] = None, amount: Option[scala.math.BigDecimal] = None, destination: Option[String] = None, parameters: Option[String] = None, managerPubkey: Option[String] = None, balance: Option[scala.math.BigDecimal] = None, spendable: Option[Boolean] = None, delegatable: Option[Boolean] = None, script: Option[String] = None, storage: Option[String] = None, status: Option[String] = None, consumedGas: Option[scala.math.BigDecimal] = None, blockHash: String, blockLevel: Int, timestamp: java.sql.Timestamp)
case class OperationsRow(operationId: Int, operationGroupHash: String, kind: String, level: Option[Int] = None, delegate: Option[String] = None, slots: Option[String] = None, nonce: Option[String] = None, pkh: Option[String] = None, secret: Option[String] = None, source: Option[String] = None, fee: Option[scala.math.BigDecimal] = None, counter: Option[scala.math.BigDecimal] = None, gasLimit: Option[scala.math.BigDecimal] = None, storageLimit: Option[scala.math.BigDecimal] = None, publicKey: Option[String] = None, amount: Option[scala.math.BigDecimal] = None, destination: Option[String] = None, parameters: Option[String] = None, managerPubkey: Option[String] = None, balance: Option[scala.math.BigDecimal] = None, spendable: Option[Boolean] = None, delegatable: Option[Boolean] = None, script: Option[String] = None, storage: Option[String] = None, status: Option[String] = None, consumedGas: Option[scala.math.BigDecimal] = None, storageSize: Option[scala.math.BigDecimal] = None, paidStorageSizeDiff: Option[scala.math.BigDecimal] = None, blockHash: String, blockLevel: Int, timestamp: java.sql.Timestamp)
/** GetResult implicit for fetching OperationsRow objects using plain SQL queries */
implicit def GetResultOperationsRow(implicit e0: GR[Int], e1: GR[String], e2: GR[Option[Int]], e3: GR[Option[String]], e4: GR[Option[scala.math.BigDecimal]], e5: GR[Option[Boolean]], e6: GR[java.sql.Timestamp]): GR[OperationsRow] = GR{
prs => import prs._
OperationsRow(<<[Int], <<[String], <<[String], <<?[Int], <<?[String], <<?[String], <<?[String], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[String], <<?[scala.math.BigDecimal], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<?[Boolean], <<?[Boolean], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<[String], <<[Int], <<[java.sql.Timestamp])
OperationsRow(<<[Int], <<[String], <<[String], <<?[Int], <<?[String], <<?[String], <<?[String], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[String], <<?[scala.math.BigDecimal], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<?[Boolean], <<?[Boolean], <<?[String], <<?[String], <<?[String], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<?[scala.math.BigDecimal], <<[String], <<[Int], <<[java.sql.Timestamp])
}
/** Table description of table operations. Objects of this class serve as prototypes for rows in queries. */
class Operations(_tableTag: Tag) extends profile.api.Table[OperationsRow](_tableTag, "operations") {
def * = (operationId :: operationGroupHash :: kind :: level :: delegate :: slots :: nonce :: pkh :: secret :: source :: fee :: counter :: gasLimit :: storageLimit :: publicKey :: amount :: destination :: parameters :: managerPubkey :: balance :: spendable :: delegatable :: script :: storage :: status :: consumedGas :: blockHash :: blockLevel :: timestamp :: HNil).mapTo[OperationsRow]
def * = (operationId :: operationGroupHash :: kind :: level :: delegate :: slots :: nonce :: pkh :: secret :: source :: fee :: counter :: gasLimit :: storageLimit :: publicKey :: amount :: destination :: parameters :: managerPubkey :: balance :: spendable :: delegatable :: script :: storage :: status :: consumedGas :: storageSize :: paidStorageSizeDiff :: blockHash :: blockLevel :: timestamp :: HNil).mapTo[OperationsRow]
/** Maps whole row to an option. Useful for outer joins. */
def ? = (Rep.Some(operationId) :: Rep.Some(operationGroupHash) :: Rep.Some(kind) :: level :: delegate :: slots :: nonce :: pkh :: secret :: source :: fee :: counter :: gasLimit :: storageLimit :: publicKey :: amount :: destination :: parameters :: managerPubkey :: balance :: spendable :: delegatable :: script :: storage :: status :: consumedGas :: Rep.Some(blockHash) :: Rep.Some(blockLevel) :: Rep.Some(timestamp) :: HNil).shaped.<>(r => OperationsRow(r(0).asInstanceOf[Option[Int]].get, r(1).asInstanceOf[Option[String]].get, r(2).asInstanceOf[Option[String]].get, r(3).asInstanceOf[Option[Int]], r(4).asInstanceOf[Option[String]], r(5).asInstanceOf[Option[String]], r(6).asInstanceOf[Option[String]], r(7).asInstanceOf[Option[String]], r(8).asInstanceOf[Option[String]], r(9).asInstanceOf[Option[String]], r(10).asInstanceOf[Option[scala.math.BigDecimal]], r(11).asInstanceOf[Option[scala.math.BigDecimal]], r(12).asInstanceOf[Option[scala.math.BigDecimal]], r(13).asInstanceOf[Option[scala.math.BigDecimal]], r(14).asInstanceOf[Option[String]], r(15).asInstanceOf[Option[scala.math.BigDecimal]], r(16).asInstanceOf[Option[String]], r(17).asInstanceOf[Option[String]], r(18).asInstanceOf[Option[String]], r(19).asInstanceOf[Option[scala.math.BigDecimal]], r(20).asInstanceOf[Option[Boolean]], r(21).asInstanceOf[Option[Boolean]], r(22).asInstanceOf[Option[String]], r(23).asInstanceOf[Option[String]], r(24).asInstanceOf[Option[String]], r(25).asInstanceOf[Option[scala.math.BigDecimal]], r(26).asInstanceOf[Option[String]].get, r(27).asInstanceOf[Option[Int]].get, r(28).asInstanceOf[Option[java.sql.Timestamp]].get), (_:Any) => throw new Exception("Inserting into ? projection not supported."))
def ? = (Rep.Some(operationId) :: Rep.Some(operationGroupHash) :: Rep.Some(kind) :: level :: delegate :: slots :: nonce :: pkh :: secret :: source :: fee :: counter :: gasLimit :: storageLimit :: publicKey :: amount :: destination :: parameters :: managerPubkey :: balance :: spendable :: delegatable :: script :: storage :: status :: consumedGas :: storageSize :: paidStorageSizeDiff :: Rep.Some(blockHash) :: Rep.Some(blockLevel) :: Rep.Some(timestamp) :: HNil).shaped.<>(r => OperationsRow(r(0).asInstanceOf[Option[Int]].get, r(1).asInstanceOf[Option[String]].get, r(2).asInstanceOf[Option[String]].get, r(3).asInstanceOf[Option[Int]], r(4).asInstanceOf[Option[String]], r(5).asInstanceOf[Option[String]], r(6).asInstanceOf[Option[String]], r(7).asInstanceOf[Option[String]], r(8).asInstanceOf[Option[String]], r(9).asInstanceOf[Option[String]], r(10).asInstanceOf[Option[scala.math.BigDecimal]], r(11).asInstanceOf[Option[scala.math.BigDecimal]], r(12).asInstanceOf[Option[scala.math.BigDecimal]], r(13).asInstanceOf[Option[scala.math.BigDecimal]], r(14).asInstanceOf[Option[String]], r(15).asInstanceOf[Option[scala.math.BigDecimal]], r(16).asInstanceOf[Option[String]], r(17).asInstanceOf[Option[String]], r(18).asInstanceOf[Option[String]], r(19).asInstanceOf[Option[scala.math.BigDecimal]], r(20).asInstanceOf[Option[Boolean]], r(21).asInstanceOf[Option[Boolean]], r(22).asInstanceOf[Option[String]], r(23).asInstanceOf[Option[String]], r(24).asInstanceOf[Option[String]], r(25).asInstanceOf[Option[scala.math.BigDecimal]], r(26).asInstanceOf[Option[scala.math.BigDecimal]], r(27).asInstanceOf[Option[scala.math.BigDecimal]], r(28).asInstanceOf[Option[String]].get, r(29).asInstanceOf[Option[Int]].get, r(30).asInstanceOf[Option[java.sql.Timestamp]].get), (_:Any) => throw new Exception("Inserting into ? projection not supported."))

/** Database column operation_id SqlType(serial), AutoInc, PrimaryKey */
val operationId: Rep[Int] = column[Int]("operation_id", O.AutoInc, O.PrimaryKey)
Expand Down Expand Up @@ -479,6 +481,10 @@ trait Tables {
val status: Rep[Option[String]] = column[Option[String]]("status", O.Default(None))
/** Database column consumed_gas SqlType(numeric), Default(None) */
val consumedGas: Rep[Option[scala.math.BigDecimal]] = column[Option[scala.math.BigDecimal]]("consumed_gas", O.Default(None))
/** Database column storage_size SqlType(numeric), Default(None) */
val storageSize: Rep[Option[scala.math.BigDecimal]] = column[Option[scala.math.BigDecimal]]("storage_size", O.Default(None))
/** Database column paid_storage_size_diff SqlType(numeric), Default(None) */
val paidStorageSizeDiff: Rep[Option[scala.math.BigDecimal]] = column[Option[scala.math.BigDecimal]]("paid_storage_size_diff", O.Default(None))
/** Database column block_hash SqlType(varchar) */
val blockHash: Rep[String] = column[String]("block_hash")
/** Database column block_level SqlType(int4) */
Expand Down
Expand Up @@ -329,7 +329,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.consumedGas ::
converted.status :: Nil) {
converted.status ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -368,7 +371,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.consumedGas ::
converted.status :: Nil) {
converted.status ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -407,7 +413,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.consumedGas ::
converted.status :: Nil) {
converted.status ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -461,7 +470,10 @@ class DatabaseConversionsTest
converted.balance ::
converted.spendable ::
converted.delegatable ::
converted.script :: Nil) {
converted.script ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -505,6 +517,14 @@ class DatabaseConversionsTest
case Some(Decimal(bignumber)) => converted.consumedGas.value shouldBe bignumber
case _ => converted.consumedGas shouldBe 'empty
}
sampleTransaction.metadata.operation_result.storage_size match {
case Some(Decimal(bignumber)) => converted.storageSize.value shouldBe bignumber
case _ => converted.storageSize shouldBe 'empty
}
sampleTransaction.metadata.operation_result.paid_storage_size_diff match {
case Some(Decimal(bignumber)) => converted.paidStorageSizeDiff.value shouldBe bignumber
case _ => converted.paidStorageSizeDiff shouldBe 'empty
}

forAll(
converted.level ::
Expand All @@ -518,7 +538,8 @@ class DatabaseConversionsTest
converted.balance ::
converted.spendable ::
converted.delegatable ::
converted.script :: Nil) {
converted.script ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -566,6 +587,14 @@ class DatabaseConversionsTest
case Some(Decimal(bignumber)) => converted.consumedGas.value shouldBe bignumber
case _ => converted.consumedGas shouldBe 'empty
}
sampleOrigination.metadata.operation_result.storage_size match {
case Some(Decimal(bignumber)) => converted.storageSize.value shouldBe bignumber
case _ => converted.storageSize shouldBe 'empty
}
sampleOrigination.metadata.operation_result.paid_storage_size_diff match {
case Some(Decimal(bignumber)) => converted.paidStorageSizeDiff.value shouldBe bignumber
case _ => converted.paidStorageSizeDiff shouldBe 'empty
}

forAll(
converted.level ::
Expand All @@ -576,7 +605,8 @@ class DatabaseConversionsTest
converted.publicKey ::
converted.amount ::
converted.destination ::
converted.parameters :: Nil) {
converted.parameters ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -630,7 +660,10 @@ class DatabaseConversionsTest
converted.balance ::
converted.spendable ::
converted.delegatable ::
converted.script :: Nil) {
converted.script ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -669,7 +702,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.status ::
converted.consumedGas :: Nil) {
converted.consumedGas ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -708,7 +744,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.status ::
converted.consumedGas :: Nil) {
converted.consumedGas ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -747,7 +786,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.status ::
converted.consumedGas :: Nil) {
converted.consumedGas ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down Expand Up @@ -786,7 +828,10 @@ class DatabaseConversionsTest
converted.delegatable ::
converted.script ::
converted.status ::
converted.consumedGas :: Nil) {
converted.consumedGas ::
converted.storageSize ::
converted.paidStorageSizeDiff ::
Nil) {
_ shouldBe 'empty
}

Expand Down
Expand Up @@ -176,6 +176,8 @@ class TezosPlatformDiscoveryOperationsTest
Attribute("storage", "Storage", DataType.String, Some(0), KeyType.NonKey, "operations"),
Attribute("status", "Status", DataType.String, Some(0), KeyType.NonKey, "operations"),
Attribute("consumed_gas", "Consumed gas", DataType.Decimal, None, KeyType.NonKey, "operations"),
Attribute("storage_size", "Storage size", DataType.Decimal, None, KeyType.NonKey, "operations"),
Attribute("paid_storage_size_diff", "Paid storage size diff", DataType.Decimal, None, KeyType.NonKey, "operations"),
Attribute("block_hash", "Block hash", DataType.String, Some(0), KeyType.NonKey, "operations"),
Attribute("block_level", "Block level", DataType.Int, None, KeyType.NonKey, "operations"),
Attribute("timestamp", "Timestamp", DataType.DateTime, None, KeyType.NonKey, "operations")
Expand Down

0 comments on commit f332cf4

Please sign in to comment.