///
import { Readable } from "stream";
import { IExecuteOptions } from "../addon-types";
import { DuckDB } from "./duckdb";
import { ResultIterator } from "./result-iterator";
/**
* Represents a DuckDB connection.
*
* @remarks
* A single db instance can have multiple connections. Having more than one connection instance is required when executing concurrent queries.
*
* @public
*/
export declare class Connection {
private duckdb;
/**
* Connection constructor.
* @param duckdb - {@link DuckDB | DuckDB} instance to connect to.
*
*
* @example
* Initializing a connection:
* ```ts
* import { DuckDB } from "node-duckdb";
* const db = new DuckDB();
* const connection = new Connection(db);
* ```
*
* @public
*/
constructor(duckdb: DuckDB);
private connectionBinding;
/**
* Asynchronously executes the query and returns a {@link https://nodejs.org/api/stream.html#stream_class_stream_readable | Readable stream} that wraps the result set.
* @param command - SQL command to execute
* @param options - optional options object of type {@link IExecuteOptions | IExecuteOptions}
*
* @example
* Streaming results of a DuckDB query into a CSV file:
* ```ts
* import { Connection, DuckDB, RowResultFormat } from "node-duckdb";
* import { createWriteStream } from "fs";
* import { Transform } from "stream";
* class ArrayToCsvTransform extends Transform {
* constructor() {
* super({objectMode: true})
* }
* _transform(chunk: any[], _encoding: string, callback: any) {
* this.push(chunk.join(",") + '\n');
* callback();
* }
* }
*
* async function outputToFileAsCsv() {
* const db = new DuckDB();
* const connection = new Connection(db);
* await connection.execute("CREATE TABLE people(id INTEGER, name VARCHAR);");
* await connection.execute("INSERT INTO people VALUES (1, 'Mark'), (2, 'Hannes'), (3, 'Bob');");
* const resultStream = await connection.execute("SELECT * FROM people;", {rowResultFormat: RowResultFormat.Array});
* const transformToCsvStream = new ArrayToCsvTransform();
* const writeStream = createWriteStream("my-people-output");
* resultStream.pipe(transformToCsvStream).pipe(writeStream);
* }
* outputToFileAsCsv();
* ```
*/
execute(command: string, options?: IExecuteOptions): Promise;
/**
* Asynchronously executes the query and returns an iterator that points to the first result in the result set.
* @param command - SQL command to execute
* @param options - optional options object of type {@link IExecuteOptions | IExecuteOptions}
*
* @example
* Printing rows:
* ```ts
* import { Connection, DuckDB, RowResultFormat } from "node-duckdb";
* async function queryDatabaseWithIterator() {
* const db = new DuckDB();
* const connection = new Connection(db);
* await connection.executeIterator("CREATE TABLE people(id INTEGER, name VARCHAR);");
* await connection.executeIterator("INSERT INTO people VALUES (1, 'Mark'), (2, 'Hannes'), (3, 'Bob');");
* const result = await connection.executeIterator("SELECT * FROM people;");
* // print the first row
* console.log(result.fetchRow());
* // print the rest of the rows
* console.log(result.fetchAllRows());
* const result2 = await connection.executeIterator("SELECT * FROM people;", {rowResultFormat: RowResultFormat.Array});
* console.log(result2.fetchAllRows());
* connection.close();
* db.close();
* }
* queryDatabaseWithIterator();
* ```
*
* @example
* Providing generics type:
* ```ts
* const result = await connection.executeIterator(`SELECT CAST(1 AS TINYINT)`, {
* rowResultFormat: RowResultFormat.Array,
* });
* expect(result.fetchRow()).toMatchObject([1]);
* ```
*/
executeIterator(command: string, options?: IExecuteOptions): Promise>;
/**
* Close the connection (also closes all {@link https://nodejs.org/api/stream.html#stream_class_stream_readable | Readable} or {@link ResultIterator | ResultIterator} objects associated with this connection).
* @remarks
* Even though GC will automatically destroy the Connection object at some point, DuckDB data is stored in the native address space, not the V8 heap, meaning you can easily have a Node.js process taking gigabytes of memory (more than the default heap size for Node.js) with V8 not triggering GC. So, definitely think about manually calling `close()`.
*/
close(): void;
/**
* If the connection is closed returns true, otherwise false.
*/
get isClosed(): boolean;
}
//# sourceMappingURL=connection.d.ts.map