mirror of
https://github.com/Qortal/qortal.git
synced 2025-03-29 00:36:05 +00:00
Added RepositoryManager.closeRepositoryFactory() to allow swapping out of repositories during unit testing Added some more unit tests - all pass!
62 lines
2.5 KiB
Java
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);
|
|
}
|
|
}
|
|
|
|
}
|