Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 04bb451

Browse files
committed
Allow usage of named parameters
1 parent 38c0744 commit 04bb451

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

‎server/node-service/src/plugins/firebirdsql/i18n/en.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ export const en = {
1313
blobAsText: "Get blob as text, only affects blob subtype 1",
1414

1515
actions: "Actions",
16-
actionName: "SQL Query",
16+
actionName: "Query",
17+
sqlInputField: "SQL Query",
18+
paramsInputField: "Query Parameters",
1719
};

‎server/node-service/src/plugins/firebirdsql/queryConfig.ts‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,18 @@ function getQueryConfig(i18n: FirebirdI18nTranslator) {
88
actions: [
99
{
1010
actionName: "Query",
11-
label: "Query",
11+
label: i18n.trans("actionName"),
1212
params: [
1313
{
14-
label: i18n.trans("actionName"),
14+
label: i18n.trans("sqlInputField"),
1515
key: "sql",
1616
type: "sqlInput",
1717
},
18+
{
19+
label: i18n.trans("paramsInputField"),
20+
key: "params",
21+
type: "jsonInput",
22+
},
1823
],
1924
},
2025
],

‎server/node-service/src/plugins/firebirdsql/run.ts‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DataSourceDataType } from "./dataSourceConfig";
22
import { ActionDataType } from "./queryConfig";
33
import { FirebirdI18nTranslator } from "./i18n";
4+
import { ServiceError } from "../../common/error";
45
import _ from "lodash";
56
import Firebird from "node-firebird";
67

@@ -39,11 +40,41 @@ export async function validateDataSourceConfig(dataSourceConfig: DataSourceDataT
3940
}
4041
}
4142

43+
async function prepareQueryParameters(stmt: string, parameters: object) {
44+
const re : RegExp = /(:)([_a-zA-Z0-9\[\]\.]+)/gm;
45+
46+
const placeholdersInStmt = stmt.matchAll(re);
47+
48+
let parametersArray = [];
49+
50+
for(const match of placeholdersInStmt) {
51+
const paramName: string = match[2];
52+
if (_.isNil(paramName)) {
53+
continue;
54+
}
55+
if (!_.has(parameters, paramName)) {
56+
throw new ServiceError(`Named parameter "${paramName}" not found in Query Parameters object.`);
57+
}
58+
parametersArray.push(_.get(parameters, paramName));
59+
}
60+
61+
const modifiedStmt = stmt.replaceAll(re, "?");
62+
63+
return {
64+
stmt: modifiedStmt,
65+
parametersArray: parametersArray
66+
}
67+
}
68+
4269
export default async function run(action: ActionDataType, dataSourceConfig: DataSourceDataType, i18n: FirebirdI18nTranslator) {
4370
if (action.actionName === "Query") {
4471
let db = await fbdAsync.attachAsync(getFirebirdOptions(dataSourceConfig));
4572
promisifyAll(db);
46-
const results = await db.queryAsync(action.sql);
73+
74+
const { stmt, parametersArray } = await prepareQueryParameters(action.sql, action.params);
75+
76+
const results = db.queryAsync(stmt, parametersArray);
77+
4778
db.detachAsync();
4879
return results;
4980
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /