public bool TryReadValue(UInt256 blockHash, out ImmutableArray <Transaction> blockTransactions) { using (var conn = this.OpenConnection()) using (var cmd = conn.CreateCommand()) { cmd.CommandText = @" SELECT MinTxIndex, MaxTxIndex, TxChunkBytes FROM BlockTransactionsChunked WHERE BlockHash = @blockHash ORDER BY MinTxIndex ASC"; cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = blockHash.ToDbByteArray(); using (var reader = cmd.ExecuteReader()) { var blockTransactionsBuilder = ImmutableArray.CreateBuilder <Transaction>(); while (reader.Read()) { var minTxIndex = reader.GetInt32(0); var maxTxIndex = reader.GetInt32(1); var txChunkBytes = reader.GetBytes(2); var txChunkStream = txChunkBytes.ToMemoryStream(); for (var i = minTxIndex; i <= maxTxIndex; i++) { blockTransactionsBuilder.Add(StorageEncoder.DecodeTransaction(txChunkStream)); } } blockTransactions = blockTransactionsBuilder.ToImmutable(); return(blockTransactions.Length > 0); } } }
public bool TryReadTransaction(TxKey txKey, out Transaction transaction) { using (var conn = this.OpenConnection()) using (var cmd = conn.CreateCommand()) { cmd.CommandText = @" SELECT TxHash, TxBytes FROM BlockTransactions WHERE BlockHash = @blockHash AND TxIndex = @txIndex"; cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = txKey.BlockHash.ToDbByteArray(); cmd.Parameters.SetValue("@txIndex", SqlDbType.Int).Value = txKey.TxIndex.ToIntChecked(); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) { var txHash = reader.GetUInt256(0); var txBytes = reader.GetBytes(1); transaction = StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash); return(true); } else { transaction = default(Transaction); return(false); } } } }
public bool TryReadValue(UInt256 blockHash, out ImmutableArray <Transaction> blockTransactions) { using (var conn = this.OpenConnection()) using (var cmd = conn.CreateCommand()) { cmd.CommandText = @" SELECT TxHash, TxBytes FROM BlockTransactions WHERE BlockHash = @blockHash ORDER BY TxIndex ASC"; cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = blockHash.ToDbByteArray(); using (var reader = cmd.ExecuteReader()) { var blockTransactionsBuilder = ImmutableArray.CreateBuilder <Transaction>(); while (reader.Read()) { var txHash = reader.GetUInt256(0); var txBytes = reader.GetBytes(1); blockTransactionsBuilder.Add(StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash)); } blockTransactions = blockTransactionsBuilder.ToImmutable(); return(blockTransactions.Length > 0); } } }
public bool TryReadValue(UInt256 txHash, out Transaction transaction) { using (var conn = this.OpenConnection()) using (var cmd = conn.CreateCommand()) { cmd.CommandText = @" SELECT TxBytes FROM BlockTransactions WHERE TxHash = @txHash"; cmd.Parameters.SetValue("@txHash", FbDbType.Char, FbCharset.Octets, 32).Value = txHash.ToDbByteArray(); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) { var txBytes = reader.GetBytes(0); transaction = StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash); return(true); } else { transaction = default(Transaction); return(false); } } } }