'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); }