Skip to content

guidesmiths/marv-mysql-driver

Repository files navigation

NPM version NPM downloads Node.js CI Maintainability Test Coverage

marv-mysql-driver

A mysql driver for marv

Prerequisites

One of:

marv-mysql-driver will automatically use whichever library you have installed but does not package either of these libraries. Please read the troubleshooting notes if using mysql with MySQL 8.0 (or above).

Installation

npm i marv marv-mysql-driver

Usage

migrations/
  |- 001.create-table.sql
  |- 002.create-another-table.sql

Promises

const marv = require('marv/api/promise'); // <-- Promise API
const driver = require('marv-mysql-driver');
const directory = path.resolve('migrations');
const connection = {
  // Properties are passed straight mysql.createConnection
  host: 'mysql.example.com',
  multipleStatements: true    // See https://www.npmjs.com/package/mysql#multiple-statement-queries
};

const migrations = await marv.scan(directory);
await marv.migrate(migrations, driver({ connection });
// Profit :)

Callbacks

const marv = require("marv/api/callback"); // <-- Callback API
const driver = require("marv-mysql-driver");
const directory = path.resolve("migrations");
const connection = {
  // Properties are passed straight [mysql|mysql2].createConnection
  host: "mysql.example.com",
  multipleStatements: true, // See https://www.npmjs.com/package/mysql#multiple-statement-queries
};

marv.scan(directory, (err, migrations) => {
  if (err) throw err;
  // Connection properties are passed straight [mysql|mysql2].createConnection
  marv.migrate(migrations, driver({ connection }), (err) => {
    if (err) throw err;
    // Profit :)
  });
});

Troubleshooting

Client does not support authentication protocol requested by server; consider upgrading MySQL client

MySQL v8 changed the default authentication plugin to caching_sha2_password, which, at time of writing is not supported by mysql. Therefore MySQL v8 users either need to change the default authentication plugin back to mysql_native_password or install mysql2.

MySQL v5 users can use either mysql or mysql2.

Testing

npm install
npm run mysql5
npm run mysql8
npm run mysql8-native-password
sleep 30
npm test