Skip to content

Commit c2db1bd

Browse files
(feat) Variables from comments (#1512)
* (feat) Variables from comments Fixes #744 * Update docs/src/pages/en/features/executing-queries.mdx Co-authored-by: John Murray <[email protected]> --------- Co-authored-by: John Murray <[email protected]>
1 parent d3fa23e commit c2db1bd

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

docs/src/pages/en/features/executing-queries.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,5 @@ ask you for it every time.
6969
**NOTE**: this is just a string replacement, and therefore, you can execute
7070
subqueries using this replacement. You can also change the query columns/filters
7171
itself.
72+
73+
**TIP**: You can also set parameters for a query by preceding it with comment lines `-- @var :name = '%e%'`. Parameter values set in comments take priority over values set in the connection definition.

packages/plugins/connection-manager/extension.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { EXT_CONFIG_NAMESPACE, EXT_NAMESPACE } from '@sqltools/util/constants';
88
import generateId from '@sqltools/util/internal-id';
99
import { default as logger, createLogger } from '@sqltools/log/src';
1010
import { getDataPath, SESSION_FILES_DIRNAME } from '@sqltools/util/path';
11-
import { extractConnName, getQueryParameters } from '@sqltools/util/query';
11+
import { extractConnName, getQueryParameters, extractCommentVariables } from '@sqltools/util/query';
1212
import { isEmpty } from '@sqltools/util/validation';
1313
import Context from '@sqltools/vscode/context';
1414
import { getOrCreateEditor, getSelectedText, readInput } from '@sqltools/vscode/utils';
@@ -220,7 +220,8 @@ export class ConnectionManagerPlugin implements IExtensionPlugin {
220220
const regex = Config['queryParams.regex']
221221
const params = getQueryParameters(query, regex);
222222
if (params.length > 0) {
223-
const connVariables = conn.variables || {}
223+
const commentVariables = extractCommentVariables(query);
224+
const connVariables = { ...conn.variables || {}, ...commentVariables || {} };
224225
const connParams = params.filter(p => p.varName && Object.keys(connVariables).includes(p.varName))
225226
for (const connParam of connParams) {
226227
const r = new RegExp(connParam.param.replace(/([\$\[\]])/g, '\\$1'), 'g');

packages/util/query/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@ export function extractConnName(query: string) {
5555
return ((query.match(/@conn\s*(.+)$/m) || [])[1] || '').trim() || null;
5656
}
5757

58+
export function extractCommentVariables(query: string): { [key: string]: string } {
59+
const variables: { [key: string]: string } = {};
60+
const regex = /@var\s+(.+?)\s*=\s*(.+?)\s*$/gm;
61+
62+
let match;
63+
while ((match = regex.exec(query)) !== null) {
64+
const [, key, value] = match;
65+
variables[key] = value.trim();
66+
}
67+
68+
return variables;
69+
}
70+
5871
export function getQueryParameters(query: string, regexStr: string) {
5972
if (!query || !regexStr) return [];
6073

0 commit comments

Comments
 (0)