# API Reference

This page lists the signature, return value, and detail page of every public `MySQLPool` static method.

## Exports

```typescript
import MySQLPool from "@pardnchiu/mysql-pool";       // default export
import { MySQLPool } from "@pardnchiu/mysql-pool";   // named export
```

`MySQLPool` has a private constructor and only static methods. Builder methods return `typeof MySQLPool` for chaining.

## Lifecycle

| Method | Signature | Description |
|---|---|---|
| `init` | `init(config?: Record<string, MySQLConfig>): Promise<void>` | Creates and verifies the read and write pools; see [Configuration](/configuration) |
| `close` | `close(): Promise<void>` | Closes both pools; see [Lifecycle and Shutdown](/shutdown) |

## Query Building

| Method | Signature | Description |
|---|---|---|
| `table` | `table(tableName: string, target?: "read" \| "write"): typeof MySQLPool` | Resets state and sets the table and the pool for `get()`, default `"read"` |
| `select` | `select(...fields: string[]): typeof MySQLPool` | Sets columns; see [Select and Where](/select-and-where) |
| `where` | `where(column: string, operator: any, value?: any): typeof MySQLPool` | Adds an `AND` condition |
| `innerJoin` | `innerJoin(table: string, first: string, operator: string, second?: string): typeof MySQLPool` | See [Joins](/joins) |
| `leftJoin` | Same as `innerJoin` | `LEFT JOIN` |
| `rightJoin` | Same as `innerJoin` | `RIGHT JOIN` |
| `orderBy` | `orderBy(column: string, direction?: "ASC" \| "DESC" \| "asc" \| "desc"): typeof MySQLPool` | See [Sorting and Pagination](/sorting-and-pagination) |
| `limit` | `limit(num: number): typeof MySQLPool` | `LIMIT` |
| `offset` | `offset(num: number): typeof MySQLPool` | `OFFSET` |
| `total` | `total(): typeof MySQLPool` | Adds a `total` row count to every row |
| `increase` | `increase(target: string, number?: number): typeof MySQLPool` | Adds an increment to `update()`; see [Insert and Update](/insert-and-update) |

## Execution

| Method | Signature | Pool | Returns |
|---|---|---|---|
| `get` | `get<T = any>(): Promise<T[]>` | Set by `table()` | Array of rows |
| `insert` | `insert(data: Record<string, any>): Promise<number \| null>` | Write | `insertId`, or `null` when `0` |
| `update` | `update(data?: Record<string, any>): Promise<ResultSetHeader>` | Write | mysql2 `ResultSetHeader` |
| `upsert` | `upsert(data: Record<string, any>, updateData?: Record<string, any> \| string): Promise<number \| null>` | Write | `insertId`, or `null` when `0`; see [Upsert](/upsert) |
| `query` | `query<T = any>(query: string, params?: any[], target?: "read" \| "write"): Promise<T>` | `target` or the most recent `table()` | First element of the mysql2 result |
| `read` | `read<T = any>(query: string, params?: any[]): Promise<T>` | Read | Same as `query` |
| `write` | `write<T = any>(query: string, params?: any[]): Promise<T>` | Write | Same as `query`; see [Raw SQL](/raw-sql) |

## Error Messages

| Message | Cause |
|---|---|
| `Table not set, query aborted.` | `get()` before any `table()` call |
| `Table not set, insert aborted.` / `update aborted.` / `upsert aborted.` | The matching method before any `table()` call |
| `read connection is not available.` / `write connection is not available.` | `query()` found no pool for the target |
| `Read pool connection is not available.` / `Write pool connection is not available.` | `read()`/`write()` found no pool |

Other errors (connection failures, SQL syntax errors) are mysql2's original errors, rethrown unchanged.
