54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const LRU = require('lru-cache');
|
||
|
|
||
|
const parserCache = new LRU({
|
||
|
max: 15000
|
||
|
});
|
||
|
|
||
|
function keyFromFields(type, fields, options, config) {
|
||
|
let res =
|
||
|
`${type}` +
|
||
|
`/${typeof options.nestTables}` +
|
||
|
`/${options.nestTables}` +
|
||
|
`/${options.rowsAsArray}` +
|
||
|
`/${options.supportBigNumbers || config.supportBigNumbers}` +
|
||
|
`/${options.bigNumberStrings || config.bigNumberStrings}` +
|
||
|
`/${typeof options.typeCast}` +
|
||
|
`/${options.timezone || config.timezone}` +
|
||
|
`/${options.decimalNumbers}` +
|
||
|
`/${options.dateStrings}`;
|
||
|
for (let i = 0; i < fields.length; ++i) {
|
||
|
const field = fields[i];
|
||
|
res += `/${field.name}:${field.columnType}:${field.length}:${field.schema}:${field.table}:${field.flags}:${field.characterSet}`;
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
function getParser(type, fields, options, config, compiler) {
|
||
|
const key = keyFromFields(type, fields, options, config);
|
||
|
let parser = parserCache.get(key);
|
||
|
|
||
|
if (parser) {
|
||
|
return parser;
|
||
|
}
|
||
|
|
||
|
parser = compiler(fields, options, config);
|
||
|
parserCache.set(key, parser);
|
||
|
return parser;
|
||
|
}
|
||
|
|
||
|
function setMaxCache(max) {
|
||
|
parserCache.max = max;
|
||
|
}
|
||
|
|
||
|
function clearCache() {
|
||
|
parserCache.reset();
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
getParser: getParser,
|
||
|
setMaxCache: setMaxCache,
|
||
|
clearCache: clearCache
|
||
|
};
|