51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| //  SPDX-License-Identifier: LGPL-2.1-or-later
 | |
| //  Copyright (c) 2015-2024 MariaDB Corporation Ab
 | |
| 
 | |
| 'use strict';
 | |
| const LRU = require('lru-cache');
 | |
| 
 | |
| /**
 | |
|  * LRU prepare cache
 | |
|  *
 | |
|  */
 | |
| class LruPrepareCache {
 | |
|   #lruCache;
 | |
|   #info;
 | |
|   constructor(info, prepareCacheLength) {
 | |
|     this.#info = info;
 | |
|     this.#lruCache = new LRU.LRUCache({
 | |
|       max: prepareCacheLength,
 | |
|       dispose: (value, key) => value.unCache()
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   get(sql) {
 | |
|     const key = this.#info.database + '|' + sql;
 | |
|     const cachedItem = this.#lruCache.get(key);
 | |
|     if (cachedItem) {
 | |
|       return cachedItem.incrementUse();
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   set(sql, cache) {
 | |
|     const key = this.#info.database + '|' + sql;
 | |
|     this.#lruCache.set(key, cache);
 | |
|   }
 | |
| 
 | |
|   toString() {
 | |
|     let keyStr = '';
 | |
|     for (const value of this.#lruCache.keys()) {
 | |
|       keyStr += '[' + value + '],';
 | |
|     }
 | |
|     if (keyStr.length > 1) keyStr = keyStr.substring(0, keyStr.length - 1);
 | |
|     return 'info{cache:' + keyStr + '}';
 | |
|   }
 | |
| 
 | |
|   reset() {
 | |
|     this.#lruCache.clear();
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = LruPrepareCache;
 |