fix: optimize getMicroblocks query (#1179)

* refactor: optimized query for getMicroblocks

* test: updated tx with microblock

* refactor: changed the query

* refactor: removed unnecessary query check

* fix: resolved lint error
This commit is contained in:
M Hassan Tariq
2022-06-21 20:24:31 +05:00
committed by GitHub
parent 943e2d1c55
commit 769110926e
2 changed files with 34 additions and 16 deletions

View File

@@ -563,22 +563,13 @@ export class PgStore {
const microblockQuery = await sql<
(MicroblockQueryResult & { tx_id?: string | null; tx_index?: number | null })[]
>`
SELECT microblocks.*, tx_id FROM (
SELECT ${sql(MICROBLOCK_COLUMNS)}
FROM microblocks
WHERE canonical = true AND microblock_canonical = true
ORDER BY block_height DESC, microblock_sequence DESC
LIMIT ${args.limit}
OFFSET ${args.offset}
) microblocks
LEFT JOIN (
SELECT tx_id, tx_index, microblock_hash
FROM txs
WHERE canonical = true AND microblock_canonical = true
ORDER BY tx_index DESC
) txs
ON microblocks.microblock_hash = txs.microblock_hash
ORDER BY microblocks.block_height DESC, microblocks.microblock_sequence DESC, txs.tx_index DESC
SELECT microblocks.*, txs.tx_id
FROM microblocks LEFT JOIN txs USING(microblock_hash)
WHERE microblocks.canonical = true AND microblocks.microblock_canonical = true AND
txs.canonical = true AND txs.microblock_canonical = true
ORDER BY microblocks.block_height DESC, microblocks.microblock_sequence DESC, txs.tx_index DESC
LIMIT ${args.limit}
OFFSET ${args.offset};
`;
const microblocks: { microblock: DbMicroblock; txs: string[] }[] = [];
microblockQuery.forEach(row => {

View File

@@ -10847,6 +10847,33 @@ describe('api tests', () => {
expect(result.body.txs).toHaveLength(1);
expect(result.body.txs[0]).toEqual(tx_id);
});
test('/microblock', async () => {
const microblock_hash = '0x0fff';
const block = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }).build();
await db.update(block);
const microblock = new TestMicroblockStreamBuilder()
.addMicroblock({ microblock_hash, parent_index_block_hash: block.block.index_block_hash })
.addTx({
tx_id: '0xffff',
})
.addTx({
tx_id: '0x1234',
canonical: false,
microblock_canonical: false,
})
.build();
await db.updateMicroblocks(microblock);
const microblockResult = await supertest(api.server).get(`/extended/v1/microblock/`);
const response = microblockResult.body;
const expectedTxs = ['0xffff'];
expect(response.total).toEqual(1);
expect(response.results).toHaveLength(1);
expect(response.results[0].microblock_hash).toEqual(microblock_hash);
expect(response.results[0].txs).toHaveLength(1);
expect(response.results[0].txs).toEqual(expectedTxs);
});
test('/block', async () => {
const block_hash = '0x1234',