mirror of
https://github.com/alexgo-io/stacks-blockchain-api.git
synced 2026-01-12 16:53:19 +08:00
feat: add dataset store
This commit is contained in:
58
src/event-replay/parquet-based/dataset/store.ts
Normal file
58
src/event-replay/parquet-based/dataset/store.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { Database, QueryResult } from "duckdb";
|
||||
|
||||
export class DatasetStore {
|
||||
|
||||
private readonly db;
|
||||
|
||||
constructor() {
|
||||
this.db = new Database(':memory:');
|
||||
};
|
||||
|
||||
static async connect(): Promise<DatasetStore> {
|
||||
return new DatasetStore();
|
||||
};
|
||||
|
||||
newBlockEventsIds = () => {
|
||||
var con = this.db.connect();
|
||||
return new Promise((resolve) => {
|
||||
con.all(
|
||||
"SELECT ID FROM READ_PARQUET('events/new_block/canonical/*.parquet')",
|
||||
(err: any, result: any) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
let res = result.map((a: any) => a.id); // extract IDs as an Array
|
||||
resolve(res);
|
||||
}
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
newBlockEventsOrderedPayloadStream = (): Promise<QueryResult> => {
|
||||
return new Promise(async (resolve) => {
|
||||
var con = this.db.connect();
|
||||
const res = con.stream(
|
||||
"SELECT payload FROM READ_PARQUET('events/new_block/canonical/*.parquet') ORDER BY id",
|
||||
);
|
||||
|
||||
resolve(res);
|
||||
});
|
||||
};
|
||||
|
||||
newBurnBlockEventsOrdered = () => {
|
||||
return new Promise((resolve) => {
|
||||
var con = this.db.connect();
|
||||
con.all(
|
||||
"SELECT * FROM READ_PARQUET('events/new_burn_block/canonical/*.parquet') ORDER BY id",
|
||||
(err: any, result: any) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
resolve(result);
|
||||
}
|
||||
);
|
||||
});
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user