2.0.5 • Published 7 months ago
@nestjs-kitchen/connextion-duckdb v2.0.5
@nestjs-kitchen/connextion-duckdb
A flexible module to provide @duckdb/node-api interface in NextJS.
Install
$ npm install --save @nestjs-kitchen/connextion @nestjs-kitchen/connextion-duckdb @duckdb/node-apiUsage
Apply DuckDBModule
Export module, service & decorator.
export const { DuckDB, DuckDBModule } = defineDuckDB(); export type DuckDB = InstanceType<typeof DuckDB>;Register duckDB connection instance with options.
@Module({ imports: [ // By default it will register a connection instance called `default`. DuckDBModule.register({ connections: { path: ':memory:' } }) ], providers: [SampleService] }) export class SampleModule {}Inject
DuckDBservice.import { DuckDB } from './file-that-exported-duckdb'; @Injectable() class SampleService { constructor( private readonly duckDB: DuckDB, ) {} async sampleMethod() { const result = await this.duckDB.default.run('from target_table'); } }
Register multiple duckDB instances
Define duckDB connection instance names and export module, service & decorator.
e.g.:
instance_1,instance_2.export const { DuckDB, DuckDBModule } = defineDuckDB<'instance_1' | 'instance_2'>(); export type DuckDB = InstanceType<typeof DuckDB>;Register duckDB connection instances with options.
@Module({ imports: [ DuckDBModule.register({ connections: [ { name: 'instance1', // instance_1's options... }, { name: 'instance2', // instance_2's options... } ] }) ], providers: [SampleService] }) export class SampleModule {}Inject
DuckDBservice.import { DuckDB } from './file-that-exported-duckdb'; @Injectable() class SampleService { constructor( private readonly duckDB: DuckDB, ) {} async sampleMethod() { const result = await this.duckDB.instance1.run('from target_table'); } }
API
run
import { DuckDB } from './file-that-exported-duckdb';
@Injectable()
class SampleService {
constructor(
private readonly duckDB: DuckDB,
) {}
async sampleMethod() {
const result = await this.duckDB.default.run('from target_table');
}
}runAndRead
import { DuckDB } from './file-that-exported-duckdb';
@Injectable()
class SampleService {
constructor(
private readonly duckDB: DuckDB,
) {}
async sampleMethod() {
const reader = await this.duckDB.default.runAndRead('from target_table');
}
}stream
import { DuckDB } from './file-that-exported-duckdb';
@Injectable()
class SampleService {
constructor(
private readonly duckDB: DuckDB,
) {}
async sampleMethod() {
const result = await this.duckDB.default.stream('from target_table');
}
}streamAndRead
import { DuckDB } from './file-that-exported-duckdb';
@Injectable()
class SampleService {
constructor(
private readonly duckDB: DuckDB,
) {}
async sampleMethod() {
const reader = await this.duckDB.default.streamAndRead('from target_table');
}
}createAppender
import { DuckDB } from './file-that-exported-duckdb';
@Injectable()
class SampleService {
constructor(
private readonly duckDB: DuckDB,
) {}
async sampleMethod() {
await this.duckDB.default.run(`create or replace table target_table(i integer, v varchar)`);
const appender = await this.duckDB.default.createAppender('target_table');
appender.appendInteger(42);
appender.appendVarchar('duck');
appender.endRow();
appender.appendInteger(123);
appender.appendVarchar('mallard');
appender.endRow();
appender.flush();
appender.appendInteger(17);
appender.appendVarchar('goose');
appender.endRow();
appender.close();
}
}result
see Inspect Result
reader
see Result Reader
License
MIT License