UNPKG

sqldump-to

Version:

Stream SQL dump to newline delimited json

120 lines (97 loc) 3.06 kB
const fs = require('fs'); const path = require('path'); const Benchmark = require('benchmark'); const suite = new Benchmark.Suite(); const fileContent = fs.readFileSync(path.resolve(__dirname, 'fixture.sql')); const bufDelimeter = Buffer.from('),('); const doneCommand = Buffer.from(';'); const bracketOpen = Buffer.from('('); const bracketClose = Buffer.from(')'); const stringOpener = Buffer.from('\''); const escapeChar = Buffer.from('\\'); const doneCommandOctet = doneCommand[0]; const stringOpenerOctet = stringOpener[0]; const escapeCharOctet = escapeChar[0]; const bracketOpenOctet = bracketOpen[0]; const bracketCloseOctet = bracketClose[0]; const bufDelimeterLength = bufDelimeter.length; // add tests /* eslint-disable no-unused-vars */ suite .add('String Split', () => { const fileString = fileContent.toString(); return fileString.split('),('); }) .add('indexOf, slice via delimeter', () => { let start = 0; let idx = fileContent.indexOf(bufDelimeter); let sliced; while (idx !== -1) { sliced = fileContent.slice(start, idx); start = idx + bufDelimeterLength; idx = fileContent.indexOf(bufDelimeter, start); } }) .add('indexOf, slice, toString via delimeter', () => { let start = 0; let idx = fileContent.indexOf(bufDelimeter); let sliced; while (idx !== -1) { sliced = fileContent.toString(undefined, start, idx); start = idx + bufDelimeterLength; idx = fileContent.indexOf(bufDelimeter, start); } }) .add('count brackets indexOf, slice delimeter', () => { let openBracketCount = 0; let startPos = 0; let endPos = 0; let isWithinString = false; let isEscaped = false; let sliced; for (let i = 0; i < fileContent.length; i += 1) { if (isEscaped === false) { switch (fileContent[i]) { case escapeCharOctet: isEscaped = true; break; case stringOpenerOctet: isWithinString = !isWithinString; break; case bracketOpenOctet: if (!isWithinString) { if (openBracketCount === 0) { startPos = i; } openBracketCount += 1; } break; case bracketCloseOctet: if (!isWithinString) { openBracketCount -= 1; if (openBracketCount === 0) { endPos = i; sliced = fileContent.slice(startPos + 1, endPos); // console.log({ sliced: sliced.toString(), startPos, endPos }); } } break; case doneCommandOctet: break; default: break; } } else { isEscaped = false; } } }) // add listeners .on('cycle', (event) => { console.log(String(event.target)); }) .on('complete', function completionMessage() { console.log(`Fastest is ${this.filter('fastest').map('name')}`); }) // run async .run({ async: false });