69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const { createLRU } = require('lru.min');
 | |
| 
 | |
| const parserCache = createLRU({
 | |
|   max: 15000,
 | |
| });
 | |
| 
 | |
| function keyFromFields(type, fields, options, config) {
 | |
|   const res = [
 | |
|     type,
 | |
|     typeof options.nestTables,
 | |
|     options.nestTables,
 | |
|     Boolean(options.rowsAsArray),
 | |
|     Boolean(options.supportBigNumbers || config.supportBigNumbers),
 | |
|     Boolean(options.bigNumberStrings || config.bigNumberStrings),
 | |
|     typeof options.typeCast === 'boolean'
 | |
|       ? options.typeCast
 | |
|       : typeof options.typeCast,
 | |
|     options.timezone || config.timezone,
 | |
|     Boolean(options.decimalNumbers),
 | |
|     options.dateStrings,
 | |
|   ];
 | |
| 
 | |
|   for (let i = 0; i < fields.length; ++i) {
 | |
|     const field = fields[i];
 | |
| 
 | |
|     res.push([
 | |
|       field.name,
 | |
|       field.columnType,
 | |
|       field.length,
 | |
|       field.schema,
 | |
|       field.table,
 | |
|       field.flags,
 | |
|       field.characterSet,
 | |
|     ]);
 | |
|   }
 | |
| 
 | |
|   return JSON.stringify(res, null, 0);
 | |
| }
 | |
| 
 | |
| 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.resize(max);
 | |
| }
 | |
| 
 | |
| function clearCache() {
 | |
|   parserCache.clear();
 | |
| }
 | |
| 
 | |
| module.exports = {
 | |
|   getParser: getParser,
 | |
|   setMaxCache: setMaxCache,
 | |
|   clearCache: clearCache,
 | |
|   _keyFromFields: keyFromFields,
 | |
| };
 |