@dbcube/query-builder
Version:
The DBCube Query Builder is a lightweight, flexible, and fluent library for building queries across multiple database engines, including MySQL, PostgreSQL, SQLite, and MongoDB, using JavaScript/Node.js. Its agnostic design allows you to generate data man
135 lines (98 loc) • 4.35 kB
Markdown
is a lightweight, flexible, and fluent library for building queries across multiple database engines, including MySQL, PostgreSQL, SQLite, and MongoDB, using JavaScript/Node.js.
Its agnostic design allows you to generate data manipulation (DML) and data definition (DDL) operations with a clean, chainable syntax—without sacrificing power or expressiveness.
It’s designed to work seamlessly in both SQL and NoSQL environments, providing a consistent abstraction layer across different storage technologies while still leveraging the native capabilities of each engine.
## Features
- **Fluent API** for building SQL queries
- **Type-safe** query construction
- **Support for SELECT, INSERT, UPDATE, DELETE**
- **Advanced WHERE conditions** (AND, OR, groups, BETWEEN, IN, NULL checks)
- **JOINs**: INNER, LEFT, RIGHT
- **Aggregations**: COUNT, SUM, AVG, MAX, MIN
- **Ordering, Grouping, Distinct, Pagination**
- **Column management** (future extension)
- **Promise-based asynchronous API**
- **Singleton connection management**
## Installation
```bash
npm install @dbcube/query-builder
```
## Quick Start
```typescript
import Database from "@dbcube/query-builder";
const db = new Database("my_database");
// Select all users
const users = await db.table("users").get();
// Select users with conditions
const activeUsers = await db
.table("users")
.where("status", "=", "active")
.orderBy("created_at", "DESC")
.limit(10)
.get();
// Insert new users
await db
.table("users")
.insert([{ name: "John", email: "john@example.com", age: 30 }]);
// Update a user
await db.table("users").where("id", "=", 1).update({ status: "inactive" });
// Delete users
await db.table("users").where("status", "=", "deleted").delete();
```
Creates a new database connection instance.
Returns a Table instance for building queries on the specified table.
- `select(fields?: string[])`: Specify columns to select.
- `where(column, operator, value)`: Add a WHERE condition.
- `orWhere(column, operator, value)`: Add an OR WHERE condition.
- `whereGroup(callback)`: Grouped WHERE conditions.
- `whereBetween(column, [min, max])`: WHERE BETWEEN condition.
- `whereIn(column, values)`: WHERE IN condition.
- `whereNull(column)`: WHERE IS NULL condition.
- `whereNotNull(column)`: WHERE IS NOT NULL condition.
- `join(table, column1, operator, column2)`: INNER JOIN.
- `leftJoin(table, column1, operator, column2)`: LEFT JOIN.
- `rightJoin(table, column1, operator, column2)`: RIGHT JOIN.
- `orderBy(column, direction)`: ORDER BY clause.
- `groupBy(column)`: GROUP BY clause.
- `distinct()`: DISTINCT clause.
- `count(column?)`: COUNT aggregation.
- `sum(column)`: SUM aggregation.
- `avg(column)`: AVG aggregation.
- `max(column)`: MAX aggregation.
- `min(column)`: MIN aggregation.
- `limit(number)`: LIMIT clause.
- `page(number)`: Pagination (requires limit).
- `get()`: Execute and return all matching rows.
- `first()`: Execute and return the first matching row.
- `find(value, column?)`: Find a row by column value (default: id).
- `insert(data)`: Insert one or more rows.
- `update(data)`: Update rows matching the conditions.
- `delete()`: Delete rows matching the conditions.
## Example Usage
```typescript
// Complex query with joins, grouping, and aggregation
const results = await db
.table("orders")
.join("users", "orders.user_id", "=", "users.id")
.where("orders.status", "=", "completed")
.groupBy("users.country")
.sum("orders.total")
.orderBy("sum", "DESC")
.limit(5)
.get();
```
All methods throw descriptive errors for invalid usage, such as missing WHERE conditions on update/delete, or invalid data types.
This project is licensed under the MIT License.
Contributions are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
dbcube-query-builder is part of the dbcube ecosystem, designed to provide a robust and flexible query building experience for modern Node.js applications.
The DBCube Query Builder