Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions benchmark/sqlite/sqlite-prepare-select-all-arrays.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e5],
tableSeedSize: [1e5],
statement: [
'SELECT 1',
'SELECT * FROM foo LIMIT 1',
'SELECT * FROM foo LIMIT 100',
'SELECT text_column FROM foo LIMIT 1',
'SELECT text_column FROM foo LIMIT 100',
'SELECT text_column, integer_column FROM foo LIMIT 1',
'SELECT text_column, integer_column FROM foo LIMIT 100',
'SELECT text_column, integer_column, real_column FROM foo LIMIT 1',
'SELECT text_column, integer_column, real_column FROM foo LIMIT 100',
'SELECT text_column, integer_column, real_column, blob_column FROM foo LIMIT 1',
'SELECT text_column, integer_column, real_column, blob_column FROM foo LIMIT 100',
'SELECT text_8kb_column FROM foo_large LIMIT 1',
'SELECT text_8kb_column FROM foo_large LIMIT 100',
],
});

function main(conf) {
const db = new sqlite.DatabaseSync(':memory:', {
returnArrays: true,
});

// Create only the necessary table for the benchmark type.
// If the statement includes 'foo_large', create the foo_large table; otherwise, create the foo table.
if (conf.statement.includes('foo_large')) {
db.exec('CREATE TABLE foo_large (text_8kb_column TEXT)');
const fooLargeInsertStatement = db.prepare(
'INSERT INTO foo_large (text_8kb_column) VALUES (?)',
);
const largeText = 'a'.repeat(8 * 1024);
for (let i = 0; i < conf.tableSeedSize; i++) {
fooLargeInsertStatement.run(largeText);
}
} else {
db.exec(
'CREATE TABLE foo (text_column TEXT, integer_column INTEGER, real_column REAL, blob_column BLOB)',
);
const fooInsertStatement = db.prepare(
'INSERT INTO foo (text_column, integer_column, real_column, blob_column) VALUES (?, ?, ?, ?)',
);

for (let i = 0; i < conf.tableSeedSize; i++) {
fooInsertStatement.run(
crypto.randomUUID(),
Math.floor(Math.random() * 100),
Math.random(),
Buffer.from('example blob data'),
);
}
}

let i;
let deadCodeElimination;

const stmt = db.prepare(conf.statement);

bench.start();
for (i = 0; i < conf.n; i += 1) deadCodeElimination = stmt.all();
bench.end(conf.n);

assert.ok(deadCodeElimination !== undefined);
}
71 changes: 71 additions & 0 deletions benchmark/sqlite/sqlite-prepare-select-all-bigint-arrays.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e5],
tableSeedSize: [1e5],
statement: [
'SELECT 1',
'SELECT * FROM foo LIMIT 1',
'SELECT * FROM foo LIMIT 100',
'SELECT text_column FROM foo LIMIT 1',
'SELECT text_column FROM foo LIMIT 100',
'SELECT text_column, integer_column FROM foo LIMIT 1',
'SELECT text_column, integer_column FROM foo LIMIT 100',
'SELECT text_column, integer_column, real_column FROM foo LIMIT 1',
'SELECT text_column, integer_column, real_column FROM foo LIMIT 100',
'SELECT text_column, integer_column, real_column, blob_column FROM foo LIMIT 1',
'SELECT text_column, integer_column, real_column, blob_column FROM foo LIMIT 100',
'SELECT text_8kb_column FROM foo_large LIMIT 1',
'SELECT text_8kb_column FROM foo_large LIMIT 100',
Comment thread
araujogui marked this conversation as resolved.
Outdated
],
});

function main(conf) {
const db = new sqlite.DatabaseSync(':memory:', {
returnArrays: true,
readBigInts: true,
});

// Create only the necessary table for the benchmark type.
// If the statement includes 'foo_large', create the foo_large table; otherwise, create the foo table.
if (conf.statement.includes('foo_large')) {
db.exec('CREATE TABLE foo_large (text_8kb_column TEXT)');
const fooLargeInsertStatement = db.prepare(
'INSERT INTO foo_large (text_8kb_column) VALUES (?)',
);
const largeText = 'a'.repeat(8 * 1024);
for (let i = 0; i < conf.tableSeedSize; i++) {
fooLargeInsertStatement.run(largeText);
}
} else {
db.exec(
'CREATE TABLE foo (text_column TEXT, integer_column INTEGER, real_column REAL, blob_column BLOB)',
);
const fooInsertStatement = db.prepare(
'INSERT INTO foo (text_column, integer_column, real_column, blob_column) VALUES (?, ?, ?, ?)',
);

for (let i = 0; i < conf.tableSeedSize; i++) {
fooInsertStatement.run(
crypto.randomUUID(),
Math.floor(Math.random() * 100),
Math.random(),
Buffer.from('example blob data'),
);
}
}

let i;
let deadCodeElimination;

const stmt = db.prepare(conf.statement);

bench.start();
for (i = 0; i < conf.n; i += 1) deadCodeElimination = stmt.all();
bench.end(conf.n);

assert.ok(deadCodeElimination !== undefined);
}
43 changes: 43 additions & 0 deletions benchmark/sqlite/sqlite-prepare-select-all-bigint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e5],
tableSeedSize: [1e5],
statement: [
'SELECT 1',
'SELECT * FROM foo LIMIT 1',
'SELECT * FROM foo LIMIT 100',
'SELECT integer_column FROM foo LIMIT 1',
'SELECT integer_column FROM foo LIMIT 100',
],
});

function main(conf) {
const db = new sqlite.DatabaseSync(':memory:', {
readBigInts: true,
});

db.exec('CREATE TABLE foo (integer_column INTEGER)');

const fooInsertStatement = db.prepare(
'INSERT INTO foo (integer_column) VALUES (?)',
);

for (let i = 0; i < conf.tableSeedSize; i++) {
fooInsertStatement.run(Math.floor(Math.random() * 100));
}

let i;
let deadCodeElimination;

const stmt = db.prepare(conf.statement);

bench.start();
for (i = 0; i < conf.n; i += 1) deadCodeElimination = stmt.all();
bench.end(conf.n);

assert.ok(deadCodeElimination !== undefined);
}
Loading