2.0.5 • Published 7 months ago

@nestjs-kitchen/connextion-duckdb v2.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

@nestjs-kitchen/connextion-duckdb

NPM Version NPM License codecov

A flexible module to provide @duckdb/node-api interface in NextJS.


Install

$ npm install --save @nestjs-kitchen/connextion @nestjs-kitchen/connextion-duckdb @duckdb/node-api

Usage

Apply DuckDBModule

  1. Export module, service & decorator.

    export const { DuckDB, DuckDBModule } = defineDuckDB();
    export type DuckDB = InstanceType<typeof DuckDB>;
  2. 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 {} 
  3. Inject DuckDB service.

    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

  1. 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>;
  2. 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 {} 
  3. Inject DuckDB service.

    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

2.0.5

7 months ago

2.0.4

8 months ago

2.0.3

8 months ago

2.0.2

8 months ago

2.0.1

9 months ago

2.0.0

9 months ago