Skip to content

drizzle-team/waddler

Repository files navigation

Waddler 🦆

WebsiteDocumentationTwitter • by Drizzle Team

Waddler - is a thin SQL client wrapper with modern API inspired by postgresjs and based on ES6 Tagged Template Strings.

You don't need to learn an api for db clients; just use the sql template tag for everything

Waddler is our vision of a modern, all-in-one client for any database dialect. It doesn't perform any specific mappings to or from a database, doesn't handle complex query building, and doesn't parse queries. Waddler simply unifies communication with your database using any client you choose - whether it's a simple TCP connection or an HTTP-based DB client.

We support all the dialects and drivers that Drizzle supports

You can check a full list of clients you can use - here

import { waddler } from "waddler/node-postgres";
import { waddler } from "waddler/mysql2";
import { waddler } from "waddler/libsql";

const sql = waddler({ dbUrl: process.env.DB_URL });
const sql = waddler();

// promisified SQL template API
const result = await sql`select * from users`;

// Easy to use values param
const values = sql.values([["Dan", "[email protected]", 25]]);
await sql`insert into "users" ("name", "email", "age") values ${values}`;
// insert into "users" ("name", "email", "age") values ('Dan', '[email protected]', 25);

// no SQL injections
await sql`select * from users where id = ${10}`; // <-- converts to $1 and [10] params
  
// waddler supports types
await sql<{ id: number, name: string }>`select * from users`;

// streaming and chunking
const stream = sql`select * from users`.stream();
for await (const row of stream) {
  console.log(row);
}

const chunked = sql`select * from users`.chunked(2);
for await (const chunk of chunked) {
  console.log(chunk);
}

You can enable logger with all the metadata coming from drivers

import { Logger } from 'waddler';
import { waddler } from 'waddler/...'; // driver specific
class MyLogger implements Logger {
  logQuery(query: string, params: unknown[], metadata?: any): void {
    // metadata will contain all the extra fields coming from the specific db driver
    console.log({ query, params, metadata });
  }
}
const db = waddler({ logger: new MyLogger() });

For more information you can check the docs