@nicia-ai/typegraph 0.21.0 → 0.23.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/{ast-CSLbPIOC.d.ts → ast-C8S37w1A.d.ts} +1 -1
- package/dist/{ast-DogwbBqA.d.cts → ast-dgLhLOg0.d.cts} +1 -1
- package/dist/backend/postgres/index.cjs +169 -52
- package/dist/backend/postgres/index.cjs.map +1 -1
- package/dist/backend/postgres/index.d.cts +43 -6
- package/dist/backend/postgres/index.d.ts +43 -6
- package/dist/backend/postgres/index.js +140 -23
- package/dist/backend/postgres/index.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +15 -14
- package/dist/backend/sqlite/index.d.cts +17 -6
- package/dist/backend/sqlite/index.d.ts +17 -6
- package/dist/backend/sqlite/index.js +5 -4
- package/dist/backend/sqlite/libsql.cjs +8 -7
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +4 -4
- package/dist/backend/sqlite/libsql.d.ts +4 -4
- package/dist/backend/sqlite/libsql.js +5 -4
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +27 -9
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +4 -4
- package/dist/backend/sqlite/local.d.ts +4 -4
- package/dist/backend/sqlite/local.js +22 -5
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/chunk-3EUKJEQ3.js +77 -0
- package/dist/chunk-3EUKJEQ3.js.map +1 -0
- package/dist/{chunk-FQCQM3KG.cjs → chunk-3JK66E3I.cjs} +4 -2
- package/dist/chunk-3JK66E3I.cjs.map +1 -0
- package/dist/{chunk-SMMOAVJ5.js → chunk-3PPEHLGK.js} +3 -3
- package/dist/{chunk-SMMOAVJ5.js.map → chunk-3PPEHLGK.js.map} +1 -1
- package/dist/{chunk-4XNE2JG3.js → chunk-753F33CV.js} +4 -2
- package/dist/chunk-753F33CV.js.map +1 -0
- package/dist/{chunk-Q73OWTJY.cjs → chunk-7OD2EPN4.cjs} +130 -106
- package/dist/chunk-7OD2EPN4.cjs.map +1 -0
- package/dist/chunk-7TU5EWQ7.js +47 -0
- package/dist/chunk-7TU5EWQ7.js.map +1 -0
- package/dist/{chunk-NRNJ52AA.js → chunk-EP2KSSD5.js} +41 -25
- package/dist/chunk-EP2KSSD5.js.map +1 -0
- package/dist/{chunk-UQVBVBVG.js → chunk-H2CAJ4ZV.js} +71 -45
- package/dist/chunk-H2CAJ4ZV.js.map +1 -0
- package/dist/chunk-HTGDWIDE.cjs +89 -0
- package/dist/chunk-HTGDWIDE.cjs.map +1 -0
- package/dist/{chunk-CQL6FOTT.cjs → chunk-O5BRZEIZ.cjs} +58 -42
- package/dist/chunk-O5BRZEIZ.cjs.map +1 -0
- package/dist/{chunk-2X7P7AD5.cjs → chunk-PEE4EWXZ.cjs} +22 -22
- package/dist/{chunk-2X7P7AD5.cjs.map → chunk-PEE4EWXZ.cjs.map} +1 -1
- package/dist/chunk-RNUNP5JD.cjs +52 -0
- package/dist/chunk-RNUNP5JD.cjs.map +1 -0
- package/dist/{ddl-BqkTShcR.d.ts → ddl-1tFIvt9V.d.ts} +3 -3
- package/dist/{ddl-Dk1NDN3M.d.cts → ddl-B_H8JM-E.d.cts} +3 -3
- package/dist/index.cjs +267 -198
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +53 -9
- package/dist/index.d.ts +53 -9
- package/dist/index.js +209 -142
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +16 -16
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/indexes/index.js +2 -2
- package/dist/interchange/index.d.cts +4 -4
- package/dist/interchange/index.d.ts +4 -4
- package/dist/{manager-BPK-2PUI.d.cts → manager-Vkz28eAC.d.cts} +1 -1
- package/dist/{manager-0jVZtiE8.d.ts → manager-nIhmttD-.d.ts} +1 -1
- package/dist/profiler/index.d.cts +6 -6
- package/dist/profiler/index.d.ts +6 -6
- package/dist/schema/index.d.cts +4 -4
- package/dist/schema/index.d.ts +4 -4
- package/dist/{sqlite-D1rrwcir.d.cts → sqlite-D0aceIe0.d.cts} +1 -1
- package/dist/{sqlite-W3rmJMlc.d.ts → sqlite-SUxbZqfy.d.ts} +1 -1
- package/dist/{store-C0q13mtJ.d.ts → store-CpvwTMxV.d.cts} +58 -8
- package/dist/{store-2QW2SIRk.d.cts → store-U3i2tUch.d.ts} +58 -8
- package/dist/{types-IMQCuser.d.ts → types-C-zfYDJB.d.ts} +2 -2
- package/dist/{types-vgjar7Ch.d.cts → types-CQx4iW5Y.d.cts} +2 -2
- package/dist/{types-CQF88McG.d.ts → types-Qk2l3IkQ.d.cts} +20 -1
- package/dist/{types-CQF88McG.d.cts → types-Qk2l3IkQ.d.ts} +20 -1
- package/dist/{types-CglvhPKz.d.ts → types-qYFZ9SqD.d.ts} +1 -1
- package/dist/{types-D23slCOA.d.cts → types-yH4_p0XB.d.cts} +1 -1
- package/package.json +15 -1
- package/dist/chunk-4XNE2JG3.js.map +0 -1
- package/dist/chunk-CQL6FOTT.cjs.map +0 -1
- package/dist/chunk-FQCQM3KG.cjs.map +0 -1
- package/dist/chunk-NRNJ52AA.js.map +0 -1
- package/dist/chunk-Q73OWTJY.cjs.map +0 -1
- package/dist/chunk-UQVBVBVG.js.map +0 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var drizzleOrm = require('drizzle-orm');
|
|
4
|
+
|
|
5
|
+
// src/query/compiler/utils.ts
|
|
6
|
+
var NODE_COLUMNS = [
|
|
7
|
+
"id",
|
|
8
|
+
"kind",
|
|
9
|
+
"props",
|
|
10
|
+
"version",
|
|
11
|
+
"valid_from",
|
|
12
|
+
"valid_to",
|
|
13
|
+
"created_at",
|
|
14
|
+
"updated_at",
|
|
15
|
+
"deleted_at"
|
|
16
|
+
];
|
|
17
|
+
var EDGE_COLUMNS = [
|
|
18
|
+
"id",
|
|
19
|
+
"kind",
|
|
20
|
+
"from_id",
|
|
21
|
+
"to_id",
|
|
22
|
+
"props",
|
|
23
|
+
"valid_from",
|
|
24
|
+
"valid_to",
|
|
25
|
+
"created_at",
|
|
26
|
+
"updated_at",
|
|
27
|
+
"deleted_at"
|
|
28
|
+
];
|
|
29
|
+
var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
|
|
30
|
+
function quoteIdentifier(identifier) {
|
|
31
|
+
return drizzleOrm.sql.raw(`"${identifier.replaceAll('"', '""')}"`);
|
|
32
|
+
}
|
|
33
|
+
function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
|
|
34
|
+
if (alwaysRequiredColumns?.has(column)) return true;
|
|
35
|
+
if (requiredColumns === void 0) return true;
|
|
36
|
+
return requiredColumns.has(column);
|
|
37
|
+
}
|
|
38
|
+
function addRequiredColumn(requiredColumnsByAlias, alias, column) {
|
|
39
|
+
const existing = requiredColumnsByAlias.get(alias);
|
|
40
|
+
if (existing) {
|
|
41
|
+
existing.add(column);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
|
|
45
|
+
}
|
|
46
|
+
function markFieldRefAsRequired(requiredColumnsByAlias, field) {
|
|
47
|
+
const column = field.path[0];
|
|
48
|
+
if (column === void 0) return;
|
|
49
|
+
addRequiredColumn(requiredColumnsByAlias, field.alias, column);
|
|
50
|
+
}
|
|
51
|
+
function mapSelectiveSystemFieldToColumn(field) {
|
|
52
|
+
if (field === "fromId") return "from_id";
|
|
53
|
+
if (field === "toId") return "to_id";
|
|
54
|
+
if (field.startsWith("meta.")) {
|
|
55
|
+
return field.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
|
|
56
|
+
}
|
|
57
|
+
return field;
|
|
58
|
+
}
|
|
59
|
+
function markSelectiveFieldAsRequired(requiredColumnsByAlias, field) {
|
|
60
|
+
if (field.isSystemField) {
|
|
61
|
+
addRequiredColumn(
|
|
62
|
+
requiredColumnsByAlias,
|
|
63
|
+
field.alias,
|
|
64
|
+
mapSelectiveSystemFieldToColumn(field.field)
|
|
65
|
+
);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
addRequiredColumn(requiredColumnsByAlias, field.alias, "props");
|
|
69
|
+
}
|
|
70
|
+
function isIdFieldRef(field) {
|
|
71
|
+
return field.path.length === 1 && field.path[0] === "id" && field.jsonPointer === void 0;
|
|
72
|
+
}
|
|
73
|
+
function isAggregateExpr(source) {
|
|
74
|
+
return "__type" in source && source.__type === "aggregate";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
exports.EDGE_COLUMNS = EDGE_COLUMNS;
|
|
78
|
+
exports.EMPTY_REQUIRED_COLUMNS = EMPTY_REQUIRED_COLUMNS;
|
|
79
|
+
exports.NODE_COLUMNS = NODE_COLUMNS;
|
|
80
|
+
exports.addRequiredColumn = addRequiredColumn;
|
|
81
|
+
exports.isAggregateExpr = isAggregateExpr;
|
|
82
|
+
exports.isIdFieldRef = isIdFieldRef;
|
|
83
|
+
exports.mapSelectiveSystemFieldToColumn = mapSelectiveSystemFieldToColumn;
|
|
84
|
+
exports.markFieldRefAsRequired = markFieldRefAsRequired;
|
|
85
|
+
exports.markSelectiveFieldAsRequired = markSelectiveFieldAsRequired;
|
|
86
|
+
exports.quoteIdentifier = quoteIdentifier;
|
|
87
|
+
exports.shouldProjectColumn = shouldProjectColumn;
|
|
88
|
+
//# sourceMappingURL=chunk-HTGDWIDE.cjs.map
|
|
89
|
+
//# sourceMappingURL=chunk-HTGDWIDE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/query/compiler/utils.ts"],"names":["sql"],"mappings":";;;;;AAaO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAGO,IAAM,sBAAA,uBAA6B,GAAA;AAMnC,SAAS,gBAAgB,UAAA,EAAyB;AACvD,EAAA,OAAOA,cAAA,CAAI,IAAI,CAAA,CAAA,EAAI,UAAA,CAAW,WAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACxD;AAcO,SAAS,mBAAA,CACd,eAAA,EACA,MAAA,EACA,qBAAA,EACS;AACT,EAAA,IAAI,qBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,IAAA;AAC/C,EAAA,IAAI,eAAA,KAAoB,QAAW,OAAO,IAAA;AAC1C,EAAA,OAAO,eAAA,CAAgB,IAAI,MAAM,CAAA;AACnC;AAMO,SAAS,iBAAA,CACd,sBAAA,EACA,KAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,GAAA,CAAI,KAAK,CAAA;AACjD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,IAAI,MAAM,CAAA;AACnB,IAAA;AAAA,EACF;AACA,EAAA,sBAAA,CAAuB,IAAI,KAAA,kBAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACrD;AAEO,SAAS,sBAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAC/D;AAEO,SAAS,gCAAgC,KAAA,EAAuB;AACrE,EAAA,IAAI,KAAA,KAAU,UAAU,OAAO,SAAA;AAC/B,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,OAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAO,KAAA,CACJ,MAAM,CAAC,CAAA,CACP,WAAW,UAAA,EAAY,KAAK,EAC5B,WAAA,EAAY;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,4BAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,IAAI,MAAM,aAAA,EAAe;AACvB,IAAA,iBAAA;AAAA,MACE,sBAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,+BAAA,CAAgC,MAAM,KAAK;AAAA,KAC7C;AACA,IAAA;AAAA,EACF;AACA,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA;AAChE;AAMO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,OACE,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,IACtB,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,IAAA,IAClB,KAAA,CAAM,WAAA,KAAgB,MAAA;AAE1B;AAEO,SAAS,gBACd,MAAA,EACyB;AACzB,EAAA,OAAO,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,WAAA;AACjD","file":"chunk-HTGDWIDE.cjs","sourcesContent":["/**\n * Shared Compiler Utilities\n *\n * Functions and constants shared between the standard and recursive compilers.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { type AggregateExpr, type FieldRef, type SelectiveField } from \"../ast\";\n\n// ============================================================\n// Constants\n// ============================================================\n\nexport const NODE_COLUMNS = [\n \"id\",\n \"kind\",\n \"props\",\n \"version\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport const EDGE_COLUMNS = [\n \"id\",\n \"kind\",\n \"from_id\",\n \"to_id\",\n \"props\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport type RequiredColumnsByAlias = ReadonlyMap<string, ReadonlySet<string>>;\nexport const EMPTY_REQUIRED_COLUMNS = new Set<string>();\n\n// ============================================================\n// SQL Helpers\n// ============================================================\n\nexport function quoteIdentifier(identifier: string): SQL {\n return sql.raw(`\"${identifier.replaceAll('\"', '\"\"')}\"`);\n}\n\n// ============================================================\n// Column Projection\n// ============================================================\n\n/**\n * Determines whether a column should be included in the projection.\n *\n * @param requiredColumns - Set of columns required by the query, or undefined to include all.\n * @param column - The column name to check.\n * @param alwaysRequiredColumns - Optional set of columns that are always projected\n * (e.g. join keys in recursive CTEs). Pass only from recursive compiler callers.\n */\nexport function shouldProjectColumn(\n requiredColumns: ReadonlySet<string> | undefined,\n column: string,\n alwaysRequiredColumns?: ReadonlySet<string>,\n): boolean {\n if (alwaysRequiredColumns?.has(column)) return true;\n if (requiredColumns === undefined) return true;\n return requiredColumns.has(column);\n}\n\n// ============================================================\n// Required Column Tracking\n// ============================================================\n\nexport function addRequiredColumn(\n requiredColumnsByAlias: Map<string, Set<string>>,\n alias: string,\n column: string,\n): void {\n const existing = requiredColumnsByAlias.get(alias);\n if (existing) {\n existing.add(column);\n return;\n }\n requiredColumnsByAlias.set(alias, new Set([column]));\n}\n\nexport function markFieldRefAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: FieldRef,\n): void {\n const column = field.path[0];\n if (column === undefined) return;\n addRequiredColumn(requiredColumnsByAlias, field.alias, column);\n}\n\nexport function mapSelectiveSystemFieldToColumn(field: string): string {\n if (field === \"fromId\") return \"from_id\";\n if (field === \"toId\") return \"to_id\";\n if (field.startsWith(\"meta.\")) {\n return field\n .slice(5)\n .replaceAll(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n }\n return field;\n}\n\nexport function markSelectiveFieldAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: SelectiveField,\n): void {\n if (field.isSystemField) {\n addRequiredColumn(\n requiredColumnsByAlias,\n field.alias,\n mapSelectiveSystemFieldToColumn(field.field),\n );\n return;\n }\n addRequiredColumn(requiredColumnsByAlias, field.alias, \"props\");\n}\n\n// ============================================================\n// AST Type Guards\n// ============================================================\n\nexport function isIdFieldRef(field: FieldRef): boolean {\n return (\n field.path.length === 1 &&\n field.path[0] === \"id\" &&\n field.jsonPointer === undefined\n );\n}\n\nexport function isAggregateExpr(\n source: FieldRef | AggregateExpr,\n): source is AggregateExpr {\n return \"__type\" in source && source.__type === \"aggregate\";\n}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk7OD2EPN4_cjs = require('./chunk-7OD2EPN4.cjs');
|
|
4
|
+
var chunkRNUNP5JD_cjs = require('./chunk-RNUNP5JD.cjs');
|
|
4
5
|
var chunkO5PST6TB_cjs = require('./chunk-O5PST6TB.cjs');
|
|
5
|
-
var
|
|
6
|
+
var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
|
|
6
7
|
var drizzleOrm = require('drizzle-orm');
|
|
7
8
|
|
|
8
9
|
var DEFAULT_PREPARED_STATEMENT_CACHE_MAX = 256;
|
|
@@ -62,21 +63,12 @@ function resolveSqliteClient(db) {
|
|
|
62
63
|
return sqliteClient;
|
|
63
64
|
}
|
|
64
65
|
function getOrCreatePreparedStatement(cache, sqliteClient, sqlText, cacheMax) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const preparedStatement = sqliteClient.prepare(sqlText);
|
|
72
|
-
cache.set(sqlText, preparedStatement);
|
|
73
|
-
if (cache.size > cacheMax) {
|
|
74
|
-
const oldestSqlText = cache.keys().next().value;
|
|
75
|
-
if (typeof oldestSqlText === "string") {
|
|
76
|
-
cache.delete(oldestSqlText);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return preparedStatement;
|
|
66
|
+
return chunk7OD2EPN4_cjs.getOrCreateLru(
|
|
67
|
+
cache,
|
|
68
|
+
sqlText,
|
|
69
|
+
cacheMax,
|
|
70
|
+
() => sqliteClient.prepare(sqlText)
|
|
71
|
+
);
|
|
80
72
|
}
|
|
81
73
|
async function executeDrizzleQuery(db, query) {
|
|
82
74
|
return await db.all(query);
|
|
@@ -107,7 +99,7 @@ function createSqliteExecutionAdapter(db, statementCacheMaxOrOptions = {}) {
|
|
|
107
99
|
supportsCompiledExecution: sqliteClient !== void 0,
|
|
108
100
|
transactionMode
|
|
109
101
|
};
|
|
110
|
-
const compile = (query) =>
|
|
102
|
+
const compile = (query) => chunk7OD2EPN4_cjs.compileQueryWithDialect(db, query, "SQLite");
|
|
111
103
|
if (sqliteClient !== void 0) {
|
|
112
104
|
let executeCompiled2 = function(compiledQuery) {
|
|
113
105
|
const preparedStatement = getOrCreatePreparedStatement(
|
|
@@ -178,10 +170,10 @@ var SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(
|
|
|
178
170
|
1,
|
|
179
171
|
SQLITE_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT
|
|
180
172
|
);
|
|
181
|
-
var toNodeRow =
|
|
182
|
-
var toEdgeRow =
|
|
183
|
-
var toUniqueRow =
|
|
184
|
-
var toSchemaVersionRow =
|
|
173
|
+
var toNodeRow = chunk7OD2EPN4_cjs.createNodeRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
|
|
174
|
+
var toEdgeRow = chunk7OD2EPN4_cjs.createEdgeRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
|
|
175
|
+
var toUniqueRow = chunk7OD2EPN4_cjs.createUniqueRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
|
|
176
|
+
var toSchemaVersionRow = chunk7OD2EPN4_cjs.createSchemaVersionRowMapper(chunk7OD2EPN4_cjs.SQLITE_ROW_MAPPER_CONFIG);
|
|
185
177
|
var PENDING_FOREVER = new Promise(noop);
|
|
186
178
|
function pendingForever() {
|
|
187
179
|
return PENDING_FOREVER;
|
|
@@ -248,7 +240,7 @@ function createSqliteOperationBackend(options) {
|
|
|
248
240
|
await db.run(query);
|
|
249
241
|
});
|
|
250
242
|
}
|
|
251
|
-
const commonBackend =
|
|
243
|
+
const commonBackend = chunk7OD2EPN4_cjs.createCommonOperationBackend({
|
|
252
244
|
batchConfig: {
|
|
253
245
|
checkUniqueBatchChunkSize: SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE,
|
|
254
246
|
edgeInsertBatchSize: SQLITE_EDGE_INSERT_BATCH_SIZE,
|
|
@@ -261,7 +253,7 @@ function createSqliteOperationBackend(options) {
|
|
|
261
253
|
execGet,
|
|
262
254
|
execRun
|
|
263
255
|
},
|
|
264
|
-
nowIso:
|
|
256
|
+
nowIso: chunk7OD2EPN4_cjs.nowIso,
|
|
265
257
|
operationStrategy,
|
|
266
258
|
rowMappers: {
|
|
267
259
|
toEdgeRow,
|
|
@@ -279,9 +271,23 @@ function createSqliteOperationBackend(options) {
|
|
|
279
271
|
);
|
|
280
272
|
}
|
|
281
273
|
};
|
|
274
|
+
const vectorEmbeddingMethods = options.hasVectorEmbeddings ? {
|
|
275
|
+
async upsertEmbedding(params) {
|
|
276
|
+
const query = operationStrategy.buildUpsertEmbedding(
|
|
277
|
+
params,
|
|
278
|
+
chunk7OD2EPN4_cjs.nowIso()
|
|
279
|
+
);
|
|
280
|
+
await execRun(query);
|
|
281
|
+
},
|
|
282
|
+
async deleteEmbedding(params) {
|
|
283
|
+
const query = operationStrategy.buildDeleteEmbedding(params);
|
|
284
|
+
await execRun(query);
|
|
285
|
+
}
|
|
286
|
+
} : {};
|
|
282
287
|
const operationBackend = {
|
|
283
288
|
...commonBackend,
|
|
284
289
|
...executeRawMethod,
|
|
290
|
+
...vectorEmbeddingMethods,
|
|
285
291
|
capabilities,
|
|
286
292
|
dialect: "sqlite",
|
|
287
293
|
tableNames,
|
|
@@ -298,14 +304,14 @@ function createSqliteOperationBackend(options) {
|
|
|
298
304
|
...params.indexParams?.efConstruction === void 0 ? {} : { hnswEfConstruction: params.indexParams.efConstruction },
|
|
299
305
|
...params.indexParams?.lists === void 0 ? {} : { ivfflatLists: params.indexParams.lists }
|
|
300
306
|
};
|
|
301
|
-
const result =
|
|
307
|
+
const result = chunk7OD2EPN4_cjs.createSqliteVectorIndex(indexOptions);
|
|
302
308
|
if (!result.success) {
|
|
303
309
|
throw new Error(result.message ?? "Failed to create SQLite vector index");
|
|
304
310
|
}
|
|
305
311
|
return Promise.resolve();
|
|
306
312
|
},
|
|
307
313
|
dropVectorIndex(params) {
|
|
308
|
-
const result =
|
|
314
|
+
const result = chunk7OD2EPN4_cjs.dropSqliteVectorIndex(
|
|
309
315
|
params.graphId,
|
|
310
316
|
params.nodeKind,
|
|
311
317
|
params.fieldPath
|
|
@@ -317,7 +323,7 @@ function createSqliteOperationBackend(options) {
|
|
|
317
323
|
},
|
|
318
324
|
// === Fulltext Operations ===
|
|
319
325
|
async upsertFulltext(params) {
|
|
320
|
-
const timestamp =
|
|
326
|
+
const timestamp = chunk7OD2EPN4_cjs.nowIso();
|
|
321
327
|
const statements = operationStrategy.buildUpsertFulltext(
|
|
322
328
|
params,
|
|
323
329
|
timestamp
|
|
@@ -334,7 +340,7 @@ function createSqliteOperationBackend(options) {
|
|
|
334
340
|
},
|
|
335
341
|
async upsertFulltextBatch(params) {
|
|
336
342
|
if (params.rows.length === 0) return;
|
|
337
|
-
const timestamp =
|
|
343
|
+
const timestamp = chunk7OD2EPN4_cjs.nowIso();
|
|
338
344
|
const statements = operationStrategy.buildUpsertFulltextBatch(
|
|
339
345
|
params,
|
|
340
346
|
timestamp
|
|
@@ -374,15 +380,15 @@ function createSqliteOperationBackend(options) {
|
|
|
374
380
|
return operationBackend;
|
|
375
381
|
}
|
|
376
382
|
function createSqliteBackend(db, options = {}) {
|
|
377
|
-
const tables2 = options.tables ??
|
|
378
|
-
const fulltextStrategy = options.fulltext ??
|
|
383
|
+
const tables2 = options.tables ?? chunk7OD2EPN4_cjs.tables2;
|
|
384
|
+
const fulltextStrategy = options.fulltext ?? chunk3JK66E3I_cjs.fts5Strategy;
|
|
379
385
|
const profileHints = options.executionProfile ?? {};
|
|
380
386
|
const executionAdapter = createSqliteExecutionAdapter(db, { profileHints });
|
|
381
387
|
const { isSync, transactionMode } = executionAdapter.profile;
|
|
382
|
-
const baseCapabilities = transactionMode === "none" ? { ...
|
|
388
|
+
const baseCapabilities = transactionMode === "none" ? { ...chunkRNUNP5JD_cjs.SQLITE_CAPABILITIES, transactions: false } : chunkRNUNP5JD_cjs.SQLITE_CAPABILITIES;
|
|
383
389
|
const capabilities = {
|
|
384
390
|
...baseCapabilities,
|
|
385
|
-
fulltext:
|
|
391
|
+
fulltext: chunk3JK66E3I_cjs.buildFulltextCapabilities(fulltextStrategy)
|
|
386
392
|
};
|
|
387
393
|
const tableNames = {
|
|
388
394
|
nodes: drizzleOrm.getTableName(tables2.nodes),
|
|
@@ -390,11 +396,12 @@ function createSqliteBackend(db, options = {}) {
|
|
|
390
396
|
embeddings: drizzleOrm.getTableName(tables2.embeddings),
|
|
391
397
|
fulltext: tables2.fulltextTableName
|
|
392
398
|
};
|
|
393
|
-
const operationStrategy =
|
|
399
|
+
const operationStrategy = chunk7OD2EPN4_cjs.createSqliteOperationStrategy(
|
|
394
400
|
tables2,
|
|
395
401
|
fulltextStrategy
|
|
396
402
|
);
|
|
397
403
|
const serializedQueue = isSync ? createSerializedExecutionQueue() : void 0;
|
|
404
|
+
const hasVectorEmbeddings = options.hasVectorEmbeddings === true;
|
|
398
405
|
const operations = createSqliteOperationBackend({
|
|
399
406
|
capabilities,
|
|
400
407
|
db,
|
|
@@ -402,20 +409,26 @@ function createSqliteBackend(db, options = {}) {
|
|
|
402
409
|
operationStrategy,
|
|
403
410
|
tableNames,
|
|
404
411
|
fulltextStrategy,
|
|
412
|
+
hasVectorEmbeddings,
|
|
405
413
|
...serializedQueue === void 0 ? {} : { serializedQueue }
|
|
406
414
|
});
|
|
407
415
|
const backend = {
|
|
408
416
|
...operations,
|
|
409
417
|
async bootstrapTables() {
|
|
410
|
-
const statements =
|
|
418
|
+
const statements = chunk7OD2EPN4_cjs.generateSqliteDDL(tables2, fulltextStrategy);
|
|
411
419
|
for (const statement of statements) {
|
|
412
420
|
await db.run(drizzleOrm.sql.raw(statement));
|
|
413
421
|
}
|
|
414
422
|
},
|
|
423
|
+
async refreshStatistics() {
|
|
424
|
+
await db.run(drizzleOrm.sql`ANALYZE`);
|
|
425
|
+
},
|
|
415
426
|
async setActiveSchema(graphId, version) {
|
|
416
|
-
await
|
|
417
|
-
|
|
418
|
-
|
|
427
|
+
await chunkRNUNP5JD_cjs.runOptionallyInTransaction(
|
|
428
|
+
backend,
|
|
429
|
+
(target) => target.setActiveSchema(graphId, version),
|
|
430
|
+
operations
|
|
431
|
+
);
|
|
419
432
|
},
|
|
420
433
|
async transaction(fn, _options) {
|
|
421
434
|
if (transactionMode === "none") {
|
|
@@ -437,7 +450,8 @@ function createSqliteBackend(db, options = {}) {
|
|
|
437
450
|
operationStrategy,
|
|
438
451
|
profileHints: { isSync: true },
|
|
439
452
|
tableNames,
|
|
440
|
-
fulltextStrategy
|
|
453
|
+
fulltextStrategy,
|
|
454
|
+
hasVectorEmbeddings
|
|
441
455
|
});
|
|
442
456
|
db.run(drizzleOrm.sql`BEGIN`);
|
|
443
457
|
try {
|
|
@@ -459,7 +473,8 @@ function createSqliteBackend(db, options = {}) {
|
|
|
459
473
|
operationStrategy,
|
|
460
474
|
profileHints: { isSync },
|
|
461
475
|
tableNames,
|
|
462
|
-
fulltextStrategy
|
|
476
|
+
fulltextStrategy,
|
|
477
|
+
hasVectorEmbeddings
|
|
463
478
|
});
|
|
464
479
|
return fn(txBackend);
|
|
465
480
|
})
|
|
@@ -482,10 +497,11 @@ function createTransactionBackend(options) {
|
|
|
482
497
|
executionAdapter: txExecutionAdapter,
|
|
483
498
|
operationStrategy: options.operationStrategy,
|
|
484
499
|
tableNames: options.tableNames,
|
|
485
|
-
fulltextStrategy: options.fulltextStrategy
|
|
500
|
+
fulltextStrategy: options.fulltextStrategy,
|
|
501
|
+
...options.hasVectorEmbeddings === void 0 ? {} : { hasVectorEmbeddings: options.hasVectorEmbeddings }
|
|
486
502
|
});
|
|
487
503
|
}
|
|
488
504
|
|
|
489
505
|
exports.createSqliteBackend = createSqliteBackend;
|
|
490
|
-
//# sourceMappingURL=chunk-
|
|
491
|
-
//# sourceMappingURL=chunk-
|
|
506
|
+
//# sourceMappingURL=chunk-O5BRZEIZ.cjs.map
|
|
507
|
+
//# sourceMappingURL=chunk-O5BRZEIZ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/execution/sqlite-execution.ts","../src/backend/drizzle/sqlite.ts"],"names":["sql","getOrCreateLru","compileQueryWithDialect","executeCompiled","createNodeRowMapper","SQLITE_ROW_MAPPER_CONFIG","createEdgeRowMapper","createUniqueRowMapper","createSchemaVersionRowMapper","BackendDisposedError","createCommonOperationBackend","nowIso","createSqliteVectorIndex","dropSqliteVectorIndex","tables","fts5Strategy","SQLITE_CAPABILITIES","buildFulltextCapabilities","getTableName","createSqliteOperationStrategy","generateSqliteDDL","runOptionallyInTransaction","ConfigurationError"],"mappings":"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","file":"chunk-O5BRZEIZ.cjs","sourcesContent":["import { type SQL, sql } from \"drizzle-orm\";\nimport { type BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\n\nimport { getOrCreateLru } from \"./lru\";\nimport {\n type CompiledSqlQuery,\n compileQueryWithDialect,\n type PreparedSqlStatement,\n type SqlExecutionAdapter,\n} from \"./types\";\n\nconst DEFAULT_PREPARED_STATEMENT_CACHE_MAX = 256;\n\ntype PreparedAllStatement = Readonly<{\n all: (...params: readonly unknown[]) => readonly unknown[];\n}>;\n\ntype SqliteClientWithPrepare = Readonly<{\n prepare: (sqlText: string) => PreparedAllStatement;\n}>;\n\ntype SqliteClientCarrier = Readonly<{\n $client?: SqliteClientWithPrepare;\n}>;\n\ntype SessionLike = Readonly<{\n constructor?: Readonly<{\n name?: string;\n }>;\n}>;\n\ntype DatabaseWithSession = Readonly<{\n _?: Readonly<{\n session?: SessionLike;\n }>;\n session?: SessionLike;\n}>;\n\n/**\n * Controls how the backend manages SQLite transactions.\n *\n * - `\"sql\"`: TypeGraph issues BEGIN / COMMIT / ROLLBACK SQL directly.\n * Default for sync drivers (better-sqlite3, bun:sqlite).\n * - `\"drizzle\"`: Delegates to Drizzle's `db.transaction()` method.\n * Default for async drivers (libsql, sql.js).\n * - `\"none\"`: Transactions disabled.\n * Default for Cloudflare D1 and Durable Objects.\n */\nexport type SqliteTransactionMode = \"sql\" | \"drizzle\" | \"none\";\n\nexport type SqliteExecutionProfileHints = Readonly<{\n isSync?: boolean;\n transactionMode?: SqliteTransactionMode;\n}>;\n\ntype SqliteExecutionAdapterOptions = Readonly<{\n profileHints?: SqliteExecutionProfileHints;\n statementCacheMax?: number;\n}>;\n\nexport type AnySqliteDatabase = BaseSQLiteDatabase<\"sync\" | \"async\", unknown>;\n\nexport type SqliteExecutionProfile = Readonly<{\n isSync: boolean;\n supportsCompiledExecution: boolean;\n transactionMode: SqliteTransactionMode;\n}>;\n\nexport type SqliteExecutionAdapter = Readonly<\n SqlExecutionAdapter & {\n clearStatementCache: () => void;\n profile: SqliteExecutionProfile;\n }\n>;\n\nfunction getSessionName(db: AnySqliteDatabase): string | undefined {\n const databaseWithSession = db as DatabaseWithSession;\n const primarySessionName = databaseWithSession.session?.constructor?.name;\n if (primarySessionName !== undefined) {\n return primarySessionName;\n }\n\n return databaseWithSession._?.session?.constructor?.name;\n}\n\nfunction isD1DatabaseBySessionName(db: AnySqliteDatabase): boolean {\n return getSessionName(db) === \"SQLiteD1Session\";\n}\n\nfunction isDurableObjectBySessionName(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n return sessionName === \"SQLiteDurableObjectSession\";\n}\n\nfunction isSyncDatabaseBySessionName(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n return (\n sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\"\n );\n}\n\nfunction detectSyncProfile(\n db: AnySqliteDatabase,\n profileHints: SqliteExecutionProfileHints,\n): boolean {\n if (profileHints.isSync !== undefined) {\n return profileHints.isSync;\n }\n\n const sessionName = getSessionName(db);\n if (sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\") {\n return true;\n }\n if (sessionName === \"SQLiteD1Session\") {\n return false;\n }\n\n try {\n const probeResult = db.get(sql`SELECT 1 AS __typegraph_sync_probe__`);\n return !(probeResult instanceof Promise);\n } catch {\n return isSyncDatabaseBySessionName(db);\n }\n}\n\nfunction detectTransactionMode(\n db: AnySqliteDatabase,\n profileHints: SqliteExecutionProfileHints,\n isSync: boolean,\n): SqliteTransactionMode {\n if (profileHints.transactionMode !== undefined) {\n return profileHints.transactionMode;\n }\n // D1 and Durable Object SQLite do not support raw BEGIN/COMMIT SQL\n // through Drizzle's db.run(). Default to \"none\" because async\n // transaction callbacks are not reliably supported across sync\n // Drizzle drivers. Users can opt in to \"drizzle\" mode explicitly if\n // their runtime's db.transaction() handles async callbacks.\n if (isD1DatabaseBySessionName(db) || isDurableObjectBySessionName(db)) {\n return \"none\";\n }\n if (isSync) return \"sql\";\n return \"drizzle\";\n}\n\nfunction resolveSqliteClient(\n db: AnySqliteDatabase,\n): SqliteClientWithPrepare | undefined {\n const databaseWithClient = db as SqliteClientCarrier;\n const sqliteClient = databaseWithClient.$client;\n if (sqliteClient?.prepare === undefined) {\n return undefined;\n }\n return sqliteClient;\n}\n\nfunction getOrCreatePreparedStatement(\n cache: Map<string, PreparedAllStatement>,\n sqliteClient: SqliteClientWithPrepare,\n sqlText: string,\n cacheMax: number,\n): PreparedAllStatement {\n return getOrCreateLru(cache, sqlText, cacheMax, () =>\n sqliteClient.prepare(sqlText),\n );\n}\n\n// Uses unconditional `await` because Drizzle returns SQLiteRaw thenables\n// that fail `instanceof Promise` checks (drizzle-team/drizzle-orm#2275).\nasync function executeDrizzleQuery<TRow>(\n db: AnySqliteDatabase,\n query: SQL,\n): Promise<readonly TRow[]> {\n return (await db.all(query));\n}\n\nfunction createPreparedStatementExecutor(\n sqliteClient: SqliteClientWithPrepare,\n cache: Map<string, PreparedAllStatement>,\n sqlText: string,\n cacheMax: number,\n): PreparedSqlStatement {\n return {\n execute<TRow>(params: readonly unknown[]): Promise<readonly TRow[]> {\n const preparedStatement = getOrCreatePreparedStatement(\n cache,\n sqliteClient,\n sqlText,\n cacheMax,\n );\n const rows = preparedStatement.all(...params);\n return Promise.resolve(rows as readonly TRow[]);\n },\n };\n}\n\nexport function createSqliteExecutionAdapter(\n db: AnySqliteDatabase,\n statementCacheMaxOrOptions: number | SqliteExecutionAdapterOptions = {},\n): SqliteExecutionAdapter {\n const options: SqliteExecutionAdapterOptions =\n typeof statementCacheMaxOrOptions === \"number\"\n ? { statementCacheMax: statementCacheMaxOrOptions }\n : statementCacheMaxOrOptions;\n const statementCacheMax =\n options.statementCacheMax ?? DEFAULT_PREPARED_STATEMENT_CACHE_MAX;\n const profileHints = options.profileHints ?? {};\n\n const isSync = detectSyncProfile(db, profileHints);\n const sqliteClient = isSync ? resolveSqliteClient(db) : undefined;\n const transactionMode = detectTransactionMode(db, profileHints, isSync);\n\n const profile: SqliteExecutionProfile = {\n isSync,\n supportsCompiledExecution: sqliteClient !== undefined,\n transactionMode,\n };\n\n const compile = (query: SQL): CompiledSqlQuery =>\n compileQueryWithDialect(db, query, \"SQLite\");\n\n if (sqliteClient !== undefined) {\n const client = sqliteClient;\n const statementCache = new Map<string, PreparedAllStatement>();\n\n function executeCompiled<TRow>(\n compiledQuery: CompiledSqlQuery,\n ): Promise<readonly TRow[]> {\n const preparedStatement = getOrCreatePreparedStatement(\n statementCache,\n client,\n compiledQuery.sql,\n statementCacheMax,\n );\n const rows = preparedStatement.all(...compiledQuery.params);\n return Promise.resolve(rows as readonly TRow[]);\n }\n\n return {\n clearStatementCache() {\n statementCache.clear();\n },\n compile,\n execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n const compiledQuery = compile(query);\n return executeCompiled<TRow>(compiledQuery);\n },\n executeCompiled,\n prepare(sqlText: string): PreparedSqlStatement {\n return createPreparedStatementExecutor(\n client,\n statementCache,\n sqlText,\n statementCacheMax,\n );\n },\n profile,\n };\n }\n\n return {\n clearStatementCache() {\n // No-op: no statement cache in async/D1 mode\n },\n compile,\n execute<TRow>(query: SQL): Promise<readonly TRow[]> {\n return executeDrizzleQuery<TRow>(db, query);\n },\n profile,\n };\n}\n","/**\n * SQLite backend adapter for TypeGraph.\n *\n * Works with any Drizzle SQLite database instance:\n * - better-sqlite3\n * - libsql / Turso\n * - Cloudflare D1\n * - bun:sqlite\n * - sql.js\n *\n * @example\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend, tables } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db, { tables });\n * ```\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\nimport { BackendDisposedError, ConfigurationError } from \"../../errors\";\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n buildFulltextCapabilities,\n fts5Strategy,\n type FulltextStrategy,\n} from \"../../query/dialect/fulltext-strategy\";\nimport {\n type BackendCapabilities,\n type CreateVectorIndexParams,\n type DeleteEmbeddingParams,\n type DeleteFulltextBatchParams,\n type DeleteFulltextParams,\n type DropVectorIndexParams,\n type FulltextSearchParams,\n type FulltextSearchResult,\n type GraphBackend,\n runOptionallyInTransaction,\n SQLITE_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UpsertEmbeddingParams,\n type UpsertFulltextBatchParams,\n type UpsertFulltextParams,\n} from \"../types\";\nimport {\n type AnySqliteDatabase,\n createSqliteExecutionAdapter,\n type SqliteExecutionAdapter,\n type SqliteExecutionProfileHints,\n} from \"./execution/sqlite-execution\";\nexport type { SqliteTransactionMode } from \"./execution/sqlite-execution\";\nimport { generateSqliteDDL } from \"./ddl\";\nimport { createCommonOperationBackend } from \"./operation-backend-core\";\nimport { createSqliteOperationStrategy } from \"./operations/strategy\";\nimport {\n createEdgeRowMapper,\n createNodeRowMapper,\n createSchemaVersionRowMapper,\n createUniqueRowMapper,\n nowIso,\n SQLITE_ROW_MAPPER_CONFIG,\n} from \"./row-mappers\";\nimport { type SqliteTables, tables as defaultTables } from \"./schema/sqlite\";\nimport {\n createSqliteVectorIndex,\n dropSqliteVectorIndex,\n type VectorIndexOptions,\n} from \"./vector-index\";\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a SQLite backend.\n */\nexport type SqliteBackendOptions = Readonly<{\n /**\n * Custom table definitions. Use createSqliteTables() to customize table names.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n /**\n * Optional execution profile hints used to avoid runtime driver reflection.\n * Set `transactionMode: \"none\"` for drivers that do not support transactions\n * (e.g. Cloudflare D1, Durable Objects).\n */\n executionProfile?: SqliteExecutionProfileHints;\n /**\n * Fulltext strategy override. Defaults to `fts5Strategy` (SQLite's\n * built-in FTS5 virtual table). Most users should leave this alone.\n */\n fulltext?: FulltextStrategy;\n /**\n * Set to `true` when sqlite-vec has been loaded on the connection.\n * Enables vector embedding persistence via `upsertEmbedding` /\n * `deleteEmbedding`, which the store's embedding-sync path relies on\n * whenever node schemas declare `embedding()` fields. When omitted the\n * backend does not expose those methods and embedding values pass\n * through writes without being indexed — matching existing behavior\n * for backends without sqlite-vec. `createLocalSqliteBackend` sets\n * this automatically when it loads the extension.\n */\n hasVectorEmbeddings?: boolean;\n}>;\n\nconst SQLITE_MAX_BIND_PARAMETERS = 999;\nconst NODE_INSERT_PARAM_COUNT = 9;\nconst EDGE_INSERT_PARAM_COUNT = 12;\nconst SQLITE_NODE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(SQLITE_MAX_BIND_PARAMETERS / NODE_INSERT_PARAM_COUNT),\n);\nconst SQLITE_EDGE_INSERT_BATCH_SIZE = Math.max(\n 1,\n Math.floor(SQLITE_MAX_BIND_PARAMETERS / EDGE_INSERT_PARAM_COUNT),\n);\nconst SQLITE_GET_NODES_ID_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - 2,\n);\nconst SQLITE_GET_EDGES_ID_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - 1,\n);\nconst CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT = 3;\nconst SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE = Math.max(\n 1,\n SQLITE_MAX_BIND_PARAMETERS - CHECK_UNIQUE_BATCH_FIXED_PARAM_COUNT,\n);\n\ntype SerializedExecutionQueue = Readonly<{\n dispose: () => void;\n runExclusive: <T>(task: () => Promise<T>) => Promise<T>;\n}>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\nconst toNodeRow = createNodeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toEdgeRow = createEdgeRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toUniqueRow = createUniqueRowMapper(SQLITE_ROW_MAPPER_CONFIG);\nconst toSchemaVersionRow = createSchemaVersionRowMapper(SQLITE_ROW_MAPPER_CONFIG);\n\n/** A shared promise that never settles — used to absorb post-dispose work. */\nconst PENDING_FOREVER: Promise<never> = new Promise<never>(noop);\n\nfunction pendingForever<T>(): Promise<T> {\n return PENDING_FOREVER;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop(): void {}\n\nfunction createSerializedExecutionQueue(): SerializedExecutionQueue {\n let tail: Promise<unknown> = Promise.resolve();\n let disposed = false;\n\n function isDisposed(): boolean {\n return disposed;\n }\n\n return {\n dispose() {\n disposed = true;\n },\n\n runExclusive<T>(task: () => Promise<T>): Promise<T> {\n if (isDisposed()) return Promise.reject(new BackendDisposedError());\n\n // When disposed, runTask returns a never-settling promise so that no\n // rejection propagates through the 7+ async wrappers between this\n // queue and the store-level caller. A rejection here would become an\n // unhandled rejection if the caller abandoned the promise during\n // teardown — and JavaScript offers no way to `.catch()` a rejection\n // at the bottom of a chain without every async wrapper above it also\n // creating an independently-unhandled rejected promise.\n //\n // The tradeoff: an active caller whose operation was queued before\n // dispose() will see a permanently-pending promise rather than a\n // BackendDisposedError. Post-dispose submissions (the check above)\n // still reject immediately since the caller actively holds that\n // promise.\n const runTask = async (): Promise<T> => {\n if (isDisposed()) return pendingForever<T>();\n try {\n return await task();\n } catch (error) {\n if (isDisposed()) return pendingForever<T>();\n throw error;\n }\n };\n const result = tail.then(runTask, runTask);\n tail = result.then(\n () => 0,\n () => 0,\n );\n return result;\n },\n };\n}\n\nfunction runWithSerializedQueue<T>(\n queue: SerializedExecutionQueue | undefined,\n task: () => Promise<T>,\n): Promise<T> {\n if (queue === undefined) return task();\n return queue.runExclusive(task);\n}\n\n// ============================================================\n// Backend Factory\n// ============================================================\n\n/**\n * Creates a TypeGraph backend for SQLite databases.\n *\n * Works with any Drizzle SQLite instance regardless of the underlying driver.\n *\n * @param db - A Drizzle SQLite database instance\n * @param options - Backend configuration\n * @returns A GraphBackend implementation\n */\ntype CreateSqliteOperationBackendOptions = Readonly<{\n capabilities: GraphBackend[\"capabilities\"];\n db: AnySqliteDatabase;\n executionAdapter: SqliteExecutionAdapter;\n operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n serializedQueue?: SerializedExecutionQueue;\n tableNames: SqlTableNames;\n fulltextStrategy: FulltextStrategy;\n /** Wire up upsertEmbedding / deleteEmbedding. See transaction options for details. */\n hasVectorEmbeddings?: boolean;\n}>;\n\ntype CreateSqliteTransactionBackendOptions = Readonly<{\n capabilities: GraphBackend[\"capabilities\"];\n db: AnySqliteDatabase;\n executionAdapter?: SqliteExecutionAdapter;\n operationStrategy: ReturnType<typeof createSqliteOperationStrategy>;\n profileHints: SqliteExecutionProfileHints;\n tableNames: SqlTableNames;\n fulltextStrategy: FulltextStrategy;\n /**\n * When true, the backend exposes upsertEmbedding / deleteEmbedding —\n * detected by probing `vec_f32(...)` on the connection at boot so the\n * store's embedding-sync path persists vectors to the embeddings table.\n */\n hasVectorEmbeddings?: boolean;\n}>;\n\nfunction createSqliteOperationBackend(\n options: CreateSqliteOperationBackendOptions,\n): TransactionBackend {\n const {\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n serializedQueue,\n tableNames,\n fulltextStrategy,\n } = options;\n\n function execGet<T>(query: SQL): Promise<T | undefined> {\n // Workaround: drizzle-team/drizzle-orm#1049 — db.get() crashes with\n // the libsql driver when no rows match (normalizeRow receives undefined).\n // Using db.all()[0] avoids the crash for all drivers.\n //\n // All three exec helpers use `await` unconditionally rather than\n // `instanceof Promise` because Drizzle returns SQLiteRaw thenables\n // that are NOT Promise instances (drizzle-team/drizzle-orm#2275).\n return runWithSerializedQueue(serializedQueue, async () => {\n const rows = await db.all(query);\n return (rows as T[])[0];\n });\n }\n\n function execAll<T>(query: SQL): Promise<T[]> {\n return runWithSerializedQueue(serializedQueue, async () => {\n return await db.all(query);\n });\n }\n\n function execRun(query: SQL): Promise<void> {\n return runWithSerializedQueue(serializedQueue, async () => {\n await db.run(query);\n });\n }\n\n const commonBackend = createCommonOperationBackend({\n batchConfig: {\n checkUniqueBatchChunkSize: SQLITE_CHECK_UNIQUE_BATCH_CHUNK_SIZE,\n edgeInsertBatchSize: SQLITE_EDGE_INSERT_BATCH_SIZE,\n getEdgesChunkSize: SQLITE_GET_EDGES_ID_CHUNK_SIZE,\n getNodesChunkSize: SQLITE_GET_NODES_ID_CHUNK_SIZE,\n nodeInsertBatchSize: SQLITE_NODE_INSERT_BATCH_SIZE,\n },\n execution: {\n execAll,\n execGet,\n execRun,\n },\n nowIso,\n operationStrategy,\n rowMappers: {\n toEdgeRow,\n toNodeRow,\n toSchemaVersionRow,\n toUniqueRow,\n },\n });\n\n const executeCompiled = executionAdapter.executeCompiled;\n const executeRawMethod: Pick<TransactionBackend, \"executeRaw\"> =\n executeCompiled === undefined ?\n {}\n : {\n executeRaw<T>(\n sqlText: string,\n params: readonly unknown[],\n ): Promise<readonly T[]> {\n return runWithSerializedQueue(serializedQueue, async () =>\n executeCompiled<T>({ params, sql: sqlText }),\n );\n },\n };\n\n const vectorEmbeddingMethods =\n options.hasVectorEmbeddings\n ? {\n async upsertEmbedding(params: UpsertEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildUpsertEmbedding(\n params,\n nowIso(),\n );\n await execRun(query);\n },\n async deleteEmbedding(params: DeleteEmbeddingParams): Promise<void> {\n const query = operationStrategy.buildDeleteEmbedding(params);\n await execRun(query);\n },\n }\n : {};\n\n const operationBackend: TransactionBackend = {\n ...commonBackend,\n ...executeRawMethod,\n ...vectorEmbeddingMethods,\n capabilities,\n dialect: \"sqlite\",\n tableNames,\n fulltextStrategy,\n\n createVectorIndex(params: CreateVectorIndexParams): Promise<void> {\n const indexOptions: VectorIndexOptions = {\n graphId: params.graphId,\n nodeKind: params.nodeKind,\n fieldPath: params.fieldPath,\n dimensions: params.dimensions,\n indexType: params.indexType,\n metric: params.metric,\n ...(params.indexParams?.m === undefined\n ? {}\n : { hnswM: params.indexParams.m }),\n ...(params.indexParams?.efConstruction === undefined\n ? {}\n : { hnswEfConstruction: params.indexParams.efConstruction }),\n ...(params.indexParams?.lists === undefined\n ? {}\n : { ivfflatLists: params.indexParams.lists }),\n };\n\n const result = createSqliteVectorIndex(indexOptions);\n\n if (!result.success) {\n throw new Error(result.message ?? \"Failed to create SQLite vector index\");\n }\n return Promise.resolve();\n },\n\n dropVectorIndex(params: DropVectorIndexParams): Promise<void> {\n const result = dropSqliteVectorIndex(\n params.graphId,\n params.nodeKind,\n params.fieldPath,\n );\n if (!result.success) {\n throw new Error(result.message ?? \"Failed to drop SQLite vector index\");\n }\n return Promise.resolve();\n },\n\n // === Fulltext Operations ===\n\n async upsertFulltext(params: UpsertFulltextParams): Promise<void> {\n const timestamp = nowIso();\n const statements = operationStrategy.buildUpsertFulltext(\n params,\n timestamp,\n );\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async deleteFulltext(params: DeleteFulltextParams): Promise<void> {\n const statements = operationStrategy.buildDeleteFulltext(params);\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async upsertFulltextBatch(\n params: UpsertFulltextBatchParams,\n ): Promise<void> {\n if (params.rows.length === 0) return;\n const timestamp = nowIso();\n const statements = operationStrategy.buildUpsertFulltextBatch(\n params,\n timestamp,\n );\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async deleteFulltextBatch(\n params: DeleteFulltextBatchParams,\n ): Promise<void> {\n if (params.nodeIds.length === 0) return;\n const statements = operationStrategy.buildDeleteFulltextBatch(params);\n for (const stmt of statements) {\n await execRun(stmt);\n }\n },\n\n async fulltextSearch(\n params: FulltextSearchParams,\n ): Promise<readonly FulltextSearchResult[]> {\n const query = operationStrategy.buildFulltextSearch(params);\n const rows = await execAll<{\n node_id: string;\n score: number;\n snippet: string | null;\n }>(query);\n return rows.map((row, index) => ({\n nodeId: row.node_id,\n score: row.score,\n rank: index + 1,\n ...(row.snippet === null ? {} : { snippet: row.snippet }),\n }));\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return runWithSerializedQueue(serializedQueue, async () =>\n executionAdapter.execute<T>(query),\n );\n },\n\n compileSql(query: SQL): Readonly<{ sql: string; params: readonly unknown[] }> {\n return executionAdapter.compile(query);\n },\n };\n\n return operationBackend;\n}\n\nexport function createSqliteBackend(\n db: AnySqliteDatabase,\n options: SqliteBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const fulltextStrategy = options.fulltext ?? fts5Strategy;\n const profileHints = options.executionProfile ?? {};\n const executionAdapter = createSqliteExecutionAdapter(db, { profileHints });\n const { isSync, transactionMode } = executionAdapter.profile;\n const baseCapabilities: BackendCapabilities =\n transactionMode === \"none\"\n ? { ...SQLITE_CAPABILITIES, transactions: false }\n : SQLITE_CAPABILITIES;\n const capabilities: BackendCapabilities = {\n ...baseCapabilities,\n fulltext: buildFulltextCapabilities(fulltextStrategy),\n };\n\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n fulltext: tables.fulltextTableName,\n };\n const operationStrategy = createSqliteOperationStrategy(\n tables,\n fulltextStrategy,\n );\n const serializedQueue = isSync ? createSerializedExecutionQueue() : undefined;\n // Explicit opt-in: wire upsertEmbedding / deleteEmbedding only when\n // the caller confirms sqlite-vec is loaded. Probing synchronously\n // isn't portable across drizzle SQLite drivers (sync vs async), so\n // the gate lives with the caller that loaded the extension.\n const hasVectorEmbeddings = options.hasVectorEmbeddings === true;\n const operations = createSqliteOperationBackend({\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n ...(serializedQueue === undefined ? {} : { serializedQueue }),\n });\n\n const backend: GraphBackend = {\n ...operations,\n\n async bootstrapTables(): Promise<void> {\n const statements = generateSqliteDDL(tables, fulltextStrategy);\n for (const statement of statements) {\n await db.run(sql.raw(statement));\n }\n },\n\n async refreshStatistics(): Promise<void> {\n // `ANALYZE` populates `sqlite_stat1`. With no stat table, the\n // planner falls back to heuristics that, at least for FTS5\n // virtual-table queries and multi-column index selection, can be\n // an order of magnitude slower. Running it explicitly makes the\n // planner data-driven.\n await db.run(sql`ANALYZE`);\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n await runOptionallyInTransaction(\n backend,\n (target) => target.setActiveSchema(graphId, version),\n operations,\n );\n },\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n _options?: TransactionOptions,\n ): Promise<T> {\n if (transactionMode === \"none\") {\n throw new ConfigurationError(\n \"This SQLite backend does not support atomic transactions. \" +\n \"Operations within a transaction are not rolled back on failure. \" +\n \"Use backend.capabilities.transactions to check for transaction support, \" +\n \"or use individual operations with manual error handling.\",\n {\n backend: \"sqlite\",\n capability: \"transactions\",\n supportsTransactions: false,\n },\n );\n }\n\n if (transactionMode === \"sql\") {\n return runWithSerializedQueue(serializedQueue, async () => {\n const txBackend = createTransactionBackend({\n capabilities,\n db,\n executionAdapter,\n operationStrategy,\n profileHints: { isSync: true },\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n });\n db.run(sql`BEGIN`);\n\n try {\n const result = await fn(txBackend);\n db.run(sql`COMMIT`);\n return result;\n } catch (error) {\n db.run(sql`ROLLBACK`);\n throw error;\n }\n });\n }\n\n // transactionMode === \"drizzle\"\n return runWithSerializedQueue(serializedQueue, async () =>\n db.transaction(async (tx) => {\n const txBackend = createTransactionBackend({\n capabilities,\n db: tx,\n operationStrategy,\n profileHints: { isSync },\n tableNames,\n fulltextStrategy,\n hasVectorEmbeddings,\n });\n return fn(txBackend);\n }) as Promise<T>,\n );\n },\n\n close(): Promise<void> {\n serializedQueue?.dispose();\n return Promise.resolve();\n },\n };\n\n return backend;\n}\n\nfunction createTransactionBackend(\n options: CreateSqliteTransactionBackendOptions,\n): TransactionBackend {\n const txExecutionAdapter =\n options.executionAdapter ??\n createSqliteExecutionAdapter(options.db, {\n profileHints: options.profileHints,\n });\n\n return createSqliteOperationBackend({\n capabilities: options.capabilities,\n db: options.db,\n executionAdapter: txExecutionAdapter,\n operationStrategy: options.operationStrategy,\n tableNames: options.tableNames,\n fulltextStrategy: options.fulltextStrategy,\n ...(options.hasVectorEmbeddings === undefined\n ? {}\n : { hasVectorEmbeddings: options.hasVectorEmbeddings }),\n });\n}\n\n// Re-export schema utilities\nexport type { SqliteTableNames,SqliteTables } from \"./schema/sqlite\";\nexport { createSqliteTables, tables } from \"./schema/sqlite\";\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
|
|
4
4
|
var chunkUVZHTBZ5_cjs = require('./chunk-UVZHTBZ5.cjs');
|
|
5
5
|
var drizzleOrm = require('drizzle-orm');
|
|
6
6
|
var casing = require('drizzle-orm/casing');
|
|
@@ -8,7 +8,7 @@ var pgCore = require('drizzle-orm/pg-core');
|
|
|
8
8
|
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
9
9
|
|
|
10
10
|
function compileNodeIndexKeys(index, dialect, propsColumn, systemColumn) {
|
|
11
|
-
const adapter =
|
|
11
|
+
const adapter = chunk3JK66E3I_cjs.getDialect(dialect);
|
|
12
12
|
const keys = [];
|
|
13
13
|
for (const column of getNodeScopeColumns(index.scope)) {
|
|
14
14
|
keys.push(systemColumn(column));
|
|
@@ -31,7 +31,7 @@ function compileNodeIndexKeys(index, dialect, propsColumn, systemColumn) {
|
|
|
31
31
|
return { keys };
|
|
32
32
|
}
|
|
33
33
|
function compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn) {
|
|
34
|
-
const adapter =
|
|
34
|
+
const adapter = chunk3JK66E3I_cjs.getDialect(dialect);
|
|
35
35
|
const keys = [];
|
|
36
36
|
for (const column of getEdgeScopeColumns(index.scope, index.direction)) {
|
|
37
37
|
keys.push(systemColumn(column));
|
|
@@ -153,7 +153,7 @@ function compileIndexWhereOperand(ctx, operand) {
|
|
|
153
153
|
if (operand.__type === "index_operand_system") {
|
|
154
154
|
return ctx.systemColumn(operand.column);
|
|
155
155
|
}
|
|
156
|
-
const adapter =
|
|
156
|
+
const adapter = chunk3JK66E3I_cjs.getDialect(ctx.dialect);
|
|
157
157
|
const pointer = chunkUVZHTBZ5_cjs.jsonPointer([operand.field]);
|
|
158
158
|
switch (operand.valueType) {
|
|
159
159
|
case "number": {
|
|
@@ -187,7 +187,7 @@ function compileIndexWhereLiteral(dialect, literal) {
|
|
|
187
187
|
return drizzleOrm.sql.raw(literal.value.toString());
|
|
188
188
|
}
|
|
189
189
|
case "boolean": {
|
|
190
|
-
return
|
|
190
|
+
return chunk3JK66E3I_cjs.getDialect(dialect).booleanLiteral(literal.value);
|
|
191
191
|
}
|
|
192
192
|
case "array":
|
|
193
193
|
case "object":
|
|
@@ -225,7 +225,7 @@ function escapeStringLiteral(value) {
|
|
|
225
225
|
|
|
226
226
|
// src/indexes/ddl.ts
|
|
227
227
|
function generateIndexDDL(index, dialect, options = {}) {
|
|
228
|
-
if (index.__type ===
|
|
228
|
+
if (index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER) {
|
|
229
229
|
return generateNodeIndexDDL(index, dialect, options);
|
|
230
230
|
}
|
|
231
231
|
return generateEdgeIndexDDL(index, dialect, options);
|
|
@@ -242,7 +242,7 @@ function generateTableIndexDDL(index, dialect, tableName, options) {
|
|
|
242
242
|
const ifNotExists = options.ifNotExists ?? true;
|
|
243
243
|
const propsColumn = drizzleOrm.sql.raw('"props"');
|
|
244
244
|
const systemColumn = (column) => drizzleOrm.sql.raw(quoteIdentifier(column));
|
|
245
|
-
const keys = index.__type ===
|
|
245
|
+
const keys = index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER ? compileNodeIndexKeys(index, dialect, propsColumn, systemColumn).keys : compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn).keys;
|
|
246
246
|
const whereSql = index.where ? sqlToInlineString(
|
|
247
247
|
compileIndexWhere(
|
|
248
248
|
{
|
|
@@ -293,7 +293,7 @@ function inlineParam(value, dialect) {
|
|
|
293
293
|
return value.toString();
|
|
294
294
|
}
|
|
295
295
|
if (typeof value === "boolean") {
|
|
296
|
-
return
|
|
296
|
+
return chunk3JK66E3I_cjs.getDialect(dialect).booleanLiteralString(value);
|
|
297
297
|
}
|
|
298
298
|
if (typeof value === "bigint") {
|
|
299
299
|
return value.toString();
|
|
@@ -342,7 +342,7 @@ function defineNodeIndex(node, config) {
|
|
|
342
342
|
coveringFields
|
|
343
343
|
});
|
|
344
344
|
return {
|
|
345
|
-
__type:
|
|
345
|
+
__type: chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER,
|
|
346
346
|
node,
|
|
347
347
|
nodeKind: node.kind,
|
|
348
348
|
fields,
|
|
@@ -392,7 +392,7 @@ function defineEdgeIndex(edge, config) {
|
|
|
392
392
|
coveringFields
|
|
393
393
|
});
|
|
394
394
|
return {
|
|
395
|
-
__type:
|
|
395
|
+
__type: chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER,
|
|
396
396
|
edge,
|
|
397
397
|
edgeKind: edge.kind,
|
|
398
398
|
fields,
|
|
@@ -570,7 +570,7 @@ function createSystemColumnMapForNode() {
|
|
|
570
570
|
["kind", { column: "kind", valueType: "string" }],
|
|
571
571
|
["id", { column: "id", valueType: "string" }]
|
|
572
572
|
];
|
|
573
|
-
for (const key of
|
|
573
|
+
for (const key of chunk3JK66E3I_cjs.NODE_META_KEYS) {
|
|
574
574
|
if (key === "version") {
|
|
575
575
|
entries.push([key, { column: "version", valueType: "number" }]);
|
|
576
576
|
continue;
|
|
@@ -589,7 +589,7 @@ function createSystemColumnMapForEdge() {
|
|
|
589
589
|
["toKind", { column: "to_kind", valueType: "string" }],
|
|
590
590
|
["toId", { column: "to_id", valueType: "string" }]
|
|
591
591
|
];
|
|
592
|
-
for (const key of
|
|
592
|
+
for (const key of chunk3JK66E3I_cjs.EDGE_META_KEYS) {
|
|
593
593
|
entries.push([key, { column: toSystemColumnName(key), valueType: "date" }]);
|
|
594
594
|
}
|
|
595
595
|
return new Map(entries);
|
|
@@ -755,7 +755,7 @@ function resolveEdgeFieldTypeInfoOrThrow(edgeKind, pointer, schemaIntrospector)
|
|
|
755
755
|
return resolved;
|
|
756
756
|
}
|
|
757
757
|
function generateDefaultIndexName(parts) {
|
|
758
|
-
const hash =
|
|
758
|
+
const hash = chunk3JK66E3I_cjs.fnv1aBase36(
|
|
759
759
|
JSON.stringify({
|
|
760
760
|
kind: parts.kind,
|
|
761
761
|
kindName: parts.kindName,
|
|
@@ -779,14 +779,14 @@ function generateDefaultIndexName(parts) {
|
|
|
779
779
|
hash
|
|
780
780
|
].filter((part) => part !== void 0);
|
|
781
781
|
const joined = nameParts.join("_");
|
|
782
|
-
return joined.length <=
|
|
782
|
+
return joined.length <= chunk3JK66E3I_cjs.MAX_PG_IDENTIFIER_LENGTH ? joined : `${joined.slice(0, chunk3JK66E3I_cjs.TRUNCATED_IDENTIFIER_MAX_LENGTH)}_${hash}`;
|
|
783
783
|
}
|
|
784
784
|
function sanitizeIdentifierComponent(value) {
|
|
785
|
-
return value.toLowerCase().replaceAll(/[^a-z0-9_]+/g, "_").replaceAll(/^_+|_+$/g, "").slice(0,
|
|
785
|
+
return value.toLowerCase().replaceAll(/[^a-z0-9_]+/g, "_").replaceAll(/^_+|_+$/g, "").slice(0, chunk3JK66E3I_cjs.IDENTIFIER_COMPONENT_MAX_LENGTH);
|
|
786
786
|
}
|
|
787
787
|
function buildPostgresNodeIndexBuilders(table, indexes) {
|
|
788
788
|
const nodeIndexes = indexes.filter(
|
|
789
|
-
(index) => index.__type ===
|
|
789
|
+
(index) => index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER
|
|
790
790
|
);
|
|
791
791
|
return nodeIndexes.map((index) => {
|
|
792
792
|
const propsColumn = drizzleOrm.sql`${table.props}`;
|
|
@@ -813,7 +813,7 @@ function buildPostgresNodeIndexBuilders(table, indexes) {
|
|
|
813
813
|
}
|
|
814
814
|
function buildPostgresEdgeIndexBuilders(table, indexes) {
|
|
815
815
|
const edgeIndexes = indexes.filter(
|
|
816
|
-
(index) => index.__type ===
|
|
816
|
+
(index) => index.__type === chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER
|
|
817
817
|
);
|
|
818
818
|
return edgeIndexes.map((index) => {
|
|
819
819
|
const propsColumn = drizzleOrm.sql`${table.props}`;
|
|
@@ -920,7 +920,7 @@ function getPostgresEdgeSystemColumn(table, column) {
|
|
|
920
920
|
}
|
|
921
921
|
function buildSqliteNodeIndexBuilders(table, indexes) {
|
|
922
922
|
const nodeIndexes = indexes.filter(
|
|
923
|
-
(index) => index.__type ===
|
|
923
|
+
(index) => index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER
|
|
924
924
|
);
|
|
925
925
|
return nodeIndexes.map((index) => {
|
|
926
926
|
const propsColumn = drizzleOrm.sql`${table.props}`;
|
|
@@ -947,7 +947,7 @@ function buildSqliteNodeIndexBuilders(table, indexes) {
|
|
|
947
947
|
}
|
|
948
948
|
function buildSqliteEdgeIndexBuilders(table, indexes) {
|
|
949
949
|
const edgeIndexes = indexes.filter(
|
|
950
|
-
(index) => index.__type ===
|
|
950
|
+
(index) => index.__type === chunk3JK66E3I_cjs.EDGE_INDEX_TYPE_MARKER
|
|
951
951
|
);
|
|
952
952
|
return edgeIndexes.map((index) => {
|
|
953
953
|
const propsColumn = drizzleOrm.sql`${table.props}`;
|
|
@@ -1060,7 +1060,7 @@ function assertNonEmpty2(values, label) {
|
|
|
1060
1060
|
|
|
1061
1061
|
// src/indexes/profiler.ts
|
|
1062
1062
|
function toDeclaredIndex(index) {
|
|
1063
|
-
if (index.__type ===
|
|
1063
|
+
if (index.__type === chunk3JK66E3I_cjs.NODE_INDEX_TYPE_MARKER) {
|
|
1064
1064
|
return toDeclaredNodeIndex(index);
|
|
1065
1065
|
}
|
|
1066
1066
|
return toDeclaredEdgeIndex(index);
|
|
@@ -1127,5 +1127,5 @@ exports.notWhere = notWhere;
|
|
|
1127
1127
|
exports.orWhere = orWhere;
|
|
1128
1128
|
exports.toDeclaredIndex = toDeclaredIndex;
|
|
1129
1129
|
exports.toDeclaredIndexes = toDeclaredIndexes;
|
|
1130
|
-
//# sourceMappingURL=chunk-
|
|
1131
|
-
//# sourceMappingURL=chunk-
|
|
1130
|
+
//# sourceMappingURL=chunk-PEE4EWXZ.cjs.map
|
|
1131
|
+
//# sourceMappingURL=chunk-PEE4EWXZ.cjs.map
|