PR-URL: https://github.com/nodejs/node/pull/58040 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
101 lines
3.3 KiB
JavaScript
101 lines
3.3 KiB
JavaScript
'use strict';
|
|
const common = require('../common.js');
|
|
const sqlite = require('node:sqlite');
|
|
const assert = require('assert');
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
n: [1e5],
|
|
statement: [
|
|
'INSERT INTO text_column_type (text_column) VALUES (?)',
|
|
'INSERT INTO integer_column_type (integer_column) VALUES (?)',
|
|
'INSERT INTO real_column_type (real_column) VALUES (?)',
|
|
'INSERT INTO blob_column_type (blob_column) VALUES (?)',
|
|
'INSERT INTO all_column_types (text_column, integer_column, real_column, blob_column) VALUES (?, ?, ?, ?)',
|
|
'INSERT INTO large_text (text_8kb_column) VALUES (?)',
|
|
'INSERT INTO missing_required_value (any_value, required_value) VALUES (?, ?)',
|
|
],
|
|
});
|
|
|
|
function main(conf) {
|
|
const db = new sqlite.DatabaseSync(':memory:');
|
|
|
|
db.exec('CREATE TABLE text_column_type (text_column TEXT)');
|
|
db.exec('CREATE TABLE integer_column_type (integer_column INTEGER)');
|
|
db.exec('CREATE TABLE real_column_type (real_column REAL)');
|
|
db.exec('CREATE TABLE blob_column_type (blob_column BLOB)');
|
|
db.exec(
|
|
'CREATE TABLE all_column_types (text_column TEXT, integer_column INTEGER, real_column REAL, blob_column BLOB)',
|
|
);
|
|
db.exec('CREATE TABLE large_text (text_8kb_column TEXT)');
|
|
db.exec('CREATE TABLE missing_required_value (any_value TEXT, required_value TEXT NOT NULL)');
|
|
|
|
const insertStatement = db.prepare(conf.statement);
|
|
|
|
let i;
|
|
let deadCodeElimination;
|
|
|
|
const stringValue = crypto.randomUUID();
|
|
const integerValue = Math.floor(Math.random() * 100);
|
|
const realValue = Math.random();
|
|
const blobValue = Buffer.from('example blob data');
|
|
|
|
const largeText = 'a'.repeat(8 * 1024);
|
|
|
|
if (conf.statement.includes('text_column_type')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(stringValue);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('integer_column_type')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(integerValue);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('real_column_type')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(realValue);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('blob_column_type')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(blobValue);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('INTO all_column_types')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(
|
|
stringValue,
|
|
integerValue,
|
|
realValue,
|
|
blobValue,
|
|
);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('INTO large_text')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
deadCodeElimination = insertStatement.run(largeText);
|
|
}
|
|
bench.end(conf.n);
|
|
} else if (conf.statement.includes('missing_required_value')) {
|
|
bench.start();
|
|
for (i = 0; i < conf.n; i += 1) {
|
|
try {
|
|
deadCodeElimination = insertStatement.run(stringValue);
|
|
} catch (e) {
|
|
deadCodeElimination = e;
|
|
}
|
|
}
|
|
bench.end(conf.n);
|
|
} else {
|
|
throw new Error('Unknown statement');
|
|
}
|
|
|
|
assert.ok(deadCodeElimination !== undefined);
|
|
}
|