@sqg/sqg 0.8.0 → 0.9.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.
Files changed (2) hide show
  1. package/dist/sqg.mjs +22 -3
  2. package/package.json +1 -1
package/dist/sqg.mjs CHANGED
@@ -680,6 +680,8 @@ var EnumType = class {
680
680
  var SQLQuery = class {
681
681
  columns;
682
682
  allColumns;
683
+ /** Database-reported parameter types (variable name → SQL type name), set by database adapters */
684
+ parameterTypes;
683
685
  constructor(filename, id, rawQuery, queryAnonymous, queryNamed, queryPositional, type, isOne, isPluck, variables, config) {
684
686
  this.filename = filename;
685
687
  this.id = id;
@@ -1205,6 +1207,23 @@ const postgres = new class {
1205
1207
  if (value.startsWith("'") && value.endsWith("'") || value.startsWith("\"") && value.endsWith("\"")) return value.slice(1, -1);
1206
1208
  return value;
1207
1209
  });
1210
+ if (statement.parameters.length > 0) try {
1211
+ await db.query(`DEALLOCATE ALL`);
1212
+ await db.query(`PREPARE sqg_param_check AS ${statement.sql}`);
1213
+ const paramTypeResult = await db.query(`SELECT unnest(parameter_types)::oid AS oid FROM pg_prepared_statements WHERE name = 'sqg_param_check'`);
1214
+ await db.query(`DEALLOCATE sqg_param_check`);
1215
+ if (paramTypeResult.rows.length === statement.parameters.length) {
1216
+ const paramTypes = /* @__PURE__ */ new Map();
1217
+ for (let i = 0; i < statement.parameters.length; i++) {
1218
+ const typeName = getTypeName(Number(paramTypeResult.rows[i].oid));
1219
+ paramTypes.set(statement.parameters[i].name, typeName);
1220
+ }
1221
+ query.parameterTypes = paramTypes;
1222
+ consola.debug("Parameter types:", Object.fromEntries(paramTypes));
1223
+ }
1224
+ } catch (e) {
1225
+ consola.debug(`Parameter type introspection failed for ${query.id}, using heuristic:`, e.message);
1226
+ }
1208
1227
  let result;
1209
1228
  try {
1210
1229
  await db.query("BEGIN");
@@ -2304,7 +2323,7 @@ var SqlQueryHelper = class {
2304
2323
  get variables() {
2305
2324
  return Array.from(this.query.variables.entries()).map(([name, value]) => ({
2306
2325
  name,
2307
- type: this.generator.mapParameterType(detectParameterType(value), false)
2326
+ type: this.generator.mapParameterType(this.query.parameterTypes?.get(name) ?? detectParameterType(value), false)
2308
2327
  }));
2309
2328
  }
2310
2329
  get sqlQuery() {
@@ -2668,7 +2687,7 @@ async function processProject(projectPath) {
2668
2687
  //#region src/mcp-server.ts
2669
2688
  const server = new Server({
2670
2689
  name: "sqg-mcp",
2671
- version: process.env.npm_package_version ?? "0.8.0"
2690
+ version: process.env.npm_package_version ?? "0.9.0"
2672
2691
  }, { capabilities: {
2673
2692
  tools: {},
2674
2693
  resources: {}
@@ -2997,7 +3016,7 @@ async function startMcpServer() {
2997
3016
 
2998
3017
  //#endregion
2999
3018
  //#region src/sqg.ts
3000
- const version = process.env.npm_package_version ?? "0.8.0";
3019
+ const version = process.env.npm_package_version ?? "0.9.0";
3001
3020
  const description = process.env.npm_package_description ?? "SQG - SQL Query Generator - Type-safe code generation from SQL (https://sqg.dev)";
3002
3021
  consola.level = LogLevels.info;
3003
3022
  const program = new Command().name("sqg").description(`${description}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqg/sqg",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "SQG - SQL Query Generator - Type-safe code generation from SQL (https://sqg.dev)",
5
5
  "type": "module",
6
6
  "bin": {