mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-09 03:09:12 -06:00
122 lines
2.4 KiB
JavaScript
122 lines
2.4 KiB
JavaScript
import mysql from "mysql2/promise";
|
|
import { getConfig } from "./helpers";
|
|
|
|
async function createTable() {
|
|
const conn = await getConnection();
|
|
try {
|
|
await conn.execute("create table users (name varchar(20))");
|
|
} catch (err) {
|
|
console.error(`Error creating table:`, err);
|
|
process.exit(1);
|
|
} finally {
|
|
conn.end();
|
|
}
|
|
}
|
|
|
|
async function commitTable() {
|
|
const conn = await getConnection();
|
|
try {
|
|
await conn.execute(`call dolt_add('.')`);
|
|
await conn.execute(`call dolt_commit('-am', 'new table')`);
|
|
} catch (err) {
|
|
console.error(`Error committing table:`, err);
|
|
} finally {
|
|
conn.end();
|
|
}
|
|
}
|
|
|
|
const authors = [
|
|
"bob",
|
|
"john",
|
|
"mary",
|
|
"alice",
|
|
"bob2",
|
|
"john2",
|
|
"mary2",
|
|
"alice2",
|
|
"bob3",
|
|
"john3",
|
|
"mary3",
|
|
"alice3",
|
|
"bob4",
|
|
"john4",
|
|
"mary4",
|
|
"alice4",
|
|
"bob5",
|
|
"john5",
|
|
"mary5",
|
|
"alice5",
|
|
"bob6",
|
|
"john6",
|
|
"mary6",
|
|
"alice6",
|
|
"bob7",
|
|
"john7",
|
|
"mary7",
|
|
"alice7",
|
|
"bob8",
|
|
"john8",
|
|
"mary8",
|
|
"alice8",
|
|
"bob9",
|
|
"john9",
|
|
"mary9",
|
|
"alice9",
|
|
];
|
|
|
|
async function insertAuthor(name) {
|
|
const conn = await getConnection();
|
|
try {
|
|
await conn.execute("start transaction");
|
|
await conn.execute("INSERT INTO users (name) VALUES(?);", [name]);
|
|
await conn.execute(`call dolt_commit('-am', concat('created author', ?))`, [
|
|
name,
|
|
]);
|
|
} catch (err) {
|
|
console.error(`Error committing ${name}:`, err);
|
|
process.exit(1);
|
|
} finally {
|
|
conn.end();
|
|
}
|
|
}
|
|
|
|
async function validateCommits(name) {
|
|
const conn = await getConnection();
|
|
let results;
|
|
try {
|
|
results = await conn.query(
|
|
`select count(*) as c from dolt_log where message like 'created author%'`
|
|
);
|
|
} catch (err) {
|
|
console.error(`Error:`, err);
|
|
process.exit(1);
|
|
} finally {
|
|
conn.end();
|
|
}
|
|
|
|
const count = results[0][0].c;
|
|
const expectedCount = authors.length;
|
|
if (count != expectedCount) {
|
|
console.error(
|
|
`Unexpected number of commits: expected ${expectedCount}, was ${count}`
|
|
);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
async function getConnection() {
|
|
const connection = await mysql.createConnection(getConfig());
|
|
return connection;
|
|
}
|
|
|
|
// Regression test concurrent dolt_commit with node clients
|
|
// https://github.com/dolthub/dolt/issues/4361
|
|
async function main() {
|
|
await createTable();
|
|
await commitTable();
|
|
await Promise.all(authors.map(insertAuthor));
|
|
await validateCommits();
|
|
}
|
|
|
|
main();
|