Skip to content

Commit 7bb216e

Browse files
authored
Bug limit receipt selection when select by root 774 (#776)
* versi 1 * small edit * update mock ExecuteSelect * make sure the query is similar as mock * make it simpler * merge schema Co-authored-by: Nawi Kartini <[email protected]>
1 parent b853785 commit 7bb216e

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

common/query/nodeReceiptQuery.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type (
1414
InsertReceipt(receipt *model.Receipt) (str string, args []interface{})
1515
InsertReceipts(receipts []*model.Receipt) (str string, args []interface{})
1616
GetReceipts(paginate model.Pagination) string
17-
GetReceiptByRoot(root []byte) (str string, args []interface{})
17+
GetReceiptByRoot(lowerHeight, upperHeight uint32, root []byte) (str string, args []interface{})
1818
GetReceiptsWithUniqueRecipient(limit, lowerBlockHeight, upperBlockHeight uint32) string
1919
SelectReceipt(lowerHeight, upperHeight, limit uint32) (str string)
2020
RemoveReceipts(blockHeight, limit uint32) (string, []interface{})
@@ -99,12 +99,14 @@ func (rq *NodeReceiptQuery) GetReceiptsWithUniqueRecipient(
9999

100100
// GetReceiptByRoot return sql query to fetch receipts by its merkle root, the datum_hash should not already exists in
101101
// published_receipt table
102-
func (rq *NodeReceiptQuery) GetReceiptByRoot(root []byte) (str string, args []interface{}) {
102+
func (rq *NodeReceiptQuery) GetReceiptByRoot(
103+
lowerHeight, upperHeight uint32, root []byte) (str string, args []interface{}) {
103104
query := fmt.Sprintf("SELECT %s FROM %s AS rc WHERE rc.rmr = ? AND "+
104105
"NOT EXISTS (SELECT datum_hash FROM published_receipt AS pr WHERE "+
105-
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key) "+
106+
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key AND "+
107+
"block_height BETWEEN %d AND %d) "+
106108
"GROUP BY recipient_public_key",
107-
strings.Join(rq.Fields, ", "), rq.getTableName())
109+
strings.Join(rq.Fields, ", "), rq.getTableName(), lowerHeight, upperHeight)
108110
return query, []interface{}{
109111
root,
110112
}

common/schema

core/service/receiptService.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func (rs *ReceiptService) SelectReceipts(
129129
var nodeReceipts []*model.Receipt
130130

131131
nodeReceipts, err = func() ([]*model.Receipt, error) {
132-
nodeReceiptsQ, rootArgs := rs.NodeReceiptQuery.GetReceiptByRoot([]byte(linkedRoot))
132+
nodeReceiptsQ, rootArgs := rs.NodeReceiptQuery.GetReceiptByRoot(lowerBlockHeight, lastBlockHeight, []byte(linkedRoot))
133133
rows, err := rs.QueryExecutor.ExecuteSelect(nodeReceiptsQ, false, rootArgs...)
134134
if err != nil {
135135
return nil, err

core/service/receiptService_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,8 @@ func (*mockQueryExecutorFailExecuteSelectReceipt) ExecuteSelect(
222222
case "SELECT sender_public_key, recipient_public_key, datum_type, datum_hash, reference_block_height, " +
223223
"reference_block_hash, rmr_linked, recipient_signature, rmr, rmr_index FROM node_receipt AS rc " +
224224
"WHERE rc.rmr = ? AND NOT EXISTS (SELECT datum_hash FROM published_receipt AS pr WHERE " +
225-
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key) " +
225+
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key AND " +
226+
"block_height BETWEEN 280 AND 1000) " +
226227
"GROUP BY recipient_public_key":
227228
return nil, errors.New("mockError")
228229
}
@@ -251,7 +252,8 @@ func (*mockQueryExecutorSuccessOneLinkedReceipts) ExecuteSelect(
251252
case "SELECT sender_public_key, recipient_public_key, datum_type, datum_hash, reference_block_height, " +
252253
"reference_block_hash, rmr_linked, recipient_signature, rmr, rmr_index FROM node_receipt AS rc " +
253254
"WHERE rc.rmr = ? AND NOT EXISTS (SELECT datum_hash FROM published_receipt AS pr WHERE " +
254-
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key) " +
255+
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key AND " +
256+
"block_height BETWEEN 280 AND 1000) " +
255257
"GROUP BY recipient_public_key":
256258
mock.ExpectQuery(regexp.QuoteMeta(qe)).WillReturnRows(sqlmock.NewRows([]string{
257259
"sender_public_key",
@@ -464,7 +466,8 @@ func (*mockQueryExecutorSuccessOneLinkedReceiptsAndMore) ExecuteSelect(
464466
case "SELECT sender_public_key, recipient_public_key, datum_type, datum_hash, reference_block_height, " +
465467
"reference_block_hash, rmr_linked, recipient_signature, rmr, rmr_index FROM node_receipt AS rc " +
466468
"WHERE rc.rmr = ? AND NOT EXISTS (SELECT datum_hash FROM published_receipt AS pr WHERE " +
467-
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key) " +
469+
"pr.datum_hash = rc.datum_hash AND pr.recipient_public_key = rc.recipient_public_key AND " +
470+
"block_height BETWEEN 280 AND 1000) " +
468471
"GROUP BY recipient_public_key":
469472
mock.ExpectQuery(regexp.QuoteMeta(qe)).WillReturnRows(sqlmock.NewRows([]string{
470473
"sender_public_key",

0 commit comments

Comments
 (0)