forge-sql-orm 2.1.13 → 2.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +260 -1
- package/dist/core/ForgeSQLORM.d.ts +29 -1
- package/dist/core/ForgeSQLORM.d.ts.map +1 -1
- package/dist/core/ForgeSQLORM.js +61 -0
- package/dist/core/ForgeSQLORM.js.map +1 -1
- package/dist/core/ForgeSQLQueryBuilder.d.ts +179 -1
- package/dist/core/ForgeSQLQueryBuilder.d.ts.map +1 -1
- package/dist/core/ForgeSQLQueryBuilder.js.map +1 -1
- package/dist/core/Rovo.d.ts +116 -0
- package/dist/core/Rovo.d.ts.map +1 -0
- package/dist/core/Rovo.js +647 -0
- package/dist/core/Rovo.js.map +1 -0
- package/dist/utils/metadataContextUtils.d.ts.map +1 -1
- package/dist/utils/metadataContextUtils.js +1 -3
- package/dist/utils/metadataContextUtils.js.map +1 -1
- package/package.json +7 -6
- package/src/core/ForgeSQLORM.ts +64 -0
- package/src/core/ForgeSQLQueryBuilder.ts +200 -1
- package/src/core/Rovo.ts +765 -0
- package/src/utils/metadataContextUtils.ts +1 -3
|
@@ -10,9 +10,7 @@ async function saveMetaDataToContext(metadata) {
|
|
|
10
10
|
const context = exports.metadataQueryContext.getStore();
|
|
11
11
|
if (context) {
|
|
12
12
|
context.printQueriesWithPlan = async () => {
|
|
13
|
-
|
|
14
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
15
|
-
}
|
|
13
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
16
14
|
await (0, sqlUtils_1.printQueriesWithPlan)(context.forgeSQLORM, Date.now() - context.beginTime.getTime());
|
|
17
15
|
};
|
|
18
16
|
if (metadata) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataContextUtils.js","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":";;;AAcA,
|
|
1
|
+
{"version":3,"file":"metadataContextUtils.js","sourceRoot":"","sources":["../../src/utils/metadataContextUtils.ts"],"names":[],"mappings":";;;AAcA,sDAaC;AAED,gDAEC;AA/BD,uDAAqD;AAGrD,yCAAkD;AASrC,QAAA,oBAAoB,GAAG,IAAI,oCAAiB,EAAwB,CAAC;AAE3E,KAAK,UAAU,qBAAqB,CAAC,QAA2B;IACrE,MAAM,OAAO,GAAG,4BAAoB,CAAC,QAAQ,EAAE,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,oBAAoB,GAAG,KAAK,IAAI,EAAE;YACxC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7C,MAAM,IAAA,+BAAoB,EAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC;YACnD,OAAO,CAAC,oBAAoB,IAAI,QAAQ,CAAC,eAAe,CAAC;QAC3D,CAAC;QACD,6BAA6B;IAC/B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB;IACtC,OAAO,4BAAoB,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forge-sql-orm",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.14",
|
|
4
4
|
"description": "Drizzle ORM integration for Atlassian @forge/sql. Provides a custom driver, schema migration, two levels of caching (local and global via @forge/kvs), optimistic locking, and query analysis.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"homepage": "https://github.com/vzakharchenko/forge-sql-orm#readme",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"@types/node": "^24.10.1",
|
|
30
30
|
"@typescript-eslint/eslint-plugin": "^8.47.0",
|
|
31
31
|
"@typescript-eslint/parser": "^8.47.0",
|
|
32
|
-
"@vitest/coverage-v8": "^4.0.
|
|
33
|
-
"@vitest/ui": "^4.0.
|
|
32
|
+
"@vitest/coverage-v8": "^4.0.13",
|
|
33
|
+
"@vitest/ui": "^4.0.13",
|
|
34
34
|
"eslint": "^9.39.1",
|
|
35
35
|
"eslint-config-prettier": "^10.1.8",
|
|
36
36
|
"eslint-plugin-import": "^2.32.0",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"ts-node": "^10.9.2",
|
|
43
43
|
"typescript": "^5.9.3",
|
|
44
44
|
"uuid": "^13.0.0",
|
|
45
|
-
"vitest": "^4.0.
|
|
45
|
+
"vitest": "^4.0.13"
|
|
46
46
|
},
|
|
47
47
|
"license": "MIT",
|
|
48
48
|
"author": "Vasyl Zakharchenko",
|
|
@@ -74,10 +74,11 @@
|
|
|
74
74
|
"drizzle-orm": "^0.44.7"
|
|
75
75
|
},
|
|
76
76
|
"optionalDependencies": {
|
|
77
|
-
"@forge/kvs": "^1.0
|
|
77
|
+
"@forge/kvs": "^1.2.0"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"luxon": "^3.7.2"
|
|
80
|
+
"luxon": "^3.7.2",
|
|
81
|
+
"node-sql-parser": "^5.3.13"
|
|
81
82
|
},
|
|
82
83
|
"lint-staged": {
|
|
83
84
|
"*.{ts,tsx,css,scss,md}": [
|
package/src/core/ForgeSQLORM.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
ForgeSqlOrmOptions,
|
|
6
6
|
SchemaAnalyzeForgeSql,
|
|
7
7
|
SchemaSqlForgeSql,
|
|
8
|
+
RovoIntegration,
|
|
8
9
|
} from "./ForgeSQLQueryBuilder";
|
|
9
10
|
import { ForgeSQLSelectOperations } from "./ForgeSQLSelectOperations";
|
|
10
11
|
import {
|
|
@@ -41,6 +42,7 @@ import { WithSubquery } from "drizzle-orm/subquery";
|
|
|
41
42
|
import { getLastestMetadata, metadataQueryContext } from "../utils/metadataContextUtils";
|
|
42
43
|
import { operationTypeQueryContext } from "../utils/requestTypeContextUtils";
|
|
43
44
|
import type { MySqlQueryResultKind } from "drizzle-orm/mysql-core/session";
|
|
45
|
+
import { Rovo } from "./Rovo";
|
|
44
46
|
|
|
45
47
|
/**
|
|
46
48
|
* Implementation of ForgeSQLORM that uses Drizzle ORM for query building.
|
|
@@ -827,6 +829,37 @@ class ForgeSQLORMImpl implements ForgeSqlOperation {
|
|
|
827
829
|
with(...queries: WithSubquery[]) {
|
|
828
830
|
return this.drizzle.with(...queries);
|
|
829
831
|
}
|
|
832
|
+
|
|
833
|
+
/**
|
|
834
|
+
* Provides access to Rovo integration - a secure pattern for natural-language analytics.
|
|
835
|
+
*
|
|
836
|
+
* Rovo enables secure execution of dynamic SQL queries with comprehensive security validations:
|
|
837
|
+
* - Only SELECT queries are allowed
|
|
838
|
+
* - Queries are restricted to a single table
|
|
839
|
+
* - JOINs, subqueries, and window functions are blocked
|
|
840
|
+
* - Row-Level Security (RLS) support for data isolation
|
|
841
|
+
*
|
|
842
|
+
* @returns {RovoIntegration} Rovo integration instance for secure dynamic queries
|
|
843
|
+
*
|
|
844
|
+
* @example
|
|
845
|
+
* ```typescript
|
|
846
|
+
* const rovo = forgeSQL.rovo();
|
|
847
|
+
* const settings = await rovo.rovoSettingBuilder(usersTable, accountId)
|
|
848
|
+
* .useRLS()
|
|
849
|
+
* .addRlsColumn(usersTable.id)
|
|
850
|
+
* .addRlsWherePart((alias) => `${alias}.id = '${accountId}'`)
|
|
851
|
+
* .finish()
|
|
852
|
+
* .build();
|
|
853
|
+
*
|
|
854
|
+
* const result = await rovo.dynamicIsolatedQuery(
|
|
855
|
+
* "SELECT id, name FROM users WHERE status = 'active'",
|
|
856
|
+
* settings
|
|
857
|
+
* );
|
|
858
|
+
* ```
|
|
859
|
+
*/
|
|
860
|
+
rovo(): RovoIntegration {
|
|
861
|
+
return new Rovo(this, this.options);
|
|
862
|
+
}
|
|
830
863
|
}
|
|
831
864
|
|
|
832
865
|
/**
|
|
@@ -1390,6 +1423,37 @@ class ForgeSQLORM implements ForgeSqlOperation {
|
|
|
1390
1423
|
with(...queries: WithSubquery[]) {
|
|
1391
1424
|
return this.ormInstance.getDrizzleQueryBuilder().with(...queries);
|
|
1392
1425
|
}
|
|
1426
|
+
|
|
1427
|
+
/**
|
|
1428
|
+
* Provides access to Rovo integration - a secure pattern for natural-language analytics.
|
|
1429
|
+
*
|
|
1430
|
+
* Rovo enables secure execution of dynamic SQL queries with comprehensive security validations:
|
|
1431
|
+
* - Only SELECT queries are allowed
|
|
1432
|
+
* - Queries are restricted to a single table
|
|
1433
|
+
* - JOINs, subqueries, and window functions are blocked
|
|
1434
|
+
* - Row-Level Security (RLS) support for data isolation
|
|
1435
|
+
*
|
|
1436
|
+
* @returns {RovoIntegration} Rovo integration instance for secure dynamic queries
|
|
1437
|
+
*
|
|
1438
|
+
* @example
|
|
1439
|
+
* ```typescript
|
|
1440
|
+
* const rovo = forgeSQL.rovo();
|
|
1441
|
+
* const settings = await rovo.rovoSettingBuilder(usersTable, accountId)
|
|
1442
|
+
* .useRLS()
|
|
1443
|
+
* .addRlsColumn(usersTable.id)
|
|
1444
|
+
* .addRlsWherePart((alias) => `${alias}.id = '${accountId}'`)
|
|
1445
|
+
* .finish()
|
|
1446
|
+
* .build();
|
|
1447
|
+
*
|
|
1448
|
+
* const result = await rovo.dynamicIsolatedQuery(
|
|
1449
|
+
* "SELECT id, name FROM users WHERE status = 'active'",
|
|
1450
|
+
* settings
|
|
1451
|
+
* );
|
|
1452
|
+
* ```
|
|
1453
|
+
*/
|
|
1454
|
+
rovo(): RovoIntegration {
|
|
1455
|
+
return this.ormInstance.rovo();
|
|
1456
|
+
}
|
|
1393
1457
|
}
|
|
1394
1458
|
|
|
1395
1459
|
export default ForgeSQLORM;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UpdateQueryResponse } from "@forge/sql";
|
|
1
|
+
import { Result, UpdateQueryResponse } from "@forge/sql";
|
|
2
2
|
import { SqlParameters } from "@forge/sql/out/sql-statement";
|
|
3
3
|
import {
|
|
4
4
|
AnyMySqlSelectQueryBuilder,
|
|
@@ -56,6 +56,7 @@ import { SQLWrapper } from "drizzle-orm/sql/sql";
|
|
|
56
56
|
import type { MySqlQueryResultKind } from "drizzle-orm/mysql-core/session";
|
|
57
57
|
import type { WithBuilder } from "drizzle-orm/mysql-core/subquery";
|
|
58
58
|
import { WithSubquery } from "drizzle-orm/subquery";
|
|
59
|
+
import { MySqlColumn } from "drizzle-orm/mysql-core";
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
62
|
* Core interface for ForgeSQL operations.
|
|
@@ -120,6 +121,35 @@ export interface ForgeSqlOperation extends QueryBuilderForgeSql {
|
|
|
120
121
|
* @returns {ForgeSQLCacheOperations} Interface for executing versioned SQL operations with cache management
|
|
121
122
|
*/
|
|
122
123
|
modifyWithVersioningAndEvictCache(): ForgeSQLCacheOperations;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Provides access to Rovo integration - a secure pattern for natural-language analytics.
|
|
127
|
+
*
|
|
128
|
+
* Rovo enables secure execution of dynamic SQL queries with comprehensive security validations:
|
|
129
|
+
* - Only SELECT queries are allowed
|
|
130
|
+
* - Queries are restricted to a single table
|
|
131
|
+
* - JOINs, subqueries, and window functions are blocked
|
|
132
|
+
* - Row-Level Security (RLS) support for data isolation
|
|
133
|
+
*
|
|
134
|
+
* @returns {RovoIntegration} Rovo integration instance for secure dynamic queries
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const rovo = forgeSQL.rovo();
|
|
139
|
+
* const settings = await rovo.rovoSettingBuilder(usersTable, accountId)
|
|
140
|
+
* .useRLS()
|
|
141
|
+
* .addRlsColumn(usersTable.id)
|
|
142
|
+
* .addRlsWherePart((alias) => `${alias}.id = '${accountId}'`)
|
|
143
|
+
* .finish()
|
|
144
|
+
* .build();
|
|
145
|
+
*
|
|
146
|
+
* const result = await rovo.dynamicIsolatedQuery(
|
|
147
|
+
* "SELECT id, name FROM users WHERE status = 'active'",
|
|
148
|
+
* settings
|
|
149
|
+
* );
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
rovo(): RovoIntegration;
|
|
123
153
|
}
|
|
124
154
|
|
|
125
155
|
/**
|
|
@@ -998,6 +1028,175 @@ export interface SchemaSqlForgeSql {
|
|
|
998
1028
|
executeRawUpdateSQL(query: string, params?: unknown[]): Promise<UpdateQueryResponse>;
|
|
999
1029
|
}
|
|
1000
1030
|
|
|
1031
|
+
/**
|
|
1032
|
+
* Interface for Rovo integration settings.
|
|
1033
|
+
* Defines configuration for secure dynamic SQL query execution.
|
|
1034
|
+
*
|
|
1035
|
+
* @interface RovoIntegrationSetting
|
|
1036
|
+
*/
|
|
1037
|
+
export interface RovoIntegrationSetting {
|
|
1038
|
+
/**
|
|
1039
|
+
* Gets the account ID of the active user.
|
|
1040
|
+
*
|
|
1041
|
+
* @returns {string} The account ID of the active user
|
|
1042
|
+
*/
|
|
1043
|
+
getActiveUser(): string;
|
|
1044
|
+
|
|
1045
|
+
/**
|
|
1046
|
+
* Gets the context parameters for query substitution.
|
|
1047
|
+
*
|
|
1048
|
+
* @returns {Record<string, string>} Map of parameter names to their values
|
|
1049
|
+
*/
|
|
1050
|
+
getParameters(): Record<string, string>;
|
|
1051
|
+
|
|
1052
|
+
/**
|
|
1053
|
+
* Gets the name of the table to query.
|
|
1054
|
+
*
|
|
1055
|
+
* @returns {string} The table name
|
|
1056
|
+
*/
|
|
1057
|
+
getTableName(): string;
|
|
1058
|
+
|
|
1059
|
+
/**
|
|
1060
|
+
* Checks if Row-Level Security is enabled.
|
|
1061
|
+
*
|
|
1062
|
+
* @returns {boolean} True if RLS is enabled, false otherwise
|
|
1063
|
+
*/
|
|
1064
|
+
isUseRLS(): boolean;
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Generates the WHERE clause for Row-Level Security filtering.
|
|
1068
|
+
*
|
|
1069
|
+
* @param {string} alias - The table alias to use in the WHERE clause
|
|
1070
|
+
* @returns {string} SQL WHERE clause condition for RLS filtering
|
|
1071
|
+
*/
|
|
1072
|
+
userScopeWhere(alias: string): string;
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
* Gets the list of field names required for RLS validation.
|
|
1076
|
+
*
|
|
1077
|
+
* @returns {string[]} Array of field names that must be present in SELECT clause for RLS
|
|
1078
|
+
*/
|
|
1079
|
+
userScopeFields(): string[];
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
/**
|
|
1083
|
+
* Interface for configuring Row-Level Security (RLS) settings.
|
|
1084
|
+
* Provides a fluent API for setting up RLS conditions, required columns, and WHERE clauses.
|
|
1085
|
+
*
|
|
1086
|
+
* @interface RlsSettings
|
|
1087
|
+
*/
|
|
1088
|
+
export interface RlsSettings {
|
|
1089
|
+
/**
|
|
1090
|
+
* Sets a conditional function to determine if RLS should be applied.
|
|
1091
|
+
*
|
|
1092
|
+
* @param {() => Promise<boolean>} condition - Async function that returns true if RLS should be enabled
|
|
1093
|
+
* @returns {RlsSettings} This builder instance for method chaining
|
|
1094
|
+
*/
|
|
1095
|
+
addRlsCondition(condition: () => Promise<boolean>): RlsSettings;
|
|
1096
|
+
|
|
1097
|
+
/**
|
|
1098
|
+
* Adds a column name that must be present in the SELECT clause for RLS validation.
|
|
1099
|
+
*
|
|
1100
|
+
* @param {string} columnName - The name of the column to require
|
|
1101
|
+
* @returns {RlsSettings} This builder instance for method chaining
|
|
1102
|
+
*/
|
|
1103
|
+
addRlsColumnName(columnName: string): RlsSettings;
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* Adds a Drizzle column that must be present in the SELECT clause for RLS validation.
|
|
1107
|
+
*
|
|
1108
|
+
* @param {MySqlColumn} column - The Drizzle column object
|
|
1109
|
+
* @returns {RlsSettings} This builder instance for method chaining
|
|
1110
|
+
*/
|
|
1111
|
+
addRlsColumn(columnName: MySqlColumn): RlsSettings;
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* Sets the WHERE clause function for RLS filtering.
|
|
1115
|
+
*
|
|
1116
|
+
* @param {(alias: string) => string} wherePart - Function that generates WHERE clause
|
|
1117
|
+
* @returns {RlsSettings} This builder instance for method chaining
|
|
1118
|
+
*/
|
|
1119
|
+
addRlsWherePart(wherePart: (alias: string) => string): RlsSettings;
|
|
1120
|
+
|
|
1121
|
+
/**
|
|
1122
|
+
* Finishes RLS configuration and returns to the settings builder.
|
|
1123
|
+
*
|
|
1124
|
+
* @returns {RovoIntegrationSettingCreator} The parent settings builder
|
|
1125
|
+
*/
|
|
1126
|
+
finish(): RovoIntegrationSettingCreator;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
/**
|
|
1130
|
+
* Interface for building Rovo integration settings.
|
|
1131
|
+
* Provides a fluent API for configuring query settings including context parameters and RLS.
|
|
1132
|
+
*
|
|
1133
|
+
* @interface RovoIntegrationSettingCreator
|
|
1134
|
+
*/
|
|
1135
|
+
export interface RovoIntegrationSettingCreator {
|
|
1136
|
+
/**
|
|
1137
|
+
* Adds a context parameter for query substitution.
|
|
1138
|
+
*
|
|
1139
|
+
* @param {string} parameterName - The parameter name to replace in the query
|
|
1140
|
+
* @param {string} value - The value to substitute for the parameter
|
|
1141
|
+
* @returns {RovoIntegrationSettingCreator} This builder instance for method chaining
|
|
1142
|
+
*/
|
|
1143
|
+
addContextParameter(parameterName: string, value: string): RovoIntegrationSettingCreator;
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* Enables Row-Level Security (RLS) for the query.
|
|
1147
|
+
*
|
|
1148
|
+
* @returns {RlsSettings} RLS settings builder for configuring security options
|
|
1149
|
+
*/
|
|
1150
|
+
useRLS(): RlsSettings;
|
|
1151
|
+
|
|
1152
|
+
/**
|
|
1153
|
+
* Builds and returns the RovoIntegrationSetting instance.
|
|
1154
|
+
*
|
|
1155
|
+
* @returns {Promise<RovoIntegrationSetting>} The configured RovoIntegrationSetting instance
|
|
1156
|
+
*/
|
|
1157
|
+
build(): Promise<RovoIntegrationSetting>;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
/**
|
|
1161
|
+
* Interface for Rovo integration - a secure pattern for natural-language analytics.
|
|
1162
|
+
*
|
|
1163
|
+
* Rovo provides secure execution of dynamic SQL queries with comprehensive security validations.
|
|
1164
|
+
*
|
|
1165
|
+
* @interface RovoIntegration
|
|
1166
|
+
*/
|
|
1167
|
+
export interface RovoIntegration {
|
|
1168
|
+
/**
|
|
1169
|
+
* Creates a settings builder for Rovo queries using a raw table name.
|
|
1170
|
+
*
|
|
1171
|
+
* @param {string} tableName - The name of the table to query
|
|
1172
|
+
* @param {string} accountId - The account ID of the active user
|
|
1173
|
+
* @returns {RovoIntegrationSettingCreator} Builder for configuring Rovo query settings
|
|
1174
|
+
*/
|
|
1175
|
+
rovoRawSettingBuilder(tableName: string, accountId: string): RovoIntegrationSettingCreator;
|
|
1176
|
+
|
|
1177
|
+
/**
|
|
1178
|
+
* Creates a settings builder for Rovo queries using a Drizzle table object.
|
|
1179
|
+
*
|
|
1180
|
+
* @param {AnyMySqlTable} table - The Drizzle table object
|
|
1181
|
+
* @param {string} accountId - The account ID of the active user
|
|
1182
|
+
* @returns {RovoIntegrationSettingCreator} Builder for configuring Rovo query settings
|
|
1183
|
+
*/
|
|
1184
|
+
rovoSettingBuilder(table: AnyMySqlTable, accountId: string): RovoIntegrationSettingCreator;
|
|
1185
|
+
|
|
1186
|
+
/**
|
|
1187
|
+
* Executes a dynamic SQL query with comprehensive security validations.
|
|
1188
|
+
*
|
|
1189
|
+
* @param {string} dynamicSql - The SQL query to execute (must be a SELECT statement)
|
|
1190
|
+
* @param {RovoIntegrationSetting} settings - Configuration settings for the query
|
|
1191
|
+
* @returns {Promise<Result<unknown>>} Query execution result with metadata
|
|
1192
|
+
* @throws {Error} If the query violates security restrictions
|
|
1193
|
+
*/
|
|
1194
|
+
dynamicIsolatedQuery(
|
|
1195
|
+
dynamicSql: string,
|
|
1196
|
+
settings: RovoIntegrationSetting,
|
|
1197
|
+
): Promise<Result<unknown>>;
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1001
1200
|
/**
|
|
1002
1201
|
* Interface for version field metadata.
|
|
1003
1202
|
* Defines the configuration for optimistic locking version fields.
|