mariodb
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

MarioDB

The simplest MariaDB client for Node.js.

Installation

The library is available through the Node.js repositories. You can install it using npm:

$ npm install mariodb

Basic Usage

const mario = require("mariodb").createMario({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  connectionLimit: 5
})

const id = 30
const rows = await mario.sql`SELECT * FROM Users WHERE id = ${id}`.run()
// [ { id: 1, name: ..., age: ... }, { id: 2, name: ..., age: ... }, ... ]

const result = await mario.sql`INSERT INTO TableName VALUES (${5}, ${"Value"})`.run()
// { affectedRows: 1, insertId: 5, warningStatus: 0 }

Connection options are here.

Multiple Databases

const { createMario } = require("mariodb")

const mario1 = createMario({
  host: process.env.DB1_HOST,
  user: process.env.DB1_USER
})

const mario2 = createMario({
  host: process.env.DB2_HOST,
  user: process.env.DB2_USER
})

const result1 = await mario1.sql`SELECT * FROM Users`.run()
const result2 = await mario2.sql`SELECT * FROM Users`.run()

Transaction

const t = await mario.transaction()

try {
  const result1 = await t.sql`INSERT INTO ...`.run()
  const result2 = await t.sql`UPDATE ...`.run()
  const result3 = await t.sql`DELETE FROM ...`.run()

  await t.commit()
} catch (e) {
  await t.rollback()
}

Reusing Query

You can create sql without context to make it reusable.

// sqls.js
const { sql } = require("mariodb")

// Create a sql without context
exports.insertSql = sql`INSERT INTO ...`

Not only Mario but also Transaction instances work as contexts.

const { insertSql } = require("./sqls")

// Run with Mario instance
const result1 = await insertSql.run(mario)

// Run with Transaction instance
const t = await mario.transaction()
const result2 = await insertSql.run(t)
await t.commit()

Nesting

const query1 = sql`SELECT foo FROM bar`
const query2 = sql`SELECT baz FROM (${query1})`

Dynamic Query

const query = sql`WHERE deleted = ${false}`

if (name) query.append(sql`AND name LIKE ${`%${name}%`}`)
if (dept) query.append(sql`AND dept LIKE ${`%${dept}%`}`)
if (limit > 0) query.append(sql`AND limit < ${limit}`)

query.prepend(sql`SELECT * FROM Users`)
query.append(sql`ORDER BY id DESC`)

const rows = await query.run(mario)

Handy Methods

// Returns array: [ { id: 1, name: ..., age: ... }, { id: 2, name: ..., age: ... }, ... ]
const result1 = await mario.sql`SELECT * FROM Users`.rows()

// Returns single object: { id: 3, name: ..., age: ... }
// Returns null if not exists
const result2 = await mario.sql`SELECT * FROM Users WHERE id = ${3}`.row()

// Returns single value: 37
const result3 = await mario.sql`SELECT COUNT(*) FROM Users`.value()

Readme

Keywords

Package Sidebar

Install

npm i mariodb

Weekly Downloads

3

Version

1.0.0

License

MIT

Unpacked Size

25.4 kB

Total Files

17

Last publish

Collaborators

  • randonns