@deepagents/text2sql 7.0.2 → 7.1.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 (162) hide show
  1. package/README.md +3 -2
  2. package/dist/bin/sql.js +57 -32
  3. package/dist/index.js +793 -498
  4. package/dist/index.js.map +4 -4
  5. package/dist/lib/adapters/adapter.d.ts +23 -1
  6. package/dist/lib/adapters/adapter.d.ts.map +1 -1
  7. package/dist/lib/adapters/bigquery/bigquery-fk.d.ts +0 -11
  8. package/dist/lib/adapters/bigquery/bigquery-fk.d.ts.map +1 -1
  9. package/dist/lib/adapters/bigquery/bigquery-rows.d.ts +22 -0
  10. package/dist/lib/adapters/bigquery/bigquery-rows.d.ts.map +1 -0
  11. package/dist/lib/adapters/bigquery/bigquery.d.ts +1 -1
  12. package/dist/lib/adapters/bigquery/bigquery.d.ts.map +1 -1
  13. package/dist/lib/adapters/bigquery/constraint.bigquery.grounding.d.ts.map +1 -1
  14. package/dist/lib/adapters/bigquery/index.d.ts +6 -13
  15. package/dist/lib/adapters/bigquery/index.d.ts.map +1 -1
  16. package/dist/lib/adapters/bigquery/index.js +244 -51
  17. package/dist/lib/adapters/bigquery/index.js.map +4 -4
  18. package/dist/lib/adapters/bigquery/indexes.bigquery.grounding.d.ts.map +1 -1
  19. package/dist/lib/adapters/bigquery/row-count.bigquery.grounding.d.ts.map +1 -1
  20. package/dist/lib/adapters/bigquery/table.bigquery.grounding.d.ts.map +1 -1
  21. package/dist/lib/adapters/bigquery/view.bigquery.grounding.d.ts.map +1 -1
  22. package/dist/lib/adapters/clickhouse/clickhouse-rows.d.ts +7 -0
  23. package/dist/lib/adapters/clickhouse/clickhouse-rows.d.ts.map +1 -0
  24. package/dist/lib/adapters/clickhouse/clickhouse.d.ts +1 -1
  25. package/dist/lib/adapters/clickhouse/clickhouse.d.ts.map +1 -1
  26. package/dist/lib/adapters/clickhouse/constraint.clickhouse.grounding.d.ts.map +1 -1
  27. package/dist/lib/adapters/clickhouse/index.js +133 -44
  28. package/dist/lib/adapters/clickhouse/index.js.map +4 -4
  29. package/dist/lib/adapters/clickhouse/indexes.clickhouse.grounding.d.ts.map +1 -1
  30. package/dist/lib/adapters/clickhouse/info.clickhouse.grounding.d.ts.map +1 -1
  31. package/dist/lib/adapters/clickhouse/row-count.clickhouse.grounding.d.ts.map +1 -1
  32. package/dist/lib/adapters/clickhouse/table.clickhouse.grounding.d.ts.map +1 -1
  33. package/dist/lib/adapters/clickhouse/view.clickhouse.grounding.d.ts.map +1 -1
  34. package/dist/lib/adapters/duckdb/duckdb.d.ts +1 -1
  35. package/dist/lib/adapters/duckdb/duckdb.d.ts.map +1 -1
  36. package/dist/lib/adapters/duckdb/duckdb.groundings.d.ts.map +1 -1
  37. package/dist/lib/adapters/duckdb/index.d.ts +8 -10
  38. package/dist/lib/adapters/duckdb/index.d.ts.map +1 -1
  39. package/dist/lib/adapters/duckdb/index.js +1549 -1412
  40. package/dist/lib/adapters/duckdb/index.js.map +4 -4
  41. package/dist/lib/adapters/groundings/index.js.map +1 -1
  42. package/dist/lib/adapters/groundings/rows.d.ts +32 -0
  43. package/dist/lib/adapters/groundings/rows.d.ts.map +1 -0
  44. package/dist/lib/adapters/mysql/column-stats.mysql.grounding.d.ts.map +1 -1
  45. package/dist/lib/adapters/mysql/column-values.mysql.grounding.d.ts.map +1 -1
  46. package/dist/lib/adapters/mysql/constraint.mysql.grounding.d.ts.map +1 -1
  47. package/dist/lib/adapters/mysql/index.d.ts +2 -4
  48. package/dist/lib/adapters/mysql/index.d.ts.map +1 -1
  49. package/dist/lib/adapters/mysql/index.js +230 -76
  50. package/dist/lib/adapters/mysql/index.js.map +4 -4
  51. package/dist/lib/adapters/mysql/indexes.mysql.grounding.d.ts.map +1 -1
  52. package/dist/lib/adapters/mysql/info.mysql.grounding.d.ts.map +1 -1
  53. package/dist/lib/adapters/mysql/mysql-rows.d.ts +11 -0
  54. package/dist/lib/adapters/mysql/mysql-rows.d.ts.map +1 -0
  55. package/dist/lib/adapters/mysql/mysql.d.ts +1 -1
  56. package/dist/lib/adapters/mysql/mysql.d.ts.map +1 -1
  57. package/dist/lib/adapters/mysql/row-count.mysql.grounding.d.ts.map +1 -1
  58. package/dist/lib/adapters/mysql/table.mysql.grounding.d.ts +3 -2
  59. package/dist/lib/adapters/mysql/table.mysql.grounding.d.ts.map +1 -1
  60. package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts +2 -2
  61. package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -1
  62. package/dist/lib/adapters/postgres/column-stats.postgres.grounding.d.ts.map +1 -1
  63. package/dist/lib/adapters/postgres/column-values.postgres.grounding.d.ts.map +1 -1
  64. package/dist/lib/adapters/postgres/constraint.postgres.grounding.d.ts.map +1 -1
  65. package/dist/lib/adapters/postgres/index.d.ts +2 -4
  66. package/dist/lib/adapters/postgres/index.d.ts.map +1 -1
  67. package/dist/lib/adapters/postgres/index.js +266 -487
  68. package/dist/lib/adapters/postgres/index.js.map +4 -4
  69. package/dist/lib/adapters/postgres/indexes.postgres.grounding.d.ts +1 -5
  70. package/dist/lib/adapters/postgres/indexes.postgres.grounding.d.ts.map +1 -1
  71. package/dist/lib/adapters/postgres/info.postgres.grounding.d.ts.map +1 -1
  72. package/dist/lib/adapters/postgres/postgres-rows.d.ts +7 -0
  73. package/dist/lib/adapters/postgres/postgres-rows.d.ts.map +1 -0
  74. package/dist/lib/adapters/postgres/postgres.d.ts +6 -1
  75. package/dist/lib/adapters/postgres/postgres.d.ts.map +1 -1
  76. package/dist/lib/adapters/postgres/row-count.postgres.grounding.d.ts.map +1 -1
  77. package/dist/lib/adapters/postgres/table.postgres.grounding.d.ts +5 -4
  78. package/dist/lib/adapters/postgres/table.postgres.grounding.d.ts.map +1 -1
  79. package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts +3 -3
  80. package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts.map +1 -1
  81. package/dist/lib/adapters/posthog/definitions.posthog.grounding.d.ts.map +1 -1
  82. package/dist/lib/adapters/posthog/index.d.ts +4 -5
  83. package/dist/lib/adapters/posthog/index.d.ts.map +1 -1
  84. package/dist/lib/adapters/posthog/index.js +349 -287
  85. package/dist/lib/adapters/posthog/index.js.map +4 -4
  86. package/dist/lib/adapters/posthog/posthog.d.ts +2 -2
  87. package/dist/lib/adapters/posthog/posthog.d.ts.map +1 -1
  88. package/dist/lib/adapters/posthog/posthog.sql-policy.d.ts.map +1 -1
  89. package/dist/lib/adapters/posthog/schema.posthog.grounding.d.ts.map +1 -1
  90. package/dist/lib/adapters/posthog/transport.d.ts.map +1 -1
  91. package/dist/lib/adapters/posthog/types.d.ts +16 -6
  92. package/dist/lib/adapters/posthog/types.d.ts.map +1 -1
  93. package/dist/lib/adapters/spreadsheet/index.js +113 -34
  94. package/dist/lib/adapters/spreadsheet/index.js.map +4 -4
  95. package/dist/lib/adapters/sqlite/column-stats.sqlite.grounding.d.ts.map +1 -1
  96. package/dist/lib/adapters/sqlite/column-values.sqlite.grounding.d.ts.map +1 -1
  97. package/dist/lib/adapters/sqlite/constraint.sqlite.grounding.d.ts.map +1 -1
  98. package/dist/lib/adapters/sqlite/index.js +136 -49
  99. package/dist/lib/adapters/sqlite/index.js.map +4 -4
  100. package/dist/lib/adapters/sqlite/indexes.sqlite.grounding.d.ts.map +1 -1
  101. package/dist/lib/adapters/sqlite/info.sqlite.grounding.d.ts.map +1 -1
  102. package/dist/lib/adapters/sqlite/row-count.sqlite.grounding.d.ts.map +1 -1
  103. package/dist/lib/adapters/sqlite/sqlite-rows.d.ts +41 -0
  104. package/dist/lib/adapters/sqlite/sqlite-rows.d.ts.map +1 -0
  105. package/dist/lib/adapters/sqlite/sqlite.d.ts +1 -1
  106. package/dist/lib/adapters/sqlite/sqlite.d.ts.map +1 -1
  107. package/dist/lib/adapters/sqlite/table.sqlite.grounding.d.ts.map +1 -1
  108. package/dist/lib/adapters/sqlite/view.sqlite.grounding.d.ts.map +1 -1
  109. package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
  110. package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -1
  111. package/dist/lib/adapters/sqlserver/constraint.sqlserver.grounding.d.ts.map +1 -1
  112. package/dist/lib/adapters/sqlserver/index.d.ts +2 -4
  113. package/dist/lib/adapters/sqlserver/index.d.ts.map +1 -1
  114. package/dist/lib/adapters/sqlserver/index.js +223 -455
  115. package/dist/lib/adapters/sqlserver/index.js.map +4 -4
  116. package/dist/lib/adapters/sqlserver/indexes.sqlserver.grounding.d.ts +1 -5
  117. package/dist/lib/adapters/sqlserver/indexes.sqlserver.grounding.d.ts.map +1 -1
  118. package/dist/lib/adapters/sqlserver/info.sqlserver.grounding.d.ts.map +1 -1
  119. package/dist/lib/adapters/sqlserver/row-count.sqlserver.grounding.d.ts.map +1 -1
  120. package/dist/lib/adapters/sqlserver/sqlserver-rows.d.ts +7 -0
  121. package/dist/lib/adapters/sqlserver/sqlserver-rows.d.ts.map +1 -0
  122. package/dist/lib/adapters/sqlserver/sqlserver.d.ts +6 -1
  123. package/dist/lib/adapters/sqlserver/sqlserver.d.ts.map +1 -1
  124. package/dist/lib/adapters/sqlserver/table.sqlserver.grounding.d.ts +4 -3
  125. package/dist/lib/adapters/sqlserver/table.sqlserver.grounding.d.ts.map +1 -1
  126. package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts +3 -3
  127. package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts.map +1 -1
  128. package/dist/lib/agents/sql-transform-plugins.d.ts.map +1 -1
  129. package/dist/lib/checkpoint.d.ts +34 -21
  130. package/dist/lib/checkpoint.d.ts.map +1 -1
  131. package/dist/lib/file-cache.d.ts +6 -1
  132. package/dist/lib/file-cache.d.ts.map +1 -1
  133. package/dist/lib/fs/columns.d.ts +14 -0
  134. package/dist/lib/fs/columns.d.ts.map +1 -0
  135. package/dist/lib/fs/mssql/mssql-fs.d.ts +4 -4
  136. package/dist/lib/fs/mssql/mssql-fs.d.ts.map +1 -1
  137. package/dist/lib/fs/postgres/postgres-fs.d.ts +4 -4
  138. package/dist/lib/fs/postgres/postgres-fs.d.ts.map +1 -1
  139. package/dist/lib/fs/sqlite/sqlite-fs.d.ts +4 -4
  140. package/dist/lib/fs/sqlite/sqlite-fs.d.ts.map +1 -1
  141. package/dist/lib/index-cache.d.ts +4 -3
  142. package/dist/lib/index-cache.d.ts.map +1 -1
  143. package/dist/lib/sql.d.ts.map +1 -1
  144. package/dist/lib/synthesis/decorators/deduplicated-producer.d.ts +1 -2
  145. package/dist/lib/synthesis/decorators/deduplicated-producer.d.ts.map +1 -1
  146. package/dist/lib/synthesis/decorators/filtered-producer.d.ts +0 -2
  147. package/dist/lib/synthesis/decorators/filtered-producer.d.ts.map +1 -1
  148. package/dist/lib/synthesis/decorators/validated-producer.d.ts +1 -3
  149. package/dist/lib/synthesis/decorators/validated-producer.d.ts.map +1 -1
  150. package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts.map +1 -1
  151. package/dist/lib/synthesis/extractors/message-extractor.d.ts.map +1 -1
  152. package/dist/lib/synthesis/extractors/tool-input.d.ts +6 -0
  153. package/dist/lib/synthesis/extractors/tool-input.d.ts.map +1 -0
  154. package/dist/lib/synthesis/index.js +124 -114
  155. package/dist/lib/synthesis/index.js.map +4 -4
  156. package/dist/lib/synthesis/synthesizers/breadth-evolver.d.ts +0 -2
  157. package/dist/lib/synthesis/synthesizers/breadth-evolver.d.ts.map +1 -1
  158. package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts +0 -3
  159. package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts.map +1 -1
  160. package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts +0 -2
  161. package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts.map +1 -1
  162. package/package.json +4 -4
@@ -1,5 +1,6 @@
1
1
  // packages/text2sql/src/lib/adapters/adapter.ts
2
2
  import { format as formatSql } from "sql-formatter";
3
+ import { z } from "zod";
3
4
 
4
5
  // packages/text2sql/src/lib/agents/exceptions.ts
5
6
  var sqlValidationMarker = /* @__PURE__ */ Symbol("SQLValidationError");
@@ -172,6 +173,16 @@ function createGroundingContext(options = {}) {
172
173
  }
173
174
 
174
175
  // packages/text2sql/src/lib/adapters/adapter.ts
176
+ function groundingFor(adapterType, create) {
177
+ return (adapter) => {
178
+ if (!(adapter instanceof adapterType)) {
179
+ throw new Error(
180
+ `A ${adapterType.name} grounding needs a ${adapterType.name} adapter, not ${adapter.constructor.name}.`
181
+ );
182
+ }
183
+ return create(adapter);
184
+ };
185
+ }
175
186
  var Adapter = class {
176
187
  #policyAnalyzer;
177
188
  /**
@@ -432,6 +443,40 @@ var Adapter = class {
432
443
  }
433
444
  return decoded;
434
445
  }
446
+ /**
447
+ * Run an introspection query and check every row against `row`, the shape
448
+ * the driver returns for that query. A row of any other shape throws.
449
+ */
450
+ async runQuery(sql, row) {
451
+ const rows = z.array(row).safeParse(await this.queryRows(sql));
452
+ if (!rows.success) {
453
+ throw new Error(
454
+ `${this.constructor.name} introspection query returned rows of an unexpected shape:
455
+ ${z.prettifyError(rows.error)}
456
+ SQL: ${sql.trim()}`,
457
+ { cause: rows.error }
458
+ );
459
+ }
460
+ return rows.data;
461
+ }
462
+ /**
463
+ * The rows in a driver's execute() result: the result itself when it is an
464
+ * array, otherwise the first array found at one of `paths` (dot-separated,
465
+ * so `recordsets.0` reads `result.recordsets[0]`).
466
+ */
467
+ rowsFrom(result, paths) {
468
+ if (Array.isArray(result)) return result;
469
+ for (const path of paths) {
470
+ const rows = path.split(".").reduce(
471
+ (value, key) => typeof value === "object" && value !== null ? Reflect.get(value, key) : void 0,
472
+ result
473
+ );
474
+ if (Array.isArray(rows)) return rows;
475
+ }
476
+ throw new Error(
477
+ `${this.constructor.name} execute() must return an array of rows or an object holding one at ${paths.map((path) => `result.${path}`).join(", ")}.`
478
+ );
479
+ }
435
480
  /**
436
481
  * Convert unknown database value to number.
437
482
  * Handles number, bigint, and string types.
@@ -992,6 +1037,34 @@ var TableGrounding = class extends AbstractGrounding {
992
1037
  };
993
1038
 
994
1039
  // packages/text2sql/src/lib/adapters/mysql/column-stats.mysql.grounding.ts
1040
+ import { z as z4 } from "zod";
1041
+
1042
+ // packages/text2sql/src/lib/adapters/groundings/rows.ts
1043
+ import { z as z2 } from "zod";
1044
+ var nameRow = z2.object({ name: z2.string() });
1045
+ var versionRow = z2.object({ version: z2.string() });
1046
+ var databaseRow = z2.object({ db: z2.string() });
1047
+ var viewDefinitionRow = z2.object({
1048
+ definition: z2.string().nullable()
1049
+ });
1050
+ var distinctValueRow = z2.object({ value: z2.unknown() });
1051
+ var textValueRow = z2.object({ value: z2.string() });
1052
+ var numericValue = z2.union([z2.number(), z2.bigint(), z2.string()]);
1053
+
1054
+ // packages/text2sql/src/lib/adapters/mysql/mysql-rows.ts
1055
+ import { z as z3 } from "zod";
1056
+ var currentDatabaseRow = z3.object({ db: z3.string().nullable() });
1057
+ var columnRow = z3.object({
1058
+ COLUMN_NAME: z3.string().nullable(),
1059
+ DATA_TYPE: z3.string().nullable()
1060
+ });
1061
+
1062
+ // packages/text2sql/src/lib/adapters/mysql/column-stats.mysql.grounding.ts
1063
+ var statsRow = z4.object({
1064
+ min_value: z4.string().nullable(),
1065
+ max_value: z4.string().nullable(),
1066
+ null_fraction: numericValue.nullable()
1067
+ });
995
1068
  var MysqlColumnStatsGrounding = class extends ColumnStatsGrounding {
996
1069
  #adapter;
997
1070
  constructor(adapter, config = {}) {
@@ -1007,13 +1080,16 @@ var MysqlColumnStatsGrounding = class extends ColumnStatsGrounding {
1007
1080
  const tableIdentifier = `${this.#adapter.quoteIdentifier(database)}.${this.#adapter.quoteIdentifier(table2)}`;
1008
1081
  const columnIdentifier = this.#adapter.quoteIdentifier(column2.name);
1009
1082
  try {
1010
- const rows = await this.#adapter.runQuery(`
1083
+ const rows = await this.#adapter.runQuery(
1084
+ `
1011
1085
  SELECT
1012
1086
  CAST(MIN(${columnIdentifier}) AS CHAR) AS min_value,
1013
1087
  CAST(MAX(${columnIdentifier}) AS CHAR) AS max_value,
1014
1088
  AVG(CASE WHEN ${columnIdentifier} IS NULL THEN 1.0 ELSE 0.0 END) AS null_fraction
1015
1089
  FROM ${tableIdentifier}
1016
- `);
1090
+ `,
1091
+ statsRow
1092
+ );
1017
1093
  if (!rows.length) {
1018
1094
  return void 0;
1019
1095
  }
@@ -1056,13 +1132,16 @@ var MysqlColumnStatsGrounding = class extends ColumnStatsGrounding {
1056
1132
  }
1057
1133
  async #getCurrentDatabase() {
1058
1134
  const rows = await this.#adapter.runQuery(
1059
- "SELECT DATABASE() AS db"
1135
+ "SELECT DATABASE() AS db",
1136
+ currentDatabaseRow
1060
1137
  );
1061
1138
  return rows[0]?.db ?? "";
1062
1139
  }
1063
1140
  };
1064
1141
 
1065
1142
  // packages/text2sql/src/lib/adapters/mysql/column-values.mysql.grounding.ts
1143
+ import { z as z5 } from "zod";
1144
+ var columnTypeRow = z5.object({ COLUMN_TYPE: z5.string().nullable() });
1066
1145
  var MysqlColumnValuesGrounding = class extends ColumnValuesGrounding {
1067
1146
  #adapter;
1068
1147
  constructor(adapter, config = {}) {
@@ -1075,13 +1154,16 @@ var MysqlColumnValuesGrounding = class extends ColumnValuesGrounding {
1075
1154
  async collectEnumValues(tableName, column2) {
1076
1155
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1077
1156
  const database = schema || await this.#getCurrentDatabase();
1078
- const rows = await this.#adapter.runQuery(`
1157
+ const rows = await this.#adapter.runQuery(
1158
+ `
1079
1159
  SELECT COLUMN_TYPE
1080
1160
  FROM INFORMATION_SCHEMA.COLUMNS
1081
1161
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1082
1162
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1083
1163
  AND COLUMN_NAME = '${this.#adapter.escapeString(column2.name)}'
1084
- `);
1164
+ `,
1165
+ columnTypeRow
1166
+ );
1085
1167
  const columnType = rows[0]?.COLUMN_TYPE;
1086
1168
  if (!columnType) return void 0;
1087
1169
  const enumMatch = columnType.match(/^enum\((.+)\)$/i);
@@ -1098,12 +1180,15 @@ var MysqlColumnValuesGrounding = class extends ColumnValuesGrounding {
1098
1180
  const columnIdentifier = this.#adapter.quoteIdentifier(column2.name);
1099
1181
  const limit = this.lowCardinalityLimit + 1;
1100
1182
  try {
1101
- const rows = await this.#adapter.runQuery(`
1183
+ const rows = await this.#adapter.runQuery(
1184
+ `
1102
1185
  SELECT DISTINCT ${columnIdentifier} AS value
1103
1186
  FROM ${tableIdentifier}
1104
1187
  WHERE ${columnIdentifier} IS NOT NULL
1105
1188
  LIMIT ${limit}
1106
- `);
1189
+ `,
1190
+ distinctValueRow
1191
+ );
1107
1192
  if (!rows.length || rows.length > this.lowCardinalityLimit) {
1108
1193
  return void 0;
1109
1194
  }
@@ -1158,13 +1243,36 @@ var MysqlColumnValuesGrounding = class extends ColumnValuesGrounding {
1158
1243
  }
1159
1244
  async #getCurrentDatabase() {
1160
1245
  const rows = await this.#adapter.runQuery(
1161
- "SELECT DATABASE() AS db"
1246
+ "SELECT DATABASE() AS db",
1247
+ currentDatabaseRow
1162
1248
  );
1163
1249
  return rows[0]?.db ?? "";
1164
1250
  }
1165
1251
  };
1166
1252
 
1167
1253
  // packages/text2sql/src/lib/adapters/mysql/constraint.mysql.grounding.ts
1254
+ import { z as z6 } from "zod";
1255
+ var constraintRow = z6.object({
1256
+ CONSTRAINT_NAME: z6.string().nullable(),
1257
+ CONSTRAINT_TYPE: z6.string().nullable(),
1258
+ COLUMN_NAME: z6.string().nullable(),
1259
+ REFERENCED_TABLE_SCHEMA: z6.string().nullable(),
1260
+ REFERENCED_TABLE_NAME: z6.string().nullable(),
1261
+ REFERENCED_COLUMN_NAME: z6.string().nullable()
1262
+ });
1263
+ var columnConstraintRow = z6.object({
1264
+ COLUMN_NAME: z6.string().nullable(),
1265
+ IS_NULLABLE: z6.string().nullable(),
1266
+ COLUMN_DEFAULT: z6.string().nullable()
1267
+ });
1268
+ var checkConstraintRow = z6.object({
1269
+ CONSTRAINT_NAME: z6.string().nullable(),
1270
+ CHECK_CLAUSE: z6.string().nullable()
1271
+ });
1272
+ var checkTableRow = z6.object({
1273
+ CONSTRAINT_NAME: z6.string(),
1274
+ TABLE_NAME: z6.string()
1275
+ });
1168
1276
  var MysqlConstraintGrounding = class extends ConstraintGrounding {
1169
1277
  #adapter;
1170
1278
  constructor(adapter, config = {}) {
@@ -1175,7 +1283,8 @@ var MysqlConstraintGrounding = class extends ConstraintGrounding {
1175
1283
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1176
1284
  const database = schema || await this.#getCurrentDatabase();
1177
1285
  const constraints2 = [];
1178
- const constraintRows = await this.#adapter.runQuery(`
1286
+ const constraintRows = await this.#adapter.runQuery(
1287
+ `
1179
1288
  SELECT
1180
1289
  tc.CONSTRAINT_NAME,
1181
1290
  tc.CONSTRAINT_TYPE,
@@ -1192,7 +1301,9 @@ var MysqlConstraintGrounding = class extends ConstraintGrounding {
1192
1301
  AND tc.TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1193
1302
  AND tc.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'UNIQUE', 'FOREIGN KEY')
1194
1303
  ORDER BY tc.CONSTRAINT_NAME, kcu.ORDINAL_POSITION
1195
- `);
1304
+ `,
1305
+ constraintRow
1306
+ );
1196
1307
  const constraintMap = /* @__PURE__ */ new Map();
1197
1308
  for (const row of constraintRows) {
1198
1309
  if (!row.CONSTRAINT_NAME || !row.COLUMN_NAME) continue;
@@ -1228,12 +1339,15 @@ var MysqlConstraintGrounding = class extends ConstraintGrounding {
1228
1339
  referencedColumns: data.referencedColumns
1229
1340
  });
1230
1341
  }
1231
- const columnRows = await this.#adapter.runQuery(`
1342
+ const columnRows = await this.#adapter.runQuery(
1343
+ `
1232
1344
  SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_DEFAULT
1233
1345
  FROM INFORMATION_SCHEMA.COLUMNS
1234
1346
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1235
1347
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1236
- `);
1348
+ `,
1349
+ columnConstraintRow
1350
+ );
1237
1351
  const pkConstraint = constraints2.find((c) => c.type === "PRIMARY_KEY");
1238
1352
  const pkColumns = new Set(pkConstraint?.columns ?? []);
1239
1353
  for (const row of columnRows) {
@@ -1255,18 +1369,24 @@ var MysqlConstraintGrounding = class extends ConstraintGrounding {
1255
1369
  }
1256
1370
  }
1257
1371
  try {
1258
- const checkRows = await this.#adapter.runQuery(`
1372
+ const checkRows = await this.#adapter.runQuery(
1373
+ `
1259
1374
  SELECT CONSTRAINT_NAME, CHECK_CLAUSE
1260
1375
  FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS
1261
1376
  WHERE CONSTRAINT_SCHEMA = '${this.#adapter.escapeString(database)}'
1262
- `);
1263
- const checkTableRows = await this.#adapter.runQuery(`
1377
+ `,
1378
+ checkConstraintRow
1379
+ );
1380
+ const checkTableRows = await this.#adapter.runQuery(
1381
+ `
1264
1382
  SELECT CONSTRAINT_NAME, TABLE_NAME
1265
1383
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
1266
1384
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1267
1385
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1268
1386
  AND CONSTRAINT_TYPE = 'CHECK'
1269
- `);
1387
+ `,
1388
+ checkTableRow
1389
+ );
1270
1390
  const checkTableMap = new Map(
1271
1391
  checkTableRows.map((r) => [r.CONSTRAINT_NAME, r.TABLE_NAME])
1272
1392
  );
@@ -1297,13 +1417,22 @@ var MysqlConstraintGrounding = class extends ConstraintGrounding {
1297
1417
  }
1298
1418
  async #getCurrentDatabase() {
1299
1419
  const rows = await this.#adapter.runQuery(
1300
- "SELECT DATABASE() AS db"
1420
+ "SELECT DATABASE() AS db",
1421
+ currentDatabaseRow
1301
1422
  );
1302
1423
  return rows[0]?.db ?? "";
1303
1424
  }
1304
1425
  };
1305
1426
 
1306
1427
  // packages/text2sql/src/lib/adapters/mysql/indexes.mysql.grounding.ts
1428
+ import { z as z7 } from "zod";
1429
+ var indexRow = z7.object({
1430
+ INDEX_NAME: z7.string().nullable(),
1431
+ COLUMN_NAME: z7.string().nullable(),
1432
+ NON_UNIQUE: numericValue.nullable(),
1433
+ INDEX_TYPE: z7.string().nullable(),
1434
+ SEQ_IN_INDEX: numericValue.nullable()
1435
+ });
1307
1436
  var MysqlIndexesGrounding = class extends IndexesGrounding {
1308
1437
  #adapter;
1309
1438
  constructor(adapter, config = {}) {
@@ -1313,7 +1442,8 @@ var MysqlIndexesGrounding = class extends IndexesGrounding {
1313
1442
  async getIndexes(tableName) {
1314
1443
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1315
1444
  const database = schema || await this.#getCurrentDatabase();
1316
- const rows = await this.#adapter.runQuery(`
1445
+ const rows = await this.#adapter.runQuery(
1446
+ `
1317
1447
  SELECT
1318
1448
  INDEX_NAME,
1319
1449
  COLUMN_NAME,
@@ -1324,7 +1454,9 @@ var MysqlIndexesGrounding = class extends IndexesGrounding {
1324
1454
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1325
1455
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1326
1456
  ORDER BY INDEX_NAME, SEQ_IN_INDEX
1327
- `);
1457
+ `,
1458
+ indexRow
1459
+ );
1328
1460
  const indexMap = /* @__PURE__ */ new Map();
1329
1461
  for (const row of rows) {
1330
1462
  if (!row.INDEX_NAME) continue;
@@ -1333,7 +1465,7 @@ var MysqlIndexesGrounding = class extends IndexesGrounding {
1333
1465
  index2 = {
1334
1466
  name: row.INDEX_NAME,
1335
1467
  columns: [],
1336
- unique: row.NON_UNIQUE === 0,
1468
+ unique: this.#adapter.toNumber(row.NON_UNIQUE) === 0,
1337
1469
  type: row.INDEX_TYPE ?? void 0
1338
1470
  };
1339
1471
  indexMap.set(row.INDEX_NAME, index2);
@@ -1346,7 +1478,8 @@ var MysqlIndexesGrounding = class extends IndexesGrounding {
1346
1478
  }
1347
1479
  async #getCurrentDatabase() {
1348
1480
  const rows = await this.#adapter.runQuery(
1349
- "SELECT DATABASE() AS db"
1481
+ "SELECT DATABASE() AS db",
1482
+ currentDatabaseRow
1350
1483
  );
1351
1484
  return rows[0]?.db ?? "";
1352
1485
  }
@@ -1361,10 +1494,8 @@ var MysqlInfoGrounding = class extends InfoGrounding {
1361
1494
  }
1362
1495
  async collectInfo() {
1363
1496
  const [versionRows, dbRows] = await Promise.all([
1364
- this.#adapter.runQuery(
1365
- "SELECT VERSION() AS version"
1366
- ),
1367
- this.#adapter.runQuery("SELECT DATABASE() AS db")
1497
+ this.#adapter.runQuery("SELECT VERSION() AS version", versionRow),
1498
+ this.#adapter.runQuery("SELECT DATABASE() AS db", currentDatabaseRow)
1368
1499
  ]);
1369
1500
  const version = versionRows[0]?.version;
1370
1501
  const database = dbRows[0]?.db ?? void 0;
@@ -1823,9 +1954,6 @@ var Mysql = class extends Adapter {
1823
1954
  return JSON.stringify(formatMysqlError(sql, error));
1824
1955
  }
1825
1956
  }
1826
- async runQuery(sql) {
1827
- return this.#runIntrospectionQuery(sql);
1828
- }
1829
1957
  quoteIdentifier(name) {
1830
1958
  return `\`${name.replace(/`/g, "``")}\``;
1831
1959
  }
@@ -1844,24 +1972,18 @@ var Mysql = class extends Adapter {
1844
1972
  get databases() {
1845
1973
  return this.#options.databases;
1846
1974
  }
1847
- async #runIntrospectionQuery(sql) {
1975
+ async queryRows(sql) {
1848
1976
  const result = await this.#options.execute(sql);
1849
- if (Array.isArray(result)) {
1850
- if (result.length >= 1 && Array.isArray(result[0]) && (result.length === 1 || result.length === 2 && !Array.isArray(result[1]?.[0]))) {
1851
- return result[0];
1852
- }
1853
- return result;
1854
- }
1855
- if (result && typeof result === "object" && "rows" in result && Array.isArray(result.rows)) {
1856
- return result.rows;
1977
+ if (Array.isArray(result) && result.length >= 1 && Array.isArray(result[0]) && (result.length === 1 || result.length === 2 && !Array.isArray(result[1]?.[0]))) {
1978
+ return result[0];
1857
1979
  }
1858
- throw new Error(
1859
- "Mysql adapter execute() must return an array of rows or an object with a rows array when introspecting."
1860
- );
1980
+ return this.rowsFrom(result, ["rows"]);
1861
1981
  }
1862
1982
  };
1863
1983
 
1864
1984
  // packages/text2sql/src/lib/adapters/mysql/row-count.mysql.grounding.ts
1985
+ import { z as z8 } from "zod";
1986
+ var countRow = z8.object({ count: numericValue });
1865
1987
  var MysqlRowCountGrounding = class extends RowCountGrounding {
1866
1988
  #adapter;
1867
1989
  constructor(adapter, config = {}) {
@@ -1873,34 +1995,35 @@ var MysqlRowCountGrounding = class extends RowCountGrounding {
1873
1995
  const database = schema || await this.#getCurrentDatabase();
1874
1996
  const tableIdentifier = `${this.#adapter.quoteIdentifier(database)}.${this.#adapter.quoteIdentifier(table2)}`;
1875
1997
  try {
1876
- const rows = await this.#adapter.runQuery(`SELECT COUNT(*) AS count FROM ${tableIdentifier}`);
1877
- return this.#toNumber(rows[0]?.count);
1998
+ const rows = await this.#adapter.runQuery(
1999
+ `SELECT COUNT(*) AS count FROM ${tableIdentifier}`,
2000
+ countRow
2001
+ );
2002
+ return this.#adapter.toNumber(rows[0]?.count);
1878
2003
  } catch {
1879
2004
  return void 0;
1880
2005
  }
1881
2006
  }
1882
- #toNumber(value) {
1883
- if (typeof value === "number" && Number.isFinite(value)) {
1884
- return value;
1885
- }
1886
- if (typeof value === "bigint") {
1887
- return Number(value);
1888
- }
1889
- if (typeof value === "string" && value.trim() !== "") {
1890
- const parsed = Number(value);
1891
- return Number.isFinite(parsed) ? parsed : void 0;
1892
- }
1893
- return void 0;
1894
- }
1895
2007
  async #getCurrentDatabase() {
1896
2008
  const rows = await this.#adapter.runQuery(
1897
- "SELECT DATABASE() AS db"
2009
+ "SELECT DATABASE() AS db",
2010
+ currentDatabaseRow
1898
2011
  );
1899
2012
  return rows[0]?.db ?? "";
1900
2013
  }
1901
2014
  };
1902
2015
 
1903
2016
  // packages/text2sql/src/lib/adapters/mysql/table.mysql.grounding.ts
2017
+ import { z as z9 } from "zod";
2018
+ var relationshipRow = z9.object({
2019
+ CONSTRAINT_NAME: z9.string().nullable(),
2020
+ TABLE_SCHEMA: z9.string().nullable(),
2021
+ TABLE_NAME: z9.string().nullable(),
2022
+ COLUMN_NAME: z9.string().nullable(),
2023
+ REFERENCED_TABLE_SCHEMA: z9.string().nullable(),
2024
+ REFERENCED_TABLE_NAME: z9.string().nullable(),
2025
+ REFERENCED_COLUMN_NAME: z9.string().nullable()
2026
+ });
1904
2027
  var MysqlTableGrounding = class extends TableGrounding {
1905
2028
  #adapter;
1906
2029
  #databases;
@@ -1910,25 +2033,31 @@ var MysqlTableGrounding = class extends TableGrounding {
1910
2033
  this.#databases = config.databases ?? adapter.databases;
1911
2034
  }
1912
2035
  async getAllTableNames() {
1913
- const rows = await this.#adapter.runQuery(`
2036
+ const rows = await this.#adapter.runQuery(
2037
+ `
1914
2038
  SELECT DISTINCT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS name
1915
2039
  FROM INFORMATION_SCHEMA.TABLES
1916
2040
  WHERE TABLE_TYPE = 'BASE TABLE'
1917
2041
  ${this.#buildDatabaseFilter("TABLE_SCHEMA")}
1918
2042
  ORDER BY name
1919
- `);
2043
+ `,
2044
+ nameRow
2045
+ );
1920
2046
  return rows.map((r) => r.name);
1921
2047
  }
1922
2048
  async getTable(tableName) {
1923
2049
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1924
2050
  const database = schema || await this.#getCurrentDatabase();
1925
- const columns = await this.#adapter.runQuery(`
2051
+ const columns = await this.#adapter.runQuery(
2052
+ `
1926
2053
  SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE
1927
2054
  FROM INFORMATION_SCHEMA.COLUMNS
1928
2055
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1929
2056
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1930
2057
  ORDER BY ORDINAL_POSITION
1931
- `);
2058
+ `,
2059
+ columnRow
2060
+ );
1932
2061
  return {
1933
2062
  name: tableName,
1934
2063
  schema: database,
@@ -1942,7 +2071,8 @@ var MysqlTableGrounding = class extends TableGrounding {
1942
2071
  async findOutgoingRelations(tableName) {
1943
2072
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1944
2073
  const database = schema || await this.#getCurrentDatabase();
1945
- const rows = await this.#adapter.runQuery(`
2074
+ const rows = await this.#adapter.runQuery(
2075
+ `
1946
2076
  SELECT
1947
2077
  kcu.CONSTRAINT_NAME,
1948
2078
  kcu.TABLE_SCHEMA,
@@ -1956,13 +2086,16 @@ var MysqlTableGrounding = class extends TableGrounding {
1956
2086
  AND kcu.TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1957
2087
  AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
1958
2088
  ORDER BY kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION
1959
- `);
2089
+ `,
2090
+ relationshipRow
2091
+ );
1960
2092
  return this.#groupRelationships(rows);
1961
2093
  }
1962
2094
  async findIncomingRelations(tableName) {
1963
2095
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1964
2096
  const database = schema || await this.#getCurrentDatabase();
1965
- const rows = await this.#adapter.runQuery(`
2097
+ const rows = await this.#adapter.runQuery(
2098
+ `
1966
2099
  SELECT
1967
2100
  kcu.CONSTRAINT_NAME,
1968
2101
  kcu.TABLE_SCHEMA,
@@ -1975,7 +2108,9 @@ var MysqlTableGrounding = class extends TableGrounding {
1975
2108
  WHERE kcu.REFERENCED_TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
1976
2109
  AND kcu.REFERENCED_TABLE_NAME = '${this.#adapter.escapeString(table2)}'
1977
2110
  ORDER BY kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION
1978
- `);
2111
+ `,
2112
+ relationshipRow
2113
+ );
1979
2114
  return this.#groupRelationships(rows);
1980
2115
  }
1981
2116
  #groupRelationships(rows) {
@@ -2009,12 +2144,16 @@ var MysqlTableGrounding = class extends TableGrounding {
2009
2144
  }
2010
2145
  async #getCurrentDatabase() {
2011
2146
  const rows = await this.#adapter.runQuery(
2012
- "SELECT DATABASE() AS db"
2147
+ "SELECT DATABASE() AS db",
2148
+ currentDatabaseRow
2013
2149
  );
2014
2150
  return rows[0]?.db ?? "";
2015
2151
  }
2016
2152
  };
2017
2153
 
2154
+ // packages/text2sql/src/lib/adapters/mysql/view.mysql.grounding.ts
2155
+ import { z as z10 } from "zod";
2156
+
2018
2157
  // packages/text2sql/src/lib/adapters/groundings/view.grounding.ts
2019
2158
  var ViewGrounding = class extends AbstractGrounding {
2020
2159
  #filter;
@@ -2071,6 +2210,7 @@ var ViewGrounding = class extends AbstractGrounding {
2071
2210
  };
2072
2211
 
2073
2212
  // packages/text2sql/src/lib/adapters/mysql/view.mysql.grounding.ts
2213
+ var viewDefinitionRow2 = z10.object({ VIEW_DEFINITION: z10.string().nullable() });
2074
2214
  var MysqlViewGrounding = class extends ViewGrounding {
2075
2215
  #adapter;
2076
2216
  #databases;
@@ -2080,33 +2220,42 @@ var MysqlViewGrounding = class extends ViewGrounding {
2080
2220
  this.#databases = config.databases ?? adapter.databases;
2081
2221
  }
2082
2222
  async getAllViewNames() {
2083
- const rows = await this.#adapter.runQuery(`
2223
+ const rows = await this.#adapter.runQuery(
2224
+ `
2084
2225
  SELECT DISTINCT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS name
2085
2226
  FROM INFORMATION_SCHEMA.VIEWS
2086
2227
  WHERE 1=1
2087
2228
  ${this.#buildDatabaseFilter("TABLE_SCHEMA")}
2088
2229
  ORDER BY name
2089
- `);
2230
+ `,
2231
+ nameRow
2232
+ );
2090
2233
  return rows.map((r) => r.name);
2091
2234
  }
2092
2235
  async getView(viewName) {
2093
2236
  const { schema, table: table2 } = this.#adapter.parseTableName(viewName);
2094
2237
  const database = schema || await this.#getCurrentDatabase();
2095
- const columns = await this.#adapter.runQuery(`
2238
+ const columns = await this.#adapter.runQuery(
2239
+ `
2096
2240
  SELECT COLUMN_NAME, DATA_TYPE
2097
2241
  FROM INFORMATION_SCHEMA.COLUMNS
2098
2242
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
2099
2243
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
2100
2244
  ORDER BY ORDINAL_POSITION
2101
- `);
2245
+ `,
2246
+ columnRow
2247
+ );
2102
2248
  let definition;
2103
2249
  if (this.includeDefinition) {
2104
- const viewRows = await this.#adapter.runQuery(`
2250
+ const viewRows = await this.#adapter.runQuery(
2251
+ `
2105
2252
  SELECT VIEW_DEFINITION
2106
2253
  FROM INFORMATION_SCHEMA.VIEWS
2107
2254
  WHERE TABLE_SCHEMA = '${this.#adapter.escapeString(database)}'
2108
2255
  AND TABLE_NAME = '${this.#adapter.escapeString(table2)}'
2109
- `);
2256
+ `,
2257
+ viewDefinitionRow2
2258
+ );
2110
2259
  definition = viewRows[0]?.VIEW_DEFINITION ?? void 0;
2111
2260
  }
2112
2261
  return {
@@ -2130,7 +2279,8 @@ var MysqlViewGrounding = class extends ViewGrounding {
2130
2279
  }
2131
2280
  async #getCurrentDatabase() {
2132
2281
  const rows = await this.#adapter.runQuery(
2133
- "SELECT DATABASE() AS db"
2282
+ "SELECT DATABASE() AS db",
2283
+ currentDatabaseRow
2134
2284
  );
2135
2285
  return rows[0]?.db ?? "";
2136
2286
  }
@@ -2138,15 +2288,19 @@ var MysqlViewGrounding = class extends ViewGrounding {
2138
2288
 
2139
2289
  // packages/text2sql/src/lib/adapters/mysql/index.ts
2140
2290
  function tables(config = {}) {
2141
- return (adapter) => new MysqlTableGrounding(adapter, config);
2291
+ return groundingFor(
2292
+ Mysql,
2293
+ (adapter) => new MysqlTableGrounding(adapter, config)
2294
+ );
2142
2295
  }
2143
2296
  function info(config = {}) {
2144
2297
  return (adapter) => new MysqlInfoGrounding(adapter, config);
2145
2298
  }
2146
2299
  function views(config = {}) {
2147
- return (adapter) => {
2148
- return new MysqlViewGrounding(adapter, config);
2149
- };
2300
+ return groundingFor(
2301
+ Mysql,
2302
+ (adapter) => new MysqlViewGrounding(adapter, config)
2303
+ );
2150
2304
  }
2151
2305
  function columnStats(config = {}) {
2152
2306
  return (adapter) => {