mirror of
https://github.com/Qortal/qortal.git
synced 2025-03-30 09:05:52 +00:00
* Added AssetData transfer object * Added IssueAssetTransactionData transfer object * Reworked qora.assets.Asset into business layer object * Reworked qora.transaction.IssueAssetTransaction into business layer object * Added corresponding AssetRepository and support in TransactionRepository et al * Fixed BlockChain in line with asset changes * Some renaming inside GenesisTransaction to reflect use of transfer object, not business object * Business transaction objects now take Repository param * Moved HSQLDB transaction repositories into a sub-package * Changed HSQLDBSaver.execute(Connection connection) to .execute(Repository repository) to fix visibility issues and allow repository more control in the future if need be * Changed from "return null" statements in HSQLDB repositories to throw DataException when an error occurs. Better to throw than to silently return null? * Added static version of PublicKeyAccount.verify() for when a repository-backed PublicKeyAccount is not needed * Fixed getter/setter code template incorrectly producing "this.this.field = param"
78 lines
2.6 KiB
Java
78 lines
2.6 KiB
Java
package repository.hsqldb;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
|
|
import data.account.AccountBalanceData;
|
|
import data.account.AccountData;
|
|
import repository.AccountRepository;
|
|
import repository.DataException;
|
|
|
|
public class HSQLDBAccountRepository implements AccountRepository {
|
|
|
|
protected HSQLDBRepository repository;
|
|
|
|
public HSQLDBAccountRepository(HSQLDBRepository repository) {
|
|
this.repository = repository;
|
|
}
|
|
|
|
public AccountData getAccount(String address) throws DataException {
|
|
try {
|
|
ResultSet resultSet = this.repository.checkedExecute("SELECT reference FROM Accounts WHERE account = ?", address);
|
|
if (resultSet == null)
|
|
return null;
|
|
|
|
return new AccountData(address, this.repository.getResultSetBytes(resultSet.getBinaryStream(1)));
|
|
} catch (SQLException e) {
|
|
throw new DataException("Unable to fetch account info from repository", e);
|
|
}
|
|
}
|
|
|
|
public void save(AccountData accountData) throws DataException {
|
|
HSQLDBSaver saveHelper = new HSQLDBSaver("Accounts");
|
|
saveHelper.bind("account", accountData.getAddress()).bind("reference", accountData.getReference());
|
|
|
|
try {
|
|
saveHelper.execute(this.repository);
|
|
} catch (SQLException e) {
|
|
throw new DataException("Unable to save account info into repository", e);
|
|
}
|
|
}
|
|
|
|
public AccountBalanceData getBalance(String address, long assetId) throws DataException {
|
|
try {
|
|
ResultSet resultSet = this.repository.checkedExecute("SELECT balance FROM AccountBalances WHERE account = ? and asset_id = ?", address, assetId);
|
|
if (resultSet == null)
|
|
return null;
|
|
|
|
BigDecimal balance = resultSet.getBigDecimal(1).setScale(8);
|
|
|
|
return new AccountBalanceData(address, assetId, balance);
|
|
} catch (SQLException e) {
|
|
throw new DataException("Unable to fetch account balance from repository", e);
|
|
}
|
|
}
|
|
|
|
public void save(AccountBalanceData accountBalanceData) throws DataException {
|
|
HSQLDBSaver saveHelper = new HSQLDBSaver("AccountBalances");
|
|
saveHelper.bind("account", accountBalanceData.getAddress()).bind("asset_id", accountBalanceData.getAssetId()).bind("balance",
|
|
accountBalanceData.getBalance());
|
|
|
|
try {
|
|
saveHelper.execute(this.repository);
|
|
} catch (SQLException e) {
|
|
throw new DataException("Unable to save account balance into repository", e);
|
|
}
|
|
}
|
|
|
|
public void delete(String address, long assetId) throws DataException {
|
|
try {
|
|
this.repository.checkedExecute("DELETE FROM AccountBalances WHERE account = ? and asset_id = ?", address, assetId);
|
|
} catch (SQLException e) {
|
|
throw new DataException("Unable to delete account balance from repository", e);
|
|
}
|
|
}
|
|
|
|
}
|