qortal/src/repository/hsqldb/transaction/HSQLDBMessageTransactionRepository.java
catbref 2c23acfa74 Fix HSQLDB*Transaction save() methods
Added RepositoryManager.closeRepositoryFactory() to allow swapping out of repositories during unit testing

Added some more unit tests - all pass!
2018-06-14 09:55:58 +01:00

62 lines
2.5 KiB
Java

package repository.hsqldb.transaction;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import data.transaction.MessageTransactionData;
import data.transaction.TransactionData;
import repository.DataException;
import repository.hsqldb.HSQLDBRepository;
import repository.hsqldb.HSQLDBSaver;
public class HSQLDBMessageTransactionRepository extends HSQLDBTransactionRepository {
public HSQLDBMessageTransactionRepository(HSQLDBRepository repository) {
this.repository = repository;
}
TransactionData fromBase(byte[] signature, byte[] reference, byte[] creatorPublicKey, long timestamp, BigDecimal fee) throws DataException {
try {
ResultSet rs = this.repository.checkedExecute(
"SELECT version, sender, recipient, is_text, is_encrypted, amount, asset_id, data FROM MessageTransactions WHERE signature = ?", signature);
if (rs == null)
return null;
int version = rs.getInt(1);
byte[] senderPublicKey = this.repository.getResultSetBytes(rs.getBinaryStream(2));
String recipient = rs.getString(3);
boolean isText = rs.getBoolean(4);
boolean isEncrypted = rs.getBoolean(5);
BigDecimal amount = rs.getBigDecimal(6);
Long assetId = rs.getLong(7);
byte[] data = this.repository.getResultSetBytes(rs.getBinaryStream(8));
return new MessageTransactionData(version, senderPublicKey, recipient, assetId, amount, fee, data, isText, isEncrypted, timestamp, reference,
signature);
} catch (SQLException e) {
throw new DataException("Unable to fetch message transaction from repository", e);
}
}
@Override
public void save(TransactionData transactionData) throws DataException {
MessageTransactionData messageTransactionData = (MessageTransactionData) transactionData;
HSQLDBSaver saveHelper = new HSQLDBSaver("MessageTransactions");
saveHelper.bind("signature", messageTransactionData.getSignature()).bind("version", messageTransactionData.getVersion())
.bind("sender", messageTransactionData.getSenderPublicKey()).bind("recipient", messageTransactionData.getRecipient())
.bind("is_text", messageTransactionData.getIsText()).bind("is_encrypted", messageTransactionData.getIsEncrypted())
.bind("amount", messageTransactionData.getAmount()).bind("asset_id", messageTransactionData.getAssetId())
.bind("data", messageTransactionData.getData());
try {
saveHelper.execute(this.repository);
} catch (SQLException e) {
throw new DataException("Unable to save message transaction into repository", e);
}
}
}