Database connection with Waddler

Waddler runs SQL queries on your database via database drivers.

index.ts
import { waddler } from "waddler/clickhouse"

const sql = waddler(process.env.DATABASE_URL);
const usersCount = await sql`select count(*) from ${sql.identifier('users')};`;
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚  sql`select count(*) from ${sql.identifier('users')};`  β”‚ <--- waddler query
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     
                               β”‚               ʌ
select count(*) from "users"; -β”‚               β”‚
                               β”‚               β”‚- [{ count: 0 }]
                               v               β”‚
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚     clickhouse      β”‚ <--- database driver
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚               ʌ
01101000 01100101 01111001    -β”‚               β”‚
                               β”‚               β”‚- 01110011 01110101 01110000
                               v               β”‚
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚      Database      β”‚ 
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Under the hood Waddler will create a clickhouse driver instance

// above is equivalent to
import { waddler } from "waddler/clickhouse";
import { createClient } from '@clickhouse/client';

const client = createClient({
  // url should have the following format: http[s]://<host>:<port>
  url: '...',
});

const sql = waddler({ client });

Waddler is by design natively compatible with every edge or serverless runtime, whenever you’d need access to a serverless database - we’ve got you covered

Neon HTTP
Neon with websockets
Vercel Postgres
PlanetScale HTTP
Cloudflare d1
import { waddler } from "waddler/neon-http";

const sql = waddler(process.env.DATABASE_URL);

And yes, we do support runtime specific drivers like Bun SQLite or Expo SQLite:

import { waddler } from "waddler/bun-sqlite"

const sql = waddler(); // <--- will create an in-memory db
const sql = waddler("./sqlite.db");
import { waddler } from "waddler/expo-sqlite";
import { openDatabaseSync } from "expo-sqlite";

const expo = openDatabaseSync("db.db");
const sql = waddler({ client: expo });

Database connection URL

Just in case if you’re not familiar with database connection URL concept

https://alex:[email protected]:8443/dbname
        β””β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”˜  β””β”€β”€β”˜
          ʌ    ʌ          ʌ                           ʌ     ʌ
    role -β”‚    β”‚          β”‚- hostname                 β”‚     β”‚ - database
               β”‚                                      β”‚ - port
               β”‚- password

Next steps

Feel free to check out per-driver documentations