diff --git a/extensions/query-history/package.json b/extensions/query-history/package.json index d066f07d98..89b9880a4b 100644 --- a/extensions/query-history/package.json +++ b/extensions/query-history/package.json @@ -55,6 +55,12 @@ "type": "boolean", "default": true, "description": "%queryHistory.persistHistory%" + }, + "queryHistory.maxEntries": { + "type": "integer", + "default": 100, + "minimum": 0, + "description": "%queryHistory.maxEntries%" } } } diff --git a/extensions/query-history/package.nls.json b/extensions/query-history/package.nls.json index 28808c2451..89bf246fff 100644 --- a/extensions/query-history/package.nls.json +++ b/extensions/query-history/package.nls.json @@ -12,5 +12,6 @@ "queryHistory.clear": "Clear All History", "queryHistory.disableCapture": "Pause Query History Capture", "queryHistory.enableCapture": "Start Query History Capture", - "queryHistory.noEntries": "No queries to display" + "queryHistory.noEntries": "No queries to display", + "queryHistory.maxEntries": "Maximum number of entries to store. 0 means unlimited entries are stored. Increasing this limit may impact performance, especially if persistence is enabled." } diff --git a/extensions/query-history/src/constants.ts b/extensions/query-history/src/constants.ts index f8ca2d1a33..aba6e3a7f5 100644 --- a/extensions/query-history/src/constants.ts +++ b/extensions/query-history/src/constants.ts @@ -7,6 +7,7 @@ export const QUERY_HISTORY_CONFIG_SECTION = 'queryHistory'; export const CAPTURE_ENABLED_CONFIG_SECTION = 'captureEnabled'; export const DOUBLE_CLICK_ACTION_CONFIG_SECTION = 'doubleClickAction'; export const PERSIST_HISTORY_CONFIG_SECTION = 'persistHistory'; +export const MAX_ENTRIES_CONFIG_SECTION = 'maxEntries'; export const ITEM_SELECTED_COMMAND_ID = 'queryHistory.itemSelected'; diff --git a/extensions/query-history/src/queryHistoryProvider.ts b/extensions/query-history/src/queryHistoryProvider.ts index 134377260a..73fa59fdc2 100644 --- a/extensions/query-history/src/queryHistoryProvider.ts +++ b/extensions/query-history/src/queryHistoryProvider.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import { QueryHistoryItem } from './queryHistoryItem'; import { debounce, removeNewLines } from './utils'; -import { CAPTURE_ENABLED_CONFIG_SECTION, ITEM_SELECTED_COMMAND_ID, PERSIST_HISTORY_CONFIG_SECTION, QUERY_HISTORY_CONFIG_SECTION } from './constants'; +import { CAPTURE_ENABLED_CONFIG_SECTION, ITEM_SELECTED_COMMAND_ID, MAX_ENTRIES_CONFIG_SECTION, PERSIST_HISTORY_CONFIG_SECTION, QUERY_HISTORY_CONFIG_SECTION } from './constants'; import * as fs from 'fs'; import * as path from 'path'; import * as crypto from 'crypto'; @@ -20,6 +20,7 @@ const STORAGE_ENCRYPTION_ALGORITHM = 'aes-256-ctr'; const HISTORY_DEBOUNCE_MS = 10000; const DEFAULT_CAPTURE_ENABLED = true; const DEFAULT_PERSIST_HISTORY = true; +const DEFAULT_MAX_ENTRIES = 100; const successIcon = new vscode.ThemeIcon('check', new vscode.ThemeColor('testing.iconPassed')); const failedIcon = new vscode.ThemeIcon('error', new vscode.ThemeColor('testing.iconFailed')); @@ -31,7 +32,7 @@ export class QueryHistoryProvider implements vscode.TreeDataProvider { - if (e.affectsConfiguration(QUERY_HISTORY_CONFIG_SECTION)) { + if (e.affectsConfiguration(QUERY_HISTORY_CONFIG_SECTION) || e.affectsConfiguration(MAX_ENTRIES_CONFIG_SECTION)) { await this.updateConfigurationValues(); } })); @@ -67,6 +68,7 @@ export class QueryHistoryProvider implements vscode.TreeDataProvider this._maxEntries) { + this._queryHistoryItems.length = this._maxEntries; + } + } + /** * Set whether query history capture is currently enabled * @param enabled Whether capture is currently enabled