Skip to content

Files

Latest commit

Jul 14, 2025
61950a8 · Jul 14, 2025

History

History

nodejs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Jul 9, 2025
Oct 7, 2023
Jul 14, 2025
May 30, 2025
Jun 29, 2023
Jun 29, 2023
Jun 29, 2023
Jun 29, 2023
May 8, 2025
Feb 20, 2025
Jun 29, 2023
Dec 10, 2024
Dec 10, 2024
Feb 20, 2025
Dec 10, 2024
Jul 9, 2025
Dec 10, 2024
Jun 29, 2023
Sep 27, 2024

README.md

databend-driver

Databend Node.js Client

image License image

Usage

const { Client } = require("databend-driver");

const client = new Client(
  "databend://root:root@localhost:8000/?sslmode=disable",
);
const conn = await client.getConn();

await conn.exec(`CREATE TABLE test (
	i64 Int64,
	u64 UInt64,
	f64 Float64,
	s   String,
	s2  String,
	d   Date,
	t   DateTime
);`);

// get rows of value array
const rows = await conn.queryIter("SELECT * FROM test");
let row = await rows.next();
while (row) {
  console.log(row.values());
  row = await rows.next();
}

// get rows of map
const rows = await conn.queryIter("SELECT * FROM test");
let row = await rows.next();
while (row) {
  console.log(row.data());
  row = await rows.next();
}

// iter rows
const rows = await conn.queryIter("SELECT * FROM test");
for await (const row of rows) {
  console.log(row.values());
}

// pipe rows
import { Transform } from "node:stream";
import { finished, pipeline } from "node:stream/promises";

const rows = await conn.queryIter("SELECT * FROM test");
const stream = rows.stream();
const transformer = new Transform({
  readableObjectMode: true,
  writableObjectMode: true,
  transform(row, _, callback) {
    console.log(row.data());
  },
});
await pipeline(stream, transformer);
await finished(stream);

Type Mapping

Databend Types

General Data Types

Databend Node.js
BOOLEAN Boolean
TINYINT Number
SMALLINT Number
INT Number
BIGINT BigInt
FLOAT Number
DOUBLE Number
DECIMAL String
DATE Date
TIMESTAMP Date
VARCHAR String
BINARY Buffer

Semi-Structured Data Types

Databend Node.js
ARRAY Array
TUPLE Array
MAP Object
VARIANT String / Object
BITMAP String
GEOMETRY String
GEOGRAPHY String

Note: VARIANT is a json encoded string. Example:

CREATE TABLE example (
    data VARIANT
);
INSERT INTO example VALUES ('{"a": 1, "b": "hello"}');
const row = await conn.queryRow("SELECT * FROM example limit 1;");
const data = row.values()[0];
const value = JSON.parse(data);
console.log(value);

We also provide a helper function to convert VARIANT to Object:

const row = await conn.queryRow("SELECT * FROM example limit 1;");
row.setOpts({ variantAsObject: true });
console.log(row.data());

Parameter binding

const row = await this.conn.queryRow(
  "SELECT $1, $2, $3, $4",
  (params = [3, false, 4, "55"]),
);
const row = await this.conn.queryRow(
  "SELECT :a, :b, :c, :d",
  (params = { a: 3, b: false, c: 4, d: "55" }),
);
const row = await this.conn.queryRow("SELECT ?, ?, ?, ?", [3, false, 4, "55"]);

Development

cd bindings/nodejs
pnpm install
pnpm run build:debug
pnpm run test