JSPM

@remix-run/data-table-mysql

0.3.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2752
  • Score
    100M100P100Q112425F
  • License MIT

MySQL adapter for remix/data-table

Package Exports

  • @remix-run/data-table-mysql
  • @remix-run/data-table-mysql/package.json

Readme

data-table-mysql

MySQL adapter for remix/data-table. Use this package when you want data-table APIs backed by mysql2.

Features

  • Native mysql2 Integration: Works with mysql2/promise Pool and PoolConnection instances
  • Full data-table API Support: Queries, relations, writes, and transactions
  • Adapter-Owned Compiler: SQL compilation lives in this adapter, with optional shared pure helpers from data-table
  • Migration DDL Support: Compiles and executes DataMigrationOperation operations for remix/data-table/migrations
  • MySQL Capabilities Enabled By Default:
    • returning: false
    • savepoints: true
    • upsert: true
    • transactionalDdl: false
    • migrationLock: true

Installation

npm i remix mysql2

Usage

import { createPool } from 'mysql2/promise'
import { createDatabase } from 'remix/data-table'
import { createMysqlDatabaseAdapter } from 'remix/data-table-mysql'

let pool = createPool(process.env.DATABASE_URL as string)
let db = createDatabase(createMysqlDatabaseAdapter(pool))

Use db.query(...), relation loading, and transactions from remix/data-table. Import any driver-specific types you need directly from mysql2/promise.

Adapter Capabilities

data-table-mysql reports this capability set by default:

  • returning: false
  • savepoints: true
  • upsert: true
  • transactionalDdl: false
  • migrationLock: true

Advanced Usage

returning On MySQL

MySQL does not natively support SQL RETURNING. In this adapter, using returning on write operations throws DataTableQueryError.

Use write metadata (affectedRows, insertId) on MySQL, or switch adapters when returned rows are required.

import { DataTableQueryError } from 'remix/data-table'

try {
  await db
    .query(Accounts)
    .insert({ email: 'a@example.com', status: 'active' }, { returning: ['id'] })
} catch (error) {
  if (error instanceof DataTableQueryError) {
    // insert() returning is not supported by this adapter
  }
}

License

See LICENSE