@sqg/sqg 0.10.0 → 0.11.0
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/dist/sqg.mjs +27 -9
- package/dist/templates/java-jdbc.hbs +8 -6
- package/package.json +1 -1
package/dist/sqg.mjs
CHANGED
|
@@ -1201,10 +1201,10 @@ const postgres = new class {
|
|
|
1201
1201
|
return value;
|
|
1202
1202
|
});
|
|
1203
1203
|
if (statement.parameters.length > 0) try {
|
|
1204
|
-
await db.query(
|
|
1204
|
+
await db.query("DEALLOCATE ALL");
|
|
1205
1205
|
await db.query(`PREPARE sqg_param_check AS ${statement.sql}`);
|
|
1206
1206
|
const paramTypeResult = await db.query(`SELECT unnest(parameter_types)::oid AS oid FROM pg_prepared_statements WHERE name = 'sqg_param_check'`);
|
|
1207
|
-
await db.query(
|
|
1207
|
+
await db.query("DEALLOCATE sqg_param_check");
|
|
1208
1208
|
if (paramTypeResult.rows.length === statement.parameters.length) {
|
|
1209
1209
|
const paramTypes = /* @__PURE__ */ new Map();
|
|
1210
1210
|
for (let i = 0; i < statement.parameters.length; i++) {
|
|
@@ -1459,7 +1459,7 @@ var JavaTypeMapper = class JavaTypeMapper extends TypeMapper {
|
|
|
1459
1459
|
TIMESTAMP_S: "Instant",
|
|
1460
1460
|
TIMESTAMP_MS: "Instant",
|
|
1461
1461
|
TIMESTAMP_NS: "Instant",
|
|
1462
|
-
"TIMESTAMP WITH TIME ZONE": "
|
|
1462
|
+
"TIMESTAMP WITH TIME ZONE": "OffsetDateTime",
|
|
1463
1463
|
UUID: "UUID",
|
|
1464
1464
|
INTERVAL: "String",
|
|
1465
1465
|
BIT: "String",
|
|
@@ -1600,6 +1600,7 @@ var JavaTypeMapper = class JavaTypeMapper extends TypeMapper {
|
|
|
1600
1600
|
const upperType = column.type?.toString().toUpperCase() ?? "";
|
|
1601
1601
|
if (upperType === "TIMESTAMP" || upperType === "DATETIME") return `toLocalDateTime((java.sql.Timestamp)${value})`;
|
|
1602
1602
|
if (upperType === "TIMESTAMPTZ") return `toOffsetDateTime((java.sql.Timestamp)${value})`;
|
|
1603
|
+
if (upperType === "TIMESTAMP WITH TIME ZONE") return `(OffsetDateTime)${value}`;
|
|
1603
1604
|
if (upperType === "DATE") return `toLocalDate((java.sql.Date)${value})`;
|
|
1604
1605
|
if (upperType === "TIME") return `toLocalTime((java.sql.Time)${value})`;
|
|
1605
1606
|
if (upperType.startsWith("_")) {
|
|
@@ -1857,6 +1858,9 @@ var JavaGenerator = class extends BaseGenerator {
|
|
|
1857
1858
|
}, " ");
|
|
1858
1859
|
return queryHelper.typeMapper.getDeclarations(query.allColumns);
|
|
1859
1860
|
});
|
|
1861
|
+
Handlebars.registerHelper("appenderType", (column) => {
|
|
1862
|
+
return this.mapType(column);
|
|
1863
|
+
});
|
|
1860
1864
|
Handlebars.registerHelper("readColumns", (queryHelper) => {
|
|
1861
1865
|
const query = queryHelper.query;
|
|
1862
1866
|
if (queryHelper.isPluck) return this.readColumn({
|
|
@@ -2346,10 +2350,24 @@ var SqlQueryHelper = class {
|
|
|
2346
2350
|
}
|
|
2347
2351
|
get parameters() {
|
|
2348
2352
|
const vars = new Map(this.variables.map((param) => [param.name, param.type]));
|
|
2349
|
-
return this.statement.parameters.map((param) =>
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
+
return this.statement.parameters.map((param) => {
|
|
2354
|
+
const rawType = this.query.parameterTypes?.get(param.name);
|
|
2355
|
+
let isArray = false;
|
|
2356
|
+
let arrayBaseType = null;
|
|
2357
|
+
if (rawType instanceof ListType) {
|
|
2358
|
+
isArray = true;
|
|
2359
|
+
arrayBaseType = rawType.baseType.toString();
|
|
2360
|
+
} else if (typeof rawType === "string" && rawType.startsWith("_")) {
|
|
2361
|
+
isArray = true;
|
|
2362
|
+
arrayBaseType = rawType.substring(1);
|
|
2363
|
+
}
|
|
2364
|
+
return {
|
|
2365
|
+
name: param.name,
|
|
2366
|
+
type: vars.get(param.name),
|
|
2367
|
+
isArray,
|
|
2368
|
+
arrayBaseType
|
|
2369
|
+
};
|
|
2370
|
+
});
|
|
2353
2371
|
}
|
|
2354
2372
|
get columns() {
|
|
2355
2373
|
if (!(this.query.allColumns.type instanceof StructType)) throw new Error(`Expected StructType ${this.query.allColumns.type}`);
|
|
@@ -2725,7 +2743,7 @@ async function processProject(projectPath) {
|
|
|
2725
2743
|
//#region src/mcp-server.ts
|
|
2726
2744
|
const server = new Server({
|
|
2727
2745
|
name: "sqg-mcp",
|
|
2728
|
-
version: process.env.npm_package_version ?? "0.
|
|
2746
|
+
version: process.env.npm_package_version ?? "0.11.0"
|
|
2729
2747
|
}, { capabilities: {
|
|
2730
2748
|
tools: {},
|
|
2731
2749
|
resources: {}
|
|
@@ -3054,7 +3072,7 @@ async function startMcpServer() {
|
|
|
3054
3072
|
|
|
3055
3073
|
//#endregion
|
|
3056
3074
|
//#region src/sqg.ts
|
|
3057
|
-
const version = process.env.npm_package_version ?? "0.
|
|
3075
|
+
const version = process.env.npm_package_version ?? "0.11.0";
|
|
3058
3076
|
const description = process.env.npm_package_description ?? "SQG - SQL Query Generator - Type-safe code generation from SQL (https://sqg.dev)";
|
|
3059
3077
|
consola.level = LogLevels.info;
|
|
3060
3078
|
const program = new Command().name("sqg").description(`${description}
|
|
@@ -212,8 +212,9 @@ public class {{className}} {
|
|
|
212
212
|
{{#if isQuery}}{{#unless isOne}}
|
|
213
213
|
public Stream<{{rowType}}> {{functionName}}Stream({{#each variables}}{{{type}}} {{name}}{{#unless @last}}, {{/unless}}{{/each}}) throws SQLException {
|
|
214
214
|
var stmt = connection.prepareStatement({{{partsToString sqlQueryParts}}});
|
|
215
|
-
{{#each
|
|
216
|
-
{{
|
|
215
|
+
{{#each parameters}}{{#if isArray}}stmt.setArray({{plusOne @index}}, connection.createArrayOf("{{arrayBaseType}}", {{name}}.toArray()));
|
|
216
|
+
{{else}}stmt.setObject({{plusOne @index}}, {{name}});
|
|
217
|
+
{{/if}}{{/each}}
|
|
217
218
|
var rs = stmt.executeQuery();
|
|
218
219
|
var iter = new Iterator<{{rowType}}>() {
|
|
219
220
|
private Boolean hasNext = null;
|
|
@@ -256,7 +257,7 @@ public class {{className}} {
|
|
|
256
257
|
|
|
257
258
|
{{#each tables}}
|
|
258
259
|
/** Row type for {{tableName}} appender */
|
|
259
|
-
public record {{rowTypeName}}({{#each columns}}{{{
|
|
260
|
+
public record {{rowTypeName}}({{#each columns}}{{{appenderType this}}} {{name}}{{#unless @last}}, {{/unless}}{{/each}}) {}
|
|
260
261
|
|
|
261
262
|
/** Appender for bulk inserts into {{tableName}} */
|
|
262
263
|
public static class {{className}} implements AutoCloseable {
|
|
@@ -282,7 +283,7 @@ public static class {{className}} implements AutoCloseable {
|
|
|
282
283
|
}
|
|
283
284
|
|
|
284
285
|
/** Append a single row with individual values */
|
|
285
|
-
public {{className}} append({{#each columns}}{{{
|
|
286
|
+
public {{className}} append({{#each columns}}{{{appenderType this}}} {{name}}{{#unless @last}}, {{/unless}}{{/each}}) throws SQLException {
|
|
286
287
|
appender.beginRow();
|
|
287
288
|
{{#each columns}}
|
|
288
289
|
appender.append({{name}});
|
|
@@ -327,8 +328,9 @@ int
|
|
|
327
328
|
{{/inline~}}
|
|
328
329
|
|
|
329
330
|
{{#*inline "execute"}}
|
|
330
|
-
{{#each
|
|
331
|
-
{{
|
|
331
|
+
{{#each parameters}}{{#if isArray}}stmt.setArray({{plusOne @index}}, connection.createArrayOf("{{arrayBaseType}}", {{name}}.toArray()));
|
|
332
|
+
{{else}}stmt.setObject({{plusOne @index}}, {{name}});
|
|
333
|
+
{{/if}}{{/each}}
|
|
332
334
|
{{#if isQuery}}
|
|
333
335
|
try(var rs = stmt.executeQuery()) {
|
|
334
336
|
{{#if isOne}}
|