diff --git a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBCreateAssetOrderTransactionRepository.java b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBCreateAssetOrderTransactionRepository.java index 75edba36..2893b678 100644 --- a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBCreateAssetOrderTransactionRepository.java +++ b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBCreateAssetOrderTransactionRepository.java @@ -18,10 +18,11 @@ public class HSQLDBCreateAssetOrderTransactionRepository extends HSQLDBTransacti } TransactionData fromBase(BaseTransactionData baseTransactionData) throws DataException { + // LEFT OUTER JOIN because asset might not exist (e.g. if ISSUE_ASSET & CREATE_ASSET_ORDER are both unconfirmed) String sql = "SELECT have_asset_id, amount, want_asset_id, price, HaveAsset.asset_name, WantAsset.asset_name " + "FROM CreateAssetOrderTransactions " - + "JOIN Assets AS HaveAsset ON HaveAsset.asset_id = have_asset_id " - + "JOIN Assets AS WantAsset ON WantAsset.asset_id = want_asset_id " + + "LEFT OUTER JOIN Assets AS HaveAsset ON HaveAsset.asset_id = have_asset_id " + + "LEFT OUTER JOIN Assets AS WantAsset ON WantAsset.asset_id = want_asset_id " + "WHERE signature = ?"; try (ResultSet resultSet = this.repository.checkedExecute(sql, baseTransactionData.getSignature())) { diff --git a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java index 36c8061d..ca423bf0 100644 --- a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java +++ b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java @@ -28,6 +28,7 @@ import org.qora.repository.hsqldb.HSQLDBRepository; import org.qora.repository.hsqldb.HSQLDBSaver; import org.qora.transaction.Transaction.ApprovalStatus; import org.qora.transaction.Transaction.TransactionType; +import org.qora.utils.Base58; import static org.qora.transaction.Transaction.TransactionType.*; @@ -938,7 +939,7 @@ public class HSQLDBTransactionRepository implements TransactionRepository { if (transactionData == null) // Something inconsistent with the repository - throw new DataException("Unable to fetch unconfirmed transaction from repository?"); + throw new DataException(String.format("Unable to fetch unconfirmed transaction %s from repository?", Base58.encode(signature))); transactions.add(transactionData); } while (resultSet.next()); diff --git a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransferAssetTransactionRepository.java b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransferAssetTransactionRepository.java index f2a67a95..b6de7161 100644 --- a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransferAssetTransactionRepository.java +++ b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransferAssetTransactionRepository.java @@ -18,7 +18,8 @@ public class HSQLDBTransferAssetTransactionRepository extends HSQLDBTransactionR } TransactionData fromBase(BaseTransactionData baseTransactionData) throws DataException { - String sql = "SELECT recipient, asset_id, amount, asset_name FROM TransferAssetTransactions JOIN Assets USING (asset_id) WHERE signature = ?"; + // LEFT OUTER JOIN because asset might not exist (e.g. if ISSUE_ASSET & TRANSFER_ASSET are both unconfirmed) + String sql = "SELECT recipient, asset_id, amount, asset_name FROM TransferAssetTransactions LEFT OUTER JOIN Assets USING (asset_id) WHERE signature = ?"; try (ResultSet resultSet = this.repository.checkedExecute(sql, baseTransactionData.getSignature())) { if (resultSet == null)