@nicia-ai/typegraph 0.22.0 → 0.24.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 +165 -48
- 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 +138 -21
- package/dist/backend/postgres/index.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +13 -12
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +3 -2
- package/dist/backend/sqlite/libsql.cjs +6 -5
- 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 +3 -2
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +7 -6
- 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 +3 -2
- 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-GUYI6VAS.cjs → chunk-3MDBMCFF.cjs} +67 -42
- package/dist/chunk-3MDBMCFF.cjs.map +1 -0
- package/dist/{chunk-SCXOGKLD.cjs → chunk-5HVDOPZU.cjs} +88 -45
- package/dist/chunk-5HVDOPZU.cjs.map +1 -0
- package/dist/chunk-7TU5EWQ7.js +47 -0
- package/dist/chunk-7TU5EWQ7.js.map +1 -0
- package/dist/{chunk-5ZMMHUWR.js → chunk-EY4LBX3F.js} +88 -43
- package/dist/chunk-EY4LBX3F.js.map +1 -0
- package/dist/{chunk-NSLTDXVH.js → chunk-GTG5J4UP.js} +52 -27
- package/dist/chunk-GTG5J4UP.js.map +1 -0
- package/dist/chunk-HTGDWIDE.cjs +89 -0
- package/dist/chunk-HTGDWIDE.cjs.map +1 -0
- 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 +133 -145
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +94 -106
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- 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-5ZMMHUWR.js.map +0 -1
- package/dist/chunk-GUYI6VAS.cjs.map +0 -1
- package/dist/chunk-NSLTDXVH.js.map +0 -1
- package/dist/chunk-SCXOGKLD.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkHTGDWIDE_cjs = require('./chunk-HTGDWIDE.cjs');
|
|
3
4
|
var chunkHRNQ3DVJ_cjs = require('./chunk-HRNQ3DVJ.cjs');
|
|
4
5
|
var chunkWRWVWKQL_cjs = require('./chunk-WRWVWKQL.cjs');
|
|
6
|
+
var chunkRNUNP5JD_cjs = require('./chunk-RNUNP5JD.cjs');
|
|
5
7
|
var chunkO5PST6TB_cjs = require('./chunk-O5PST6TB.cjs');
|
|
6
8
|
var chunk3JK66E3I_cjs = require('./chunk-3JK66E3I.cjs');
|
|
7
9
|
var chunkUVZHTBZ5_cjs = require('./chunk-UVZHTBZ5.cjs');
|
|
@@ -1941,7 +1943,7 @@ function validateTableName(name, label) {
|
|
|
1941
1943
|
);
|
|
1942
1944
|
}
|
|
1943
1945
|
}
|
|
1944
|
-
function
|
|
1946
|
+
function quoteIdentifier2(name) {
|
|
1945
1947
|
return `"${name.replaceAll('"', '""')}"`;
|
|
1946
1948
|
}
|
|
1947
1949
|
function createSqlSchema(names = {}) {
|
|
@@ -1952,10 +1954,10 @@ function createSqlSchema(names = {}) {
|
|
|
1952
1954
|
validateTableName(tables.fulltext, "fulltext");
|
|
1953
1955
|
return {
|
|
1954
1956
|
tables,
|
|
1955
|
-
nodesTable: drizzleOrm.sql.raw(
|
|
1956
|
-
edgesTable: drizzleOrm.sql.raw(
|
|
1957
|
-
embeddingsTable: drizzleOrm.sql.raw(
|
|
1958
|
-
fulltextTable: drizzleOrm.sql.raw(
|
|
1957
|
+
nodesTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.nodes)),
|
|
1958
|
+
edgesTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.edges)),
|
|
1959
|
+
embeddingsTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.embeddings)),
|
|
1960
|
+
fulltextTable: drizzleOrm.sql.raw(quoteIdentifier2(tables.fulltext))
|
|
1959
1961
|
};
|
|
1960
1962
|
}
|
|
1961
1963
|
var DEFAULT_SQL_SCHEMA = createSqlSchema();
|
|
@@ -1993,76 +1995,6 @@ function compileTypedJsonExtract(input) {
|
|
|
1993
1995
|
}
|
|
1994
1996
|
}
|
|
1995
1997
|
}
|
|
1996
|
-
var NODE_COLUMNS = [
|
|
1997
|
-
"id",
|
|
1998
|
-
"kind",
|
|
1999
|
-
"props",
|
|
2000
|
-
"version",
|
|
2001
|
-
"valid_from",
|
|
2002
|
-
"valid_to",
|
|
2003
|
-
"created_at",
|
|
2004
|
-
"updated_at",
|
|
2005
|
-
"deleted_at"
|
|
2006
|
-
];
|
|
2007
|
-
var EDGE_COLUMNS = [
|
|
2008
|
-
"id",
|
|
2009
|
-
"kind",
|
|
2010
|
-
"from_id",
|
|
2011
|
-
"to_id",
|
|
2012
|
-
"props",
|
|
2013
|
-
"valid_from",
|
|
2014
|
-
"valid_to",
|
|
2015
|
-
"created_at",
|
|
2016
|
-
"updated_at",
|
|
2017
|
-
"deleted_at"
|
|
2018
|
-
];
|
|
2019
|
-
var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
|
|
2020
|
-
function quoteIdentifier2(identifier) {
|
|
2021
|
-
return drizzleOrm.sql.raw(`"${identifier.replaceAll('"', '""')}"`);
|
|
2022
|
-
}
|
|
2023
|
-
function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
|
|
2024
|
-
if (alwaysRequiredColumns?.has(column)) return true;
|
|
2025
|
-
if (requiredColumns === void 0) return true;
|
|
2026
|
-
return requiredColumns.has(column);
|
|
2027
|
-
}
|
|
2028
|
-
function addRequiredColumn(requiredColumnsByAlias, alias, column) {
|
|
2029
|
-
const existing = requiredColumnsByAlias.get(alias);
|
|
2030
|
-
if (existing) {
|
|
2031
|
-
existing.add(column);
|
|
2032
|
-
return;
|
|
2033
|
-
}
|
|
2034
|
-
requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
|
|
2035
|
-
}
|
|
2036
|
-
function markFieldRefAsRequired(requiredColumnsByAlias, field2) {
|
|
2037
|
-
const column = field2.path[0];
|
|
2038
|
-
if (column === void 0) return;
|
|
2039
|
-
addRequiredColumn(requiredColumnsByAlias, field2.alias, column);
|
|
2040
|
-
}
|
|
2041
|
-
function mapSelectiveSystemFieldToColumn(field2) {
|
|
2042
|
-
if (field2 === "fromId") return "from_id";
|
|
2043
|
-
if (field2 === "toId") return "to_id";
|
|
2044
|
-
if (field2.startsWith("meta.")) {
|
|
2045
|
-
return field2.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
|
|
2046
|
-
}
|
|
2047
|
-
return field2;
|
|
2048
|
-
}
|
|
2049
|
-
function markSelectiveFieldAsRequired(requiredColumnsByAlias, field2) {
|
|
2050
|
-
if (field2.isSystemField) {
|
|
2051
|
-
addRequiredColumn(
|
|
2052
|
-
requiredColumnsByAlias,
|
|
2053
|
-
field2.alias,
|
|
2054
|
-
mapSelectiveSystemFieldToColumn(field2.field)
|
|
2055
|
-
);
|
|
2056
|
-
return;
|
|
2057
|
-
}
|
|
2058
|
-
addRequiredColumn(requiredColumnsByAlias, field2.alias, "props");
|
|
2059
|
-
}
|
|
2060
|
-
function isIdFieldRef(field2) {
|
|
2061
|
-
return field2.path.length === 1 && field2.path[0] === "id" && field2.jsonPointer === void 0;
|
|
2062
|
-
}
|
|
2063
|
-
function isAggregateExpr(source) {
|
|
2064
|
-
return "__type" in source && source.__type === "aggregate";
|
|
2065
|
-
}
|
|
2066
1998
|
|
|
2067
1999
|
// src/query/compiler/emitter/standard-builders.ts
|
|
2068
2000
|
function compileColumnReference(tableAlias, column) {
|
|
@@ -2072,7 +2004,7 @@ function compileColumnReference(tableAlias, column) {
|
|
|
2072
2004
|
return drizzleOrm.sql`${drizzleOrm.sql.raw(tableAlias)}.${drizzleOrm.sql.raw(column)}`;
|
|
2073
2005
|
}
|
|
2074
2006
|
function qualifyColumn(owner, name) {
|
|
2075
|
-
return drizzleOrm.sql`${
|
|
2007
|
+
return drizzleOrm.sql`${chunkHTGDWIDE_cjs.quoteIdentifier(owner)}.${chunkHTGDWIDE_cjs.quoteIdentifier(name)}`;
|
|
2076
2008
|
}
|
|
2077
2009
|
var SCOPED_RELEVANCE_NODES_ALIAS = "scoped_relevance_nodes";
|
|
2078
2010
|
function buildScopedNodeIdsSubquery(nodeAlias) {
|
|
@@ -2082,20 +2014,20 @@ function buildScopedNodeIdsSubquery(nodeAlias) {
|
|
|
2082
2014
|
SELECT DISTINCT
|
|
2083
2015
|
${qualifyColumn(cteAlias, `${nodeAlias}_id`)} AS node_id,
|
|
2084
2016
|
${qualifyColumn(cteAlias, `${nodeAlias}_kind`)} AS node_kind
|
|
2085
|
-
FROM ${
|
|
2017
|
+
FROM ${chunkHTGDWIDE_cjs.quoteIdentifier(cteAlias)}
|
|
2086
2018
|
) AS ${drizzleOrm.sql.raw(SCOPED_RELEVANCE_NODES_ALIAS)}
|
|
2087
2019
|
`;
|
|
2088
2020
|
}
|
|
2089
2021
|
function compileNodeSelectColumns(tableAlias, alias, requiredColumns) {
|
|
2090
|
-
return NODE_COLUMNS.filter(
|
|
2091
|
-
(column) => column === "id" || column === "kind" || shouldProjectColumn(requiredColumns, column)
|
|
2022
|
+
return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
|
|
2023
|
+
(column) => column === "id" || column === "kind" || chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column)
|
|
2092
2024
|
).map(
|
|
2093
2025
|
(column) => drizzleOrm.sql`${compileColumnReference(tableAlias, column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
|
|
2094
2026
|
);
|
|
2095
2027
|
}
|
|
2096
2028
|
function compileEdgeSelectColumns(tableAlias, alias, requiredColumns) {
|
|
2097
|
-
return EDGE_COLUMNS.filter(
|
|
2098
|
-
(column) => shouldProjectColumn(requiredColumns, column)
|
|
2029
|
+
return chunkHTGDWIDE_cjs.EDGE_COLUMNS.filter(
|
|
2030
|
+
(column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column)
|
|
2099
2031
|
).map(
|
|
2100
2032
|
(column) => drizzleOrm.sql`${compileColumnReference(tableAlias, column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
|
|
2101
2033
|
);
|
|
@@ -2118,7 +2050,7 @@ function buildStandardStartCte(input) {
|
|
|
2118
2050
|
temporalFilter,
|
|
2119
2051
|
...predicateClauses
|
|
2120
2052
|
];
|
|
2121
|
-
const effectiveRequiredColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(alias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2053
|
+
const effectiveRequiredColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(alias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2122
2054
|
const limitClause = input.limitOffset === void 0 ? drizzleOrm.sql`` : input.limitOffset.offset === void 0 ? drizzleOrm.sql`
|
|
2123
2055
|
LIMIT ${input.limitOffset.limit}
|
|
2124
2056
|
` : drizzleOrm.sql`
|
|
@@ -2184,8 +2116,8 @@ function buildStandardTraversalCte(input) {
|
|
|
2184
2116
|
const previousAlias = traversal.joinFromAlias;
|
|
2185
2117
|
const edgeAlias = traversal.edgeAlias;
|
|
2186
2118
|
const nodeAlias = traversal.nodeAlias;
|
|
2187
|
-
const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2188
|
-
const requiredEdgeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(edgeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2119
|
+
const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2120
|
+
const requiredEdgeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(edgeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
|
|
2189
2121
|
const previousRowColumns = carryForwardPreviousColumns ? [drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.*`] : [
|
|
2190
2122
|
drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.${drizzleOrm.sql.raw(previousAlias)}_id AS ${drizzleOrm.sql.raw(previousAlias)}_id`,
|
|
2191
2123
|
drizzleOrm.sql`cte_${drizzleOrm.sql.raw(previousAlias)}.${drizzleOrm.sql.raw(previousAlias)}_kind AS ${drizzleOrm.sql.raw(previousAlias)}_kind`
|
|
@@ -2317,7 +2249,7 @@ function compileAggregateExprFromSource(expr, dialect) {
|
|
|
2317
2249
|
}
|
|
2318
2250
|
}
|
|
2319
2251
|
function compileProjectedSource(field2, dialect) {
|
|
2320
|
-
if (isAggregateExpr(field2.source)) {
|
|
2252
|
+
if (chunkHTGDWIDE_cjs.isAggregateExpr(field2.source)) {
|
|
2321
2253
|
return compileAggregateExprFromSource(field2.source, dialect);
|
|
2322
2254
|
}
|
|
2323
2255
|
const cteAlias = field2.cteAlias ?? `cte_${field2.source.alias}`;
|
|
@@ -2344,7 +2276,7 @@ function buildStandardProjection(input) {
|
|
|
2344
2276
|
}
|
|
2345
2277
|
const projectedFields = fields.map((field2) => {
|
|
2346
2278
|
const source = compileProjectedSource(field2, dialect);
|
|
2347
|
-
return drizzleOrm.sql`${source} AS ${
|
|
2279
|
+
return drizzleOrm.sql`${source} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
|
|
2348
2280
|
});
|
|
2349
2281
|
return drizzleOrm.sql.join(projectedFields, drizzleOrm.sql`, `);
|
|
2350
2282
|
}
|
|
@@ -2363,8 +2295,8 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
|
|
|
2363
2295
|
const columns = fields.map((field2) => {
|
|
2364
2296
|
const cteAlias = collapsedTraversalCteAlias ?? aliasToCte.get(field2.alias) ?? `cte_${field2.alias}`;
|
|
2365
2297
|
if (field2.isSystemField) {
|
|
2366
|
-
const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
|
|
2367
|
-
return drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${
|
|
2298
|
+
const dbColumn = chunkHTGDWIDE_cjs.mapSelectiveSystemFieldToColumn(field2.field);
|
|
2299
|
+
return drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
|
|
2368
2300
|
}
|
|
2369
2301
|
const propsColumn = `${field2.alias}_props`;
|
|
2370
2302
|
const column = drizzleOrm.sql`${drizzleOrm.sql.raw(cteAlias)}.${drizzleOrm.sql.raw(propsColumn)}`;
|
|
@@ -2375,7 +2307,7 @@ function compileSelectiveProjection(fields, dialect, ast, collapsedTraversalCteA
|
|
|
2375
2307
|
pointer,
|
|
2376
2308
|
valueType: field2.valueType
|
|
2377
2309
|
});
|
|
2378
|
-
return drizzleOrm.sql`${extracted} AS ${
|
|
2310
|
+
return drizzleOrm.sql`${extracted} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
|
|
2379
2311
|
});
|
|
2380
2312
|
return drizzleOrm.sql.join(columns, drizzleOrm.sql`, `);
|
|
2381
2313
|
}
|
|
@@ -3445,8 +3377,8 @@ function compileRecursiveCte(ast, traversal, graphId, ctx, requiredColumnsByAlia
|
|
|
3445
3377
|
if (previousNodeKinds.length > 1) {
|
|
3446
3378
|
recursiveJoinRequiredColumns.add("kind");
|
|
3447
3379
|
}
|
|
3448
|
-
const requiredStartColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(startAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
|
|
3449
|
-
const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? EMPTY_REQUIRED_COLUMNS : void 0;
|
|
3380
|
+
const requiredStartColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(startAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
|
|
3381
|
+
const requiredNodeColumns = requiredColumnsByAlias ? requiredColumnsByAlias.get(nodeAlias) ?? chunkHTGDWIDE_cjs.EMPTY_REQUIRED_COLUMNS : void 0;
|
|
3450
3382
|
const startColumnsFromBase = compileNodeSelectColumnsFromTable(
|
|
3451
3383
|
"n0",
|
|
3452
3384
|
startAlias,
|
|
@@ -3642,30 +3574,30 @@ function collectRequiredColumnsByAlias(ast, traversal) {
|
|
|
3642
3574
|
const previousNodeKinds = [
|
|
3643
3575
|
.../* @__PURE__ */ new Set([...ast.start.kinds, ...traversal.nodeKinds])
|
|
3644
3576
|
];
|
|
3645
|
-
addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
|
|
3577
|
+
chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
|
|
3646
3578
|
if (previousNodeKinds.length > 1) {
|
|
3647
|
-
addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "kind");
|
|
3579
|
+
chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "kind");
|
|
3648
3580
|
}
|
|
3649
3581
|
for (const field2 of selectiveFields) {
|
|
3650
|
-
markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
|
|
3582
|
+
chunkHTGDWIDE_cjs.markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
|
|
3651
3583
|
}
|
|
3652
3584
|
if (ast.orderBy) {
|
|
3653
3585
|
for (const orderSpec of ast.orderBy) {
|
|
3654
|
-
markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
|
|
3586
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
|
|
3655
3587
|
}
|
|
3656
3588
|
}
|
|
3657
3589
|
return requiredColumnsByAlias;
|
|
3658
3590
|
}
|
|
3659
3591
|
function compileNodeSelectColumnsFromTable(tableAlias, alias, requiredColumns, alwaysRequiredColumns) {
|
|
3660
|
-
return NODE_COLUMNS.filter(
|
|
3661
|
-
(column) => shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
|
|
3592
|
+
return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
|
|
3593
|
+
(column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
|
|
3662
3594
|
).map(
|
|
3663
3595
|
(column) => drizzleOrm.sql`${drizzleOrm.sql.raw(tableAlias)}.${drizzleOrm.sql.raw(column)} AS ${drizzleOrm.sql.raw(`${alias}_${column}`)}`
|
|
3664
3596
|
);
|
|
3665
3597
|
}
|
|
3666
3598
|
function compileNodeSelectColumnsFromRecursiveRow(alias, requiredColumns, alwaysRequiredColumns) {
|
|
3667
|
-
return NODE_COLUMNS.filter(
|
|
3668
|
-
(column) => shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
|
|
3599
|
+
return chunkHTGDWIDE_cjs.NODE_COLUMNS.filter(
|
|
3600
|
+
(column) => chunkHTGDWIDE_cjs.shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns)
|
|
3669
3601
|
).map((column) => {
|
|
3670
3602
|
const projected = `${alias}_${column}`;
|
|
3671
3603
|
return drizzleOrm.sql`r.${drizzleOrm.sql.raw(projected)} AS ${drizzleOrm.sql.raw(projected)}`;
|
|
@@ -3706,10 +3638,10 @@ function compileRecursiveProjection(ast, traversal, dialect) {
|
|
|
3706
3638
|
drizzleOrm.sql`${drizzleOrm.sql.raw(nodeAlias)}_deleted_at`
|
|
3707
3639
|
];
|
|
3708
3640
|
if (vl.depthAlias !== void 0) {
|
|
3709
|
-
fields.push(drizzleOrm.sql`depth AS ${
|
|
3641
|
+
fields.push(drizzleOrm.sql`depth AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.depthAlias)}`);
|
|
3710
3642
|
}
|
|
3711
3643
|
if (vl.pathAlias !== void 0) {
|
|
3712
|
-
fields.push(drizzleOrm.sql`path AS ${
|
|
3644
|
+
fields.push(drizzleOrm.sql`path AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.pathAlias)}`);
|
|
3713
3645
|
}
|
|
3714
3646
|
return drizzleOrm.sql.join(fields, drizzleOrm.sql`, `);
|
|
3715
3647
|
}
|
|
@@ -3722,8 +3654,8 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
|
|
|
3722
3654
|
);
|
|
3723
3655
|
}
|
|
3724
3656
|
if (field2.isSystemField) {
|
|
3725
|
-
const dbColumn = mapSelectiveSystemFieldToColumn(field2.field);
|
|
3726
|
-
return drizzleOrm.sql`${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${
|
|
3657
|
+
const dbColumn = chunkHTGDWIDE_cjs.mapSelectiveSystemFieldToColumn(field2.field);
|
|
3658
|
+
return drizzleOrm.sql`${drizzleOrm.sql.raw(`${field2.alias}_${dbColumn}`)} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
|
|
3727
3659
|
}
|
|
3728
3660
|
const column = drizzleOrm.sql.raw(`${field2.alias}_props`);
|
|
3729
3661
|
const extracted = compileTypedJsonExtract({
|
|
@@ -3732,14 +3664,14 @@ function compileRecursiveSelectiveProjection(fields, ast, traversal, dialect) {
|
|
|
3732
3664
|
pointer: chunkUVZHTBZ5_cjs.jsonPointer([field2.field]),
|
|
3733
3665
|
valueType: field2.valueType
|
|
3734
3666
|
});
|
|
3735
|
-
return drizzleOrm.sql`${extracted} AS ${
|
|
3667
|
+
return drizzleOrm.sql`${extracted} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(field2.outputName)}`;
|
|
3736
3668
|
});
|
|
3737
3669
|
const vl = traversal.variableLength;
|
|
3738
3670
|
if (vl.depthAlias !== void 0) {
|
|
3739
|
-
columns.push(drizzleOrm.sql`depth AS ${
|
|
3671
|
+
columns.push(drizzleOrm.sql`depth AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.depthAlias)}`);
|
|
3740
3672
|
}
|
|
3741
3673
|
if (vl.pathAlias !== void 0) {
|
|
3742
|
-
columns.push(drizzleOrm.sql`path AS ${
|
|
3674
|
+
columns.push(drizzleOrm.sql`path AS ${chunkHTGDWIDE_cjs.quoteIdentifier(vl.pathAlias)}`);
|
|
3743
3675
|
}
|
|
3744
3676
|
return drizzleOrm.sql.join(columns, drizzleOrm.sql`, `);
|
|
3745
3677
|
}
|
|
@@ -4254,7 +4186,7 @@ function buildProjectedPropertyColumns(alias, plan, dialect) {
|
|
|
4254
4186
|
valueType: fieldPlan.typeInfo?.valueType
|
|
4255
4187
|
});
|
|
4256
4188
|
columns.push(
|
|
4257
|
-
drizzleOrm.sql`CASE WHEN ${drizzleOrm.sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${
|
|
4189
|
+
drizzleOrm.sql`CASE WHEN ${drizzleOrm.sql.raw(alias)}.kind = ${kind} THEN ${extracted} ELSE NULL END AS ${chunkHTGDWIDE_cjs.quoteIdentifier(fieldPlan.outputName)}`
|
|
4258
4190
|
);
|
|
4259
4191
|
}
|
|
4260
4192
|
}
|
|
@@ -4839,7 +4771,7 @@ function isColumnPruningEnabled(ast) {
|
|
|
4839
4771
|
function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
|
|
4840
4772
|
switch (expression.__type) {
|
|
4841
4773
|
case "comparison": {
|
|
4842
|
-
markFieldRefAsRequired(requiredColumnsByAlias, expression.left);
|
|
4774
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.left);
|
|
4843
4775
|
return;
|
|
4844
4776
|
}
|
|
4845
4777
|
case "string_op":
|
|
@@ -4847,7 +4779,7 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
|
|
|
4847
4779
|
case "between":
|
|
4848
4780
|
case "array_op":
|
|
4849
4781
|
case "object_op": {
|
|
4850
|
-
markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4782
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4851
4783
|
return;
|
|
4852
4784
|
}
|
|
4853
4785
|
case "and":
|
|
@@ -4865,22 +4797,22 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
|
|
|
4865
4797
|
return;
|
|
4866
4798
|
}
|
|
4867
4799
|
case "aggregate_comparison": {
|
|
4868
|
-
markFieldRefAsRequired(
|
|
4800
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(
|
|
4869
4801
|
requiredColumnsByAlias,
|
|
4870
4802
|
expression.aggregate.field
|
|
4871
4803
|
);
|
|
4872
4804
|
return;
|
|
4873
4805
|
}
|
|
4874
4806
|
case "in_subquery": {
|
|
4875
|
-
markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4807
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4876
4808
|
return;
|
|
4877
4809
|
}
|
|
4878
4810
|
case "vector_similarity": {
|
|
4879
|
-
markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4811
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4880
4812
|
return;
|
|
4881
4813
|
}
|
|
4882
4814
|
case "fulltext_match": {
|
|
4883
|
-
markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4815
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, expression.field);
|
|
4884
4816
|
return;
|
|
4885
4817
|
}
|
|
4886
4818
|
case "exists": {
|
|
@@ -4890,33 +4822,33 @@ function markPredicateFieldsAsRequired(requiredColumnsByAlias, expression) {
|
|
|
4890
4822
|
}
|
|
4891
4823
|
function collectRequiredColumnsByAlias2(ast) {
|
|
4892
4824
|
const requiredColumnsByAlias = /* @__PURE__ */ new Map();
|
|
4893
|
-
addRequiredColumn(requiredColumnsByAlias, ast.start.alias, "id");
|
|
4825
|
+
chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, ast.start.alias, "id");
|
|
4894
4826
|
for (const traversal of ast.traversals) {
|
|
4895
|
-
addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
|
|
4827
|
+
chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, traversal.nodeAlias, "id");
|
|
4896
4828
|
}
|
|
4897
4829
|
if (ast.selectiveFields && ast.selectiveFields.length > 0) {
|
|
4898
4830
|
for (const field2 of ast.selectiveFields) {
|
|
4899
|
-
markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
|
|
4831
|
+
chunkHTGDWIDE_cjs.markSelectiveFieldAsRequired(requiredColumnsByAlias, field2);
|
|
4900
4832
|
}
|
|
4901
4833
|
} else {
|
|
4902
4834
|
for (const projectedField of ast.projection.fields) {
|
|
4903
4835
|
const source = projectedField.source;
|
|
4904
4836
|
if (source.__type === "field_ref") {
|
|
4905
|
-
markFieldRefAsRequired(requiredColumnsByAlias, source);
|
|
4837
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, source);
|
|
4906
4838
|
} else {
|
|
4907
|
-
addRequiredColumn(requiredColumnsByAlias, source.field.alias, "id");
|
|
4908
|
-
markFieldRefAsRequired(requiredColumnsByAlias, source.field);
|
|
4839
|
+
chunkHTGDWIDE_cjs.addRequiredColumn(requiredColumnsByAlias, source.field.alias, "id");
|
|
4840
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, source.field);
|
|
4909
4841
|
}
|
|
4910
4842
|
}
|
|
4911
4843
|
}
|
|
4912
4844
|
if (ast.groupBy) {
|
|
4913
4845
|
for (const field2 of ast.groupBy.fields) {
|
|
4914
|
-
markFieldRefAsRequired(requiredColumnsByAlias, field2);
|
|
4846
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, field2);
|
|
4915
4847
|
}
|
|
4916
4848
|
}
|
|
4917
4849
|
if (ast.orderBy) {
|
|
4918
4850
|
for (const orderSpec of ast.orderBy) {
|
|
4919
|
-
markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
|
|
4851
|
+
chunkHTGDWIDE_cjs.markFieldRefAsRequired(requiredColumnsByAlias, orderSpec.field);
|
|
4920
4852
|
}
|
|
4921
4853
|
}
|
|
4922
4854
|
if (ast.having) {
|
|
@@ -4930,7 +4862,7 @@ function collectRequiredColumnsByAlias2(ast) {
|
|
|
4930
4862
|
function hasIdEqualityPredicate(expression, alias) {
|
|
4931
4863
|
switch (expression.__type) {
|
|
4932
4864
|
case "comparison": {
|
|
4933
|
-
return expression.op === "eq" && expression.left.alias === alias && isIdFieldRef(expression.left);
|
|
4865
|
+
return expression.op === "eq" && expression.left.alias === alias && chunkHTGDWIDE_cjs.isIdFieldRef(expression.left);
|
|
4934
4866
|
}
|
|
4935
4867
|
case "and": {
|
|
4936
4868
|
return expression.predicates.some(
|
|
@@ -5282,7 +5214,7 @@ function resolveCountAggregateFastPath(ast) {
|
|
|
5282
5214
|
return void 0;
|
|
5283
5215
|
}
|
|
5284
5216
|
const groupField = ast.groupBy.fields[0];
|
|
5285
|
-
if (groupField.alias !== ast.start.alias || !isIdFieldRef(groupField)) {
|
|
5217
|
+
if (groupField.alias !== ast.start.alias || !chunkHTGDWIDE_cjs.isIdFieldRef(groupField)) {
|
|
5286
5218
|
return void 0;
|
|
5287
5219
|
}
|
|
5288
5220
|
let requiresNodeCount = false;
|
|
@@ -5291,13 +5223,13 @@ function resolveCountAggregateFastPath(ast) {
|
|
|
5291
5223
|
let requiresEdgeCountDistinct = false;
|
|
5292
5224
|
for (const projectedField of ast.projection.fields) {
|
|
5293
5225
|
const source = projectedField.source;
|
|
5294
|
-
if (!isAggregateExpr(source)) {
|
|
5226
|
+
if (!chunkHTGDWIDE_cjs.isAggregateExpr(source)) {
|
|
5295
5227
|
if (source.alias !== ast.start.alias) {
|
|
5296
5228
|
return void 0;
|
|
5297
5229
|
}
|
|
5298
5230
|
continue;
|
|
5299
5231
|
}
|
|
5300
|
-
if (!isIdFieldRef(source.field)) {
|
|
5232
|
+
if (!chunkHTGDWIDE_cjs.isIdFieldRef(source.field)) {
|
|
5301
5233
|
return void 0;
|
|
5302
5234
|
}
|
|
5303
5235
|
const isNodeTarget = source.field.alias === traversal.nodeAlias;
|
|
@@ -5462,19 +5394,19 @@ function compileCountAggregateFastPath(ast, graphId, ctx, logicalPlan, requiredC
|
|
|
5462
5394
|
const projection = drizzleOrm.sql.join(
|
|
5463
5395
|
ast.projection.fields.map((projectedField) => {
|
|
5464
5396
|
const source = projectedField.source;
|
|
5465
|
-
if (!isAggregateExpr(source)) {
|
|
5397
|
+
if (!chunkHTGDWIDE_cjs.isAggregateExpr(source)) {
|
|
5466
5398
|
const value = compileFieldValue(
|
|
5467
5399
|
source,
|
|
5468
5400
|
dialect,
|
|
5469
5401
|
source.valueType,
|
|
5470
5402
|
`cte_${source.alias}`
|
|
5471
5403
|
);
|
|
5472
|
-
return drizzleOrm.sql`${value} AS ${
|
|
5404
|
+
return drizzleOrm.sql`${value} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(projectedField.outputName)}`;
|
|
5473
5405
|
}
|
|
5474
5406
|
const projectedCountColumn = resolveCountColumn(source);
|
|
5475
5407
|
const countValue = drizzleOrm.sql`${drizzleOrm.sql.raw(countCteAlias)}.${drizzleOrm.sql.raw(projectedCountColumn)}`;
|
|
5476
5408
|
const aggregateValue = traversal.optional ? drizzleOrm.sql`COALESCE(${countValue}, 0)` : countValue;
|
|
5477
|
-
return drizzleOrm.sql`${aggregateValue} AS ${
|
|
5409
|
+
return drizzleOrm.sql`${aggregateValue} AS ${chunkHTGDWIDE_cjs.quoteIdentifier(projectedField.outputName)}`;
|
|
5478
5410
|
}),
|
|
5479
5411
|
drizzleOrm.sql`, `
|
|
5480
5412
|
);
|
|
@@ -12784,17 +12716,17 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
|
|
|
12784
12716
|
if (remaining > 0 && pageResult.skippedIds.length > 0) {
|
|
12785
12717
|
skippedIds.push(...pageResult.skippedIds.slice(0, remaining));
|
|
12786
12718
|
}
|
|
12787
|
-
|
|
12719
|
+
const writePage = async (target) => {
|
|
12788
12720
|
if (pageResult.toUpsert.length > 0) {
|
|
12789
|
-
if (
|
|
12790
|
-
await
|
|
12721
|
+
if (target.upsertFulltextBatch) {
|
|
12722
|
+
await target.upsertFulltextBatch({
|
|
12791
12723
|
graphId: ctx.graphId,
|
|
12792
12724
|
nodeKind: kind,
|
|
12793
12725
|
rows: pageResult.toUpsert
|
|
12794
12726
|
});
|
|
12795
|
-
} else if (
|
|
12727
|
+
} else if (target.upsertFulltext) {
|
|
12796
12728
|
for (const item of pageResult.toUpsert) {
|
|
12797
|
-
await
|
|
12729
|
+
await target.upsertFulltext({
|
|
12798
12730
|
graphId: ctx.graphId,
|
|
12799
12731
|
nodeKind: kind,
|
|
12800
12732
|
nodeId: item.nodeId,
|
|
@@ -12805,15 +12737,15 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
|
|
|
12805
12737
|
}
|
|
12806
12738
|
}
|
|
12807
12739
|
if (pageResult.toDelete.length > 0) {
|
|
12808
|
-
if (
|
|
12809
|
-
await
|
|
12740
|
+
if (target.deleteFulltextBatch) {
|
|
12741
|
+
await target.deleteFulltextBatch({
|
|
12810
12742
|
graphId: ctx.graphId,
|
|
12811
12743
|
nodeKind: kind,
|
|
12812
12744
|
nodeIds: pageResult.toDelete
|
|
12813
12745
|
});
|
|
12814
|
-
} else if (
|
|
12746
|
+
} else if (target.deleteFulltext) {
|
|
12815
12747
|
for (const nodeId of pageResult.toDelete) {
|
|
12816
|
-
await
|
|
12748
|
+
await target.deleteFulltext({
|
|
12817
12749
|
graphId: ctx.graphId,
|
|
12818
12750
|
nodeKind: kind,
|
|
12819
12751
|
nodeId
|
|
@@ -12821,7 +12753,8 @@ async function rebuildFulltextIndex(ctx, nodeKind, options) {
|
|
|
12821
12753
|
}
|
|
12822
12754
|
}
|
|
12823
12755
|
}
|
|
12824
|
-
}
|
|
12756
|
+
};
|
|
12757
|
+
await chunkRNUNP5JD_cjs.runOptionallyInTransaction(backend, writePage);
|
|
12825
12758
|
processed += rows.length;
|
|
12826
12759
|
upserted += pageResult.toUpsert.length;
|
|
12827
12760
|
cleared += pageResult.toDelete.length;
|
|
@@ -13503,12 +13436,19 @@ var Store = class {
|
|
|
13503
13436
|
}
|
|
13504
13437
|
// === Batch Query Execution ===
|
|
13505
13438
|
/**
|
|
13506
|
-
* Executes multiple queries
|
|
13439
|
+
* Executes multiple queries and returns a typed tuple of results.
|
|
13440
|
+
*
|
|
13441
|
+
* Each query preserves its own result type, projection, filtering, sorting,
|
|
13442
|
+
* and pagination.
|
|
13507
13443
|
*
|
|
13508
|
-
*
|
|
13509
|
-
*
|
|
13510
|
-
*
|
|
13511
|
-
*
|
|
13444
|
+
* **Snapshot consistency is conditional.** When
|
|
13445
|
+
* `backend.capabilities.transactions` is `true`, queries run sequentially
|
|
13446
|
+
* on a single connection inside an implicit transaction and observe the
|
|
13447
|
+
* same database snapshot. When transactions are unavailable
|
|
13448
|
+
* (Cloudflare D1, `drizzle-orm/neon-http`), queries run sequentially over
|
|
13449
|
+
* independent connections and may observe writes that landed between them.
|
|
13450
|
+
* Branch on `backend.capabilities.transactions` if you need a guaranteed
|
|
13451
|
+
* snapshot.
|
|
13512
13452
|
*
|
|
13513
13453
|
* Read-only — use `bulkCreate`, `bulkInsert`, etc. for write batching.
|
|
13514
13454
|
*
|
|
@@ -13532,10 +13472,10 @@ var Store = class {
|
|
|
13532
13472
|
* @returns A tuple with per-query typed results, preserving input order
|
|
13533
13473
|
*/
|
|
13534
13474
|
async batch(...queries) {
|
|
13535
|
-
return this.#backend
|
|
13475
|
+
return chunkRNUNP5JD_cjs.runOptionallyInTransaction(this.#backend, async (target) => {
|
|
13536
13476
|
const results = [];
|
|
13537
13477
|
for (const query of queries) {
|
|
13538
|
-
const result = await query.executeOn(
|
|
13478
|
+
const result = await query.executeOn(target);
|
|
13539
13479
|
results.push(result);
|
|
13540
13480
|
}
|
|
13541
13481
|
return results;
|
|
@@ -13599,8 +13539,26 @@ var Store = class {
|
|
|
13599
13539
|
* );
|
|
13600
13540
|
* });
|
|
13601
13541
|
* ```
|
|
13542
|
+
*
|
|
13543
|
+
* **Backends without transactions.** When `backend.capabilities.transactions`
|
|
13544
|
+
* is `false` (Cloudflare D1, `drizzle-orm/neon-http`), this method runs the
|
|
13545
|
+
* callback against the same backend used outside `transaction()` — writes
|
|
13546
|
+
* are applied as they happen and a thrown error does **not** roll back
|
|
13547
|
+
* earlier writes inside the callback. Branch on
|
|
13548
|
+
* `backend.capabilities.transactions` if you require atomicity:
|
|
13549
|
+
*
|
|
13550
|
+
* ```typescript
|
|
13551
|
+
* if (backend.capabilities.transactions) {
|
|
13552
|
+
* await store.transaction(async (tx) => { ... });
|
|
13553
|
+
* } else {
|
|
13554
|
+
* // sequential, non-atomic — handle partial-failure recovery yourself
|
|
13555
|
+
* }
|
|
13556
|
+
* ```
|
|
13602
13557
|
*/
|
|
13603
13558
|
async transaction(fn) {
|
|
13559
|
+
if (!this.#backend.capabilities.transactions) {
|
|
13560
|
+
return fn({ nodes: this.nodes, edges: this.edges });
|
|
13561
|
+
}
|
|
13604
13562
|
return this.#backend.transaction(async (txBackend) => {
|
|
13605
13563
|
const txNodeOperations = {
|
|
13606
13564
|
...this.#nodeOperations,
|
|
@@ -13648,6 +13606,36 @@ var Store = class {
|
|
|
13648
13606
|
this.#search = void 0;
|
|
13649
13607
|
}
|
|
13650
13608
|
// === Lifecycle ===
|
|
13609
|
+
/**
|
|
13610
|
+
* Refreshes the backend's query-planner statistics.
|
|
13611
|
+
*
|
|
13612
|
+
* Call this once after a large initial import or bulk backfill. The
|
|
13613
|
+
* planner uses table statistics to choose between TypeGraph's
|
|
13614
|
+
* multi-column indexes; without fresh stats a forward traversal can
|
|
13615
|
+
* pick a reverse index and run an order of magnitude slower than
|
|
13616
|
+
* needed. Autovacuum / background statistics will catch up
|
|
13617
|
+
* eventually, but calling this explicitly after a bulk load gives
|
|
13618
|
+
* you correct latencies immediately.
|
|
13619
|
+
*
|
|
13620
|
+
* Implementations:
|
|
13621
|
+
* - SQLite runs `ANALYZE`, populating `sqlite_stat1`
|
|
13622
|
+
* - PostgreSQL runs `ANALYZE` on the TypeGraph-managed tables
|
|
13623
|
+
*
|
|
13624
|
+
* Costs a few tens of milliseconds at the sizes this library is
|
|
13625
|
+
* designed for. Safe to call at any time.
|
|
13626
|
+
*
|
|
13627
|
+
* @example
|
|
13628
|
+
* ```typescript
|
|
13629
|
+
* // After a bulk import
|
|
13630
|
+
* for (const batch of batches) {
|
|
13631
|
+
* await store.nodes.Document.bulkCreate(batch);
|
|
13632
|
+
* }
|
|
13633
|
+
* await store.refreshStatistics();
|
|
13634
|
+
* ```
|
|
13635
|
+
*/
|
|
13636
|
+
async refreshStatistics() {
|
|
13637
|
+
await this.#backend.refreshStatistics();
|
|
13638
|
+
}
|
|
13651
13639
|
/**
|
|
13652
13640
|
* Closes the store and releases underlying resources.
|
|
13653
13641
|
*
|