Database connection with Waddler

Waddler runs SQL queries on your database via database drivers.

index.ts
import { waddler } from "waddler/node-mysql"

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               β”‚
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚        mssql        β”‚ <--- database driver
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚               ʌ
01101000 01100101 01111001    -β”‚               β”‚
                               β”‚               β”‚- 01110011 01110101 01110000
                               v               β”‚
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚      Database      β”‚ 
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Under the hood Waddler will create a mssql driver instance

// above is equivalent to
import { waddler, AutoPool } from "waddler/node-mssql";

// under the hood AutoPool creates mssql driver instance
const pool = new AutoPool(process.env.DATABASE_URL);

const sql = waddler({ client: pool });

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

Server=localhost,55567;Database=master;User Id=SA;Password=drizzle123PASSWORD!;Encrypt=true;TrustServerCertificate=true;
       β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”˜         β””β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  
            ʌ      ʌ              ʌ             ʌ                   ʌ
  hostname -β”‚      β”‚              β”‚- database   β”‚                   β”‚- password
                   β”‚                            β”‚- user
                   β”‚- port

Next steps

Feel free to check out per-driver documentations