@saptools/cf-hana 0.1.6 → 0.2.1
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/CHANGELOG.md +13 -0
- package/README.md +57 -9
- package/dist/cli.js +893 -27
- package/dist/cli.js.map +1 -1
- package/dist/index.js +34 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -478,14 +478,17 @@ function buildDelete(schema, table, where) {
|
|
|
478
478
|
// src/catalog.ts
|
|
479
479
|
async function listSchemas(connection) {
|
|
480
480
|
const result = await connection.query(
|
|
481
|
-
"SELECT SCHEMA_NAME FROM SYS.SCHEMAS ORDER BY SCHEMA_NAME"
|
|
481
|
+
"SELECT SCHEMA_NAME FROM SYS.SCHEMAS ORDER BY SCHEMA_NAME",
|
|
482
|
+
[],
|
|
483
|
+
{ autoLimit: false }
|
|
482
484
|
);
|
|
483
485
|
return result.rows.map((row) => row.SCHEMA_NAME);
|
|
484
486
|
}
|
|
485
487
|
async function listTables(connection, schema) {
|
|
486
488
|
const result = await connection.query(
|
|
487
489
|
"SELECT SCHEMA_NAME, TABLE_NAME, TABLE_TYPE FROM SYS.TABLES WHERE SCHEMA_NAME = ? ORDER BY TABLE_NAME",
|
|
488
|
-
[schema]
|
|
490
|
+
[schema],
|
|
491
|
+
{ autoLimit: false }
|
|
489
492
|
);
|
|
490
493
|
return result.rows.map((row) => ({
|
|
491
494
|
schema: row.SCHEMA_NAME,
|
|
@@ -497,7 +500,8 @@ async function listTables(connection, schema) {
|
|
|
497
500
|
async function listColumns(connection, schema, table) {
|
|
498
501
|
const result = await connection.query(
|
|
499
502
|
"SELECT COLUMN_NAME, DATA_TYPE_NAME, LENGTH, SCALE, IS_NULLABLE, POSITION FROM SYS.TABLE_COLUMNS WHERE SCHEMA_NAME = ? AND TABLE_NAME = ? ORDER BY POSITION",
|
|
500
|
-
[schema, table]
|
|
503
|
+
[schema, table],
|
|
504
|
+
{ autoLimit: false }
|
|
501
505
|
);
|
|
502
506
|
return result.rows.map((row) => ({
|
|
503
507
|
name: row.COLUMN_NAME,
|
|
@@ -510,13 +514,14 @@ async function listColumns(connection, schema, table) {
|
|
|
510
514
|
}
|
|
511
515
|
|
|
512
516
|
// src/config.ts
|
|
513
|
-
var CLI_VERSION = "0.1
|
|
517
|
+
var CLI_VERSION = "0.2.1";
|
|
514
518
|
var ENV_PREFIX = "CF_HANA";
|
|
515
519
|
var DEFAULT_QUERY_TIMEOUT_MS = 3e4;
|
|
516
520
|
var DEFAULT_CONNECT_TIMEOUT_MS = 3e4;
|
|
517
521
|
var DEFAULT_POOL_MAX = 4;
|
|
518
522
|
var DEFAULT_POOL_IDLE_MS = 6e4;
|
|
519
|
-
var DEFAULT_AUTO_LIMIT =
|
|
523
|
+
var DEFAULT_AUTO_LIMIT = 100;
|
|
524
|
+
var MAX_RESULT_STORE_BYTES = 256 * 1024 * 1024;
|
|
520
525
|
function envName(suffix) {
|
|
521
526
|
return `${ENV_PREFIX}_${suffix}`;
|
|
522
527
|
}
|
|
@@ -1170,10 +1175,28 @@ function applyAutoLimit(sql, limit) {
|
|
|
1170
1175
|
if (/\blimit\b/i.test(stripped) || /\btop\s+\d/i.test(stripped)) {
|
|
1171
1176
|
return { sql, applied: false };
|
|
1172
1177
|
}
|
|
1173
|
-
return {
|
|
1178
|
+
return {
|
|
1179
|
+
sql: appendLimit(sql, limit + 1),
|
|
1180
|
+
applied: true,
|
|
1181
|
+
requestedLimit: limit
|
|
1182
|
+
};
|
|
1174
1183
|
}
|
|
1175
1184
|
|
|
1176
1185
|
// src/connection.ts
|
|
1186
|
+
function assertValidAutoLimit(value) {
|
|
1187
|
+
if (value !== false && (!Number.isSafeInteger(value) || value <= 0 || value >= Number.MAX_SAFE_INTEGER)) {
|
|
1188
|
+
throw new CfHanaError("CONFIG", "autoLimit must be a positive safe integer");
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
function boundedRows(rows, requestedLimit) {
|
|
1192
|
+
if (requestedLimit === void 0) {
|
|
1193
|
+
return { rows, truncated: false };
|
|
1194
|
+
}
|
|
1195
|
+
return {
|
|
1196
|
+
rows: rows.slice(0, requestedLimit),
|
|
1197
|
+
truncated: rows.length > requestedLimit
|
|
1198
|
+
};
|
|
1199
|
+
}
|
|
1177
1200
|
async function withTimeout(work, timeoutMs, onTimeout) {
|
|
1178
1201
|
let timer;
|
|
1179
1202
|
const timeout = new Promise((_resolve, reject) => {
|
|
@@ -1247,6 +1270,7 @@ var Connection = class _Connection {
|
|
|
1247
1270
|
}
|
|
1248
1271
|
const kind = classifyStatement(sql);
|
|
1249
1272
|
const autoLimit = options.autoLimit ?? this.config.autoLimit;
|
|
1273
|
+
assertValidAutoLimit(autoLimit);
|
|
1250
1274
|
const limited = kind === "select" ? applyAutoLimit(sql, autoLimit) : { sql, applied: false };
|
|
1251
1275
|
const timeoutMs = options.timeoutMs ?? this.config.queryTimeoutMs;
|
|
1252
1276
|
const started = Date.now();
|
|
@@ -1258,12 +1282,13 @@ var Connection = class _Connection {
|
|
|
1258
1282
|
}
|
|
1259
1283
|
);
|
|
1260
1284
|
const elapsedMs = Date.now() - started;
|
|
1285
|
+
const selected = boundedRows(execResult.rows, limited.requestedLimit);
|
|
1261
1286
|
return {
|
|
1262
|
-
rows:
|
|
1287
|
+
rows: selected.rows,
|
|
1263
1288
|
columns: execResult.columns,
|
|
1264
|
-
rowCount: kind === "select" ?
|
|
1289
|
+
rowCount: kind === "select" ? selected.rows.length : execResult.affectedRows,
|
|
1265
1290
|
statement: kind,
|
|
1266
|
-
truncated:
|
|
1291
|
+
truncated: selected.truncated,
|
|
1267
1292
|
elapsedMs
|
|
1268
1293
|
};
|
|
1269
1294
|
}
|