@undefineds.co/xpod 0.3.24 → 0.3.26
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/config/cloud.json +6 -5
- package/config/main.json +0 -3
- package/config/xpod.base.json +0 -32
- package/dist/api/container/index.js +3 -0
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/routes.js +2 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +5 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/authorization/AuthMode.d.ts +8 -0
- package/dist/authorization/AuthMode.js +51 -0
- package/dist/authorization/AuthMode.js.map +1 -0
- package/dist/authorization/PodAuthorizationResources.d.ts +18 -0
- package/dist/authorization/PodAuthorizationResources.js +108 -0
- package/dist/authorization/PodAuthorizationResources.js.map +1 -0
- package/dist/cli/commands/start.js +11 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +3 -2
- package/dist/components/context.jsonld +115 -14
- package/dist/index.d.ts +5 -3
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/main.js +11 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.d.ts +6 -2
- package/dist/provision/LocalPodProvisioningService.js +36 -33
- package/dist/provision/LocalPodProvisioningService.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.jsonld +65 -8
- package/dist/runtime/XpodRuntime.js +0 -1
- package/dist/runtime/XpodRuntime.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +4 -2
- package/dist/runtime/bootstrap.js +82 -12
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +6 -1
- package/dist/runtime/css-process.js +55 -7
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/lifecycle.d.ts +2 -3
- package/dist/runtime/lifecycle.js +2 -2
- package/dist/runtime/lifecycle.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +2 -1
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +2 -3
- package/dist/storage/accessors/SolidRdfDataAccessor.js +48 -42
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +1 -1
- package/dist/storage/keyvalue/BaseKeyValueStorage.d.ts +33 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.js +106 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.js.map +1 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.jsonld +177 -0
- package/dist/storage/keyvalue/PostgresKeyValueStorage.d.ts +9 -18
- package/dist/storage/keyvalue/PostgresKeyValueStorage.js +24 -96
- package/dist/storage/keyvalue/PostgresKeyValueStorage.js.map +1 -1
- package/dist/storage/keyvalue/PostgresKeyValueStorage.jsonld +15 -58
- package/dist/storage/keyvalue/SqliteKeyValueStorage.d.ts +9 -15
- package/dist/storage/keyvalue/SqliteKeyValueStorage.js +36 -104
- package/dist/storage/keyvalue/SqliteKeyValueStorage.js.map +1 -1
- package/dist/storage/keyvalue/SqliteKeyValueStorage.jsonld +21 -52
- package/dist/storage/quint/BaseQuintStore.d.ts +4 -1
- package/dist/storage/quint/BaseQuintStore.js +59 -46
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +4 -3
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.d.ts +43 -54
- package/dist/storage/quint/SqliteQuintStore.js +197 -520
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +38 -86
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +118 -0
- package/dist/storage/rdf/PostgresRdfEngine.js +2609 -0
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +657 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -2
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +3 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +3 -3
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +20 -20
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +1 -1
- package/dist/storage/rdf/index.d.ts +2 -1
- package/dist/storage/rdf/index.js +3 -1
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +19 -0
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/rdf/types.jsonld +115 -0
- package/package.json +2 -2
- package/config/runtime-open.json +0 -22
- package/dist/authorization/AuthModeSelector.d.ts +0 -10
- package/dist/authorization/AuthModeSelector.js +0 -27
- package/dist/authorization/AuthModeSelector.js.map +0 -1
- package/dist/authorization/AuthModeSelector.jsonld +0 -81
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/SqliteQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SqliteQuintStore - SQLite implementation of QuintStore using Drizzle ORM\n */\n\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { sql } from 'drizzle-orm';\nimport { wrap, AsyncIterator } from 'asynciterator';\nimport { DataFactory } from 'n3';\nimport type { Term } from '@rdfjs/types';\n\nimport { quints, type QuintRow, type NewQuintRow } from './schema';\nimport {\n rowToQuad,\n parseVector,\n termToId,\n serializeObject,\n deserializeObject,\n fpEncode,\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n SEP,\n isSerializedObjectValue,\n} from './serialization';\nimport { getSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport type {\n Quint,\n QuintPattern,\n QuintStoreOptions,\n QueryOptions,\n StoreStats,\n StoreSpaceObject,\n TermMatch,\n TermOperators,\n CompoundPattern,\n CompoundResult,\n OperatorValue,\n} from './types';\nimport { isTerm } from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\n\nconst SQLITE_UNBOUNDED_LIMIT = Number.MAX_SAFE_INTEGER;\n\ninterface SqliteIndexedQuintRow extends NewQuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n objectKind: PredicateObjectDataType;\n objectKey: string | null;\n objectText: string | null;\n objectDigest: string | null;\n}\n\nfunction digestObject(value: string): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nexport interface SqliteQuintStoreOptions extends QuintStoreOptions {\n /** SQLite database file path, use ':memory:' for in-memory database */\n path: string;\n}\n\nexport class SqliteQuintStore {\n private sqlite: SqliteDatabase | null = null;\n private db: any | null = null;\n private options: SqliteQuintStoreOptions;\n private readonly sqliteRuntime = getSqliteRuntime();\n\n constructor(options: SqliteQuintStoreOptions) {\n // Handle sqlite: prefix\n let path = options.path;\n if (path.startsWith('sqlite:')) {\n path = path.slice(7);\n }\n this.options = { ...options, path };\n }\n\n // ============================================\n // Lifecycle\n // ============================================\n\n async open(): Promise<void> {\n // Idempotent: if already open, do nothing\n if (this.sqlite) {\n return;\n }\n\n const dbPath = this.options.path;\n \n // Ensure directory exists (unless it's in-memory)\n if (dbPath !== ':memory:') {\n const dir = dirname(dbPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n \n this.sqlite = this.sqliteRuntime.openDatabase(dbPath);\n this.db = this.sqliteRuntime.createDrizzleDatabase(this.sqlite);\n\n // Create table and indexes\n this.sqlite.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n object_kind TEXT,\n object_key TEXT,\n object_text TEXT,\n object_digest TEXT,\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT\n );\n `);\n\n this.ensureTypedObjectSchema();\n\n this.sqlite.exec(`\n CREATE INDEX IF NOT EXISTS idx_quints_graph ON quints (graph);\n CREATE INDEX IF NOT EXISTS idx_quints_subject ON quints (subject);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate ON quints (predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_object_key ON quints (object_kind, object_key);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_key ON quints (predicate, object_kind, object_key);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_digest ON quints (predicate, object_kind, object_digest);\n CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_key\n ON quints (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL;\n CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest\n ON quints (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL;\n CREATE INDEX IF NOT EXISTS idx_quints_gsp ON quints (graph, subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_sp ON quints (subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_gp ON quints (graph, predicate);\n `);\n }\n\n async close(): Promise<void> {\n if (this.sqlite) {\n this.sqlite.close();\n this.sqlite = null;\n this.db = null;\n }\n }\n\n // ============================================\n // Query Operations\n // ============================================\n\n async get(pattern: QuintPattern, options?: QueryOptions): Promise<Quint[]> {\n this.ensureOpen();\n\n const { sql: query, params } = this.buildSelectQuery(pattern, options);\n const rows = this.sqlite!.prepare<QuintRow>(query).all(...params);\n return rows.map((row: QuintRow) => this.rowToQuint(row));\n }\n\n match(\n subject?: Term | null,\n predicate?: Term | null,\n object?: Term | null,\n graph?: Term | null,\n ): AsyncIterator<Quint> {\n const pattern: QuintPattern = {};\n if (subject) pattern.subject = subject;\n if (predicate) pattern.predicate = predicate;\n if (object) pattern.object = object;\n if (graph) pattern.graph = graph;\n\n return wrap(this.get(pattern));\n }\n\n async getByGraphPrefix(prefix: string, options?: QueryOptions): Promise<Quint[]> {\n return this.get({ graph: { $startsWith: prefix } }, options);\n }\n\n async count(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const result = this.sqlite!.prepare<{ count: number }>(\n `SELECT COUNT(*) AS count FROM quints${whereClause}`,\n ).get(...params);\n return Number(result?.count ?? 0);\n }\n\n /**\n * Compound query - multiple patterns JOINed by a common field\n * This executes a single SQL query with JOINs, letting SQLite optimize the execution plan\n */\n async getCompound(compound: CompoundPattern, options?: QueryOptions): Promise<CompoundResult[]> {\n this.ensureOpen();\n\n const { patterns, joinOn, select } = compound;\n \n if (patterns.length === 0) {\n return [];\n }\n\n if (patterns.length === 1) {\n // Single pattern, fall back to regular get\n const quads = await this.get(patterns[0], options);\n return quads.map(q => ({\n joinValue: termToId((q as any)[joinOn]),\n bindings: {},\n quads: [q],\n }));\n }\n\n // Build JOIN SQL\n const { sql: sqlQuery, params } = this.buildCompoundSQL(compound, options);\n \n if (this.options.debug) {\n console.log('[SqliteQuintStore] Compound SQL:', sqlQuery);\n console.log('[SqliteQuintStore] Params:', params);\n }\n\n // Execute raw SQL\n const stmt = this.sqlite!.prepare(sqlQuery);\n const rows = stmt.all(...params) as Record<string, string>[];\n\n // Convert rows to CompoundResult\n return rows.map(row => {\n const bindings: Record<string, string> = {};\n \n // Extract bindings based on select config or default naming\n if (select) {\n for (const s of select) {\n bindings[s.alias] = row[s.alias];\n }\n } else {\n // Default: include all fields from all patterns\n for (const key of Object.keys(row)) {\n if (key !== 'join_value') {\n bindings[key] = row[key];\n }\n }\n }\n\n return {\n joinValue: row.join_value,\n bindings,\n };\n });\n }\n\n /**\n * 批量获取多个 subject 的多个属性\n * \n * 用于优化 OPTIONAL 查询:避免每个 OPTIONAL 变成一次 LEFT JOIN\n * \n * SQL: SELECT subject, predicate, object FROM quints \n * WHERE subject IN (...) AND predicate IN (...)\n */\n async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term\n ): Promise<Map<string, Map<string, Term[]>>> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n // Build SQL with IN clauses\n const params: string[] = [];\n let sql = `SELECT subject, predicate, object FROM quints WHERE subject IN (${\n subjects.map(() => '?').join(', ')\n }) AND predicate IN (${\n predicates.map(() => '?').join(', ')\n })`;\n \n params.push(...subjects);\n params.push(...predicates);\n\n // Add graph filter if specified\n if (graph && graph.termType !== 'DefaultGraph') {\n sql += ` AND graph = ?`;\n params.push(termToId(graph as any));\n }\n\n if (this.options.debug) {\n console.log('[SqliteQuintStore] getAttributes SQL:', sql);\n console.log('[SqliteQuintStore] Params:', params.length, 'subjects:', subjects.length, 'predicates:', predicates.length);\n }\n\n const stmt = this.sqlite!.prepare(sql);\n const rows = stmt.all(...params) as { subject: string; predicate: string; object: string }[];\n\n // Build result map: subject -> predicate -> object[]\n const result = new Map<string, Map<string, Term[]>>();\n\n for (const row of rows) {\n if (!result.has(row.subject)) {\n result.set(row.subject, new Map());\n }\n const predicateMap = result.get(row.subject)!;\n \n if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n \n // Deserialize object back to Term\n const objectTerm = deserializeObject(row.object);\n predicateMap.get(row.predicate)!.push(objectTerm);\n }\n\n if (this.options.debug) {\n console.log('[SqliteQuintStore] getAttributes returned', result.size, 'subjects');\n }\n\n return result;\n }\n\n /**\n * Build SQL for compound query with JOINs\n */\n private buildCompoundSQL(\n compound: CompoundPattern,\n options?: QueryOptions\n ): { sql: string; params: (string | number)[] } {\n const { patterns, joinOn, select } = compound;\n const params: (string | number)[] = [];\n \n // Map joinOn to column name\n const joinColumn = joinOn; // 'subject' | 'predicate' | 'object' | 'graph'\n\n // Build SELECT clause\n let selectClause = `q0.${joinColumn} as join_value`;\n \n if (select) {\n for (const s of select) {\n selectClause += `, q${s.pattern}.${s.field} as ${s.alias}`;\n }\n } else {\n // Default: select object from each pattern as p0_object, p1_object, etc.\n for (let i = 0; i < patterns.length; i++) {\n selectClause += `, q${i}.object as p${i}_object`;\n selectClause += `, q${i}.predicate as p${i}_predicate`;\n }\n }\n\n // Build FROM clause with JOINs\n let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinColumn} = q${i}.${joinColumn}`;\n // Also join on graph to ensure same graph\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\n // Build WHERE clause\n const whereParts: string[] = [];\n \n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const alias = `q${i}`;\n \n const conditions = this.buildConditionsForAlias(pattern, alias, params);\n whereParts.push(...conditions);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n \n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n // Add LIMIT/OFFSET\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n if (!options?.limit) {\n sql += ` LIMIT -1`;\n }\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n /**\n * Build WHERE conditions for a specific table alias\n */\n private buildConditionsForAlias(\n pattern: QuintPattern,\n alias: string,\n params: (string | number)[]\n ): string[] {\n const conditions: string[] = [];\n this.addTermConditions(conditions, params, `${alias}.graph`, pattern.graph, false);\n this.addTermConditions(conditions, params, `${alias}.subject`, pattern.subject, false);\n this.addTermConditions(conditions, params, `${alias}.predicate`, pattern.predicate, false);\n if (pattern.object) {\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\n }\n\n return conditions;\n }\n\n // ============================================\n // Write Operations\n // ============================================\n\n async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToRow(quint);\n const statement = this.writeStatementForRow(row);\n this.sqlite!.prepare(statement.sql).run(...statement.params);\n }\n\n async multiPut(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const rows = quintList.map(q => this.writeStatementForRow(this.quintToRow(q)));\n\n // Use transaction for batch insert\n this.sqlite!.transaction(() => {\n for (const row of rows) {\n this.sqlite!.prepare(row.sql).run(...row.params);\n }\n })();\n }\n\n async updateEmbedding(pattern: QuintPattern, embedding: number[]): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const vectorJson = JSON.stringify(embedding);\n const result = this.sqlite!.prepare(`UPDATE quints SET vector = ?${whereClause}`).run(vectorJson, ...params);\n return result.changes;\n }\n\n // ============================================\n // Delete Operations\n // ============================================\n\n async del(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const result = this.sqlite!.prepare(`DELETE FROM quints${whereClause}`).run(...params);\n return result.changes;\n }\n\n async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n this.sqlite!.transaction(() => {\n for (const quint of quintList) {\n const g = termToId(quint.graph as any);\n const s = termToId(quint.subject as any);\n const p = termToId(quint.predicate as any);\n const o = serializeObject(quint.object as any);\n\n this.sqlite!.prepare(`\n DELETE FROM quints\n WHERE graph = ?\n AND subject = ?\n AND predicate = ?\n AND object = ?\n `).run(g, s, p, o);\n }\n })();\n }\n\n // ============================================\n // Management\n // ============================================\n\n async stats(): Promise<StoreStats> {\n this.ensureOpen();\n\n const totalResult = await this.db!\n .select({ count: sql<number>`count(*)` })\n .from(quints);\n\n const vectorResult = await this.db!\n .select({ count: sql<number>`count(*)` })\n .from(quints)\n .where(sql`${quints.vector} IS NOT NULL`);\n\n const graphResult = await this.db!\n .select({ count: sql<number>`COUNT(DISTINCT ${quints.graph})` })\n .from(quints);\n\n return {\n totalCount: totalResult[0]?.count ?? 0,\n vectorCount: vectorResult[0]?.count ?? 0,\n graphCount: graphResult[0]?.count ?? 0,\n ...this.sqliteSpaceStats(),\n };\n }\n\n private sqliteSpaceStats(): Pick<StoreStats, 'databaseBytes' | 'tableBytes' | 'indexBytes' | 'spaceObjects'> {\n const spaceObjects = this.collectSpaceObjects();\n const databaseBytes = this.estimateDatabaseBytes();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n databaseBytes: databaseBytes || accountedBytes,\n tableBytes: sumStoreSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumStoreSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n private estimateDatabaseBytes(): number {\n try {\n const pageCount = this.sqlite!.prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n const pageSize = this.sqlite!.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 0;\n return pageCount * pageSize;\n } catch {\n return 0;\n }\n }\n\n private collectSpaceObjects(): StoreSpaceObject[] {\n try {\n const schemaRows = this.sqlite!.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n `).all();\n const rows = this.sqlite!.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = quintSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n try {\n const schemaRows = this.sqlite!.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n `).all();\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): StoreSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: quintSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.sqlite!.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n async clear(): Promise<void> {\n this.ensureOpen();\n await this.db!.delete(quints);\n }\n\n // ============================================\n // Private Helpers\n // ============================================\n\n private ensureOpen(): void {\n if (!this.db) {\n throw new Error('Store not open. Call open() first.');\n }\n }\n\n private ensureTypedObjectSchema(): void {\n this.addColumnIfMissing('object_kind', 'TEXT');\n this.addColumnIfMissing('object_key', 'TEXT');\n this.addColumnIfMissing('object_text', 'TEXT');\n this.addColumnIfMissing('object_digest', 'TEXT');\n\n for (const indexName of ['idx_spog', 'idx_ogsp', 'idx_gspo', 'idx_sopg', 'idx_pogs', 'idx_gpos']) {\n this.sqlite!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n this.backfillMissingObjectIndexFields();\n this.sqlite!.prepare(`\n UPDATE quints\n SET object_kind = 'text'\n WHERE object_kind = 'shortText'\n `).run();\n }\n\n private addColumnIfMissing(name: string, definition: string): void {\n const columns = new Set(\n this.sqlite!.prepare<{ name: string }>('PRAGMA table_info(quints)').all().map(row => row.name),\n );\n if (!columns.has(name)) {\n this.sqlite!.exec(`ALTER TABLE quints ADD COLUMN ${name} ${definition}`);\n }\n }\n\n private backfillMissingObjectIndexFields(): void {\n const rows = this.sqlite!.prepare<{\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n }>(`\n SELECT graph, subject, predicate, object\n FROM quints\n WHERE object_kind IS NULL\n OR (object_key IS NULL AND object_digest IS NULL)\n `).all();\n\n const update = this.sqlite!.prepare(`\n UPDATE quints\n SET object_kind = ?,\n object_key = ?,\n object_text = ?,\n object_digest = ?\n WHERE graph = ?\n AND subject = ?\n AND predicate = ?\n AND object = ?\n `);\n\n for (const row of rows) {\n const objectIndex = this.objectIndexForSerialized(row.predicate, row.object);\n update.run(\n objectIndex.objectKind,\n objectIndex.objectKey,\n objectIndex.objectText,\n this.objectDigestForIndex(row.object, objectIndex),\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n );\n }\n }\n\n private buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n let query = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.map(field => {\n if (field === 'object') {\n const objectType = this.resolveObjectDataTypeForPattern(pattern);\n if (objectType === 'longText') {\n throw new Error('ORDER BY object is not supported for longText predicates');\n }\n return 'object_key';\n }\n return field;\n }).join(', ');\n query += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n query += ' DESC';\n }\n }\n\n if (options?.limit !== undefined) {\n query += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n query += ' LIMIT ?';\n params.push(SQLITE_UNBOUNDED_LIMIT);\n }\n query += ' OFFSET ?';\n params.push(options.offset);\n }\n\n return { sql: query, params };\n }\n\n private buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n const predicate = this.extractExactPredicate(pattern.predicate);\n\n this.addTermConditions(conditions, params, 'graph', pattern.graph, false);\n this.addTermConditions(conditions, params, 'subject', pattern.subject, false);\n this.addTermConditions(conditions, params, 'predicate', pattern.predicate, false);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n return {\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n params,\n };\n }\n\n private addTermConditions(\n conditions: string[],\n params: any[],\n column: string,\n match: TermMatch | undefined,\n isObject: boolean,\n ): void {\n if (!match) return;\n\n if (isTerm(match)) {\n conditions.push(`${column} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n return;\n }\n\n const ops = match as TermOperators;\n if (ops.$eq !== undefined) {\n conditions.push(`${column} = ?`);\n params.push(this.serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$ne !== undefined) {\n conditions.push(`${column} != ?`);\n params.push(this.serializeOpValue(ops.$ne, isObject, '$ne'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${column} > ?`);\n params.push(this.serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${column} >= ?`);\n params.push(this.serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${column} < ?`);\n params.push(this.serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${column} <= ?`);\n params.push(this.serializeOpValue(ops.$lte, isObject, '$lte'));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const placeholders = ops.$in.map(() => '?').join(', ');\n conditions.push(`${column} IN (${placeholders})`);\n params.push(...ops.$in.map(v => this.serializeOpValue(v, isObject, '$in')));\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const placeholders = ops.$notIn.map(() => '?').join(', ');\n conditions.push(`${column} NOT IN (${placeholders})`);\n params.push(...ops.$notIn.map(v => this.serializeOpValue(v, isObject, '$notIn')));\n }\n if (ops.$startsWith !== undefined) {\n conditions.push(`${column} >= ? AND ${column} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$endsWith}`);\n }\n if (ops.$contains !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$contains}%`);\n }\n if (ops.$regex !== undefined) {\n conditions.push(`${column} GLOB ?`);\n params.push(ops.$regex.replace(/\\.\\*/g, '*').replace(/\\./g, '?'));\n }\n if (ops.$isNull === true) {\n conditions.push(`${column} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column} IS NOT NULL`);\n }\n }\n\n private serializeOpValue(value: OperatorValue, isObject: boolean, filterOp: string): any {\n if (typeof value === 'object' && 'termType' in value) {\n return isObject ? serializeObject(value as any) : termToId(value as any);\n }\n\n if (typeof value === 'number') {\n if (isObject) {\n if (filterOp === '$eq' || filterOp === '$ne' || filterOp === '$in' || filterOp === '$notIn') {\n const lit = DataFactory.literal(String(value), DataFactory.namedNode('http://www.w3.org/2001/XMLSchema#integer'));\n return serializeObject(lit);\n }\n const fpValue = `N${SEP}${fpEncode(value)}`;\n if (filterOp === '$gt' || filterOp === '$lte') {\n return fpValue + SEP + '\\uffff';\n }\n return fpValue;\n }\n return value;\n }\n\n if (isObject && !isSerializedObjectValue(value)) {\n return `\"${value}\"`;\n }\n return value;\n }\n\n private addObjectConditions(\n conditions: string[],\n params: any[],\n alias: string | undefined,\n match: TermMatch,\n predicate: string | undefined,\n ): void {\n const column = (name: string) => alias ? `${alias}.${name}` : name;\n\n if (typeof match === 'object' && 'termType' in match) {\n this.addObjectExactCondition(conditions, params, column, match, predicate);\n return;\n }\n\n const ops = match as TermOperators;\n if (ops.$eq !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$eq, '$eq', predicate);\n }\n if (ops.$ne !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$ne, '$ne', predicate);\n }\n if (ops.$gt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>', ops.$gt, '$gt', predicate);\n }\n if (ops.$gte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>=', ops.$gte, '$gte', predicate);\n }\n if (ops.$lt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<', ops.$lt, '$lt', predicate);\n }\n if (ops.$lte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<=', ops.$lte, '$lte', predicate);\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const predicates = ops.$in.map((value) => this.objectPredicateForOperatorValue(value, '$in', predicate));\n const placeholders = predicates.map((item) => {\n if (item.fields.objectKey === null) {\n return `(${column('object_kind')} = ? AND ${column('object_digest')} = ? AND ${column('object')} = ?)`;\n }\n return `(${column('object_kind')} = ? AND ${column('object_key')} = ?)`;\n }).join(' OR ');\n conditions.push(`(${placeholders})`);\n for (const item of predicates) {\n if (item.fields.objectKey === null) {\n params.push(item.fields.objectKind, this.objectDigestForIndex(item.serialized, item.fields), item.serialized);\n } else {\n params.push(item.fields.objectKind, item.fields.objectKey);\n }\n }\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n for (const value of ops.$notIn) {\n conditions.push(`${column('object')} != ?`);\n params.push(this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n }\n }\n if (ops.$startsWith !== undefined) {\n const fields = this.objectFieldsForPrefix(ops.$startsWith, predicate);\n this.assertComparableObject(fields, '$startsWith');\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} >= ? AND ${column('object_key')} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$endsWith}`, predicate);\n }\n if (ops.$contains !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$contains}%`, predicate);\n }\n if (ops.$regex !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'GLOB', ops.$regex.replace(/\\.\\*/g, '*').replace(/\\./g, '?'), predicate);\n }\n if (ops.$strStartsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'startsWith', ops.$strStartsWith);\n }\n if (ops.$strEndsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'endsWith', ops.$strEndsWith);\n }\n if (ops.$strContains !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'contains', ops.$strContains);\n }\n if (ops.$strRegex !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'regex', ops.$strRegex);\n }\n if (ops.$language !== undefined) {\n this.addObjectLanguageCondition(conditions, params, column, ops.$language);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column('object')} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column('object')} IS NOT NULL`);\n }\n }\n\n private addObjectExactCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n object: Term,\n predicate: string | undefined,\n ): void {\n const serialized = serializeObject(object);\n const fields = this.objectIndexForTerm(this.predicateForIndex(predicate), object);\n this.addObjectExactSerializedCondition(conditions, params, column, serialized, fields);\n }\n\n private addObjectExactValueCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n value: OperatorValue,\n op: '$eq' | '$ne',\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n if (op === '$ne') {\n conditions.push(`${column('object')} != ?`);\n params.push(item.serialized);\n return;\n }\n this.addObjectExactSerializedCondition(conditions, params, column, item.serialized, item.fields);\n }\n\n private addObjectExactSerializedCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n serialized: string,\n fields: ObjectIndexFields,\n ): void {\n if (fields.objectKey !== null) {\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} = ?`);\n params.push(fields.objectKey);\n return;\n }\n\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_digest')} = ?`);\n params.push(this.objectDigestForIndex(serialized, fields));\n conditions.push(`${column('object')} = ?`);\n params.push(serialized);\n }\n\n private addObjectComparableCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: OperatorValue,\n op: string,\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n this.assertComparableObject(item.fields, op);\n conditions.push(`${column('object_kind')} = ?`);\n params.push(item.fields.objectKind);\n conditions.push(`${column('object_key')} ${sqlOperator} ?`);\n params.push(item.serialized);\n }\n\n private addObjectTextCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: string,\n predicate: string | undefined,\n ): void {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (!['text', 'longText', 'literal'].includes(declaredType)) {\n throw new Error(`Object text search is not supported for ${declaredType}`);\n }\n conditions.push(`${column('object_kind')} = ?`);\n params.push(declaredType);\n }\n conditions.push(`${column('object_text')} ${sqlOperator} ?`);\n params.push(value);\n }\n\n private addObjectLexicalStringCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n op: 'startsWith' | 'endsWith' | 'contains' | 'regex',\n value: string,\n ): void {\n const lexical = this.objectLexicalSql(column);\n if (op === 'startsWith') {\n conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);\n params.push(value, value + '\\uffff');\n return;\n }\n if (op === 'endsWith') {\n conditions.push(`${lexical} LIKE ?`);\n params.push(`%${value}`);\n return;\n }\n if (op === 'contains') {\n conditions.push(`${lexical} LIKE ?`);\n params.push(`%${value}%`);\n return;\n }\n conditions.push(`${lexical} GLOB ?`);\n params.push(value.replace(/\\.\\*/g, '*').replace(/\\./g, '?'));\n }\n\n private addObjectLanguageCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n lang: string,\n ): void {\n const languageLiteralKinds = `${column('object_kind')} IN ('text', 'longText', 'literal')`;\n if (lang === '*') {\n conditions.push(`(${languageLiteralKinds} AND lower(${column('object')}) LIKE ?)`);\n params.push('%\"@%');\n return;\n }\n conditions.push(`(${languageLiteralKinds} AND (lower(${column('object')}) LIKE ? OR lower(${column('object')}) LIKE ?))`);\n params.push(`%\"@${lang.toLowerCase()}`, `%\"@${lang.toLowerCase()}-%`);\n }\n\n private objectLexicalSql(column: (name: string) => string): string {\n const object = column('object');\n return `CASE\n WHEN ${column('object_text')} IS NOT NULL THEN ${column('object_text')}\n WHEN ${column('object_kind')} IN ('iri', 'blankNode') THEN ${column('object_key')}\n WHEN ${column('object_kind')} = 'numeric' THEN substr(${object}, length('N${SEP}') + instr(substr(${object}, length('N${SEP}') + 1), '${SEP}') + instr(substr(${object}, length('N${SEP}') + instr(substr(${object}, length('N${SEP}') + 1), '${SEP}') + 1), '${SEP}') + 1)\n WHEN ${column('object_kind')} = 'dateTime' THEN substr(${object}, length('D${SEP}') + instr(substr(${object}, length('D${SEP}') + 1), '${SEP}') + 1)\n ELSE NULL\n END`;\n }\n\n private objectPredicateForOperatorValue(\n value: OperatorValue,\n op: string,\n predicate: string | undefined,\n ): { serialized: string; fields: ObjectIndexFields } {\n const serialized = this.serializeOpValue(value, true, op);\n return {\n serialized,\n fields: this.objectFieldsForOperatorValue(value, serialized, op, predicate),\n };\n }\n\n private objectFieldsForOperatorValue(\n value: OperatorValue,\n serialized: string,\n op: string,\n predicate: string | undefined,\n ): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: String(value) };\n }\n return { objectKind: declaredType, objectKey: serialized, objectText: null };\n }\n\n if (typeof value === 'number' && !['$eq', '$ne', '$in', '$notIn'].includes(op)) {\n return { objectKind: 'numeric', objectKey: serialized, objectText: null };\n }\n\n if (!['$eq', '$ne', '$in', '$notIn'].includes(op)) {\n if (isSerializedNumericLiteral(serialized)) {\n return { objectKind: 'numeric', objectKey: serialized, objectText: null };\n }\n if (isSerializedDateTimeLiteral(serialized)) {\n return { objectKind: 'dateTime', objectKey: serialized, objectText: null };\n }\n }\n\n return this.objectIndexForSerialized(predicate, serialized);\n }\n\n private objectIndexForTerm(predicate: string | undefined, object: Term): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectIndexForSerialized(predicate: string | undefined, object: string): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForPrefix(prefix: string, predicate: string | undefined): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: prefix };\n }\n return { objectKind: declaredType, objectKey: prefix, objectText: null };\n }\n if (isSerializedNumericLiteral(prefix)) {\n return { objectKind: 'numeric', objectKey: prefix, objectText: null };\n }\n if (isSerializedDateTimeLiteral(prefix)) {\n return { objectKind: 'dateTime', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('\"')) {\n return { objectKind: 'text', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('_:')) {\n return { objectKind: 'blankNode', objectKey: prefix, objectText: null };\n }\n return { objectKind: 'iri', objectKey: prefix, objectText: null };\n }\n\n private objectDigestForIndex(serialized: string, fields: ObjectIndexFields): string | null {\n return fields.objectKey === null ? digestObject(serialized) : null;\n }\n\n private assertComparableObject(fields: ObjectIndexFields, op: string): void {\n if (fields.objectKey !== null && fields.objectKind !== 'longText') {\n return;\n }\n throw new Error(`Object ${op} is not supported for ${fields.objectKind}; declare/use a comparable data type instead of longText`);\n }\n\n private extractExactPredicate(match: TermMatch | undefined): string | undefined {\n if (!match) return undefined;\n if (typeof match === 'object' && 'termType' in match) {\n return termToId(match as Term);\n }\n const ops = match as TermOperators;\n if (ops.$eq !== undefined) {\n return String(this.serializeOpValue(ops.$eq, false, '$eq'));\n }\n return undefined;\n }\n\n private resolveObjectDataTypeForPattern(pattern: QuintPattern): PredicateObjectDataType | undefined {\n const predicate = this.extractExactPredicate(pattern.predicate);\n if (predicate) {\n return getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n }\n if (pattern.object && typeof pattern.object === 'object' && 'termType' in pattern.object) {\n return this.objectIndexForTerm(predicate, pattern.object as Term).objectKind;\n }\n return undefined;\n }\n\n private predicateForIndex(predicate: string | undefined): string | undefined {\n return predicate;\n }\n\n private writeStatementForRow(row: SqliteIndexedQuintRow): { sql: string; params: any[] } {\n const params = [\n row.objectKind,\n row.objectKey,\n row.objectText,\n row.objectDigest,\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n row.vector,\n ];\n\n if (row.objectKey !== null) {\n return {\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL\n DO UPDATE SET\n vector = excluded.vector,\n object_text = excluded.object_text,\n object_digest = excluded.object_digest\n WHERE quints.object = excluded.object\n `,\n params,\n };\n }\n\n return {\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n vector = excluded.vector,\n object_text = excluded.object_text\n WHERE quints.object = excluded.object\n `,\n params,\n };\n }\n\n private quintToRow(quint: Quint): SqliteIndexedQuintRow {\n const predicate = termToId(quint.predicate as any);\n const object = serializeObject(quint.object as any);\n const objectIndex = this.objectIndexForTerm(predicate, quint.object as Term);\n return {\n graph: termToId(quint.graph as any),\n subject: termToId(quint.subject as any),\n predicate,\n object,\n vector: quint.vector ? JSON.stringify(quint.vector) : null,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(object, objectIndex),\n };\n }\n\n private rowToQuint(row: QuintRow): Quint {\n const quad = rowToQuad(row);\n const quint: Quint = quad as Quint;\n if (row.vector) {\n quint.vector = parseVector(row.vector);\n }\n return quint;\n }\n}\n\nfunction sumStoreSpaceObjects(objects: StoreSpaceObject[], kind: StoreSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nfunction quintSpaceObjectKind(name: string, schemaType?: string, tableName?: string): StoreSpaceObject['kind'] {\n if (schemaType === 'table' && name === 'quints') {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('idx_') || tableName === 'quints')) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SqliteQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/SqliteQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SqliteQuintStore - SQLite implementation of QuintStore using Drizzle ORM\n */\n\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport type { Term } from '@rdfjs/types';\n\nimport { BaseQuintStore, type QuintRow, type SqlExecutor } from './BaseQuintStore';\nimport type { NewQuintRow } from './schema';\nimport {\n rowToQuad,\n parseVector,\n termToId,\n serializeObject,\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n SEP,\n} from './serialization';\nimport { getSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport type {\n QuintStoreOptions,\n StoreStats,\n StoreSpaceObject,\n QuintPattern,\n QueryOptions,\n Quint,\n TermMatch,\n TermOperators,\n OperatorValue,\n} from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\n\nconst SQLITE_UNBOUNDED_LIMIT = Number.MAX_SAFE_INTEGER;\n\ninterface SqliteIndexedQuintRow extends NewQuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n objectKind: PredicateObjectDataType;\n objectKey: string | null;\n objectText: string | null;\n objectDigest: string | null;\n}\n\nfunction digestObject(value: string): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nexport interface SqliteQuintStoreOptions extends QuintStoreOptions {\n /** SQLite database file path, use ':memory:' for in-memory database */\n path: string;\n}\n\nclass SqliteExecutor implements SqlExecutor {\n constructor(private readonly db: SqliteDatabase) {}\n\n async query<T = any>(sqlText: string, params?: any[]): Promise<T[]> {\n return this.db.prepare<T>(sqlText).all(...(params ?? []));\n }\n\n async execute(sqlText: string, params?: any[]): Promise<number> {\n return this.db.prepare(sqlText).run(...(params ?? [])).changes;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n this.db.transaction(() => {\n for (const statement of statements) {\n this.db.prepare(statement.sql).run(...(statement.params ?? []));\n }\n })();\n }\n\n async exec(sqlText: string): Promise<void> {\n this.db.exec(sqlText);\n }\n}\n\nexport class SqliteQuintStore extends BaseQuintStore {\n private sqlite: SqliteDatabase | null = null;\n private readonly sqliteRuntime = getSqliteRuntime();\n private readonly path: string;\n\n constructor(options: SqliteQuintStoreOptions) {\n const path = options.path.startsWith('sqlite:') ? options.path.slice(7) : options.path;\n super(options);\n this.path = path;\n }\n\n protected async createExecutor(): Promise<SqlExecutor> {\n const dbPath = this.path;\n if (dbPath !== ':memory:') {\n const dir = dirname(dbPath);\n if (dir && !existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n this.sqlite = this.sqliteRuntime.openDatabase(dbPath);\n return new SqliteExecutor(this.sqlite);\n }\n\n protected async closeExecutor(): Promise<void> {\n if (this.sqlite) {\n this.sqlite.close();\n this.sqlite = null;\n }\n }\n\n protected override async openOnce(): Promise<void> {\n const executor = await this.createExecutor();\n this.executor = executor;\n\n try {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n object_kind TEXT,\n object_key TEXT,\n object_text TEXT,\n object_digest TEXT,\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT\n );\n `);\n\n await this.ensureTypedObjectSchema();\n await this.createTypedObjectIndexes();\n this.opened = true;\n } catch (error) {\n await this.closeExecutor().catch(() => {});\n if (this.executor === executor) {\n this.executor = null;\n }\n this.opened = false;\n throw error;\n }\n }\n\n protected override buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n\n let sqlText = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.map(field => {\n if (field === 'object') {\n const objectType = this.resolveObjectDataTypeForPattern(pattern);\n if (objectType === 'longText') {\n throw new Error('ORDER BY object is not supported for longText predicates');\n }\n return 'object_key';\n }\n return field;\n }).join(', ');\n sqlText += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sqlText += ' DESC';\n }\n }\n\n if (options?.limit !== undefined) {\n sqlText += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sqlText += ` LIMIT ?`;\n params.push(SQLITE_UNBOUNDED_LIMIT);\n }\n sqlText += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql: sqlText, params };\n }\n\n override async stats(): Promise<StoreStats> {\n const stats = await super.stats();\n return {\n totalCount: Number(stats.totalCount),\n vectorCount: Number(stats.vectorCount),\n graphCount: Number(stats.graphCount),\n ...this.sqliteSpaceStats(),\n };\n }\n\n override async clear(): Promise<void> {\n this.ensureOpen();\n await this.executor!.execute('DELETE FROM quints');\n }\n\n private async ensureTypedObjectSchema(): Promise<void> {\n await this.addColumnIfMissing('object_kind', 'TEXT');\n await this.addColumnIfMissing('object_key', 'TEXT');\n await this.addColumnIfMissing('object_text', 'TEXT');\n await this.addColumnIfMissing('object_digest', 'TEXT');\n\n for (const indexName of ['idx_spog', 'idx_ogsp', 'idx_gspo', 'idx_sopg', 'idx_pogs', 'idx_gpos']) {\n await this.executor!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n await this.backfillMissingObjectIndexFields();\n await this.executor!.exec(`\n UPDATE quints\n SET object_kind = 'text'\n WHERE object_kind = 'shortText'\n `);\n }\n\n private async addColumnIfMissing(name: string, definition: string): Promise<void> {\n const columns = new Set(\n this.sqlite!.prepare<{ name: string }>('PRAGMA table_info(quints)').all().map(row => row.name),\n );\n if (!columns.has(name)) {\n await this.executor!.exec(`ALTER TABLE quints ADD COLUMN ${name} ${definition}`);\n }\n }\n\n private async createTypedObjectIndexes(): Promise<void> {\n await this.executor!.exec(`\n CREATE INDEX IF NOT EXISTS idx_quints_graph ON quints (graph);\n CREATE INDEX IF NOT EXISTS idx_quints_subject ON quints (subject);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate ON quints (predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_object_key ON quints (object_kind, object_key);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_key ON quints (predicate, object_kind, object_key);\n CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_digest ON quints (predicate, object_kind, object_digest);\n CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_key\n ON quints (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL;\n CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest\n ON quints (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL;\n CREATE INDEX IF NOT EXISTS idx_quints_gsp ON quints (graph, subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_sp ON quints (subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_quints_gp ON quints (graph, predicate);\n `);\n }\n\n private async backfillMissingObjectIndexFields(): Promise<void> {\n const rows = await this.executor!.query<{\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n }>(`\n SELECT graph, subject, predicate, object\n FROM quints\n WHERE object_kind IS NULL\n OR (object_key IS NULL AND object_digest IS NULL)\n `);\n\n for (const row of rows) {\n const objectIndex = this.objectIndexForSerialized(row.predicate, row.object);\n await this.executor!.execute(`\n UPDATE quints\n SET object_kind = ?,\n object_key = ?,\n object_text = ?,\n object_digest = ?\n WHERE graph = ?\n AND subject = ?\n AND predicate = ?\n AND object = ?\n `, [\n objectIndex.objectKind,\n objectIndex.objectKey,\n objectIndex.objectText,\n this.objectDigestForIndex(row.object, objectIndex),\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n ]);\n }\n }\n\n private sqliteSpaceStats(): Pick<StoreStats, 'databaseBytes' | 'tableBytes' | 'indexBytes' | 'spaceObjects'> {\n const spaceObjects = this.collectSpaceObjects();\n const databaseBytes = this.estimateDatabaseBytes();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n databaseBytes: databaseBytes || accountedBytes,\n tableBytes: sumStoreSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumStoreSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n private estimateDatabaseBytes(): number {\n try {\n const pageCount = this.sqlite!.prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n const pageSize = this.sqlite!.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 0;\n return pageCount * pageSize;\n } catch {\n return 0;\n }\n }\n\n private collectSpaceObjects(): StoreSpaceObject[] {\n try {\n const schemaRows = this.sqlite!.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n `).all();\n const rows = this.sqlite!.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = quintSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n try {\n const schemaRows = this.sqlite!.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n `).all();\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): StoreSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: quintSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.sqlite!.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n private objectIndexForSerialized(predicate: string, object: string): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectDigestForIndex(serialized: string, fields: ObjectIndexFields): string | null {\n return fields.objectKey === null ? digestObject(serialized) : null;\n }\n\n protected override resolveObjectDataTypeForPattern(pattern: QuintPattern): PredicateObjectDataType | undefined {\n const predicate = this.extractExactPredicate(pattern.predicate);\n if (predicate) {\n return getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n }\n if (pattern.object && typeof pattern.object === 'object' && 'termType' in pattern.object) {\n return this.objectIndexForTerm(predicate, pattern.object as Term).objectKind;\n }\n return undefined;\n }\n\n protected override buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n const predicate = this.extractExactPredicate(pattern.predicate);\n\n this.addTermConditions(conditions, params, 'graph', pattern.graph, false);\n this.addTermConditions(conditions, params, 'subject', pattern.subject, false);\n this.addTermConditions(conditions, params, 'predicate', pattern.predicate, false);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n return {\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n params,\n };\n }\n\n protected override addTermConditions(\n conditions: string[],\n params: any[],\n column: string,\n match: TermMatch | undefined,\n isObject: boolean,\n ): void {\n this.addConditions(conditions, params, column, match, isObject);\n }\n\n protected override addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern,\n ): void {\n this.addTermConditions(conditions, params, `${alias}.graph`, pattern.graph, false);\n this.addTermConditions(conditions, params, `${alias}.subject`, pattern.subject, false);\n this.addTermConditions(conditions, params, `${alias}.predicate`, pattern.predicate, false);\n if (pattern.object) {\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\n }\n }\n\n private addObjectConditions(\n conditions: string[],\n params: any[],\n alias: string | undefined,\n match: TermMatch,\n predicate: string | undefined,\n ): void {\n const column = (name: string) => alias ? `${alias}.${name}` : name;\n\n if (typeof match === 'object' && 'termType' in match) {\n this.addObjectExactCondition(conditions, params, column, match, predicate);\n return;\n }\n\n const ops = match as TermOperators;\n if (ops.$eq !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$eq, '$eq', predicate);\n }\n if (ops.$ne !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$ne, '$ne', predicate);\n }\n if (ops.$gt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>', ops.$gt, '$gt', predicate);\n }\n if (ops.$gte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>=', ops.$gte, '$gte', predicate);\n }\n if (ops.$lt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<', ops.$lt, '$lt', predicate);\n }\n if (ops.$lte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<=', ops.$lte, '$lte', predicate);\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const predicates = ops.$in.map((value) => this.objectPredicateForOperatorValue(value, '$in', predicate));\n const placeholders = predicates.map((item) => {\n if (item.fields.objectKey === null) {\n return `(${column('object_kind')} = ? AND ${column('object_digest')} = ? AND ${column('object')} = ?)`;\n }\n return `(${column('object_kind')} = ? AND ${column('object_key')} = ?)`;\n }).join(' OR ');\n conditions.push(`(${placeholders})`);\n for (const item of predicates) {\n if (item.fields.objectKey === null) {\n params.push(item.fields.objectKind, this.objectDigestForIndex(item.serialized, item.fields), item.serialized);\n } else {\n params.push(item.fields.objectKind, item.fields.objectKey);\n }\n }\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n for (const value of ops.$notIn) {\n conditions.push(`${column('object')} != ?`);\n params.push(this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n }\n }\n if (ops.$startsWith !== undefined) {\n const fields = this.objectFieldsForPrefix(ops.$startsWith, predicate);\n this.assertComparableObject(fields, '$startsWith');\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} >= ? AND ${column('object_key')} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$endsWith}`, predicate);\n }\n if (ops.$contains !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$contains}%`, predicate);\n }\n if (ops.$regex !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'GLOB', ops.$regex.replace(/\\.\\*/g, '*').replace(/\\./g, '?'), predicate);\n }\n if (ops.$strStartsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'startsWith', ops.$strStartsWith);\n }\n if (ops.$strEndsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'endsWith', ops.$strEndsWith);\n }\n if (ops.$strContains !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'contains', ops.$strContains);\n }\n if (ops.$strRegex !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'regex', ops.$strRegex);\n }\n if (ops.$language !== undefined) {\n this.addObjectLanguageCondition(conditions, params, column, ops.$language);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column('object')} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column('object')} IS NOT NULL`);\n }\n }\n\n private addObjectExactCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n object: Term,\n predicate: string | undefined,\n ): void {\n const serialized = serializeObject(object);\n const fields = this.objectIndexForTerm(this.predicateForIndex(predicate), object);\n this.addObjectExactSerializedCondition(conditions, params, column, serialized, fields);\n }\n\n private addObjectExactValueCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n value: OperatorValue,\n op: '$eq' | '$ne',\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n if (op === '$ne') {\n conditions.push(`${column('object')} != ?`);\n params.push(item.serialized);\n return;\n }\n this.addObjectExactSerializedCondition(conditions, params, column, item.serialized, item.fields);\n }\n\n private addObjectExactSerializedCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n serialized: string,\n fields: ObjectIndexFields,\n ): void {\n if (fields.objectKey !== null) {\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} = ?`);\n params.push(fields.objectKey);\n return;\n }\n\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_digest')} = ?`);\n params.push(this.objectDigestForIndex(serialized, fields));\n conditions.push(`${column('object')} = ?`);\n params.push(serialized);\n }\n\n private addObjectComparableCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: OperatorValue,\n op: string,\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n this.assertComparableObject(item.fields, op);\n conditions.push(`${column('object_kind')} = ?`);\n params.push(item.fields.objectKind);\n conditions.push(`${column('object_key')} ${sqlOperator} ?`);\n params.push(item.serialized);\n }\n\n private addObjectTextCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: string,\n predicate: string | undefined,\n ): void {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (!['text', 'longText', 'literal'].includes(declaredType)) {\n throw new Error(`Object text search is not supported for ${declaredType}`);\n }\n conditions.push(`${column('object_kind')} = ?`);\n params.push(declaredType);\n }\n conditions.push(`${column('object_text')} ${sqlOperator} ?`);\n params.push(value);\n }\n\n private addObjectLexicalStringCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n op: 'startsWith' | 'endsWith' | 'contains' | 'regex',\n value: string,\n ): void {\n const lexical = this.objectLexicalSql(column);\n if (op === 'startsWith') {\n conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);\n params.push(value, value + '\\uffff');\n return;\n }\n if (op === 'endsWith') {\n conditions.push(`${lexical} LIKE ?`);\n params.push(`%${value}`);\n return;\n }\n if (op === 'contains') {\n conditions.push(`${lexical} LIKE ?`);\n params.push(`%${value}%`);\n return;\n }\n conditions.push(`${lexical} GLOB ?`);\n params.push(value.replace(/\\.\\*/g, '*').replace(/\\./g, '?'));\n }\n\n private addObjectLanguageCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n lang: string,\n ): void {\n const languageLiteralKinds = `${column('object_kind')} IN ('text', 'longText', 'literal')`;\n if (lang === '*') {\n conditions.push(`(${languageLiteralKinds} AND lower(${column('object')}) LIKE ?)`);\n params.push('%\"@%');\n return;\n }\n conditions.push(`(${languageLiteralKinds} AND (lower(${column('object')}) LIKE ? OR lower(${column('object')}) LIKE ?))`);\n params.push(`%\"@${lang.toLowerCase()}`, `%\"@${lang.toLowerCase()}-%`);\n }\n\n private objectLexicalSql(column: (name: string) => string): string {\n const object = column('object');\n return `CASE\n WHEN ${column('object_text')} IS NOT NULL THEN ${column('object_text')}\n WHEN ${column('object_kind')} IN ('iri', 'blankNode') THEN ${column('object_key')}\n WHEN ${column('object_kind')} = 'numeric' THEN substr(${object}, length('N${SEP}') + instr(substr(${object}, length('N${SEP}') + 1), '${SEP}') + instr(substr(${object}, length('N${SEP}') + instr(substr(${object}, length('N${SEP}') + 1), '${SEP}') + 1), '${SEP}') + 1)\n WHEN ${column('object_kind')} = 'dateTime' THEN substr(${object}, length('D${SEP}') + instr(substr(${object}, length('D${SEP}') + 1), '${SEP}') + 1)\n ELSE NULL\n END`;\n }\n\n private objectPredicateForOperatorValue(\n value: OperatorValue,\n op: string,\n predicate: string | undefined,\n ): { serialized: string; fields: ObjectIndexFields } {\n const serialized = this.serializeOpValue(value, true, op);\n return {\n serialized,\n fields: this.objectFieldsForOperatorValue(value, serialized, op, predicate),\n };\n }\n\n private objectFieldsForOperatorValue(\n value: OperatorValue,\n serialized: string,\n op: string,\n predicate: string | undefined,\n ): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: String(value) };\n }\n return { objectKind: declaredType, objectKey: serialized, objectText: null };\n }\n\n if (typeof value === 'number' && !['$eq', '$ne', '$in', '$notIn'].includes(op)) {\n return { objectKind: 'numeric', objectKey: serialized, objectText: null };\n }\n\n if (!['$eq', '$ne', '$in', '$notIn'].includes(op)) {\n if (isSerializedNumericLiteral(serialized)) {\n return { objectKind: 'numeric', objectKey: serialized, objectText: null };\n }\n if (isSerializedDateTimeLiteral(serialized)) {\n return { objectKind: 'dateTime', objectKey: serialized, objectText: null };\n }\n }\n\n return this.objectIndexForSerialized(predicate ?? '', serialized);\n }\n\n private objectIndexForTerm(predicate: string | undefined, object: Term): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForPrefix(prefix: string, predicate: string | undefined): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: prefix };\n }\n return { objectKind: declaredType, objectKey: prefix, objectText: null };\n }\n if (isSerializedNumericLiteral(prefix)) {\n return { objectKind: 'numeric', objectKey: prefix, objectText: null };\n }\n if (isSerializedDateTimeLiteral(prefix)) {\n return { objectKind: 'dateTime', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('\"')) {\n return { objectKind: 'text', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('_:')) {\n return { objectKind: 'blankNode', objectKey: prefix, objectText: null };\n }\n return { objectKind: 'iri', objectKey: prefix, objectText: null };\n }\n\n private assertComparableObject(fields: ObjectIndexFields, op: string): void {\n if (fields.objectKey !== null && fields.objectKind !== 'longText') {\n return;\n }\n throw new Error(`Object ${op} is not supported for ${fields.objectKind}; declare/use a comparable data type instead of longText`);\n }\n\n private predicateForIndex(predicate: string | undefined): string | undefined {\n return predicate;\n }\n\n override async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToRow(quint);\n const statement = this.writeStatementForRow(row);\n await this.executor!.execute(statement.sql, statement.params);\n }\n\n override async multiPut(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => this.writeStatementForRow(this.quintToRow(quint)));\n await this.executor!.executeInTransaction(statements);\n }\n\n private writeStatementForRow(row: SqliteIndexedQuintRow): { sql: string; params?: any[] } {\n const params = [\n row.objectKind,\n row.objectKey,\n row.objectText,\n row.objectDigest,\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n row.vector,\n ];\n\n if (row.objectKey !== null) {\n return {\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL\n DO UPDATE SET\n vector = excluded.vector,\n object_text = excluded.object_text,\n object_digest = excluded.object_digest\n WHERE quints.object = excluded.object\n `,\n params,\n };\n }\n\n return {\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n vector = excluded.vector,\n object_text = excluded.object_text\n WHERE quints.object = excluded.object\n `,\n params,\n };\n }\n\n protected override quintToRow(quint: Quint): SqliteIndexedQuintRow {\n const predicate = termToId(quint.predicate as any);\n const object = serializeObject(quint.object as any);\n const objectIndex = this.objectIndexForTerm(predicate, quint.object as Term);\n return {\n graph: termToId(quint.graph as any),\n subject: termToId(quint.subject as any),\n predicate,\n object,\n vector: quint.vector ? JSON.stringify(quint.vector) : null,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(object, objectIndex),\n };\n }\n\n protected override rowToQuint(row: QuintRow): Quint {\n const quad = rowToQuad(row);\n const quint: Quint = quad as Quint;\n if (row.vector) {\n quint.vector = parseVector(row.vector);\n }\n return quint;\n }\n}\n\nfunction sumStoreSpaceObjects(objects: StoreSpaceObject[], kind: StoreSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nfunction quintSpaceObjectKind(name: string, schemaType?: string, tableName?: string): StoreSpaceObject['kind'] {\n if (schemaType === 'table' && name === 'quints') {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('idx_') || tableName === 'quints')) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n"]}
|
|
@@ -93,85 +93,57 @@
|
|
|
93
93
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_sqlite",
|
|
94
94
|
"memberFieldName": "sqlite"
|
|
95
95
|
},
|
|
96
|
-
{
|
|
97
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_db",
|
|
98
|
-
"memberFieldName": "db"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_options",
|
|
102
|
-
"memberFieldName": "options"
|
|
103
|
-
},
|
|
104
96
|
{
|
|
105
97
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_sqliteRuntime",
|
|
106
98
|
"memberFieldName": "sqliteRuntime"
|
|
107
99
|
},
|
|
108
100
|
{
|
|
109
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
110
|
-
"memberFieldName": "
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_open",
|
|
114
|
-
"memberFieldName": "open"
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_close",
|
|
118
|
-
"memberFieldName": "close"
|
|
101
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_path",
|
|
102
|
+
"memberFieldName": "path"
|
|
119
103
|
},
|
|
120
104
|
{
|
|
121
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
122
|
-
"memberFieldName": "
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_match",
|
|
126
|
-
"memberFieldName": "match"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_getByGraphPrefix",
|
|
130
|
-
"memberFieldName": "getByGraphPrefix"
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_count",
|
|
134
|
-
"memberFieldName": "count"
|
|
105
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_constructor",
|
|
106
|
+
"memberFieldName": "constructor"
|
|
135
107
|
},
|
|
136
108
|
{
|
|
137
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
138
|
-
"memberFieldName": "
|
|
109
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_createExecutor",
|
|
110
|
+
"memberFieldName": "createExecutor"
|
|
139
111
|
},
|
|
140
112
|
{
|
|
141
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
142
|
-
"memberFieldName": "
|
|
113
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_closeExecutor",
|
|
114
|
+
"memberFieldName": "closeExecutor"
|
|
143
115
|
},
|
|
144
116
|
{
|
|
145
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
146
|
-
"memberFieldName": "
|
|
117
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_openOnce",
|
|
118
|
+
"memberFieldName": "openOnce"
|
|
147
119
|
},
|
|
148
120
|
{
|
|
149
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
150
|
-
"memberFieldName": "
|
|
121
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_buildSelectQuery",
|
|
122
|
+
"memberFieldName": "buildSelectQuery"
|
|
151
123
|
},
|
|
152
124
|
{
|
|
153
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
154
|
-
"memberFieldName": "
|
|
125
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_stats",
|
|
126
|
+
"memberFieldName": "stats"
|
|
155
127
|
},
|
|
156
128
|
{
|
|
157
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
158
|
-
"memberFieldName": "
|
|
129
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_clear",
|
|
130
|
+
"memberFieldName": "clear"
|
|
159
131
|
},
|
|
160
132
|
{
|
|
161
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
162
|
-
"memberFieldName": "
|
|
133
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_ensureTypedObjectSchema",
|
|
134
|
+
"memberFieldName": "ensureTypedObjectSchema"
|
|
163
135
|
},
|
|
164
136
|
{
|
|
165
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
166
|
-
"memberFieldName": "
|
|
137
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addColumnIfMissing",
|
|
138
|
+
"memberFieldName": "addColumnIfMissing"
|
|
167
139
|
},
|
|
168
140
|
{
|
|
169
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
170
|
-
"memberFieldName": "
|
|
141
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_createTypedObjectIndexes",
|
|
142
|
+
"memberFieldName": "createTypedObjectIndexes"
|
|
171
143
|
},
|
|
172
144
|
{
|
|
173
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
174
|
-
"memberFieldName": "
|
|
145
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_backfillMissingObjectIndexFields",
|
|
146
|
+
"memberFieldName": "backfillMissingObjectIndexFields"
|
|
175
147
|
},
|
|
176
148
|
{
|
|
177
149
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_sqliteSpaceStats",
|
|
@@ -194,28 +166,16 @@
|
|
|
194
166
|
"memberFieldName": "estimatePageSize"
|
|
195
167
|
},
|
|
196
168
|
{
|
|
197
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
198
|
-
"memberFieldName": "
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_ensureOpen",
|
|
202
|
-
"memberFieldName": "ensureOpen"
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_ensureTypedObjectSchema",
|
|
206
|
-
"memberFieldName": "ensureTypedObjectSchema"
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addColumnIfMissing",
|
|
210
|
-
"memberFieldName": "addColumnIfMissing"
|
|
169
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectIndexForSerialized",
|
|
170
|
+
"memberFieldName": "objectIndexForSerialized"
|
|
211
171
|
},
|
|
212
172
|
{
|
|
213
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
214
|
-
"memberFieldName": "
|
|
173
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectDigestForIndex",
|
|
174
|
+
"memberFieldName": "objectDigestForIndex"
|
|
215
175
|
},
|
|
216
176
|
{
|
|
217
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
218
|
-
"memberFieldName": "
|
|
177
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_resolveObjectDataTypeForPattern",
|
|
178
|
+
"memberFieldName": "resolveObjectDataTypeForPattern"
|
|
219
179
|
},
|
|
220
180
|
{
|
|
221
181
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_buildWhereClause",
|
|
@@ -226,8 +186,8 @@
|
|
|
226
186
|
"memberFieldName": "addTermConditions"
|
|
227
187
|
},
|
|
228
188
|
{
|
|
229
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
230
|
-
"memberFieldName": "
|
|
189
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addAliasedConditions",
|
|
190
|
+
"memberFieldName": "addAliasedConditions"
|
|
231
191
|
},
|
|
232
192
|
{
|
|
233
193
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectConditions",
|
|
@@ -277,33 +237,25 @@
|
|
|
277
237
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectIndexForTerm",
|
|
278
238
|
"memberFieldName": "objectIndexForTerm"
|
|
279
239
|
},
|
|
280
|
-
{
|
|
281
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectIndexForSerialized",
|
|
282
|
-
"memberFieldName": "objectIndexForSerialized"
|
|
283
|
-
},
|
|
284
240
|
{
|
|
285
241
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectFieldsForPrefix",
|
|
286
242
|
"memberFieldName": "objectFieldsForPrefix"
|
|
287
243
|
},
|
|
288
|
-
{
|
|
289
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectDigestForIndex",
|
|
290
|
-
"memberFieldName": "objectDigestForIndex"
|
|
291
|
-
},
|
|
292
244
|
{
|
|
293
245
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_assertComparableObject",
|
|
294
246
|
"memberFieldName": "assertComparableObject"
|
|
295
247
|
},
|
|
296
248
|
{
|
|
297
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
298
|
-
"memberFieldName": "
|
|
249
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_predicateForIndex",
|
|
250
|
+
"memberFieldName": "predicateForIndex"
|
|
299
251
|
},
|
|
300
252
|
{
|
|
301
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
302
|
-
"memberFieldName": "
|
|
253
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_put",
|
|
254
|
+
"memberFieldName": "put"
|
|
303
255
|
},
|
|
304
256
|
{
|
|
305
|
-
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#
|
|
306
|
-
"memberFieldName": "
|
|
257
|
+
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_multiPut",
|
|
258
|
+
"memberFieldName": "multiPut"
|
|
307
259
|
},
|
|
308
260
|
{
|
|
309
261
|
"@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_writeStatementForRow",
|