@saltcorn/sql 0.5.4 → 0.5.6
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/action.js +7 -1
- package/agent-skill.js +18 -4
- package/index.js +5 -1
- package/package.json +1 -1
- package/table-provider.js +11 -5
package/action.js
CHANGED
|
@@ -61,17 +61,23 @@ module.exports = {
|
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
const client = is_sqlite ? db : await db.getClient();
|
|
64
|
+
db.sql_log("BEGIN;");
|
|
64
65
|
await client.query(`BEGIN;`);
|
|
65
66
|
if (!is_sqlite) {
|
|
67
|
+
db.sql_log(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
66
68
|
await client.query(
|
|
67
69
|
`SET LOCAL search_path TO "${db.getTenantSchema()}";`
|
|
68
70
|
);
|
|
69
|
-
if (read_only)
|
|
71
|
+
if (read_only) {
|
|
72
|
+
db.sql_log(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
70
73
|
await client.query(
|
|
71
74
|
`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`
|
|
72
75
|
);
|
|
76
|
+
}
|
|
73
77
|
}
|
|
78
|
+
db.sql_log(sql, phValues);
|
|
74
79
|
const qres = await client.query(sql, phValues);
|
|
80
|
+
db.sql_log("COMMIT;");
|
|
75
81
|
|
|
76
82
|
await client.query(`COMMIT;`);
|
|
77
83
|
|
package/agent-skill.js
CHANGED
|
@@ -47,16 +47,22 @@ class SQLQuerySkill {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
const client = is_sqlite ? db : await db.getClient();
|
|
50
|
+
db.sql_log("BEGIN;");
|
|
50
51
|
await client.query(`BEGIN;`);
|
|
51
52
|
if (!is_sqlite) {
|
|
53
|
+
db.sql_log(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
52
54
|
await client.query(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
53
|
-
if (read_only)
|
|
55
|
+
if (read_only) {
|
|
56
|
+
db.sql_log(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
54
57
|
await client.query(
|
|
55
58
|
`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`
|
|
56
59
|
);
|
|
60
|
+
}
|
|
57
61
|
}
|
|
62
|
+
db.sql_log(this.sql, phValues);
|
|
58
63
|
const qres = await client.query(this.sql, phValues);
|
|
59
64
|
|
|
65
|
+
db.sql_log("COMMIT;");
|
|
60
66
|
await client.query(`COMMIT;`);
|
|
61
67
|
|
|
62
68
|
if (!is_sqlite) client.release(true);
|
|
@@ -157,6 +163,12 @@ class SQLQuerySkill {
|
|
|
157
163
|
type: "String",
|
|
158
164
|
fieldview: "textarea",
|
|
159
165
|
},
|
|
166
|
+
{
|
|
167
|
+
name: "display_result",
|
|
168
|
+
label: "Display result",
|
|
169
|
+
type: "Bool",
|
|
170
|
+
sublabel: "Show rows from the query in JSON format",
|
|
171
|
+
},
|
|
160
172
|
{
|
|
161
173
|
name: "row_format",
|
|
162
174
|
label: "Row format",
|
|
@@ -187,9 +199,11 @@ class SQLQuerySkill {
|
|
|
187
199
|
/*renderToolCall({ phrase }, { req }) {
|
|
188
200
|
return div({ class: "border border-primary p-2 m-2" }, phrase);
|
|
189
201
|
},*/
|
|
190
|
-
renderToolResponse:
|
|
191
|
-
|
|
192
|
-
|
|
202
|
+
renderToolResponse: this.display_result
|
|
203
|
+
? async (response, { req }) => {
|
|
204
|
+
return div({ class: "border border-success p-2 m-2" }, response);
|
|
205
|
+
}
|
|
206
|
+
: undefined,
|
|
193
207
|
function: {
|
|
194
208
|
name: this.tool_name,
|
|
195
209
|
description: this.tool_description,
|
package/index.js
CHANGED
|
@@ -152,17 +152,21 @@ module.exports = {
|
|
|
152
152
|
const is_sqlite = db.isSQLite;
|
|
153
153
|
|
|
154
154
|
const client = is_sqlite ? db : await db.getClient();
|
|
155
|
+
db.sql_log("BEGIN;");
|
|
155
156
|
await client.query(`BEGIN;`);
|
|
156
157
|
if (!is_sqlite) {
|
|
158
|
+
db.sql_log(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
157
159
|
await client.query(
|
|
158
160
|
`SET LOCAL search_path TO "${db.getTenantSchema()}";`
|
|
159
161
|
);
|
|
162
|
+
db.sql_log(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
160
163
|
await client.query(
|
|
161
164
|
`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`
|
|
162
165
|
);
|
|
163
166
|
}
|
|
167
|
+
db.sql_log(query, parameters || []);
|
|
164
168
|
const qres = await client.query(query, parameters || []);
|
|
165
|
-
|
|
169
|
+
db.sql_log("ROLLBACK;");
|
|
166
170
|
await client.query(`ROLLBACK;`);
|
|
167
171
|
return qres;
|
|
168
172
|
},
|
package/package.json
CHANGED
package/table-provider.js
CHANGED
|
@@ -291,9 +291,7 @@ const getSqlQuery = (sql, cfg, where, opts) => {
|
|
|
291
291
|
: { type: "number", value: "$" + phIndex },
|
|
292
292
|
};
|
|
293
293
|
phIndex += 1;
|
|
294
|
-
phValues.push(
|
|
295
|
-
wherek?.ilike || wherek?.gt || wherek?.lt || wherek
|
|
296
|
-
);
|
|
294
|
+
phValues.push(wherek?.ilike || wherek?.gt || wherek?.lt || wherek);
|
|
297
295
|
if (!sqlAggrCol) {
|
|
298
296
|
if (!ast[0].where) ast[0].where = newClause;
|
|
299
297
|
else {
|
|
@@ -419,15 +417,18 @@ const runQuery = async (cfg, where, opts) => {
|
|
|
419
417
|
const { sqlQ, phValues } = getSqlQuery(sql, cfg, where, opts);
|
|
420
418
|
|
|
421
419
|
const client = is_sqlite ? db : await db.getClient();
|
|
420
|
+
db.sql_log("BEGIN;");
|
|
422
421
|
await client.query(`BEGIN;`);
|
|
423
422
|
if (!is_sqlite) {
|
|
423
|
+
db.sql_log(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
424
424
|
await client.query(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
425
|
+
db.sql_log(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
425
426
|
await client.query(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
426
427
|
}
|
|
427
|
-
|
|
428
|
-
//console.trace({ sqlQ, phValues, opts });
|
|
428
|
+
db.sql_log(sqlQ, phValues);
|
|
429
429
|
const qres = await client.query(sqlQ, phValues);
|
|
430
430
|
qres.query = sqlQ;
|
|
431
|
+
db.sql_log("ROLLBACK;");
|
|
431
432
|
await client.query(`ROLLBACK;`);
|
|
432
433
|
|
|
433
434
|
if (!is_sqlite) client.release(true);
|
|
@@ -454,15 +455,20 @@ const countRows = async (cfg, where, opts) => {
|
|
|
454
455
|
const { sqlQ, phValues } = getSqlQuery(sql, cfg, where, opts);
|
|
455
456
|
|
|
456
457
|
const client = is_sqlite ? db : await db.getClient();
|
|
458
|
+
db.sql_log("BEGIN;");
|
|
457
459
|
await client.query(`BEGIN;`);
|
|
458
460
|
if (!is_sqlite) {
|
|
461
|
+
db.sql_log(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
459
462
|
await client.query(`SET LOCAL search_path TO "${db.getTenantSchema()}";`);
|
|
463
|
+
db.sql_log(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
460
464
|
await client.query(`SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;`);
|
|
461
465
|
}
|
|
462
466
|
|
|
463
467
|
//console.trace({ sqlQ, phValues, opts });
|
|
468
|
+
db.sql_log(`select count(*) from (${sqlQ})`, phValues);
|
|
464
469
|
const qres = await client.query(`select count(*) from (${sqlQ})`, phValues);
|
|
465
470
|
qres.query = sqlQ;
|
|
471
|
+
db.sql_log("ROLLBACK;");
|
|
466
472
|
await client.query(`ROLLBACK;`);
|
|
467
473
|
|
|
468
474
|
if (!is_sqlite) client.release(true);
|