@deepagents/text2sql 6.1.2 → 7.0.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/README.md +16 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/lib/adapters/bigquery/index.js +87 -7
- package/dist/lib/adapters/bigquery/index.js.map +3 -3
- package/dist/lib/adapters/clickhouse/index.js +1 -1
- package/dist/lib/adapters/clickhouse/index.js.map +2 -2
- package/dist/lib/adapters/duckdb/duckdb-identifiers.d.ts +8 -0
- package/dist/lib/adapters/duckdb/duckdb-identifiers.d.ts.map +1 -0
- package/dist/lib/adapters/duckdb/duckdb.d.ts +40 -0
- package/dist/lib/adapters/duckdb/duckdb.d.ts.map +1 -0
- package/dist/lib/adapters/duckdb/duckdb.groundings.d.ts +58 -0
- package/dist/lib/adapters/duckdb/duckdb.groundings.d.ts.map +1 -0
- package/dist/lib/adapters/duckdb/duckdb.sql-policy.d.ts +8 -0
- package/dist/lib/adapters/duckdb/duckdb.sql-policy.d.ts.map +1 -0
- package/dist/lib/adapters/duckdb/index.d.ts +34 -0
- package/dist/lib/adapters/duckdb/index.d.ts.map +1 -0
- package/dist/lib/adapters/duckdb/index.js +1933 -0
- package/dist/lib/adapters/duckdb/index.js.map +7 -0
- package/dist/lib/adapters/mysql/index.js +87 -7
- package/dist/lib/adapters/mysql/index.js.map +3 -3
- package/dist/lib/adapters/parser-sql-policy.d.ts.map +1 -1
- package/dist/lib/adapters/postgres/index.js +87 -7
- package/dist/lib/adapters/postgres/index.js.map +3 -3
- package/dist/lib/adapters/postgres/postgres-parser-workaround.d.ts +8 -0
- package/dist/lib/adapters/postgres/postgres-parser-workaround.d.ts.map +1 -0
- package/dist/lib/adapters/posthog/index.js +1 -1
- package/dist/lib/adapters/posthog/index.js.map +2 -2
- package/dist/lib/adapters/spreadsheet/index.js +87 -7
- package/dist/lib/adapters/spreadsheet/index.js.map +3 -3
- package/dist/lib/adapters/sqlite/index.js +87 -7
- package/dist/lib/adapters/sqlite/index.js.map +3 -3
- package/dist/lib/adapters/sqlserver/index.js +87 -7
- package/dist/lib/adapters/sqlserver/index.js.map +3 -3
- package/dist/lib/agents/question.agent.d.ts.map +1 -1
- package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts.map +1 -1
- package/dist/lib/synthesis/index.js.map +2 -2
- package/package.json +18 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-sql-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/parser-sql-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser-sql-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/parser-sql-policy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,aAAa,GACvB,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AASjE,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAWF;;;GAGG;AACH,8BAAsB,uBAAwB,YAAW,iBAAiB;;IACxE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAM;IAEvD,OAAO,CACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CAiHtC"}
|
|
@@ -398,7 +398,7 @@ var Adapter = class {
|
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
400
|
#decodeShellEscapes(sql) {
|
|
401
|
-
return sql.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\([()
|
|
401
|
+
return sql.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\([().*$])/g, "$1").replace(/\\(?=$)/gm, "");
|
|
402
402
|
}
|
|
403
403
|
#cachedAllowedEntities = null;
|
|
404
404
|
async #resolveScope() {
|
|
@@ -1436,6 +1436,71 @@ function buildScopeParseErrorPayload(sql, parserDialect, error) {
|
|
|
1436
1436
|
};
|
|
1437
1437
|
}
|
|
1438
1438
|
|
|
1439
|
+
// packages/text2sql/src/lib/adapters/postgres/postgres-parser-workaround.ts
|
|
1440
|
+
var TYPE_BEFORE_LITERAL = /(?<type>(?:pg_catalog\.)?[A-Za-z_][A-Za-z0-9_$]*(?:\s+(?:varying|precision))?(?:\s*\(\s*\d+(?:\s*,\s*\d+)?\s*\))?(?:\s+(?:with|without)\s+time\s+zone)?)\s*$/i;
|
|
1441
|
+
var TIME_ZONE_SUFFIX = /^\s+time\s+zone\s+/i;
|
|
1442
|
+
var TIME_BEFORE_SUFFIX = /(?<type>time(?:stamp)?(?:\s*\(\s*\d+\s*\))?)\s+(?<qualifier>with|without)$/i;
|
|
1443
|
+
function recoverPostgresTypedLiteralParserGap(sql, error) {
|
|
1444
|
+
const errorOffset = parserErrorOffset(error);
|
|
1445
|
+
if (errorOffset === null) return null;
|
|
1446
|
+
const prefix = sql.slice(0, errorOffset);
|
|
1447
|
+
let literalStart = errorOffset;
|
|
1448
|
+
let literalEnd = findLiteralEnd(sql, literalStart);
|
|
1449
|
+
let typeMatch = TYPE_BEFORE_LITERAL.exec(prefix);
|
|
1450
|
+
let type = typeMatch?.groups?.type;
|
|
1451
|
+
if (literalEnd === null) {
|
|
1452
|
+
const suffixMatch = TIME_ZONE_SUFFIX.exec(sql.slice(errorOffset));
|
|
1453
|
+
typeMatch = TIME_BEFORE_SUFFIX.exec(prefix);
|
|
1454
|
+
type = typeMatch?.groups?.type && typeMatch.groups.qualifier && suffixMatch ? `${typeMatch.groups.type} ${typeMatch.groups.qualifier} TIME ZONE` : void 0;
|
|
1455
|
+
literalStart = errorOffset + (suffixMatch?.[0].length ?? 0);
|
|
1456
|
+
literalEnd = findLiteralEnd(sql, literalStart);
|
|
1457
|
+
}
|
|
1458
|
+
if (!type || typeMatch?.index === void 0 || literalEnd === null)
|
|
1459
|
+
return null;
|
|
1460
|
+
return prefix.slice(0, typeMatch.index) + `CAST(${sql.slice(literalStart, literalEnd)} AS ${parserType(type)})` + sql.slice(literalEnd);
|
|
1461
|
+
}
|
|
1462
|
+
function parserErrorOffset(error) {
|
|
1463
|
+
if (typeof error !== "object" || error === null) return null;
|
|
1464
|
+
const location = Reflect.get(error, "location");
|
|
1465
|
+
if (typeof location !== "object" || location === null) return null;
|
|
1466
|
+
const start = Reflect.get(location, "start");
|
|
1467
|
+
if (typeof start !== "object" || start === null) return null;
|
|
1468
|
+
const offset = Reflect.get(start, "offset");
|
|
1469
|
+
return typeof offset === "number" ? offset : null;
|
|
1470
|
+
}
|
|
1471
|
+
function findLiteralEnd(sql, start) {
|
|
1472
|
+
if (sql[start] !== "'") {
|
|
1473
|
+
const delimiter = /^\$(?:[A-Za-z_][A-Za-z0-9_]*)?\$/.exec(
|
|
1474
|
+
sql.slice(start)
|
|
1475
|
+
)?.[0];
|
|
1476
|
+
if (!delimiter) return null;
|
|
1477
|
+
const end = sql.indexOf(delimiter, start + delimiter.length);
|
|
1478
|
+
return end === -1 ? null : end + delimiter.length;
|
|
1479
|
+
}
|
|
1480
|
+
let offset = start + 1;
|
|
1481
|
+
while (offset < sql.length) {
|
|
1482
|
+
if (sql[offset] === "\\") {
|
|
1483
|
+
offset += 2;
|
|
1484
|
+
continue;
|
|
1485
|
+
}
|
|
1486
|
+
if (sql[offset] !== "'") {
|
|
1487
|
+
offset++;
|
|
1488
|
+
continue;
|
|
1489
|
+
}
|
|
1490
|
+
if (sql[offset + 1] === "'") {
|
|
1491
|
+
offset += 2;
|
|
1492
|
+
continue;
|
|
1493
|
+
}
|
|
1494
|
+
return offset + 1;
|
|
1495
|
+
}
|
|
1496
|
+
return null;
|
|
1497
|
+
}
|
|
1498
|
+
function parserType(type) {
|
|
1499
|
+
const unqualified = type.replace(/^pg_catalog\./i, "");
|
|
1500
|
+
const timetz = /^timetz(\s*\([^)]*\))?$/i.exec(unqualified);
|
|
1501
|
+
return timetz ? `TIME${timetz[1] ?? ""} WITH TIME ZONE` : unqualified;
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1439
1504
|
// packages/text2sql/src/lib/adapters/parser-sql-policy.ts
|
|
1440
1505
|
var READ_ONLY_MESSAGE = "only SELECT or WITH queries allowed";
|
|
1441
1506
|
var { Parser } = nodeSqlParser;
|
|
@@ -1460,7 +1525,7 @@ var ParserSqlPolicyAnalyzer = class {
|
|
|
1460
1525
|
#readParsedStatements(sql) {
|
|
1461
1526
|
for (const dialect of this.dialects) {
|
|
1462
1527
|
try {
|
|
1463
|
-
return parseStatements(sql, dialect);
|
|
1528
|
+
return this.#parseStatements(sql, dialect);
|
|
1464
1529
|
} catch {
|
|
1465
1530
|
}
|
|
1466
1531
|
}
|
|
@@ -1472,7 +1537,7 @@ var ParserSqlPolicyAnalyzer = class {
|
|
|
1472
1537
|
let lastDialect = this.dialects[0];
|
|
1473
1538
|
for (const dialect of this.dialects) {
|
|
1474
1539
|
try {
|
|
1475
|
-
references = extractBaseEntityReferences(sql, dialect);
|
|
1540
|
+
references = extractBaseEntityReferences(this.#parseAst(sql, dialect));
|
|
1476
1541
|
break;
|
|
1477
1542
|
} catch (error) {
|
|
1478
1543
|
lastDialect = dialect;
|
|
@@ -1507,9 +1572,25 @@ var ParserSqlPolicyAnalyzer = class {
|
|
|
1507
1572
|
});
|
|
1508
1573
|
return outOfScope.length === 0 ? null : buildOutOfScopePayload(sql, outOfScope, [...allowedEntities]);
|
|
1509
1574
|
}
|
|
1575
|
+
#parseStatements(sql, dialect) {
|
|
1576
|
+
return parseStatements(this.#parseAst(sql, dialect));
|
|
1577
|
+
}
|
|
1578
|
+
#parseAst(sql, dialect) {
|
|
1579
|
+
let parserSql = sql;
|
|
1580
|
+
const attempted = /* @__PURE__ */ new Set([sql]);
|
|
1581
|
+
while (true) {
|
|
1582
|
+
try {
|
|
1583
|
+
return parser.astify(parserSql, { database: dialect });
|
|
1584
|
+
} catch (error) {
|
|
1585
|
+
const recovered = dialect === "postgresql" ? recoverPostgresTypedLiteralParserGap(parserSql, error) : null;
|
|
1586
|
+
if (!recovered || attempted.has(recovered)) throw error;
|
|
1587
|
+
attempted.add(recovered);
|
|
1588
|
+
parserSql = recovered;
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1510
1592
|
};
|
|
1511
|
-
function parseStatements(
|
|
1512
|
-
const ast = parser.astify(sql, { database: dialect });
|
|
1593
|
+
function parseStatements(ast) {
|
|
1513
1594
|
const statements = Array.isArray(ast) ? ast : [ast];
|
|
1514
1595
|
return statements.filter(isAstLike);
|
|
1515
1596
|
}
|
|
@@ -1566,8 +1647,7 @@ function appendIdentifierParts(parts, value) {
|
|
|
1566
1647
|
...value.toLowerCase().split(".").filter((part) => part.length > 0)
|
|
1567
1648
|
);
|
|
1568
1649
|
}
|
|
1569
|
-
function extractBaseEntityReferences(
|
|
1570
|
-
const ast = parser.astify(sql, { database: dialect });
|
|
1650
|
+
function extractBaseEntityReferences(ast) {
|
|
1571
1651
|
const state = {
|
|
1572
1652
|
cteNames: /* @__PURE__ */ new Set(),
|
|
1573
1653
|
references: /* @__PURE__ */ new Map()
|