async function duckDBFilter() {
const tableName = "duck_db_table";
let filterName = "duckDB";
let client, log;
async function initialize(data, log_) {
log = log_;
let err;
try {
log?.push({
msg: `${filterName}: Initializing Data`,
level: 2
});
client = await DuckDBClient.of({ [tableName]: data });
log?.push({
msg: `${filterName}: Data initialized`,
level: 2
});
return client;
} catch (error) {
console.log(error);
}
}
async function filterData(filters) {
const select_sql = filtersToSQL(filters, { tableName });
let res;
let err;
try {
log?.push({
msg: `${filterName}: Filtering Data based on provided filters ${JSON.stringify(
Object.fromEntries(filters)
)}`,
level: 2
});
log?.push({
msg: `Generated Sql : ${select_sql})}`,
level: 2
});
res = await client.query(select_sql);
log?.push({
msg: `${filterName}: Filtered ${res.length} records`,
level: 2
});
} catch (error) {
console.error(filterName, err);
}
return res;
}
async function getClient() {
return client;
}
async function clearInstance() {
console.log("clearing Instance");
await client._db.disconnect();
await client._db._worker.terminate();
console.log("cleared Instance");
}
return {
initialize,
filterData,
filterName,
getClient,
clearInstance
};
}