mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-21 03:10:43 -06:00
99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
const mysql = require('mysql2/promise');
|
|
|
|
const args = process.argv.slice(2);
|
|
const user = args[0];
|
|
const port = args[1];
|
|
const dbName = args[2];
|
|
|
|
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();
|
|
var 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({
|
|
host: '127.0.0.1',
|
|
port: port,
|
|
user: user,
|
|
database: dbName,
|
|
});
|
|
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();
|