@nicia-ai/typegraph 0.1.0 → 0.2.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/backend/drizzle/index.cjs +5 -6
- package/dist/backend/drizzle/index.d.cts +1 -1
- package/dist/backend/drizzle/index.d.ts +1 -1
- package/dist/backend/drizzle/index.js +3 -4
- package/dist/backend/drizzle/postgres.cjs +3 -4
- package/dist/backend/drizzle/postgres.d.cts +1 -1
- package/dist/backend/drizzle/postgres.d.ts +1 -1
- package/dist/backend/drizzle/postgres.js +2 -3
- package/dist/backend/drizzle/schema/postgres.cjs +0 -1
- package/dist/backend/drizzle/schema/postgres.js +0 -1
- package/dist/backend/drizzle/schema/sqlite.cjs +0 -1
- package/dist/backend/drizzle/schema/sqlite.js +0 -1
- package/dist/backend/drizzle/sqlite.cjs +3 -4
- package/dist/backend/drizzle/sqlite.d.cts +1 -1
- package/dist/backend/drizzle/sqlite.d.ts +1 -1
- package/dist/backend/drizzle/sqlite.js +2 -3
- package/dist/backend/postgres/index.cjs +3 -4
- package/dist/backend/postgres/index.d.cts +1 -1
- package/dist/backend/postgres/index.d.ts +1 -1
- package/dist/backend/postgres/index.js +2 -3
- package/dist/backend/sqlite/index.cjs +4 -5
- package/dist/backend/sqlite/index.cjs.map +1 -1
- package/dist/backend/sqlite/index.d.cts +1 -1
- package/dist/backend/sqlite/index.d.ts +1 -1
- package/dist/backend/sqlite/index.js +3 -4
- package/dist/backend/sqlite/index.js.map +1 -1
- package/dist/{chunk-TXHKFLWX.cjs → chunk-2FURVVAX.cjs} +41 -35
- package/dist/chunk-2FURVVAX.cjs.map +1 -0
- package/dist/{chunk-MFVCSNIY.cjs → chunk-H7THXVH6.cjs} +36 -30
- package/dist/chunk-H7THXVH6.cjs.map +1 -0
- package/dist/{chunk-F32HCHYA.cjs → chunk-HXAPXPZH.cjs} +2 -2
- package/dist/chunk-HXAPXPZH.cjs.map +1 -0
- package/dist/{chunk-RYT4H46I.js → chunk-QB3WBMDT.js} +2 -2
- package/dist/chunk-QB3WBMDT.js.map +1 -0
- package/dist/{chunk-3A5TKOEJ.js → chunk-X4EVMBON.js} +10 -4
- package/dist/chunk-X4EVMBON.js.map +1 -0
- package/dist/{chunk-536PH5FT.js → chunk-XZL4NLV6.js} +10 -4
- package/dist/chunk-XZL4NLV6.js.map +1 -0
- package/dist/index.cjs +16 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +0 -1
- package/dist/indexes/index.js +0 -1
- package/dist/interchange/index.cjs +0 -1
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +2 -2
- package/dist/interchange/index.d.ts +2 -2
- package/dist/interchange/index.js +0 -1
- package/dist/interchange/index.js.map +1 -1
- package/dist/profiler/index.cjs +0 -1
- package/dist/profiler/index.cjs.map +1 -1
- package/dist/profiler/index.d.cts +2 -2
- package/dist/profiler/index.d.ts +2 -2
- package/dist/profiler/index.js +0 -1
- package/dist/profiler/index.js.map +1 -1
- package/dist/{store-60Lcfi0w.d.ts → store-BPhjw5S8.d.ts} +1 -35
- package/dist/{store-Bifii8MZ.d.cts → store-DNOOQEm8.d.cts} +1 -35
- package/dist/{types-CjZ7g_7v.d.ts → types-DsRfx0yk.d.ts} +65 -1
- package/dist/{types-DDOSfrih.d.cts → types-aapj0GLz.d.cts} +65 -1
- package/package.json +1 -1
- package/dist/chunk-3A5TKOEJ.js.map +0 -1
- package/dist/chunk-536PH5FT.js.map +0 -1
- package/dist/chunk-DGUM43GV.js +0 -10
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-F32HCHYA.cjs.map +0 -1
- package/dist/chunk-JEQ2X3Z6.cjs +0 -12
- package/dist/chunk-JEQ2X3Z6.cjs.map +0 -1
- package/dist/chunk-MFVCSNIY.cjs.map +0 -1
- package/dist/chunk-RYT4H46I.js.map +0 -1
- package/dist/chunk-TXHKFLWX.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/types.ts","../src/backend/drizzle/operations.ts"],"names":["sql","getTableName","getDialect"],"mappings":"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","file":"chunk-HXAPXPZH.cjs","sourcesContent":["/**\n * Backend interface types for TypeGraph storage.\n *\n * The backend abstracts database operations, allowing different\n * SQL implementations (SQLite, PostgreSQL) behind a common interface.\n */\nimport { type SQL } from \"drizzle-orm\";\n\nimport { type SqlTableNames } from \"../query/compiler/schema\";\n\n// ============================================================\n// Vector Search Types\n// ============================================================\n\n/**\n * Supported vector similarity metrics.\n */\nexport type VectorMetric = \"cosine\" | \"l2\" | \"inner_product\";\n\n/**\n * Supported vector index types.\n */\nexport type VectorIndexType = \"hnsw\" | \"ivfflat\" | \"none\";\n\n/**\n * Vector search capabilities.\n */\nexport type VectorCapabilities = Readonly<{\n /** Whether the backend supports vector operations */\n supported: boolean;\n /** Supported similarity metrics */\n metrics: readonly VectorMetric[];\n /** Supported index types */\n indexTypes: readonly VectorIndexType[];\n /** Maximum dimensions supported */\n maxDimensions: number;\n}>;\n\n// ============================================================\n// Dialect & Capabilities\n// ============================================================\n\n/**\n * Supported database dialects.\n * Re-exported from query/dialect for consistency across the codebase.\n */\nimport { type SqlDialect } from \"../query/dialect/types\";\n\nexport type Dialect = SqlDialect;\n\n/**\n * Backend capabilities that vary by dialect.\n */\nexport type BackendCapabilities = Readonly<{\n /** Whether the backend supports JSONB type (vs TEXT for JSON) */\n jsonb: boolean;\n /** Whether the backend supports partial indexes */\n partialIndexes: boolean;\n /** Whether the backend supports GIN indexes for JSON */\n ginIndexes: boolean;\n /** Whether the backend supports CTE (WITH) queries */\n cte: boolean;\n /** Whether the backend supports RETURNING clause */\n returning: boolean;\n /** Whether the backend supports atomic transactions (D1 does not) */\n transactions: boolean;\n /** Vector search capabilities (undefined if not configured) */\n vector?: VectorCapabilities | undefined;\n}>;\n\n// ============================================================\n// Row Types (Database Records)\n// ============================================================\n\n/**\n * A row from the typegraph_nodes table.\n */\nexport type NodeRow = Readonly<{\n graph_id: string;\n kind: string;\n id: string;\n props: string; // JSON string\n version: number;\n valid_from: string | undefined;\n valid_to: string | undefined;\n created_at: string;\n updated_at: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_edges table.\n */\nexport type EdgeRow = Readonly<{\n graph_id: string;\n id: string;\n kind: string;\n from_kind: string;\n from_id: string;\n to_kind: string;\n to_id: string;\n props: string; // JSON string\n valid_from: string | undefined;\n valid_to: string | undefined;\n created_at: string;\n updated_at: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_node_uniques table.\n */\nexport type UniqueRow = Readonly<{\n graph_id: string;\n node_kind: string;\n constraint_name: string;\n key: string;\n node_id: string;\n concrete_kind: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_schema_versions table.\n */\nexport type SchemaVersionRow = Readonly<{\n graph_id: string;\n version: number;\n schema_hash: string;\n schema_doc: string; // JSON string\n created_at: string;\n is_active: boolean;\n}>;\n\n/**\n * A row from the typegraph_node_embeddings table.\n */\nexport type EmbeddingRow = Readonly<{\n graph_id: string;\n node_kind: string;\n node_id: string;\n field_path: string;\n embedding: readonly number[];\n dimensions: number;\n created_at: string;\n updated_at: string;\n}>;\n\n// ============================================================\n// Insert Parameters\n// ============================================================\n\n/**\n * Parameters for inserting a node.\n */\nexport type InsertNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Record<string, unknown>;\n validFrom?: string;\n validTo?: string;\n}>;\n\n/**\n * Parameters for updating a node.\n */\nexport type UpdateNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Record<string, unknown>;\n validTo?: string;\n incrementVersion?: boolean;\n /** If true, clears deleted_at (un-deletes the node). Used by upsert. */\n clearDeleted?: boolean;\n}>;\n\n/**\n * Parameters for deleting a node (soft delete).\n */\nexport type DeleteNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n}>;\n\n/**\n * Parameters for inserting an edge.\n */\nexport type InsertEdgeParams = Readonly<{\n graphId: string;\n id: string;\n kind: string;\n fromKind: string;\n fromId: string;\n toKind: string;\n toId: string;\n props: Record<string, unknown>;\n validFrom?: string;\n validTo?: string;\n}>;\n\n/**\n * Parameters for updating an edge.\n */\nexport type UpdateEdgeParams = Readonly<{\n graphId: string;\n id: string;\n props: Record<string, unknown>;\n validTo?: string;\n}>;\n\n/**\n * Parameters for deleting an edge (soft delete).\n */\nexport type DeleteEdgeParams = Readonly<{\n graphId: string;\n id: string;\n}>;\n\n/**\n * Parameters for hard deleting a node (permanent removal).\n */\nexport type HardDeleteNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n}>;\n\n/**\n * Parameters for hard deleting an edge (permanent removal).\n */\nexport type HardDeleteEdgeParams = Readonly<{\n graphId: string;\n id: string;\n}>;\n\n// ============================================================\n// Embedding Parameters\n// ============================================================\n\n/**\n * Parameters for inserting or updating an embedding.\n */\nexport type UpsertEmbeddingParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n}>;\n\n/**\n * Parameters for deleting an embedding.\n */\nexport type DeleteEmbeddingParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n fieldPath: string;\n}>;\n\n/**\n * Parameters for vector similarity search.\n */\nexport type VectorSearchParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n queryEmbedding: readonly number[];\n metric: VectorMetric;\n limit: number;\n minScore?: number;\n}>;\n\n/**\n * Result from a vector similarity search.\n */\nexport type VectorSearchResult = Readonly<{\n nodeId: string;\n score: number;\n}>;\n\n/**\n * Parameters for creating a vector index.\n */\nexport type CreateVectorIndexParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n dimensions: number;\n metric: VectorMetric;\n indexType: VectorIndexType;\n /** Index-specific parameters */\n indexParams?: Readonly<{\n /** HNSW: max connections per layer */\n m?: number;\n /** HNSW: construction search depth */\n efConstruction?: number;\n /** IVFFlat: number of lists */\n lists?: number;\n }>;\n}>;\n\n/**\n * Parameters for dropping a vector index.\n */\nexport type DropVectorIndexParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n}>;\n\n// ============================================================\n// Query Types\n// ============================================================\n\n/**\n * Transaction options.\n */\nexport type TransactionOptions = Readonly<{\n /** Transaction isolation level (if supported) */\n isolationLevel?:\n | \"read_uncommitted\"\n | \"read_committed\"\n | \"repeatable_read\"\n | \"serializable\";\n}>;\n\n// ============================================================\n// Backend Interface\n// ============================================================\n\n/**\n * Transaction backend - a backend scoped to a transaction.\n */\nexport type TransactionBackend = Omit<GraphBackend, \"transaction\" | \"close\">;\n\n/**\n * The GraphBackend interface abstracts database operations.\n *\n * Implementations should provide:\n * - SQLite backend via better-sqlite3 or libsql\n * - PostgreSQL backend via pg or postgres\n */\nexport type GraphBackend = Readonly<{\n /** The SQL dialect */\n dialect: Dialect;\n /** Backend capabilities */\n capabilities: BackendCapabilities;\n /** Table names used by this backend (for query schema auto-derivation) */\n tableNames?: SqlTableNames | undefined;\n\n // === Node Operations ===\n insertNode: (params: InsertNodeParams) => Promise<NodeRow>;\n updateNode: (params: UpdateNodeParams) => Promise<NodeRow>;\n deleteNode: (params: DeleteNodeParams) => Promise<void>;\n hardDeleteNode: (params: HardDeleteNodeParams) => Promise<void>;\n getNode: (\n graphId: string,\n kind: string,\n id: string,\n ) => Promise<NodeRow | undefined>;\n\n // === Edge Operations ===\n insertEdge: (params: InsertEdgeParams) => Promise<EdgeRow>;\n updateEdge: (params: UpdateEdgeParams) => Promise<EdgeRow>;\n deleteEdge: (params: DeleteEdgeParams) => Promise<void>;\n hardDeleteEdge: (params: HardDeleteEdgeParams) => Promise<void>;\n getEdge: (graphId: string, id: string) => Promise<EdgeRow | undefined>;\n\n // === Edge Cardinality Operations ===\n countEdgesFrom: (params: CountEdgesFromParams) => Promise<number>;\n edgeExistsBetween: (params: EdgeExistsBetweenParams) => Promise<boolean>;\n\n // === Edge Query Operations ===\n findEdgesConnectedTo: (\n params: FindEdgesConnectedToParams,\n ) => Promise<readonly EdgeRow[]>;\n\n // === Collection Query Operations ===\n findNodesByKind: (\n params: FindNodesByKindParams,\n ) => Promise<readonly NodeRow[]>;\n countNodesByKind: (params: CountNodesByKindParams) => Promise<number>;\n findEdgesByKind: (\n params: FindEdgesByKindParams,\n ) => Promise<readonly EdgeRow[]>;\n countEdgesByKind: (params: CountEdgesByKindParams) => Promise<number>;\n\n // === Unique Constraint Operations ===\n insertUnique: (params: InsertUniqueParams) => Promise<void>;\n deleteUnique: (params: DeleteUniqueParams) => Promise<void>;\n checkUnique: (params: CheckUniqueParams) => Promise<UniqueRow | undefined>;\n\n // === Schema Operations ===\n getActiveSchema: (graphId: string) => Promise<SchemaVersionRow | undefined>;\n getSchemaVersion: (\n graphId: string,\n version: number,\n ) => Promise<SchemaVersionRow | undefined>;\n insertSchema: (params: InsertSchemaParams) => Promise<SchemaVersionRow>;\n setActiveSchema: (graphId: string, version: number) => Promise<void>;\n\n // === Embedding Operations (optional - depends on vector capabilities) ===\n upsertEmbedding?: (params: UpsertEmbeddingParams) => Promise<void>;\n deleteEmbedding?: (params: DeleteEmbeddingParams) => Promise<void>;\n getEmbedding?: (\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ) => Promise<EmbeddingRow | undefined>;\n vectorSearch?: (\n params: VectorSearchParams,\n ) => Promise<readonly VectorSearchResult[]>;\n createVectorIndex?: (params: CreateVectorIndexParams) => Promise<void>;\n dropVectorIndex?: (params: DropVectorIndexParams) => Promise<void>;\n\n // === Query Execution ===\n execute: <T>(query: SQL) => Promise<readonly T[]>;\n\n // === Transaction ===\n transaction: <T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ) => Promise<T>;\n\n // === Lifecycle ===\n close: () => Promise<void>;\n}>;\n\n// ============================================================\n// Additional Parameter Types\n// ============================================================\n\n/**\n * Parameters for inserting a unique constraint entry.\n */\nexport type InsertUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n nodeId: string;\n concreteKind: string;\n}>;\n\n/**\n * Parameters for deleting a unique constraint entry.\n */\nexport type DeleteUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n}>;\n\n/**\n * Parameters for checking a unique constraint.\n */\nexport type CheckUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n}>;\n\n/**\n * Parameters for inserting a schema version.\n */\nexport type InsertSchemaParams = Readonly<{\n graphId: string;\n version: number;\n schemaHash: string;\n schemaDoc: Record<string, unknown>;\n isActive: boolean;\n}>;\n\n/**\n * Parameters for counting edges from a source node.\n */\nexport type CountEdgesFromParams = Readonly<{\n graphId: string;\n edgeKind: string;\n fromKind: string;\n fromId: string;\n /** If true, only count edges where valid_to IS NULL */\n activeOnly?: boolean;\n}>;\n\n/**\n * Parameters for checking if an edge exists between two nodes.\n */\nexport type EdgeExistsBetweenParams = Readonly<{\n graphId: string;\n edgeKind: string;\n fromKind: string;\n fromId: string;\n toKind: string;\n toId: string;\n}>;\n\n/**\n * Parameters for finding edges connected to a node.\n */\nexport type FindEdgesConnectedToParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n}>;\n\n/**\n * Parameters for finding nodes by kind.\n */\nexport type FindNodesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n limit?: number;\n offset?: number;\n /** If true, exclude deleted nodes. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for counting nodes by kind.\n */\nexport type CountNodesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n /** If true, exclude deleted nodes. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for finding edges by kind.\n */\nexport type FindEdgesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n fromKind?: string;\n fromId?: string;\n toKind?: string;\n toId?: string;\n limit?: number;\n offset?: number;\n /** If true, exclude deleted edges. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for counting edges by kind.\n */\nexport type CountEdgesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n fromKind?: string;\n fromId?: string;\n toKind?: string;\n toId?: string;\n /** If true, exclude deleted edges. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n// ============================================================\n// Default Capabilities\n// ============================================================\n\n/**\n * Default capabilities for SQLite.\n */\nexport const SQLITE_CAPABILITIES: BackendCapabilities = {\n jsonb: false, // SQLite uses TEXT with json functions\n partialIndexes: true, // SQLite supports WHERE in CREATE INDEX\n ginIndexes: false, // SQLite doesn't have GIN\n cte: true, // SQLite supports WITH\n returning: true, // SQLite 3.35+ supports RETURNING\n transactions: true, // SQLite supports transactions\n};\n\n/**\n * Default capabilities for PostgreSQL.\n */\nexport const POSTGRES_CAPABILITIES: BackendCapabilities = {\n jsonb: true, // PostgreSQL has native JSONB\n partialIndexes: true,\n ginIndexes: true,\n cte: true,\n returning: true,\n transactions: true, // PostgreSQL supports transactions\n};\n\n/**\n * Capabilities for Cloudflare D1.\n * D1 does NOT support atomic transactions - operations are auto-committed.\n */\nexport const D1_CAPABILITIES: BackendCapabilities = {\n jsonb: false, // D1 uses TEXT with json functions\n partialIndexes: true,\n ginIndexes: false,\n cte: true,\n returning: true,\n transactions: false, // D1 does NOT support atomic transactions\n};\n","/**\n * Schema-parameterized query builders for TypeGraph.\n *\n * These functions generate Drizzle SQL objects that can be executed\n * by any Drizzle database instance. Table and column references are\n * passed as parameters, enabling customizable table names.\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\n/**\n * Converts undefined to SQL NULL for use in template literals.\n * Drizzle doesn't handle undefined in sql`` templates correctly.\n */\nfunction sqlNull(value: string | undefined): SQL | string {\n return value ?? sql.raw(\"NULL\");\n}\n\nimport { getDialect } from \"../../query/dialect\";\nimport type {\n CheckUniqueParams,\n CountEdgesByKindParams,\n CountEdgesFromParams,\n CountNodesByKindParams,\n DeleteEdgeParams,\n DeleteEmbeddingParams,\n DeleteNodeParams,\n DeleteUniqueParams,\n Dialect,\n EdgeExistsBetweenParams,\n FindEdgesByKindParams,\n FindEdgesConnectedToParams,\n FindNodesByKindParams,\n HardDeleteEdgeParams,\n HardDeleteNodeParams,\n InsertEdgeParams,\n InsertNodeParams,\n InsertSchemaParams,\n InsertUniqueParams,\n UpdateEdgeParams,\n UpdateNodeParams,\n UpsertEmbeddingParams,\n VectorMetric,\n VectorSearchParams,\n} from \"../types\";\nimport type { PostgresTables } from \"./schema/postgres\";\nimport type { SqliteTables } from \"./schema/sqlite\";\n\n/**\n * Union type for all supported table configurations.\n */\ntype Tables = SqliteTables | PostgresTables;\n\n// ============================================================\n// Node Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a node.\n * Uses raw column names in the column list (required by SQL syntax).\n */\nexport function buildInsertNode(\n tables: Tables,\n params: InsertNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const propsJson = JSON.stringify(params.props);\n\n // Column list uses raw identifiers (not table-qualified)\n const cols = sql.raw(`\"${nodes.graphId.name}\", \"${nodes.kind.name}\", \"${nodes.id.name}\", \"${nodes.props.name}\", \"${nodes.version.name}\", \"${nodes.validFrom.name}\", \"${nodes.validTo.name}\", \"${nodes.createdAt.name}\", \"${nodes.updatedAt.name}\"`);\n\n return sql`\n INSERT INTO ${nodes} (${cols})\n VALUES (\n ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n 1, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},\n ${timestamp}, ${timestamp}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds a SELECT query to get a node by kind and id.\n * Returns the node regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetNode(\n tables: Tables,\n graphId: string,\n kind: string,\n id: string,\n): SQL {\n const { nodes } = tables;\n\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${nodes.graphId} = ${graphId}\n AND ${nodes.kind} = ${kind}\n AND ${nodes.id} = ${id}\n `;\n}\n\n/**\n * Builds an UPDATE query for a node.\n * Uses raw column names in SET clause (required by SQL syntax).\n */\nexport function buildUpdateNode(\n tables: Tables,\n params: UpdateNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const propsJson = JSON.stringify(params.props);\n\n // Helper for raw column name\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Build SET clause parts\n const setParts: SQL[] = [\n sql`${col(nodes.props)} = ${propsJson}`,\n sql`${col(nodes.updatedAt)} = ${timestamp}`,\n ];\n\n if (params.incrementVersion) {\n setParts.push(sql`${col(nodes.version)} = ${col(nodes.version)} + 1`);\n }\n\n if (params.validTo !== undefined) {\n setParts.push(sql`${col(nodes.validTo)} = ${params.validTo}`);\n }\n\n if (params.clearDeleted) {\n setParts.push(sql`${col(nodes.deletedAt)} = NULL`);\n }\n\n // Join SET parts with commas\n const setClause = sql.join(setParts, sql`, `);\n\n // Build WHERE clause - skip deleted_at check if clearDeleted is set\n if (params.clearDeleted) {\n return sql`\n UPDATE ${nodes}\n SET ${setClause}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n RETURNING *\n `;\n }\n\n return sql`\n UPDATE ${nodes}\n SET ${setClause}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n AND ${nodes.deletedAt} IS NULL\n RETURNING *\n `;\n}\n\n/**\n * Builds a soft DELETE query for a node (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteNode(\n tables: Tables,\n params: DeleteNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${nodes}\n SET ${col(nodes.deletedAt)} = ${timestamp}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n AND ${nodes.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for a node (permanent removal).\n */\nexport function buildHardDeleteNode(\n tables: Tables,\n params: HardDeleteNodeParams,\n): SQL {\n const { nodes } = tables;\n\n return sql`\n DELETE FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n `;\n}\n\n// ============================================================\n// Edge Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for an edge.\n * Uses raw column names in the column list (required by SQL syntax).\n */\nexport function buildInsertEdge(\n tables: Tables,\n params: InsertEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const propsJson = JSON.stringify(params.props);\n\n const cols = sql.raw(`\"${edges.graphId.name}\", \"${edges.id.name}\", \"${edges.kind.name}\", \"${edges.fromKind.name}\", \"${edges.fromId.name}\", \"${edges.toKind.name}\", \"${edges.toId.name}\", \"${edges.props.name}\", \"${edges.validFrom.name}\", \"${edges.validTo.name}\", \"${edges.createdAt.name}\", \"${edges.updatedAt.name}\"`);\n\n return sql`\n INSERT INTO ${edges} (${cols})\n VALUES (\n ${params.graphId}, ${params.id}, ${params.kind},\n ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n ${propsJson}, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},\n ${timestamp}, ${timestamp}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds a SELECT query to get an edge by id.\n * Returns the edge regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetEdge(\n tables: Tables,\n graphId: string,\n id: string,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${edges.graphId} = ${graphId}\n AND ${edges.id} = ${id}\n `;\n}\n\n/**\n * Builds an UPDATE query for an edge.\n * Uses raw column names in SET clause.\n */\nexport function buildUpdateEdge(\n tables: Tables,\n params: UpdateEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const propsJson = JSON.stringify(params.props);\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n if (params.validTo !== undefined) {\n return sql`\n UPDATE ${edges}\n SET ${col(edges.props)} = ${propsJson},\n ${col(edges.validTo)} = ${params.validTo},\n ${col(edges.updatedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n RETURNING *\n `;\n }\n\n return sql`\n UPDATE ${edges}\n SET ${col(edges.props)} = ${propsJson},\n ${col(edges.updatedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n RETURNING *\n `;\n}\n\n/**\n * Builds a soft DELETE query for an edge (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteEdge(\n tables: Tables,\n params: DeleteEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${edges}\n SET ${col(edges.deletedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for an edge (permanent removal).\n */\nexport function buildHardDeleteEdge(\n tables: Tables,\n params: HardDeleteEdgeParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n DELETE FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n `;\n}\n\n// ============================================================\n// Unique Constraint Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a uniqueness entry (SQLite).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing entry belongs to the same node (safe update), OR\n * 2. The existing entry is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING will show the conflicting node_id.\n */\nfunction buildInsertUniqueSqlite(\n tables: Tables,\n params: InsertUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n const cols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`);\n\n // Use raw column names for ON CONFLICT clause (SQLite requires bare names)\n const conflictCols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`);\n\n // Helper to reference columns without table prefix in UPDATE SET\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Conditional upsert: only update if same node OR deleted\n // The CASE expressions ensure conflicting entries are left unchanged\n return sql`\n INSERT INTO ${uniques} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(uniques.nodeId)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n ELSE ${col(uniques.nodeId)}\n END,\n ${col(uniques.concreteKind)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n ELSE ${col(uniques.concreteKind)}\n END,\n ${col(uniques.deletedAt)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN NULL\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN NULL\n ELSE ${col(uniques.deletedAt)}\n END\n RETURNING ${col(uniques.nodeId)} as node_id\n `;\n}\n\n/**\n * Builds an INSERT query for a uniqueness entry (PostgreSQL).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing entry belongs to the same node (safe update), OR\n * 2. The existing entry is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING will show the conflicting node_id.\n */\nfunction buildInsertUniquePostgres(\n tables: Tables,\n params: InsertUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n const cols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`);\n const conflictCols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`);\n\n // Helper to reference columns without table prefix in UPDATE SET (for left side of assignment)\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Helper to reference the existing row's column value (table-qualified for PostgreSQL 18+)\n // In ON CONFLICT DO UPDATE, unqualified column references are ambiguous\n const tableName = getTableName(uniques);\n const existingCol = (c: { name: string }) => sql.raw(`\"${tableName}\".\"${c.name}\"`);\n\n // Conditional upsert: only update if same node OR deleted\n // The CASE expressions ensure conflicting entries are left unchanged\n // PostgreSQL 18+ requires table-qualified column references in CASE WHEN\n return sql`\n INSERT INTO ${uniques} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(uniques.nodeId)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n ELSE ${existingCol(uniques.nodeId)}\n END,\n ${col(uniques.concreteKind)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n ELSE ${existingCol(uniques.concreteKind)}\n END,\n ${col(uniques.deletedAt)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN NULL\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN NULL\n ELSE ${existingCol(uniques.deletedAt)}\n END\n RETURNING ${col(uniques.nodeId)} as node_id\n `;\n}\n\n/**\n * Builds an INSERT query for a uniqueness entry.\n * Returns the node_id that now holds the key (may differ from input if conflict).\n */\nexport function buildInsertUnique(\n tables: Tables,\n dialect: Dialect,\n params: InsertUniqueParams,\n): SQL {\n if (dialect === \"sqlite\") {\n return buildInsertUniqueSqlite(tables, params);\n }\n return buildInsertUniquePostgres(tables, params);\n}\n\n/**\n * Builds a soft DELETE query for a uniqueness entry.\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteUnique(\n tables: Tables,\n params: DeleteUniqueParams,\n timestamp: string,\n): SQL {\n const { uniques } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${uniques}\n SET ${col(uniques.deletedAt)} = ${timestamp}\n WHERE ${uniques.graphId} = ${params.graphId}\n AND ${uniques.nodeKind} = ${params.nodeKind}\n AND ${uniques.constraintName} = ${params.constraintName}\n AND ${uniques.key} = ${params.key}\n AND ${uniques.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for all uniqueness entries for a node.\n */\nexport function buildHardDeleteUniquesByNode(\n tables: Tables,\n graphId: string,\n nodeId: string,\n): SQL {\n const { uniques } = tables;\n\n return sql`\n DELETE FROM ${uniques}\n WHERE ${uniques.graphId} = ${graphId}\n AND ${uniques.nodeId} = ${nodeId}\n `;\n}\n\n/**\n * Builds a hard DELETE query for all embeddings for a node.\n */\nexport function buildHardDeleteEmbeddingsByNode(\n tables: Tables,\n graphId: string,\n nodeKind: string,\n nodeId: string,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n DELETE FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${graphId}\n AND ${embeddings.nodeKind} = ${nodeKind}\n AND ${embeddings.nodeId} = ${nodeId}\n `;\n}\n\n/**\n * Builds a SELECT query to check for uniqueness violations.\n */\nexport function buildCheckUnique(\n tables: Tables,\n params: CheckUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n return sql`\n SELECT * FROM ${uniques}\n WHERE ${uniques.graphId} = ${params.graphId}\n AND ${uniques.nodeKind} = ${params.nodeKind}\n AND ${uniques.constraintName} = ${params.constraintName}\n AND ${uniques.key} = ${params.key}\n AND ${uniques.deletedAt} IS NULL\n `;\n}\n\n// ============================================================\n// Edge Cardinality Operations\n// ============================================================\n\n/**\n * Builds a query to count edges from a source node.\n */\nexport function buildCountEdgesFrom(\n tables: Tables,\n params: CountEdgesFromParams,\n): SQL {\n const { edges } = tables;\n\n if (params.activeOnly) {\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.deletedAt} IS NULL\n AND ${edges.validTo} IS NULL\n `;\n }\n\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a query to check if an edge exists between two nodes.\n */\nexport function buildEdgeExistsBetween(\n tables: Tables,\n params: EdgeExistsBetweenParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT 1 FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.toKind} = ${params.toKind}\n AND ${edges.toId} = ${params.toId}\n AND ${edges.deletedAt} IS NULL\n LIMIT 1\n `;\n}\n\n/**\n * Builds a query to find all edges connected to a node.\n */\nexport function buildFindEdgesConnectedTo(\n tables: Tables,\n params: FindEdgesConnectedToParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.deletedAt} IS NULL\n AND (\n (${edges.fromKind} = ${params.nodeKind} AND ${edges.fromId} = ${params.nodeId})\n OR\n (${edges.toKind} = ${params.nodeKind} AND ${edges.toId} = ${params.nodeId})\n )\n `;\n}\n\n// ============================================================\n// Collection Query Operations\n// ============================================================\n\n/**\n * Builds a query to find nodes by kind.\n */\nexport function buildFindNodesByKind(\n tables: Tables,\n params: FindNodesByKindParams,\n): SQL {\n const { nodes } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build base query parts\n const baseCondition = excludeDeleted\n ? sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind} AND ${nodes.deletedAt} IS NULL`\n : sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind}`;\n\n // Handle pagination\n if (params.limit !== undefined && params.offset !== undefined) {\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n LIMIT ${params.limit} OFFSET ${params.offset}\n `;\n }\n\n if (params.limit !== undefined) {\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n LIMIT ${params.limit}\n `;\n }\n\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n `;\n}\n\n/**\n * Builds a query to count nodes by kind.\n */\nexport function buildCountNodesByKind(\n tables: Tables,\n params: CountNodesByKindParams,\n): SQL {\n const { nodes } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n if (excludeDeleted) {\n return sql`\n SELECT COUNT(*) as count FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.deletedAt} IS NULL\n `;\n }\n\n return sql`\n SELECT COUNT(*) as count FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n `;\n}\n\n/**\n * Builds a query to find edges by kind with optional endpoint filters.\n */\nexport function buildFindEdgesByKind(\n tables: Tables,\n params: FindEdgesByKindParams,\n): SQL {\n const { edges } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build conditions dynamically\n const conditions: SQL[] = [\n sql`${edges.graphId} = ${params.graphId}`,\n sql`${edges.kind} = ${params.kind}`,\n ];\n\n if (excludeDeleted) {\n conditions.push(sql`${edges.deletedAt} IS NULL`);\n }\n\n if (params.fromKind !== undefined) {\n conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n }\n\n if (params.fromId !== undefined) {\n conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n }\n\n if (params.toKind !== undefined) {\n conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n }\n\n if (params.toId !== undefined) {\n conditions.push(sql`${edges.toId} = ${params.toId}`);\n }\n\n // Join conditions with AND\n const whereClause = sql.join(conditions, sql` AND `);\n\n // Handle pagination\n if (params.limit !== undefined && params.offset !== undefined) {\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n LIMIT ${params.limit} OFFSET ${params.offset}\n `;\n }\n\n if (params.limit !== undefined) {\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n LIMIT ${params.limit}\n `;\n }\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n `;\n}\n\n/**\n * Builds a query to count edges by kind with optional endpoint filters.\n */\nexport function buildCountEdgesByKind(\n tables: Tables,\n params: CountEdgesByKindParams,\n): SQL {\n const { edges } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build conditions dynamically\n const conditions: SQL[] = [\n sql`${edges.graphId} = ${params.graphId}`,\n sql`${edges.kind} = ${params.kind}`,\n ];\n\n if (excludeDeleted) {\n conditions.push(sql`${edges.deletedAt} IS NULL`);\n }\n\n if (params.fromKind !== undefined) {\n conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n }\n\n if (params.fromId !== undefined) {\n conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n }\n\n if (params.toKind !== undefined) {\n conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n }\n\n if (params.toId !== undefined) {\n conditions.push(sql`${edges.toId} = ${params.toId}`);\n }\n\n // Join conditions with AND\n const whereClause = sql.join(conditions, sql` AND `);\n\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${whereClause}\n `;\n}\n\n// ============================================================\n// Schema Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a schema version (SQLite).\n * Uses raw column names in the column list (required by SQL syntax).\n * Converts boolean to number for SQLite compatibility.\n */\nfunction buildInsertSchemaSqlite(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n): SQL {\n const { schemaVersions } = tables;\n const schemaDocumentJson = JSON.stringify(params.schemaDoc);\n // Use raw SQL for boolean to ensure it's stored as integer, not float\n // (drizzle's ${1} produces '1.0' which breaks Boolean() conversion on read)\n const isActiveValue = params.isActive ? sql.raw(\"1\") : sql.raw(\"0\");\n\n const cols = sql.raw(`\"${schemaVersions.graphId.name}\", \"${schemaVersions.version.name}\", \"${schemaVersions.schemaHash.name}\", \"${schemaVersions.schemaDoc.name}\", \"${schemaVersions.createdAt.name}\", \"${schemaVersions.isActive.name}\"`);\n\n return sql`\n INSERT INTO ${schemaVersions} (${cols})\n VALUES (\n ${params.graphId}, ${params.version},\n ${params.schemaHash}, ${schemaDocumentJson},\n ${timestamp}, ${isActiveValue}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds an INSERT query for a schema version (PostgreSQL).\n * Uses raw column names in the column list (required by SQL syntax).\n * Uses boolean values for PostgreSQL's native boolean type.\n */\nfunction buildInsertSchemaPostgres(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n): SQL {\n const { schemaVersions } = tables;\n const schemaDocumentJson = JSON.stringify(params.schemaDoc);\n // PostgreSQL uses native boolean type\n const isActiveValue = params.isActive ? sql.raw(\"true\") : sql.raw(\"false\");\n\n const cols = sql.raw(`\"${schemaVersions.graphId.name}\", \"${schemaVersions.version.name}\", \"${schemaVersions.schemaHash.name}\", \"${schemaVersions.schemaDoc.name}\", \"${schemaVersions.createdAt.name}\", \"${schemaVersions.isActive.name}\"`);\n\n return sql`\n INSERT INTO ${schemaVersions} (${cols})\n VALUES (\n ${params.graphId}, ${params.version},\n ${params.schemaHash}, ${schemaDocumentJson},\n ${timestamp}, ${isActiveValue}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds an INSERT query for a schema version.\n */\nexport function buildInsertSchema(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n dialect: Dialect = \"sqlite\",\n): SQL {\n if (dialect === \"postgres\") {\n return buildInsertSchemaPostgres(tables, params, timestamp);\n }\n return buildInsertSchemaSqlite(tables, params, timestamp);\n}\n\n/**\n * Builds a SELECT query to get the active schema for a graph.\n */\nexport function buildGetActiveSchema(\n tables: Tables,\n graphId: string,\n dialect: Dialect = \"sqlite\",\n): SQL {\n const { schemaVersions } = tables;\n const adapter = getDialect(dialect);\n\n return sql`\n SELECT * FROM ${schemaVersions}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.isActive} = ${adapter.booleanLiteral(true)}\n `;\n}\n\n/**\n * Builds a SELECT query to get a specific schema version.\n */\nexport function buildGetSchemaVersion(\n tables: Tables,\n graphId: string,\n version: number,\n): SQL {\n const { schemaVersions } = tables;\n\n return sql`\n SELECT * FROM ${schemaVersions}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.version} = ${version}\n `;\n}\n\n/**\n * Builds UPDATE queries to set the active schema version.\n * Returns two queries: first deactivates all, second activates the specified version.\n * Uses raw column names in SET clause (SQLite doesn't allow table prefix there).\n */\nexport function buildSetActiveSchema(\n tables: Tables,\n graphId: string,\n version: number,\n dialect: Dialect = \"sqlite\",\n): { deactivateAll: SQL; activateVersion: SQL } {\n const { schemaVersions } = tables;\n const adapter = getDialect(dialect);\n // Helper to reference columns without table prefix in SET clause only\n // (SQLite doesn't allow table prefix in SET, but WHERE works fine with drizzle refs)\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n const deactivateAll = sql`\n UPDATE ${schemaVersions}\n SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(false)}\n WHERE ${schemaVersions.graphId} = ${graphId}\n `;\n\n const activateVersion = sql`\n UPDATE ${schemaVersions}\n SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(true)}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.version} = ${version}\n `;\n\n return { deactivateAll, activateVersion };\n}\n\n// ============================================================\n// Embedding Operations\n// ============================================================\n\n/**\n * Validates that all values in an array are finite numbers.\n * Throws if any value is NaN, Infinity, or not a number.\n */\nfunction assertFiniteNumberArray(array: readonly number[], name: string): void {\n for (const [index, value] of array.entries()) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new TypeError(\n `${name}[${index}] must be a finite number, got: ${value}`,\n );\n }\n }\n}\n\n/**\n * Formats an embedding array as a pgvector literal string.\n * Validates all values are finite numbers first.\n */\nfunction formatEmbeddingLiteral(embedding: readonly number[]): string {\n assertFiniteNumberArray(embedding, \"embedding\");\n return `[${embedding.join(\",\")}]`;\n}\n\n/**\n * Builds an UPSERT query for an embedding (PostgreSQL).\n * Uses ON CONFLICT to update existing embeddings.\n */\nexport function buildUpsertEmbeddingPostgres(\n tables: PostgresTables,\n params: UpsertEmbeddingParams,\n timestamp: string,\n): SQL {\n const { embeddings } = tables;\n\n // Format and validate embedding\n const embeddingLiteral = formatEmbeddingLiteral(params.embedding);\n\n const cols = sql.raw(\n `\"${embeddings.graphId.name}\", \"${embeddings.nodeKind.name}\", \"${embeddings.nodeId.name}\", \"${embeddings.fieldPath.name}\", \"${embeddings.embedding.name}\", \"${embeddings.dimensions.name}\", \"${embeddings.createdAt.name}\", \"${embeddings.updatedAt.name}\"`,\n );\n\n const conflictCols = sql.raw(\n `\"${embeddings.graphId.name}\", \"${embeddings.nodeKind.name}\", \"${embeddings.nodeId.name}\", \"${embeddings.fieldPath.name}\"`,\n );\n\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n INSERT INTO ${embeddings} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.nodeId}, ${params.fieldPath},\n ${embeddingLiteral}::vector, ${params.dimensions}, ${timestamp}, ${timestamp}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(embeddings.embedding)} = ${embeddingLiteral}::vector,\n ${col(embeddings.dimensions)} = ${params.dimensions},\n ${col(embeddings.updatedAt)} = ${timestamp}\n `;\n}\n\n/**\n * Builds a DELETE query for an embedding.\n */\nexport function buildDeleteEmbedding(\n tables: Tables,\n params: DeleteEmbeddingParams,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n DELETE FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${params.graphId}\n AND ${embeddings.nodeKind} = ${params.nodeKind}\n AND ${embeddings.nodeId} = ${params.nodeId}\n AND ${embeddings.fieldPath} = ${params.fieldPath}\n `;\n}\n\n/**\n * Builds a SELECT query to get an embedding.\n */\nexport function buildGetEmbedding(\n tables: Tables,\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n SELECT * FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${graphId}\n AND ${embeddings.nodeKind} = ${nodeKind}\n AND ${embeddings.nodeId} = ${nodeId}\n AND ${embeddings.fieldPath} = ${fieldPath}\n `;\n}\n\n/**\n * Builds the distance expression for a given metric.\n * Uses parameterized embedding literal to prevent SQL injection.\n */\nfunction buildDistanceExpression(\n embeddingColumn: SQL,\n queryLiteral: string,\n metric: VectorMetric,\n): SQL {\n // The query literal is passed as a parameter and cast to vector type\n // This ensures proper escaping by the database driver\n const vectorParam = sql`${queryLiteral}::vector`;\n\n switch (metric) {\n case \"cosine\": {\n return sql`(${embeddingColumn} <=> ${vectorParam})`;\n }\n case \"l2\": {\n return sql`(${embeddingColumn} <-> ${vectorParam})`;\n }\n case \"inner_product\": {\n return sql`(${embeddingColumn} <#> ${vectorParam})`;\n }\n }\n}\n\n/**\n * Builds a vector similarity search query (PostgreSQL).\n * Returns node IDs ordered by similarity (closest first).\n */\nexport function buildVectorSearchPostgres(\n tables: PostgresTables,\n params: VectorSearchParams,\n): SQL {\n const { embeddings } = tables;\n\n // Format and validate query embedding\n const queryLiteral = formatEmbeddingLiteral(params.queryEmbedding);\n\n // Build the distance expression using parameterized query literal\n // The embedding column reference and the validated literal are combined safely\n const embeddingColumn = sql`${embeddings.embedding}`;\n const distanceExpr = buildDistanceExpression(\n embeddingColumn,\n queryLiteral,\n params.metric,\n );\n\n // Build base conditions (all parameterized by Drizzle)\n const conditions = [\n sql`${embeddings.graphId} = ${params.graphId}`,\n sql`${embeddings.nodeKind} = ${params.nodeKind}`,\n sql`${embeddings.fieldPath} = ${params.fieldPath}`,\n ];\n\n // Add minScore filter if specified\n if (params.minScore !== undefined) {\n // Validate minScore is a finite number\n if (!Number.isFinite(params.minScore)) {\n throw new TypeError(`minScore must be a finite number, got: ${params.minScore}`);\n }\n // minScore is similarity (1.0 = identical), convert to distance threshold\n // For cosine: distance = 1 - similarity, so threshold = 1 - minScore\n const threshold = 1 - params.minScore;\n conditions.push(sql`${distanceExpr} <= ${threshold}`);\n }\n\n // Validate limit is a positive integer\n if (!Number.isInteger(params.limit) || params.limit <= 0) {\n throw new Error(`limit must be a positive integer, got: ${params.limit}`);\n }\n\n const whereClause = sql.join(conditions, sql` AND `);\n\n return sql`\n SELECT\n ${embeddings.nodeId} as node_id,\n (1 - (${distanceExpr})) as score\n FROM ${embeddings}\n WHERE ${whereClause}\n ORDER BY ${distanceExpr} ASC\n LIMIT ${params.limit}\n `;\n}\n"]}
|
|
@@ -642,5 +642,5 @@ function buildVectorSearchPostgres(tables, params) {
|
|
|
642
642
|
}
|
|
643
643
|
|
|
644
644
|
export { D1_CAPABILITIES, POSTGRES_CAPABILITIES, SQLITE_CAPABILITIES, buildCheckUnique, buildCountEdgesByKind, buildCountEdgesFrom, buildCountNodesByKind, buildDeleteEdge, buildDeleteEmbedding, buildDeleteNode, buildDeleteUnique, buildEdgeExistsBetween, buildFindEdgesByKind, buildFindEdgesConnectedTo, buildFindNodesByKind, buildGetActiveSchema, buildGetEdge, buildGetEmbedding, buildGetNode, buildGetSchemaVersion, buildHardDeleteEdge, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildHardDeleteUniquesByNode, buildInsertEdge, buildInsertNode, buildInsertSchema, buildInsertUnique, buildSetActiveSchema, buildUpdateEdge, buildUpdateNode, buildUpsertEmbeddingPostgres, buildVectorSearchPostgres };
|
|
645
|
-
//# sourceMappingURL=chunk-
|
|
646
|
-
//# sourceMappingURL=chunk-
|
|
645
|
+
//# sourceMappingURL=chunk-QB3WBMDT.js.map
|
|
646
|
+
//# sourceMappingURL=chunk-QB3WBMDT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/types.ts","../src/backend/drizzle/operations.ts"],"names":[],"mappings":"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","file":"chunk-QB3WBMDT.js","sourcesContent":["/**\n * Backend interface types for TypeGraph storage.\n *\n * The backend abstracts database operations, allowing different\n * SQL implementations (SQLite, PostgreSQL) behind a common interface.\n */\nimport { type SQL } from \"drizzle-orm\";\n\nimport { type SqlTableNames } from \"../query/compiler/schema\";\n\n// ============================================================\n// Vector Search Types\n// ============================================================\n\n/**\n * Supported vector similarity metrics.\n */\nexport type VectorMetric = \"cosine\" | \"l2\" | \"inner_product\";\n\n/**\n * Supported vector index types.\n */\nexport type VectorIndexType = \"hnsw\" | \"ivfflat\" | \"none\";\n\n/**\n * Vector search capabilities.\n */\nexport type VectorCapabilities = Readonly<{\n /** Whether the backend supports vector operations */\n supported: boolean;\n /** Supported similarity metrics */\n metrics: readonly VectorMetric[];\n /** Supported index types */\n indexTypes: readonly VectorIndexType[];\n /** Maximum dimensions supported */\n maxDimensions: number;\n}>;\n\n// ============================================================\n// Dialect & Capabilities\n// ============================================================\n\n/**\n * Supported database dialects.\n * Re-exported from query/dialect for consistency across the codebase.\n */\nimport { type SqlDialect } from \"../query/dialect/types\";\n\nexport type Dialect = SqlDialect;\n\n/**\n * Backend capabilities that vary by dialect.\n */\nexport type BackendCapabilities = Readonly<{\n /** Whether the backend supports JSONB type (vs TEXT for JSON) */\n jsonb: boolean;\n /** Whether the backend supports partial indexes */\n partialIndexes: boolean;\n /** Whether the backend supports GIN indexes for JSON */\n ginIndexes: boolean;\n /** Whether the backend supports CTE (WITH) queries */\n cte: boolean;\n /** Whether the backend supports RETURNING clause */\n returning: boolean;\n /** Whether the backend supports atomic transactions (D1 does not) */\n transactions: boolean;\n /** Vector search capabilities (undefined if not configured) */\n vector?: VectorCapabilities | undefined;\n}>;\n\n// ============================================================\n// Row Types (Database Records)\n// ============================================================\n\n/**\n * A row from the typegraph_nodes table.\n */\nexport type NodeRow = Readonly<{\n graph_id: string;\n kind: string;\n id: string;\n props: string; // JSON string\n version: number;\n valid_from: string | undefined;\n valid_to: string | undefined;\n created_at: string;\n updated_at: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_edges table.\n */\nexport type EdgeRow = Readonly<{\n graph_id: string;\n id: string;\n kind: string;\n from_kind: string;\n from_id: string;\n to_kind: string;\n to_id: string;\n props: string; // JSON string\n valid_from: string | undefined;\n valid_to: string | undefined;\n created_at: string;\n updated_at: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_node_uniques table.\n */\nexport type UniqueRow = Readonly<{\n graph_id: string;\n node_kind: string;\n constraint_name: string;\n key: string;\n node_id: string;\n concrete_kind: string;\n deleted_at: string | undefined;\n}>;\n\n/**\n * A row from the typegraph_schema_versions table.\n */\nexport type SchemaVersionRow = Readonly<{\n graph_id: string;\n version: number;\n schema_hash: string;\n schema_doc: string; // JSON string\n created_at: string;\n is_active: boolean;\n}>;\n\n/**\n * A row from the typegraph_node_embeddings table.\n */\nexport type EmbeddingRow = Readonly<{\n graph_id: string;\n node_kind: string;\n node_id: string;\n field_path: string;\n embedding: readonly number[];\n dimensions: number;\n created_at: string;\n updated_at: string;\n}>;\n\n// ============================================================\n// Insert Parameters\n// ============================================================\n\n/**\n * Parameters for inserting a node.\n */\nexport type InsertNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Record<string, unknown>;\n validFrom?: string;\n validTo?: string;\n}>;\n\n/**\n * Parameters for updating a node.\n */\nexport type UpdateNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n props: Record<string, unknown>;\n validTo?: string;\n incrementVersion?: boolean;\n /** If true, clears deleted_at (un-deletes the node). Used by upsert. */\n clearDeleted?: boolean;\n}>;\n\n/**\n * Parameters for deleting a node (soft delete).\n */\nexport type DeleteNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n}>;\n\n/**\n * Parameters for inserting an edge.\n */\nexport type InsertEdgeParams = Readonly<{\n graphId: string;\n id: string;\n kind: string;\n fromKind: string;\n fromId: string;\n toKind: string;\n toId: string;\n props: Record<string, unknown>;\n validFrom?: string;\n validTo?: string;\n}>;\n\n/**\n * Parameters for updating an edge.\n */\nexport type UpdateEdgeParams = Readonly<{\n graphId: string;\n id: string;\n props: Record<string, unknown>;\n validTo?: string;\n}>;\n\n/**\n * Parameters for deleting an edge (soft delete).\n */\nexport type DeleteEdgeParams = Readonly<{\n graphId: string;\n id: string;\n}>;\n\n/**\n * Parameters for hard deleting a node (permanent removal).\n */\nexport type HardDeleteNodeParams = Readonly<{\n graphId: string;\n kind: string;\n id: string;\n}>;\n\n/**\n * Parameters for hard deleting an edge (permanent removal).\n */\nexport type HardDeleteEdgeParams = Readonly<{\n graphId: string;\n id: string;\n}>;\n\n// ============================================================\n// Embedding Parameters\n// ============================================================\n\n/**\n * Parameters for inserting or updating an embedding.\n */\nexport type UpsertEmbeddingParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n fieldPath: string;\n embedding: readonly number[];\n dimensions: number;\n}>;\n\n/**\n * Parameters for deleting an embedding.\n */\nexport type DeleteEmbeddingParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n fieldPath: string;\n}>;\n\n/**\n * Parameters for vector similarity search.\n */\nexport type VectorSearchParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n queryEmbedding: readonly number[];\n metric: VectorMetric;\n limit: number;\n minScore?: number;\n}>;\n\n/**\n * Result from a vector similarity search.\n */\nexport type VectorSearchResult = Readonly<{\n nodeId: string;\n score: number;\n}>;\n\n/**\n * Parameters for creating a vector index.\n */\nexport type CreateVectorIndexParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n dimensions: number;\n metric: VectorMetric;\n indexType: VectorIndexType;\n /** Index-specific parameters */\n indexParams?: Readonly<{\n /** HNSW: max connections per layer */\n m?: number;\n /** HNSW: construction search depth */\n efConstruction?: number;\n /** IVFFlat: number of lists */\n lists?: number;\n }>;\n}>;\n\n/**\n * Parameters for dropping a vector index.\n */\nexport type DropVectorIndexParams = Readonly<{\n graphId: string;\n nodeKind: string;\n fieldPath: string;\n}>;\n\n// ============================================================\n// Query Types\n// ============================================================\n\n/**\n * Transaction options.\n */\nexport type TransactionOptions = Readonly<{\n /** Transaction isolation level (if supported) */\n isolationLevel?:\n | \"read_uncommitted\"\n | \"read_committed\"\n | \"repeatable_read\"\n | \"serializable\";\n}>;\n\n// ============================================================\n// Backend Interface\n// ============================================================\n\n/**\n * Transaction backend - a backend scoped to a transaction.\n */\nexport type TransactionBackend = Omit<GraphBackend, \"transaction\" | \"close\">;\n\n/**\n * The GraphBackend interface abstracts database operations.\n *\n * Implementations should provide:\n * - SQLite backend via better-sqlite3 or libsql\n * - PostgreSQL backend via pg or postgres\n */\nexport type GraphBackend = Readonly<{\n /** The SQL dialect */\n dialect: Dialect;\n /** Backend capabilities */\n capabilities: BackendCapabilities;\n /** Table names used by this backend (for query schema auto-derivation) */\n tableNames?: SqlTableNames | undefined;\n\n // === Node Operations ===\n insertNode: (params: InsertNodeParams) => Promise<NodeRow>;\n updateNode: (params: UpdateNodeParams) => Promise<NodeRow>;\n deleteNode: (params: DeleteNodeParams) => Promise<void>;\n hardDeleteNode: (params: HardDeleteNodeParams) => Promise<void>;\n getNode: (\n graphId: string,\n kind: string,\n id: string,\n ) => Promise<NodeRow | undefined>;\n\n // === Edge Operations ===\n insertEdge: (params: InsertEdgeParams) => Promise<EdgeRow>;\n updateEdge: (params: UpdateEdgeParams) => Promise<EdgeRow>;\n deleteEdge: (params: DeleteEdgeParams) => Promise<void>;\n hardDeleteEdge: (params: HardDeleteEdgeParams) => Promise<void>;\n getEdge: (graphId: string, id: string) => Promise<EdgeRow | undefined>;\n\n // === Edge Cardinality Operations ===\n countEdgesFrom: (params: CountEdgesFromParams) => Promise<number>;\n edgeExistsBetween: (params: EdgeExistsBetweenParams) => Promise<boolean>;\n\n // === Edge Query Operations ===\n findEdgesConnectedTo: (\n params: FindEdgesConnectedToParams,\n ) => Promise<readonly EdgeRow[]>;\n\n // === Collection Query Operations ===\n findNodesByKind: (\n params: FindNodesByKindParams,\n ) => Promise<readonly NodeRow[]>;\n countNodesByKind: (params: CountNodesByKindParams) => Promise<number>;\n findEdgesByKind: (\n params: FindEdgesByKindParams,\n ) => Promise<readonly EdgeRow[]>;\n countEdgesByKind: (params: CountEdgesByKindParams) => Promise<number>;\n\n // === Unique Constraint Operations ===\n insertUnique: (params: InsertUniqueParams) => Promise<void>;\n deleteUnique: (params: DeleteUniqueParams) => Promise<void>;\n checkUnique: (params: CheckUniqueParams) => Promise<UniqueRow | undefined>;\n\n // === Schema Operations ===\n getActiveSchema: (graphId: string) => Promise<SchemaVersionRow | undefined>;\n getSchemaVersion: (\n graphId: string,\n version: number,\n ) => Promise<SchemaVersionRow | undefined>;\n insertSchema: (params: InsertSchemaParams) => Promise<SchemaVersionRow>;\n setActiveSchema: (graphId: string, version: number) => Promise<void>;\n\n // === Embedding Operations (optional - depends on vector capabilities) ===\n upsertEmbedding?: (params: UpsertEmbeddingParams) => Promise<void>;\n deleteEmbedding?: (params: DeleteEmbeddingParams) => Promise<void>;\n getEmbedding?: (\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n ) => Promise<EmbeddingRow | undefined>;\n vectorSearch?: (\n params: VectorSearchParams,\n ) => Promise<readonly VectorSearchResult[]>;\n createVectorIndex?: (params: CreateVectorIndexParams) => Promise<void>;\n dropVectorIndex?: (params: DropVectorIndexParams) => Promise<void>;\n\n // === Query Execution ===\n execute: <T>(query: SQL) => Promise<readonly T[]>;\n\n // === Transaction ===\n transaction: <T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n options?: TransactionOptions,\n ) => Promise<T>;\n\n // === Lifecycle ===\n close: () => Promise<void>;\n}>;\n\n// ============================================================\n// Additional Parameter Types\n// ============================================================\n\n/**\n * Parameters for inserting a unique constraint entry.\n */\nexport type InsertUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n nodeId: string;\n concreteKind: string;\n}>;\n\n/**\n * Parameters for deleting a unique constraint entry.\n */\nexport type DeleteUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n}>;\n\n/**\n * Parameters for checking a unique constraint.\n */\nexport type CheckUniqueParams = Readonly<{\n graphId: string;\n nodeKind: string;\n constraintName: string;\n key: string;\n}>;\n\n/**\n * Parameters for inserting a schema version.\n */\nexport type InsertSchemaParams = Readonly<{\n graphId: string;\n version: number;\n schemaHash: string;\n schemaDoc: Record<string, unknown>;\n isActive: boolean;\n}>;\n\n/**\n * Parameters for counting edges from a source node.\n */\nexport type CountEdgesFromParams = Readonly<{\n graphId: string;\n edgeKind: string;\n fromKind: string;\n fromId: string;\n /** If true, only count edges where valid_to IS NULL */\n activeOnly?: boolean;\n}>;\n\n/**\n * Parameters for checking if an edge exists between two nodes.\n */\nexport type EdgeExistsBetweenParams = Readonly<{\n graphId: string;\n edgeKind: string;\n fromKind: string;\n fromId: string;\n toKind: string;\n toId: string;\n}>;\n\n/**\n * Parameters for finding edges connected to a node.\n */\nexport type FindEdgesConnectedToParams = Readonly<{\n graphId: string;\n nodeKind: string;\n nodeId: string;\n}>;\n\n/**\n * Parameters for finding nodes by kind.\n */\nexport type FindNodesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n limit?: number;\n offset?: number;\n /** If true, exclude deleted nodes. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for counting nodes by kind.\n */\nexport type CountNodesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n /** If true, exclude deleted nodes. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for finding edges by kind.\n */\nexport type FindEdgesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n fromKind?: string;\n fromId?: string;\n toKind?: string;\n toId?: string;\n limit?: number;\n offset?: number;\n /** If true, exclude deleted edges. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n/**\n * Parameters for counting edges by kind.\n */\nexport type CountEdgesByKindParams = Readonly<{\n graphId: string;\n kind: string;\n fromKind?: string;\n fromId?: string;\n toKind?: string;\n toId?: string;\n /** If true, exclude deleted edges. Default true. */\n excludeDeleted?: boolean;\n}>;\n\n// ============================================================\n// Default Capabilities\n// ============================================================\n\n/**\n * Default capabilities for SQLite.\n */\nexport const SQLITE_CAPABILITIES: BackendCapabilities = {\n jsonb: false, // SQLite uses TEXT with json functions\n partialIndexes: true, // SQLite supports WHERE in CREATE INDEX\n ginIndexes: false, // SQLite doesn't have GIN\n cte: true, // SQLite supports WITH\n returning: true, // SQLite 3.35+ supports RETURNING\n transactions: true, // SQLite supports transactions\n};\n\n/**\n * Default capabilities for PostgreSQL.\n */\nexport const POSTGRES_CAPABILITIES: BackendCapabilities = {\n jsonb: true, // PostgreSQL has native JSONB\n partialIndexes: true,\n ginIndexes: true,\n cte: true,\n returning: true,\n transactions: true, // PostgreSQL supports transactions\n};\n\n/**\n * Capabilities for Cloudflare D1.\n * D1 does NOT support atomic transactions - operations are auto-committed.\n */\nexport const D1_CAPABILITIES: BackendCapabilities = {\n jsonb: false, // D1 uses TEXT with json functions\n partialIndexes: true,\n ginIndexes: false,\n cte: true,\n returning: true,\n transactions: false, // D1 does NOT support atomic transactions\n};\n","/**\n * Schema-parameterized query builders for TypeGraph.\n *\n * These functions generate Drizzle SQL objects that can be executed\n * by any Drizzle database instance. Table and column references are\n * passed as parameters, enabling customizable table names.\n */\nimport { getTableName, type SQL, sql } from \"drizzle-orm\";\n\n/**\n * Converts undefined to SQL NULL for use in template literals.\n * Drizzle doesn't handle undefined in sql`` templates correctly.\n */\nfunction sqlNull(value: string | undefined): SQL | string {\n return value ?? sql.raw(\"NULL\");\n}\n\nimport { getDialect } from \"../../query/dialect\";\nimport type {\n CheckUniqueParams,\n CountEdgesByKindParams,\n CountEdgesFromParams,\n CountNodesByKindParams,\n DeleteEdgeParams,\n DeleteEmbeddingParams,\n DeleteNodeParams,\n DeleteUniqueParams,\n Dialect,\n EdgeExistsBetweenParams,\n FindEdgesByKindParams,\n FindEdgesConnectedToParams,\n FindNodesByKindParams,\n HardDeleteEdgeParams,\n HardDeleteNodeParams,\n InsertEdgeParams,\n InsertNodeParams,\n InsertSchemaParams,\n InsertUniqueParams,\n UpdateEdgeParams,\n UpdateNodeParams,\n UpsertEmbeddingParams,\n VectorMetric,\n VectorSearchParams,\n} from \"../types\";\nimport type { PostgresTables } from \"./schema/postgres\";\nimport type { SqliteTables } from \"./schema/sqlite\";\n\n/**\n * Union type for all supported table configurations.\n */\ntype Tables = SqliteTables | PostgresTables;\n\n// ============================================================\n// Node Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a node.\n * Uses raw column names in the column list (required by SQL syntax).\n */\nexport function buildInsertNode(\n tables: Tables,\n params: InsertNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const propsJson = JSON.stringify(params.props);\n\n // Column list uses raw identifiers (not table-qualified)\n const cols = sql.raw(`\"${nodes.graphId.name}\", \"${nodes.kind.name}\", \"${nodes.id.name}\", \"${nodes.props.name}\", \"${nodes.version.name}\", \"${nodes.validFrom.name}\", \"${nodes.validTo.name}\", \"${nodes.createdAt.name}\", \"${nodes.updatedAt.name}\"`);\n\n return sql`\n INSERT INTO ${nodes} (${cols})\n VALUES (\n ${params.graphId}, ${params.kind}, ${params.id}, ${propsJson},\n 1, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},\n ${timestamp}, ${timestamp}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds a SELECT query to get a node by kind and id.\n * Returns the node regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetNode(\n tables: Tables,\n graphId: string,\n kind: string,\n id: string,\n): SQL {\n const { nodes } = tables;\n\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${nodes.graphId} = ${graphId}\n AND ${nodes.kind} = ${kind}\n AND ${nodes.id} = ${id}\n `;\n}\n\n/**\n * Builds an UPDATE query for a node.\n * Uses raw column names in SET clause (required by SQL syntax).\n */\nexport function buildUpdateNode(\n tables: Tables,\n params: UpdateNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const propsJson = JSON.stringify(params.props);\n\n // Helper for raw column name\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Build SET clause parts\n const setParts: SQL[] = [\n sql`${col(nodes.props)} = ${propsJson}`,\n sql`${col(nodes.updatedAt)} = ${timestamp}`,\n ];\n\n if (params.incrementVersion) {\n setParts.push(sql`${col(nodes.version)} = ${col(nodes.version)} + 1`);\n }\n\n if (params.validTo !== undefined) {\n setParts.push(sql`${col(nodes.validTo)} = ${params.validTo}`);\n }\n\n if (params.clearDeleted) {\n setParts.push(sql`${col(nodes.deletedAt)} = NULL`);\n }\n\n // Join SET parts with commas\n const setClause = sql.join(setParts, sql`, `);\n\n // Build WHERE clause - skip deleted_at check if clearDeleted is set\n if (params.clearDeleted) {\n return sql`\n UPDATE ${nodes}\n SET ${setClause}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n RETURNING *\n `;\n }\n\n return sql`\n UPDATE ${nodes}\n SET ${setClause}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n AND ${nodes.deletedAt} IS NULL\n RETURNING *\n `;\n}\n\n/**\n * Builds a soft DELETE query for a node (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteNode(\n tables: Tables,\n params: DeleteNodeParams,\n timestamp: string,\n): SQL {\n const { nodes } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${nodes}\n SET ${col(nodes.deletedAt)} = ${timestamp}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n AND ${nodes.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for a node (permanent removal).\n */\nexport function buildHardDeleteNode(\n tables: Tables,\n params: HardDeleteNodeParams,\n): SQL {\n const { nodes } = tables;\n\n return sql`\n DELETE FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.id} = ${params.id}\n `;\n}\n\n// ============================================================\n// Edge Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for an edge.\n * Uses raw column names in the column list (required by SQL syntax).\n */\nexport function buildInsertEdge(\n tables: Tables,\n params: InsertEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const propsJson = JSON.stringify(params.props);\n\n const cols = sql.raw(`\"${edges.graphId.name}\", \"${edges.id.name}\", \"${edges.kind.name}\", \"${edges.fromKind.name}\", \"${edges.fromId.name}\", \"${edges.toKind.name}\", \"${edges.toId.name}\", \"${edges.props.name}\", \"${edges.validFrom.name}\", \"${edges.validTo.name}\", \"${edges.createdAt.name}\", \"${edges.updatedAt.name}\"`);\n\n return sql`\n INSERT INTO ${edges} (${cols})\n VALUES (\n ${params.graphId}, ${params.id}, ${params.kind},\n ${params.fromKind}, ${params.fromId}, ${params.toKind}, ${params.toId},\n ${propsJson}, ${sqlNull(params.validFrom)}, ${sqlNull(params.validTo)},\n ${timestamp}, ${timestamp}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds a SELECT query to get an edge by id.\n * Returns the edge regardless of deletion status (store layer handles filtering).\n */\nexport function buildGetEdge(\n tables: Tables,\n graphId: string,\n id: string,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${edges.graphId} = ${graphId}\n AND ${edges.id} = ${id}\n `;\n}\n\n/**\n * Builds an UPDATE query for an edge.\n * Uses raw column names in SET clause.\n */\nexport function buildUpdateEdge(\n tables: Tables,\n params: UpdateEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const propsJson = JSON.stringify(params.props);\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n if (params.validTo !== undefined) {\n return sql`\n UPDATE ${edges}\n SET ${col(edges.props)} = ${propsJson},\n ${col(edges.validTo)} = ${params.validTo},\n ${col(edges.updatedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n RETURNING *\n `;\n }\n\n return sql`\n UPDATE ${edges}\n SET ${col(edges.props)} = ${propsJson},\n ${col(edges.updatedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n RETURNING *\n `;\n}\n\n/**\n * Builds a soft DELETE query for an edge (sets deleted_at).\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteEdge(\n tables: Tables,\n params: DeleteEdgeParams,\n timestamp: string,\n): SQL {\n const { edges } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${edges}\n SET ${col(edges.deletedAt)} = ${timestamp}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n AND ${edges.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for an edge (permanent removal).\n */\nexport function buildHardDeleteEdge(\n tables: Tables,\n params: HardDeleteEdgeParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n DELETE FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.id} = ${params.id}\n `;\n}\n\n// ============================================================\n// Unique Constraint Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a uniqueness entry (SQLite).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing entry belongs to the same node (safe update), OR\n * 2. The existing entry is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING will show the conflicting node_id.\n */\nfunction buildInsertUniqueSqlite(\n tables: Tables,\n params: InsertUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n const cols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`);\n\n // Use raw column names for ON CONFLICT clause (SQLite requires bare names)\n const conflictCols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`);\n\n // Helper to reference columns without table prefix in UPDATE SET\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Conditional upsert: only update if same node OR deleted\n // The CASE expressions ensure conflicting entries are left unchanged\n return sql`\n INSERT INTO ${uniques} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(uniques.nodeId)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n ELSE ${col(uniques.nodeId)}\n END,\n ${col(uniques.concreteKind)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n ELSE ${col(uniques.concreteKind)}\n END,\n ${col(uniques.deletedAt)} = CASE\n WHEN ${col(uniques.nodeId)} = ${params.nodeId} THEN NULL\n WHEN ${col(uniques.deletedAt)} IS NOT NULL THEN NULL\n ELSE ${col(uniques.deletedAt)}\n END\n RETURNING ${col(uniques.nodeId)} as node_id\n `;\n}\n\n/**\n * Builds an INSERT query for a uniqueness entry (PostgreSQL).\n *\n * Uses ON CONFLICT with a conditional update that only succeeds if:\n * 1. The existing entry belongs to the same node (safe update), OR\n * 2. The existing entry is soft-deleted (can be reused)\n *\n * If a different live node holds this key, the conflict handler leaves the\n * row unchanged, and RETURNING will show the conflicting node_id.\n */\nfunction buildInsertUniquePostgres(\n tables: Tables,\n params: InsertUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n const cols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\", \"${uniques.nodeId.name}\", \"${uniques.concreteKind.name}\", \"${uniques.deletedAt.name}\"`);\n const conflictCols = sql.raw(`\"${uniques.graphId.name}\", \"${uniques.nodeKind.name}\", \"${uniques.constraintName.name}\", \"${uniques.key.name}\"`);\n\n // Helper to reference columns without table prefix in UPDATE SET (for left side of assignment)\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n // Helper to reference the existing row's column value (table-qualified for PostgreSQL 18+)\n // In ON CONFLICT DO UPDATE, unqualified column references are ambiguous\n const tableName = getTableName(uniques);\n const existingCol = (c: { name: string }) => sql.raw(`\"${tableName}\".\"${c.name}\"`);\n\n // Conditional upsert: only update if same node OR deleted\n // The CASE expressions ensure conflicting entries are left unchanged\n // PostgreSQL 18+ requires table-qualified column references in CASE WHEN\n return sql`\n INSERT INTO ${uniques} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.constraintName},\n ${params.key}, ${params.nodeId}, ${params.concreteKind}, ${sql.raw(\"NULL\")}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(uniques.nodeId)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.nodeId}\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.nodeId}\n ELSE ${existingCol(uniques.nodeId)}\n END,\n ${col(uniques.concreteKind)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN ${params.concreteKind}\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN ${params.concreteKind}\n ELSE ${existingCol(uniques.concreteKind)}\n END,\n ${col(uniques.deletedAt)} = CASE\n WHEN ${existingCol(uniques.nodeId)} = ${params.nodeId} THEN NULL\n WHEN ${existingCol(uniques.deletedAt)} IS NOT NULL THEN NULL\n ELSE ${existingCol(uniques.deletedAt)}\n END\n RETURNING ${col(uniques.nodeId)} as node_id\n `;\n}\n\n/**\n * Builds an INSERT query for a uniqueness entry.\n * Returns the node_id that now holds the key (may differ from input if conflict).\n */\nexport function buildInsertUnique(\n tables: Tables,\n dialect: Dialect,\n params: InsertUniqueParams,\n): SQL {\n if (dialect === \"sqlite\") {\n return buildInsertUniqueSqlite(tables, params);\n }\n return buildInsertUniquePostgres(tables, params);\n}\n\n/**\n * Builds a soft DELETE query for a uniqueness entry.\n * Uses raw column name in SET clause.\n */\nexport function buildDeleteUnique(\n tables: Tables,\n params: DeleteUniqueParams,\n timestamp: string,\n): SQL {\n const { uniques } = tables;\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n UPDATE ${uniques}\n SET ${col(uniques.deletedAt)} = ${timestamp}\n WHERE ${uniques.graphId} = ${params.graphId}\n AND ${uniques.nodeKind} = ${params.nodeKind}\n AND ${uniques.constraintName} = ${params.constraintName}\n AND ${uniques.key} = ${params.key}\n AND ${uniques.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a hard DELETE query for all uniqueness entries for a node.\n */\nexport function buildHardDeleteUniquesByNode(\n tables: Tables,\n graphId: string,\n nodeId: string,\n): SQL {\n const { uniques } = tables;\n\n return sql`\n DELETE FROM ${uniques}\n WHERE ${uniques.graphId} = ${graphId}\n AND ${uniques.nodeId} = ${nodeId}\n `;\n}\n\n/**\n * Builds a hard DELETE query for all embeddings for a node.\n */\nexport function buildHardDeleteEmbeddingsByNode(\n tables: Tables,\n graphId: string,\n nodeKind: string,\n nodeId: string,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n DELETE FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${graphId}\n AND ${embeddings.nodeKind} = ${nodeKind}\n AND ${embeddings.nodeId} = ${nodeId}\n `;\n}\n\n/**\n * Builds a SELECT query to check for uniqueness violations.\n */\nexport function buildCheckUnique(\n tables: Tables,\n params: CheckUniqueParams,\n): SQL {\n const { uniques } = tables;\n\n return sql`\n SELECT * FROM ${uniques}\n WHERE ${uniques.graphId} = ${params.graphId}\n AND ${uniques.nodeKind} = ${params.nodeKind}\n AND ${uniques.constraintName} = ${params.constraintName}\n AND ${uniques.key} = ${params.key}\n AND ${uniques.deletedAt} IS NULL\n `;\n}\n\n// ============================================================\n// Edge Cardinality Operations\n// ============================================================\n\n/**\n * Builds a query to count edges from a source node.\n */\nexport function buildCountEdgesFrom(\n tables: Tables,\n params: CountEdgesFromParams,\n): SQL {\n const { edges } = tables;\n\n if (params.activeOnly) {\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.deletedAt} IS NULL\n AND ${edges.validTo} IS NULL\n `;\n }\n\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.deletedAt} IS NULL\n `;\n}\n\n/**\n * Builds a query to check if an edge exists between two nodes.\n */\nexport function buildEdgeExistsBetween(\n tables: Tables,\n params: EdgeExistsBetweenParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT 1 FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.kind} = ${params.edgeKind}\n AND ${edges.fromKind} = ${params.fromKind}\n AND ${edges.fromId} = ${params.fromId}\n AND ${edges.toKind} = ${params.toKind}\n AND ${edges.toId} = ${params.toId}\n AND ${edges.deletedAt} IS NULL\n LIMIT 1\n `;\n}\n\n/**\n * Builds a query to find all edges connected to a node.\n */\nexport function buildFindEdgesConnectedTo(\n tables: Tables,\n params: FindEdgesConnectedToParams,\n): SQL {\n const { edges } = tables;\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${edges.graphId} = ${params.graphId}\n AND ${edges.deletedAt} IS NULL\n AND (\n (${edges.fromKind} = ${params.nodeKind} AND ${edges.fromId} = ${params.nodeId})\n OR\n (${edges.toKind} = ${params.nodeKind} AND ${edges.toId} = ${params.nodeId})\n )\n `;\n}\n\n// ============================================================\n// Collection Query Operations\n// ============================================================\n\n/**\n * Builds a query to find nodes by kind.\n */\nexport function buildFindNodesByKind(\n tables: Tables,\n params: FindNodesByKindParams,\n): SQL {\n const { nodes } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build base query parts\n const baseCondition = excludeDeleted\n ? sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind} AND ${nodes.deletedAt} IS NULL`\n : sql`${nodes.graphId} = ${params.graphId} AND ${nodes.kind} = ${params.kind}`;\n\n // Handle pagination\n if (params.limit !== undefined && params.offset !== undefined) {\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n LIMIT ${params.limit} OFFSET ${params.offset}\n `;\n }\n\n if (params.limit !== undefined) {\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n LIMIT ${params.limit}\n `;\n }\n\n return sql`\n SELECT * FROM ${nodes}\n WHERE ${baseCondition}\n ORDER BY ${nodes.createdAt} DESC\n `;\n}\n\n/**\n * Builds a query to count nodes by kind.\n */\nexport function buildCountNodesByKind(\n tables: Tables,\n params: CountNodesByKindParams,\n): SQL {\n const { nodes } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n if (excludeDeleted) {\n return sql`\n SELECT COUNT(*) as count FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n AND ${nodes.deletedAt} IS NULL\n `;\n }\n\n return sql`\n SELECT COUNT(*) as count FROM ${nodes}\n WHERE ${nodes.graphId} = ${params.graphId}\n AND ${nodes.kind} = ${params.kind}\n `;\n}\n\n/**\n * Builds a query to find edges by kind with optional endpoint filters.\n */\nexport function buildFindEdgesByKind(\n tables: Tables,\n params: FindEdgesByKindParams,\n): SQL {\n const { edges } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build conditions dynamically\n const conditions: SQL[] = [\n sql`${edges.graphId} = ${params.graphId}`,\n sql`${edges.kind} = ${params.kind}`,\n ];\n\n if (excludeDeleted) {\n conditions.push(sql`${edges.deletedAt} IS NULL`);\n }\n\n if (params.fromKind !== undefined) {\n conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n }\n\n if (params.fromId !== undefined) {\n conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n }\n\n if (params.toKind !== undefined) {\n conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n }\n\n if (params.toId !== undefined) {\n conditions.push(sql`${edges.toId} = ${params.toId}`);\n }\n\n // Join conditions with AND\n const whereClause = sql.join(conditions, sql` AND `);\n\n // Handle pagination\n if (params.limit !== undefined && params.offset !== undefined) {\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n LIMIT ${params.limit} OFFSET ${params.offset}\n `;\n }\n\n if (params.limit !== undefined) {\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n LIMIT ${params.limit}\n `;\n }\n\n return sql`\n SELECT * FROM ${edges}\n WHERE ${whereClause}\n ORDER BY ${edges.createdAt} DESC\n `;\n}\n\n/**\n * Builds a query to count edges by kind with optional endpoint filters.\n */\nexport function buildCountEdgesByKind(\n tables: Tables,\n params: CountEdgesByKindParams,\n): SQL {\n const { edges } = tables;\n const excludeDeleted = params.excludeDeleted ?? true;\n\n // Build conditions dynamically\n const conditions: SQL[] = [\n sql`${edges.graphId} = ${params.graphId}`,\n sql`${edges.kind} = ${params.kind}`,\n ];\n\n if (excludeDeleted) {\n conditions.push(sql`${edges.deletedAt} IS NULL`);\n }\n\n if (params.fromKind !== undefined) {\n conditions.push(sql`${edges.fromKind} = ${params.fromKind}`);\n }\n\n if (params.fromId !== undefined) {\n conditions.push(sql`${edges.fromId} = ${params.fromId}`);\n }\n\n if (params.toKind !== undefined) {\n conditions.push(sql`${edges.toKind} = ${params.toKind}`);\n }\n\n if (params.toId !== undefined) {\n conditions.push(sql`${edges.toId} = ${params.toId}`);\n }\n\n // Join conditions with AND\n const whereClause = sql.join(conditions, sql` AND `);\n\n return sql`\n SELECT COUNT(*) as count FROM ${edges}\n WHERE ${whereClause}\n `;\n}\n\n// ============================================================\n// Schema Operations\n// ============================================================\n\n/**\n * Builds an INSERT query for a schema version (SQLite).\n * Uses raw column names in the column list (required by SQL syntax).\n * Converts boolean to number for SQLite compatibility.\n */\nfunction buildInsertSchemaSqlite(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n): SQL {\n const { schemaVersions } = tables;\n const schemaDocumentJson = JSON.stringify(params.schemaDoc);\n // Use raw SQL for boolean to ensure it's stored as integer, not float\n // (drizzle's ${1} produces '1.0' which breaks Boolean() conversion on read)\n const isActiveValue = params.isActive ? sql.raw(\"1\") : sql.raw(\"0\");\n\n const cols = sql.raw(`\"${schemaVersions.graphId.name}\", \"${schemaVersions.version.name}\", \"${schemaVersions.schemaHash.name}\", \"${schemaVersions.schemaDoc.name}\", \"${schemaVersions.createdAt.name}\", \"${schemaVersions.isActive.name}\"`);\n\n return sql`\n INSERT INTO ${schemaVersions} (${cols})\n VALUES (\n ${params.graphId}, ${params.version},\n ${params.schemaHash}, ${schemaDocumentJson},\n ${timestamp}, ${isActiveValue}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds an INSERT query for a schema version (PostgreSQL).\n * Uses raw column names in the column list (required by SQL syntax).\n * Uses boolean values for PostgreSQL's native boolean type.\n */\nfunction buildInsertSchemaPostgres(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n): SQL {\n const { schemaVersions } = tables;\n const schemaDocumentJson = JSON.stringify(params.schemaDoc);\n // PostgreSQL uses native boolean type\n const isActiveValue = params.isActive ? sql.raw(\"true\") : sql.raw(\"false\");\n\n const cols = sql.raw(`\"${schemaVersions.graphId.name}\", \"${schemaVersions.version.name}\", \"${schemaVersions.schemaHash.name}\", \"${schemaVersions.schemaDoc.name}\", \"${schemaVersions.createdAt.name}\", \"${schemaVersions.isActive.name}\"`);\n\n return sql`\n INSERT INTO ${schemaVersions} (${cols})\n VALUES (\n ${params.graphId}, ${params.version},\n ${params.schemaHash}, ${schemaDocumentJson},\n ${timestamp}, ${isActiveValue}\n )\n RETURNING *\n `;\n}\n\n/**\n * Builds an INSERT query for a schema version.\n */\nexport function buildInsertSchema(\n tables: Tables,\n params: InsertSchemaParams,\n timestamp: string,\n dialect: Dialect = \"sqlite\",\n): SQL {\n if (dialect === \"postgres\") {\n return buildInsertSchemaPostgres(tables, params, timestamp);\n }\n return buildInsertSchemaSqlite(tables, params, timestamp);\n}\n\n/**\n * Builds a SELECT query to get the active schema for a graph.\n */\nexport function buildGetActiveSchema(\n tables: Tables,\n graphId: string,\n dialect: Dialect = \"sqlite\",\n): SQL {\n const { schemaVersions } = tables;\n const adapter = getDialect(dialect);\n\n return sql`\n SELECT * FROM ${schemaVersions}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.isActive} = ${adapter.booleanLiteral(true)}\n `;\n}\n\n/**\n * Builds a SELECT query to get a specific schema version.\n */\nexport function buildGetSchemaVersion(\n tables: Tables,\n graphId: string,\n version: number,\n): SQL {\n const { schemaVersions } = tables;\n\n return sql`\n SELECT * FROM ${schemaVersions}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.version} = ${version}\n `;\n}\n\n/**\n * Builds UPDATE queries to set the active schema version.\n * Returns two queries: first deactivates all, second activates the specified version.\n * Uses raw column names in SET clause (SQLite doesn't allow table prefix there).\n */\nexport function buildSetActiveSchema(\n tables: Tables,\n graphId: string,\n version: number,\n dialect: Dialect = \"sqlite\",\n): { deactivateAll: SQL; activateVersion: SQL } {\n const { schemaVersions } = tables;\n const adapter = getDialect(dialect);\n // Helper to reference columns without table prefix in SET clause only\n // (SQLite doesn't allow table prefix in SET, but WHERE works fine with drizzle refs)\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n const deactivateAll = sql`\n UPDATE ${schemaVersions}\n SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(false)}\n WHERE ${schemaVersions.graphId} = ${graphId}\n `;\n\n const activateVersion = sql`\n UPDATE ${schemaVersions}\n SET ${col(schemaVersions.isActive)} = ${adapter.booleanLiteral(true)}\n WHERE ${schemaVersions.graphId} = ${graphId}\n AND ${schemaVersions.version} = ${version}\n `;\n\n return { deactivateAll, activateVersion };\n}\n\n// ============================================================\n// Embedding Operations\n// ============================================================\n\n/**\n * Validates that all values in an array are finite numbers.\n * Throws if any value is NaN, Infinity, or not a number.\n */\nfunction assertFiniteNumberArray(array: readonly number[], name: string): void {\n for (const [index, value] of array.entries()) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new TypeError(\n `${name}[${index}] must be a finite number, got: ${value}`,\n );\n }\n }\n}\n\n/**\n * Formats an embedding array as a pgvector literal string.\n * Validates all values are finite numbers first.\n */\nfunction formatEmbeddingLiteral(embedding: readonly number[]): string {\n assertFiniteNumberArray(embedding, \"embedding\");\n return `[${embedding.join(\",\")}]`;\n}\n\n/**\n * Builds an UPSERT query for an embedding (PostgreSQL).\n * Uses ON CONFLICT to update existing embeddings.\n */\nexport function buildUpsertEmbeddingPostgres(\n tables: PostgresTables,\n params: UpsertEmbeddingParams,\n timestamp: string,\n): SQL {\n const { embeddings } = tables;\n\n // Format and validate embedding\n const embeddingLiteral = formatEmbeddingLiteral(params.embedding);\n\n const cols = sql.raw(\n `\"${embeddings.graphId.name}\", \"${embeddings.nodeKind.name}\", \"${embeddings.nodeId.name}\", \"${embeddings.fieldPath.name}\", \"${embeddings.embedding.name}\", \"${embeddings.dimensions.name}\", \"${embeddings.createdAt.name}\", \"${embeddings.updatedAt.name}\"`,\n );\n\n const conflictCols = sql.raw(\n `\"${embeddings.graphId.name}\", \"${embeddings.nodeKind.name}\", \"${embeddings.nodeId.name}\", \"${embeddings.fieldPath.name}\"`,\n );\n\n const col = (c: { name: string }) => sql.raw(`\"${c.name}\"`);\n\n return sql`\n INSERT INTO ${embeddings} (${cols})\n VALUES (\n ${params.graphId}, ${params.nodeKind}, ${params.nodeId}, ${params.fieldPath},\n ${embeddingLiteral}::vector, ${params.dimensions}, ${timestamp}, ${timestamp}\n )\n ON CONFLICT (${conflictCols})\n DO UPDATE SET\n ${col(embeddings.embedding)} = ${embeddingLiteral}::vector,\n ${col(embeddings.dimensions)} = ${params.dimensions},\n ${col(embeddings.updatedAt)} = ${timestamp}\n `;\n}\n\n/**\n * Builds a DELETE query for an embedding.\n */\nexport function buildDeleteEmbedding(\n tables: Tables,\n params: DeleteEmbeddingParams,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n DELETE FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${params.graphId}\n AND ${embeddings.nodeKind} = ${params.nodeKind}\n AND ${embeddings.nodeId} = ${params.nodeId}\n AND ${embeddings.fieldPath} = ${params.fieldPath}\n `;\n}\n\n/**\n * Builds a SELECT query to get an embedding.\n */\nexport function buildGetEmbedding(\n tables: Tables,\n graphId: string,\n nodeKind: string,\n nodeId: string,\n fieldPath: string,\n): SQL {\n const { embeddings } = tables;\n\n return sql`\n SELECT * FROM ${embeddings}\n WHERE ${embeddings.graphId} = ${graphId}\n AND ${embeddings.nodeKind} = ${nodeKind}\n AND ${embeddings.nodeId} = ${nodeId}\n AND ${embeddings.fieldPath} = ${fieldPath}\n `;\n}\n\n/**\n * Builds the distance expression for a given metric.\n * Uses parameterized embedding literal to prevent SQL injection.\n */\nfunction buildDistanceExpression(\n embeddingColumn: SQL,\n queryLiteral: string,\n metric: VectorMetric,\n): SQL {\n // The query literal is passed as a parameter and cast to vector type\n // This ensures proper escaping by the database driver\n const vectorParam = sql`${queryLiteral}::vector`;\n\n switch (metric) {\n case \"cosine\": {\n return sql`(${embeddingColumn} <=> ${vectorParam})`;\n }\n case \"l2\": {\n return sql`(${embeddingColumn} <-> ${vectorParam})`;\n }\n case \"inner_product\": {\n return sql`(${embeddingColumn} <#> ${vectorParam})`;\n }\n }\n}\n\n/**\n * Builds a vector similarity search query (PostgreSQL).\n * Returns node IDs ordered by similarity (closest first).\n */\nexport function buildVectorSearchPostgres(\n tables: PostgresTables,\n params: VectorSearchParams,\n): SQL {\n const { embeddings } = tables;\n\n // Format and validate query embedding\n const queryLiteral = formatEmbeddingLiteral(params.queryEmbedding);\n\n // Build the distance expression using parameterized query literal\n // The embedding column reference and the validated literal are combined safely\n const embeddingColumn = sql`${embeddings.embedding}`;\n const distanceExpr = buildDistanceExpression(\n embeddingColumn,\n queryLiteral,\n params.metric,\n );\n\n // Build base conditions (all parameterized by Drizzle)\n const conditions = [\n sql`${embeddings.graphId} = ${params.graphId}`,\n sql`${embeddings.nodeKind} = ${params.nodeKind}`,\n sql`${embeddings.fieldPath} = ${params.fieldPath}`,\n ];\n\n // Add minScore filter if specified\n if (params.minScore !== undefined) {\n // Validate minScore is a finite number\n if (!Number.isFinite(params.minScore)) {\n throw new TypeError(`minScore must be a finite number, got: ${params.minScore}`);\n }\n // minScore is similarity (1.0 = identical), convert to distance threshold\n // For cosine: distance = 1 - similarity, so threshold = 1 - minScore\n const threshold = 1 - params.minScore;\n conditions.push(sql`${distanceExpr} <= ${threshold}`);\n }\n\n // Validate limit is a positive integer\n if (!Number.isInteger(params.limit) || params.limit <= 0) {\n throw new Error(`limit must be a positive integer, got: ${params.limit}`);\n }\n\n const whereClause = sql.join(conditions, sql` AND `);\n\n return sql`\n SELECT\n ${embeddings.nodeId} as node_id,\n (1 - (${distanceExpr})) as score\n FROM ${embeddings}\n WHERE ${whereClause}\n ORDER BY ${distanceExpr} ASC\n LIMIT ${params.limit}\n `;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D1_CAPABILITIES, SQLITE_CAPABILITIES, buildSetActiveSchema, buildGetSchemaVersion, buildInsertSchema, buildGetActiveSchema, buildCheckUnique, buildDeleteUnique, buildInsertUnique, buildCountEdgesByKind, buildFindEdgesByKind, buildCountNodesByKind, buildFindNodesByKind, buildFindEdgesConnectedTo, buildEdgeExistsBetween, buildCountEdgesFrom, buildHardDeleteEdge, buildDeleteEdge, buildUpdateEdge, buildGetEdge, buildInsertEdge, buildHardDeleteUniquesByNode, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildDeleteNode, buildUpdateNode, buildGetNode, buildInsertNode } from './chunk-
|
|
1
|
+
import { D1_CAPABILITIES, SQLITE_CAPABILITIES, buildSetActiveSchema, buildGetSchemaVersion, buildInsertSchema, buildGetActiveSchema, buildCheckUnique, buildDeleteUnique, buildInsertUnique, buildCountEdgesByKind, buildFindEdgesByKind, buildCountNodesByKind, buildFindNodesByKind, buildFindEdgesConnectedTo, buildEdgeExistsBetween, buildCountEdgesFrom, buildHardDeleteEdge, buildDeleteEdge, buildUpdateEdge, buildGetEdge, buildInsertEdge, buildHardDeleteUniquesByNode, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildDeleteNode, buildUpdateNode, buildGetNode, buildInsertNode } from './chunk-QB3WBMDT.js';
|
|
2
2
|
import { tables } from './chunk-2QHQ2C4P.js';
|
|
3
3
|
import { ConfigurationError, UniquenessError } from './chunk-JKTO7TW3.js';
|
|
4
|
-
import { sql } from 'drizzle-orm';
|
|
4
|
+
import { getTableName, sql } from 'drizzle-orm';
|
|
5
5
|
|
|
6
6
|
function nowIso() {
|
|
7
7
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -84,6 +84,11 @@ function createSqliteBackend(db, options = {}) {
|
|
|
84
84
|
const tables2 = options.tables ?? tables;
|
|
85
85
|
const isD1 = isD1Database(db);
|
|
86
86
|
const isSync = isSyncDatabase(db);
|
|
87
|
+
const tableNames = {
|
|
88
|
+
nodes: getTableName(tables2.nodes),
|
|
89
|
+
edges: getTableName(tables2.edges),
|
|
90
|
+
embeddings: getTableName(tables2.embeddings)
|
|
91
|
+
};
|
|
87
92
|
async function execGet(query) {
|
|
88
93
|
const result = db.get(query);
|
|
89
94
|
return result instanceof Promise ? await result : result;
|
|
@@ -99,6 +104,7 @@ function createSqliteBackend(db, options = {}) {
|
|
|
99
104
|
const backend = {
|
|
100
105
|
dialect: "sqlite",
|
|
101
106
|
capabilities: isD1 ? D1_CAPABILITIES : SQLITE_CAPABILITIES,
|
|
107
|
+
tableNames,
|
|
102
108
|
// === Node Operations ===
|
|
103
109
|
async insertNode(params) {
|
|
104
110
|
const timestamp = nowIso();
|
|
@@ -302,5 +308,5 @@ function createTransactionBackend(tx, tables2) {
|
|
|
302
308
|
}
|
|
303
309
|
|
|
304
310
|
export { createSqliteBackend };
|
|
305
|
-
//# sourceMappingURL=chunk-
|
|
306
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-X4EVMBON.js.map
|
|
312
|
+
//# sourceMappingURL=chunk-X4EVMBON.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/sqlite.ts"],"names":["tables"],"mappings":"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","file":"chunk-X4EVMBON.js","sourcesContent":["/**\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 } from \"@nicia-ai/typegraph/drizzle/sqlite\";\n * import { tables } from \"@nicia-ai/typegraph/drizzle/schema/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\";\nimport { type BaseSQLiteDatabase } from \"drizzle-orm/sqlite-core\";\n\nimport { ConfigurationError, UniquenessError } from \"../../errors\";\nimport type { SqlTableNames } from \"../../query/compiler/schema\";\nimport {\n type CheckUniqueParams,\n type CountEdgesByKindParams,\n type CountEdgesFromParams,\n type CountNodesByKindParams,\n D1_CAPABILITIES,\n type DeleteEdgeParams,\n type DeleteNodeParams,\n type DeleteUniqueParams,\n type EdgeExistsBetweenParams,\n type EdgeRow,\n type FindEdgesByKindParams,\n type FindEdgesConnectedToParams,\n type FindNodesByKindParams,\n type GraphBackend,\n type HardDeleteEdgeParams,\n type HardDeleteNodeParams,\n type InsertEdgeParams,\n type InsertNodeParams,\n type InsertSchemaParams,\n type InsertUniqueParams,\n type NodeRow,\n type SchemaVersionRow,\n SQLITE_CAPABILITIES,\n type TransactionBackend,\n type TransactionOptions,\n type UniqueRow,\n type UpdateEdgeParams,\n type UpdateNodeParams,\n} from \"../types\";\nimport * as ops from \"./operations\";\nimport { type SqliteTables,tables as defaultTables } from \"./schema/sqlite\";\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\n/**\n * Any Drizzle SQLite database instance.\n */\ntype AnySqliteDatabase = BaseSQLiteDatabase<\"sync\" | \"async\", unknown>;\n\n// ============================================================\n// Utilities\n// ============================================================\n\n/**\n * Gets the current timestamp in ISO format.\n */\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Converts null to undefined.\n */\nfunction nullToUndefined<T>(value: T | null): T | undefined {\n return value ?? undefined;\n}\n\n/**\n * Converts a database row to NodeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toNodeRow(row: Record<string, unknown>): NodeRow {\n return {\n graph_id: row.graph_id as string,\n kind: row.kind as string,\n id: row.id as string,\n props: row.props as string,\n version: row.version as number,\n valid_from: nullToUndefined(row.valid_from as string | null),\n valid_to: nullToUndefined(row.valid_to as string | null),\n created_at: row.created_at as string,\n updated_at: row.updated_at as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to EdgeRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toEdgeRow(row: Record<string, unknown>): EdgeRow {\n return {\n graph_id: row.graph_id as string,\n id: row.id as string,\n kind: row.kind as string,\n from_kind: row.from_kind as string,\n from_id: row.from_id as string,\n to_kind: row.to_kind as string,\n to_id: row.to_id as string,\n props: row.props as string,\n valid_from: nullToUndefined(row.valid_from as string | null),\n valid_to: nullToUndefined(row.valid_to as string | null),\n created_at: row.created_at as string,\n updated_at: row.updated_at as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to UniqueRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toUniqueRow(row: Record<string, unknown>): UniqueRow {\n return {\n graph_id: row.graph_id as string,\n node_kind: row.node_kind as string,\n constraint_name: row.constraint_name as string,\n key: row.key as string,\n node_id: row.node_id as string,\n concrete_kind: row.concrete_kind as string,\n deleted_at: nullToUndefined(row.deleted_at as string | null),\n };\n}\n\n/**\n * Converts a database row to SchemaVersionRow type.\n * Raw SQL returns snake_case column names.\n */\nfunction toSchemaVersionRow(row: Record<string, unknown>): SchemaVersionRow {\n // SQLite returns is_active as number (0 or 1) or string ('0' or '1')\n // Boolean('0') is true in JavaScript, so we need explicit conversion\n const isActiveValue = row.is_active;\n const isActive = isActiveValue === 1 || isActiveValue === \"1\" || isActiveValue === true;\n\n return {\n graph_id: row.graph_id as string,\n version: row.version as number,\n schema_hash: row.schema_hash as string,\n schema_doc: row.schema_doc as string,\n created_at: row.created_at as string,\n is_active: isActive,\n };\n}\n\n/**\n * Gets the session class name from a Drizzle database instance.\n */\nfunction getSessionName(db: AnySqliteDatabase): string | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dbAny: any = db;\n\n // Try db.session first (current Drizzle structure)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (dbAny.session?.constructor?.name) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return dbAny.session.constructor.name as string;\n }\n\n // Fallback to db._.session (older Drizzle structure)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (dbAny._?.session?.constructor?.name) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return dbAny._.session.constructor.name as string;\n }\n\n return undefined;\n}\n\n/**\n * Detects if the database is a D1 database (no transaction support).\n */\nfunction isD1Database(db: AnySqliteDatabase): boolean {\n return getSessionName(db) === \"SQLiteD1Session\";\n}\n\n/**\n * Detects if the database is a synchronous SQLite database (better-sqlite3, bun:sqlite).\n * These drivers don't support async transaction callbacks.\n */\nfunction isSyncDatabase(db: AnySqliteDatabase): boolean {\n const sessionName = getSessionName(db);\n // BetterSQLiteSession is better-sqlite3\n // BunSQLiteSession is bun:sqlite\n return sessionName === \"BetterSQLiteSession\" || sessionName === \"BunSQLiteSession\";\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 */\nexport function createSqliteBackend(\n db: AnySqliteDatabase,\n options: SqliteBackendOptions = {},\n): GraphBackend {\n const tables = options.tables ?? defaultTables;\n const isD1 = isD1Database(db);\n const isSync = isSyncDatabase(db);\n\n const tableNames: SqlTableNames = {\n nodes: getTableName(tables.nodes),\n edges: getTableName(tables.edges),\n embeddings: getTableName(tables.embeddings),\n };\n\n /**\n * Helper to execute a query and handle sync/async uniformly.\n */\n async function execGet<T>(query: SQL): Promise<T | undefined> {\n const result = db.get(query);\n return (result instanceof Promise ? await result : result) as T | undefined;\n }\n\n async function execAll<T>(query: SQL): Promise<T[]> {\n const result = db.all(query);\n return (result instanceof Promise ? await result : result) as T[];\n }\n\n async function execRun(query: SQL): Promise<void> {\n const result = db.run(query);\n if (result instanceof Promise) await result;\n }\n\n // Create the backend operations\n const backend: GraphBackend = {\n dialect: \"sqlite\",\n capabilities: isD1 ? D1_CAPABILITIES : SQLITE_CAPABILITIES,\n tableNames,\n\n // === Node Operations ===\n\n async insertNode(params: InsertNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async getNode(\n graphId: string,\n kind: string,\n id: string,\n ): Promise<NodeRow | undefined> {\n const query = ops.buildGetNode(tables, graphId, kind, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toNodeRow(row) : undefined;\n },\n\n async updateNode(params: UpdateNodeParams): Promise<NodeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateNode(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update node failed: no row returned\");\n return toNodeRow(row);\n },\n\n async deleteNode(params: DeleteNodeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteNode(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteNode(params: HardDeleteNodeParams): Promise<void> {\n // Delete associated uniqueness entries\n const deleteUniquesQuery = ops.buildHardDeleteUniquesByNode(\n tables,\n params.graphId,\n params.id,\n );\n await execRun(deleteUniquesQuery);\n\n // Delete associated embeddings (if embeddings table exists)\n const deleteEmbeddingsQuery = ops.buildHardDeleteEmbeddingsByNode(\n tables,\n params.graphId,\n params.kind,\n params.id,\n );\n await execRun(deleteEmbeddingsQuery);\n\n // Delete the node itself\n const query = ops.buildHardDeleteNode(tables, params);\n await execRun(query);\n },\n\n // === Edge Operations ===\n\n async insertEdge(params: InsertEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async getEdge(graphId: string, id: string): Promise<EdgeRow | undefined> {\n const query = ops.buildGetEdge(tables, graphId, id);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toEdgeRow(row) : undefined;\n },\n\n async updateEdge(params: UpdateEdgeParams): Promise<EdgeRow> {\n const timestamp = nowIso();\n const query = ops.buildUpdateEdge(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Update edge failed: no row returned\");\n return toEdgeRow(row);\n },\n\n async deleteEdge(params: DeleteEdgeParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteEdge(tables, params, timestamp);\n await execRun(query);\n },\n\n async hardDeleteEdge(params: HardDeleteEdgeParams): Promise<void> {\n const query = ops.buildHardDeleteEdge(tables, params);\n await execRun(query);\n },\n\n // === Edge Cardinality Operations ===\n\n async countEdgesFrom(params: CountEdgesFromParams): Promise<number> {\n const query = ops.buildCountEdgesFrom(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n async edgeExistsBetween(params: EdgeExistsBetweenParams): Promise<boolean> {\n const query = ops.buildEdgeExistsBetween(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row !== undefined;\n },\n\n // === Edge Query Operations ===\n\n async findEdgesConnectedTo(\n params: FindEdgesConnectedToParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesConnectedTo(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n // === Collection Query Operations ===\n\n async findNodesByKind(\n params: FindNodesByKindParams,\n ): Promise<readonly NodeRow[]> {\n const query = ops.buildFindNodesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toNodeRow(row));\n },\n\n async countNodesByKind(params: CountNodesByKindParams): Promise<number> {\n const query = ops.buildCountNodesByKind(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n async findEdgesByKind(\n params: FindEdgesByKindParams,\n ): Promise<readonly EdgeRow[]> {\n const query = ops.buildFindEdgesByKind(tables, params);\n const rows = await execAll<Record<string, unknown>>(query);\n return rows.map((row) => toEdgeRow(row));\n },\n\n async countEdgesByKind(params: CountEdgesByKindParams): Promise<number> {\n const query = ops.buildCountEdgesByKind(tables, params);\n const row = await execGet<{ count: number }>(query);\n return row?.count ?? 0;\n },\n\n // === Unique Constraint Operations ===\n\n async insertUnique(params: InsertUniqueParams): Promise<void> {\n const query = ops.buildInsertUnique(tables, \"sqlite\", params);\n const result = await execGet<{ node_id: string }>(query);\n\n // Check if the returned node_id matches our input\n // If different, another node holds this key (race condition or conflict)\n if (result && result.node_id !== params.nodeId) {\n throw new UniquenessError({\n constraintName: params.constraintName,\n kind: params.nodeKind,\n existingId: result.node_id,\n newId: params.nodeId,\n fields: [], // Fields not available at this level\n });\n }\n },\n\n async deleteUnique(params: DeleteUniqueParams): Promise<void> {\n const timestamp = nowIso();\n const query = ops.buildDeleteUnique(tables, params, timestamp);\n await execRun(query);\n },\n\n async checkUnique(\n params: CheckUniqueParams,\n ): Promise<UniqueRow | undefined> {\n const query = ops.buildCheckUnique(tables, params);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toUniqueRow(row) : undefined;\n },\n\n // === Schema Operations ===\n\n async getActiveSchema(\n graphId: string,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetActiveSchema(tables, graphId);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async insertSchema(params: InsertSchemaParams): Promise<SchemaVersionRow> {\n const timestamp = nowIso();\n const query = ops.buildInsertSchema(tables, params, timestamp);\n const row = await execGet<Record<string, unknown>>(query);\n if (!row) throw new Error(\"Insert schema failed: no row returned\");\n return toSchemaVersionRow(row);\n },\n\n async getSchemaVersion(\n graphId: string,\n version: number,\n ): Promise<SchemaVersionRow | undefined> {\n const query = ops.buildGetSchemaVersion(tables, graphId, version);\n const row = await execGet<Record<string, unknown>>(query);\n return row ? toSchemaVersionRow(row) : undefined;\n },\n\n async setActiveSchema(graphId: string, version: number): Promise<void> {\n const queries = ops.buildSetActiveSchema(tables, graphId, version);\n await execRun(queries.deactivateAll);\n await execRun(queries.activateVersion);\n },\n\n // === Query Execution ===\n\n async execute<T>(query: SQL): Promise<readonly T[]> {\n return execAll<T>(query);\n },\n\n // === Transaction ===\n\n async transaction<T>(\n fn: (tx: TransactionBackend) => Promise<T>,\n _options?: TransactionOptions,\n ): Promise<T> {\n if (isD1) {\n // D1 doesn't support atomic transactions - operations are auto-committed.\n // This is a critical limitation that could cause data corruption if\n // a multi-step operation fails partway through.\n throw new ConfigurationError(\n \"Cloudflare D1 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: \"D1\",\n capability: \"transactions\",\n supportsTransactions: false,\n },\n );\n }\n\n if (isSync) {\n // Synchronous drivers (better-sqlite3, bun:sqlite) don't support\n // async transaction callbacks. Use raw SQL BEGIN/COMMIT/ROLLBACK.\n const txBackend = createTransactionBackend(db, tables);\n\n // Begin transaction synchronously\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 // Use Drizzle's transaction API for async drivers (libsql, etc.)\n return db.transaction(async (tx) => {\n const txBackend = createTransactionBackend(tx as AnySqliteDatabase, tables);\n return fn(txBackend);\n }) as Promise<T>;\n },\n\n // === Lifecycle ===\n\n async close(): Promise<void> {\n // Drizzle doesn't expose a close method\n // Users manage connection lifecycle themselves\n },\n };\n\n return backend;\n}\n\n/**\n * Creates a transaction backend from a Drizzle transaction.\n */\nfunction createTransactionBackend(\n tx: AnySqliteDatabase,\n tables: SqliteTables,\n): TransactionBackend {\n // Create a new backend using the transaction\n const txBackend = createSqliteBackend(tx, { tables });\n\n // Return without transaction and close methods\n const { transaction: _tx, close: _close, ...ops } = txBackend;\n void _tx;\n void _close;\n return ops;\n}\n\n// Re-export schema utilities\nexport type { SqliteTables, TableNames } from \"./schema/sqlite\";\nexport { createSqliteTables, tables } from \"./schema/sqlite\";\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { tables } from './chunk-4PIEL2VO.js';
|
|
2
|
-
import { POSTGRES_CAPABILITIES, buildVectorSearchPostgres, buildGetEmbedding, buildDeleteEmbedding, buildUpsertEmbeddingPostgres, buildSetActiveSchema, buildGetSchemaVersion, buildInsertSchema, buildGetActiveSchema, buildCheckUnique, buildDeleteUnique, buildInsertUnique, buildCountEdgesByKind, buildFindEdgesByKind, buildCountNodesByKind, buildFindNodesByKind, buildFindEdgesConnectedTo, buildEdgeExistsBetween, buildCountEdgesFrom, buildHardDeleteEdge, buildDeleteEdge, buildUpdateEdge, buildGetEdge, buildInsertEdge, buildHardDeleteUniquesByNode, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildDeleteNode, buildUpdateNode, buildGetNode, buildInsertNode } from './chunk-
|
|
2
|
+
import { POSTGRES_CAPABILITIES, buildVectorSearchPostgres, buildGetEmbedding, buildDeleteEmbedding, buildUpsertEmbeddingPostgres, buildSetActiveSchema, buildGetSchemaVersion, buildInsertSchema, buildGetActiveSchema, buildCheckUnique, buildDeleteUnique, buildInsertUnique, buildCountEdgesByKind, buildFindEdgesByKind, buildCountNodesByKind, buildFindNodesByKind, buildFindEdgesConnectedTo, buildEdgeExistsBetween, buildCountEdgesFrom, buildHardDeleteEdge, buildDeleteEdge, buildUpdateEdge, buildGetEdge, buildInsertEdge, buildHardDeleteUniquesByNode, buildHardDeleteEmbeddingsByNode, buildHardDeleteNode, buildDeleteNode, buildUpdateNode, buildGetNode, buildInsertNode } from './chunk-QB3WBMDT.js';
|
|
3
3
|
import { UniquenessError } from './chunk-JKTO7TW3.js';
|
|
4
|
+
import { getTableName } from 'drizzle-orm';
|
|
4
5
|
|
|
5
|
-
// src/backend/drizzle/postgres.ts
|
|
6
6
|
function nowIso() {
|
|
7
7
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
8
8
|
}
|
|
@@ -108,6 +108,11 @@ var POSTGRES_VECTOR_CAPABILITIES = {
|
|
|
108
108
|
};
|
|
109
109
|
function createPostgresBackend(db, options = {}) {
|
|
110
110
|
const tables2 = options.tables ?? tables;
|
|
111
|
+
const tableNames = {
|
|
112
|
+
nodes: getTableName(tables2.nodes),
|
|
113
|
+
edges: getTableName(tables2.edges),
|
|
114
|
+
embeddings: getTableName(tables2.embeddings)
|
|
115
|
+
};
|
|
111
116
|
async function execAll(query) {
|
|
112
117
|
const result = await db.execute(query);
|
|
113
118
|
return result.rows;
|
|
@@ -122,6 +127,7 @@ function createPostgresBackend(db, options = {}) {
|
|
|
122
127
|
const backend = {
|
|
123
128
|
dialect: "postgres",
|
|
124
129
|
capabilities: POSTGRES_VECTOR_CAPABILITIES,
|
|
130
|
+
tableNames,
|
|
125
131
|
// === Node Operations ===
|
|
126
132
|
async insertNode(params) {
|
|
127
133
|
const timestamp = nowIso();
|
|
@@ -338,5 +344,5 @@ function createTransactionBackend(tx, tables2) {
|
|
|
338
344
|
}
|
|
339
345
|
|
|
340
346
|
export { createPostgresBackend };
|
|
341
|
-
//# sourceMappingURL=chunk-
|
|
342
|
-
//# sourceMappingURL=chunk-
|
|
347
|
+
//# sourceMappingURL=chunk-XZL4NLV6.js.map
|
|
348
|
+
//# sourceMappingURL=chunk-XZL4NLV6.js.map
|