mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-06 10:08:52 +08:00
format
This commit is contained in:
@@ -5,7 +5,7 @@ a custom version of [sql.js][1]. It allows sqliteviz to have more recent
|
||||
version of SQLite build with a number of useful extensions.
|
||||
|
||||
`Makefile` from [sql.js][1] is rewritten as more comprehensible `configure.py`
|
||||
and `build.py` Python scripts that run in `emscripten/emsdk` Docker container.
|
||||
and `build.py` Python scripts that run in `emscripten/emsdk` Docker container.
|
||||
|
||||
## Extension
|
||||
|
||||
@@ -84,15 +84,15 @@ described in [this message from SQLite Forum][12]:
|
||||
> amalgamation code and the extensions would thereafter be automatically
|
||||
> initialized on each connection.
|
||||
|
||||
[1]: https://github.com/sql-js/sql.js
|
||||
[2]: https://sqlite.org/amalgamation.html
|
||||
[3]: https://sqlite.org/src/dir?ci=trunk&name=ext/misc
|
||||
[4]: https://sqlite.org/fts5.html
|
||||
[5]: https://github.com/jakethaw/pivot_vtab
|
||||
[6]: https://sqlite.org/series.html
|
||||
[7]: https://sqlite.org/src/file/ext/misc/series.c
|
||||
[8]: https://sqlite.org/src/file/ext/misc/closure.c
|
||||
[9]: https://sqlite.org/src/file/ext/misc/uuid.c
|
||||
[1]: https://github.com/sql-js/sql.js
|
||||
[2]: https://sqlite.org/amalgamation.html
|
||||
[3]: https://sqlite.org/src/dir?ci=trunk&name=ext/misc
|
||||
[4]: https://sqlite.org/fts5.html
|
||||
[5]: https://github.com/jakethaw/pivot_vtab
|
||||
[6]: https://sqlite.org/series.html
|
||||
[7]: https://sqlite.org/src/file/ext/misc/series.c
|
||||
[8]: https://sqlite.org/src/file/ext/misc/closure.c
|
||||
[9]: https://sqlite.org/src/file/ext/misc/uuid.c
|
||||
[10]: https://sqlite.org/src/file/ext/misc/regexp.c
|
||||
[11]: https://charlesleifer.com/blog/querying-tree-structures-in-sqlite-using-python-and-the-transitive-closure-extension/
|
||||
[12]: https://sqlite.org/forum/forumpost/6ad7d4f4bebe5e06?raw
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
module.exports = function (config) {
|
||||
const timeout = 15 * 60 * 1000
|
||||
config.set({
|
||||
|
||||
frameworks: ['mocha'],
|
||||
|
||||
files: [
|
||||
'suite.js',
|
||||
{ pattern: 'node_modules/sql.js/dist/sql-wasm.wasm', served: true, included: false },
|
||||
{
|
||||
pattern: 'node_modules/sql.js/dist/sql-wasm.wasm',
|
||||
served: true,
|
||||
included: false
|
||||
},
|
||||
{ pattern: 'sample.csv', served: true, included: false }
|
||||
],
|
||||
|
||||
@@ -15,7 +18,10 @@ module.exports = function (config) {
|
||||
singleRun: true,
|
||||
|
||||
customLaunchers: {
|
||||
ChromiumHeadlessNoSandbox: { base: 'ChromiumHeadless', flags: ['--no-sandbox'] }
|
||||
ChromiumHeadlessNoSandbox: {
|
||||
base: 'ChromiumHeadless',
|
||||
flags: ['--no-sandbox']
|
||||
}
|
||||
},
|
||||
browsers: ['ChromiumHeadlessNoSandbox', 'FirefoxHeadless'],
|
||||
concurrency: 1,
|
||||
@@ -33,11 +39,11 @@ module.exports = function (config) {
|
||||
logLevel: config.LOG_INFO,
|
||||
browserConsoleLogOptions: { terminal: true, level: config.LOG_INFO },
|
||||
|
||||
preprocessors: { 'suite.js': [ 'webpack' ] },
|
||||
preprocessors: { 'suite.js': ['webpack'] },
|
||||
webpack: {
|
||||
mode: 'development',
|
||||
module: {
|
||||
noParse: [ __dirname + '/node_modules/benchmark/benchmark.js' ]
|
||||
noParse: [__dirname + '/node_modules/benchmark/benchmark.js']
|
||||
},
|
||||
node: { fs: 'empty' }
|
||||
},
|
||||
@@ -47,6 +53,5 @@ module.exports = function (config) {
|
||||
},
|
||||
|
||||
jsonToFileReporter: { outputPath: '.', fileName: 'suite-result.json' }
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "sqlite-webassembly-microbenchmark",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@babel/core" : "^7.14.8",
|
||||
"@babel/core": "^7.14.8",
|
||||
"babel-loader": "^8.2.2",
|
||||
"benchmark": "^2.1.4",
|
||||
"lodash": "^4.17.4",
|
||||
@@ -11,7 +11,7 @@
|
||||
"karma": "^6.3.4",
|
||||
"karma-chrome-launcher": "^3.1.0",
|
||||
"karma-firefox-launcher": "^2.1.1",
|
||||
"karma-json-to-file-reporter" : "^1.0.1",
|
||||
"karma-json-to-file-reporter": "^1.0.1",
|
||||
"karma-mocha": "^2.0.1",
|
||||
"karma-webpack": "^4.0.2",
|
||||
"webpack": "^4.46.0",
|
||||
|
||||
@@ -4,7 +4,6 @@ import lodash from 'lodash'
|
||||
import Papa from 'papaparse'
|
||||
import useragent from 'ua-parser-js'
|
||||
|
||||
|
||||
describe('SQLite build benchmark', function () {
|
||||
let parsedCsv
|
||||
let sqlModule
|
||||
@@ -18,7 +17,7 @@ describe('SQLite build benchmark', function () {
|
||||
importToTable(selectDb, parsedCsv)
|
||||
})
|
||||
|
||||
function benchmarkImport () {
|
||||
function benchmarkImport() {
|
||||
const db = new sqlModule.Database()
|
||||
try {
|
||||
importToTable(db, parsedCsv)
|
||||
@@ -27,7 +26,7 @@ describe('SQLite build benchmark', function () {
|
||||
}
|
||||
}
|
||||
|
||||
function benchmarkSelect () {
|
||||
function benchmarkSelect() {
|
||||
const result = selectDb.exec(`
|
||||
SELECT county, AVG(avg_depth) avg_depth_c
|
||||
FROM (
|
||||
@@ -50,11 +49,9 @@ describe('SQLite build benchmark', function () {
|
||||
suite.add('select', { initCount: 3, minSamples: 50, fn: benchmarkSelect })
|
||||
await run(suite)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
|
||||
function importToTable (db, parsedCsv, chunkSize = 1024) {
|
||||
function importToTable(db, parsedCsv, chunkSize = 1024) {
|
||||
const columnListString = parsedCsv.meta.fields.join(', ')
|
||||
db.exec(`CREATE TABLE csv_import(${columnListString})`)
|
||||
|
||||
@@ -67,7 +64,6 @@ function importToTable (db, parsedCsv, chunkSize = 1024) {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
class PromiseWrapper {
|
||||
constructor() {
|
||||
this.promise = new Promise((resolve, reject) => {
|
||||
@@ -89,11 +85,11 @@ function parseCsv(url) {
|
||||
})
|
||||
}
|
||||
|
||||
function chunkArray (arr, size) {
|
||||
function chunkArray(arr, size) {
|
||||
return arr.reduce(function (result, value, index) {
|
||||
const chunkIndex = Math.floor(index / size)
|
||||
|
||||
if(!(chunkIndex in result)) {
|
||||
if (!(chunkIndex in result)) {
|
||||
result[chunkIndex] = []
|
||||
}
|
||||
result[chunkIndex].push(value)
|
||||
@@ -102,8 +98,7 @@ function chunkArray (arr, size) {
|
||||
}, [])
|
||||
}
|
||||
|
||||
|
||||
function createSuite () {
|
||||
function createSuite() {
|
||||
// Combined workaround from:
|
||||
// - https://github.com/bestiejs/benchmark.js/issues/106
|
||||
// - https://github.com/bestiejs/benchmark.js/issues/237
|
||||
@@ -117,24 +112,26 @@ function createSuite () {
|
||||
return new bm.Suite()
|
||||
}
|
||||
|
||||
function run (suite) {
|
||||
function run(suite) {
|
||||
const suiteResult = new PromiseWrapper()
|
||||
suite
|
||||
.on('cycle', function (event) {
|
||||
console.info(String(event.target))
|
||||
})
|
||||
.on('complete', function () {
|
||||
console.log(JSON.stringify({
|
||||
browser: useragent(navigator.userAgent).browser,
|
||||
result: this.filter('successful')
|
||||
}))
|
||||
console.log(
|
||||
JSON.stringify({
|
||||
browser: useragent(navigator.userAgent).browser,
|
||||
result: this.filter('successful')
|
||||
})
|
||||
)
|
||||
suiteResult.resolve()
|
||||
})
|
||||
.on('error', function (event) {
|
||||
console.error('Benchmark failed', String(event.target))
|
||||
suiteResult.reject()
|
||||
})
|
||||
.run({async: true})
|
||||
.run({ async: true })
|
||||
|
||||
return suiteResult.promise
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user