@undefineds.co/xpod 0.3.14 → 0.3.16

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.
Files changed (76) hide show
  1. package/config/local.json +5 -5
  2. package/config/xpod.json +24 -10
  3. package/dist/cli/commands/auth.d.ts +1 -0
  4. package/dist/cli/commands/auth.js +117 -37
  5. package/dist/cli/commands/auth.js.map +1 -1
  6. package/dist/cli/commands/login.js +16 -23
  7. package/dist/cli/commands/login.js.map +1 -1
  8. package/dist/cli/commands/logs.d.ts +2 -0
  9. package/dist/cli/commands/logs.js +20 -5
  10. package/dist/cli/commands/logs.js.map +1 -1
  11. package/dist/cli/commands/obj.d.ts +44 -0
  12. package/dist/cli/commands/obj.js +1059 -0
  13. package/dist/cli/commands/obj.js.map +1 -0
  14. package/dist/cli/commands/rdf.d.ts +14 -0
  15. package/dist/cli/commands/rdf.js +235 -0
  16. package/dist/cli/commands/rdf.js.map +1 -0
  17. package/dist/cli/commands/resource.d.ts +31 -0
  18. package/dist/cli/commands/resource.js +191 -0
  19. package/dist/cli/commands/resource.js.map +1 -0
  20. package/dist/cli/commands/secret.d.ts +36 -0
  21. package/dist/cli/commands/secret.js +285 -0
  22. package/dist/cli/commands/secret.js.map +1 -0
  23. package/dist/cli/commands/server.d.ts +11 -0
  24. package/dist/cli/commands/server.js +168 -0
  25. package/dist/cli/commands/server.js.map +1 -0
  26. package/dist/cli/commands/start.d.ts +1 -0
  27. package/dist/cli/commands/start.js +5 -0
  28. package/dist/cli/commands/start.js.map +1 -1
  29. package/dist/cli/commands/status.d.ts +1 -0
  30. package/dist/cli/commands/status.js +21 -6
  31. package/dist/cli/commands/status.js.map +1 -1
  32. package/dist/cli/commands/stop.d.ts +3 -0
  33. package/dist/cli/commands/stop.js +40 -6
  34. package/dist/cli/commands/stop.js.map +1 -1
  35. package/dist/cli/index.js +23 -8
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/cli/lib/auth-context.d.ts +24 -0
  38. package/dist/cli/lib/auth-context.js +70 -0
  39. package/dist/cli/lib/auth-context.js.map +1 -0
  40. package/dist/cli/lib/output.d.ts +23 -0
  41. package/dist/cli/lib/output.js +63 -0
  42. package/dist/cli/lib/output.js.map +1 -0
  43. package/dist/cli/lib/resource.d.ts +29 -0
  44. package/dist/cli/lib/resource.js +114 -0
  45. package/dist/cli/lib/resource.js.map +1 -0
  46. package/dist/components/context.jsonld +6 -0
  47. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +11 -10
  48. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +13 -24
  49. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
  50. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +4 -4
  51. package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +8 -4
  52. package/dist/identity/oidc/AutoDetectOidcHandler.js +10 -6
  53. package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
  54. package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +3 -3
  55. package/dist/storage/accessors/MixDataAccessor.js +3 -0
  56. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  57. package/dist/storage/quint/SqliteQuintStore.d.ts +26 -1
  58. package/dist/storage/quint/SqliteQuintStore.js +551 -318
  59. package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
  60. package/dist/storage/quint/SqliteQuintStore.jsonld +102 -2
  61. package/dist/storage/quint/schema.d.ts +76 -0
  62. package/dist/storage/quint/schema.js +13 -7
  63. package/dist/storage/quint/schema.js.map +1 -1
  64. package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +4 -1
  65. package/dist/storage/rdf/RdfLocalQueryEngine.js +77 -8
  66. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
  67. package/dist/storage/rdf/SolidRdfEngine.d.ts +5 -0
  68. package/dist/storage/rdf/SolidRdfEngine.js +31 -3
  69. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  70. package/dist/storage/rdf/SolidRdfEngine.jsonld +34 -0
  71. package/dist/storage/sparql/ComunicaQuintEngine.js +16 -3
  72. package/dist/storage/sparql/ComunicaQuintEngine.js.map +1 -1
  73. package/package.json +1 -1
  74. package/dist/cli/commands/config.d.ts +0 -42
  75. package/dist/cli/commands/config.js +0 -289
  76. package/dist/cli/commands/config.js.map +0 -1
@@ -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 { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { eq, ne, and, gte, gt, lt, lte, like, inArray, notInArray, isNull, isNotNull, sql } from 'drizzle-orm';\nimport type { SQL } from 'drizzle-orm';\nimport { wrap, AsyncIterator } from 'asynciterator';\nimport { DataFactory } from 'n3';\nimport type { Term, Quad } from '@rdfjs/types';\n\nimport { quints, type QuintRow, type NewQuintRow } from './schema';\nimport {\n quadToRow,\n rowToQuad,\n parseVector,\n termToId,\n serializeObject,\n deserializeObject,\n fpEncode,\n SEP,\n isSerializedObjectValue,\n} from './serialization';\nimport { getSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport type {\n Quint,\n QuintPattern,\n QuintStore,\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';\n\nconst SQLITE_UNBOUNDED_LIMIT = Number.MAX_SAFE_INTEGER;\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 graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT,\n PRIMARY KEY (graph, subject, predicate, object)\n );\n\n CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph);\n CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object);\n CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph);\n CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject);\n CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject);\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 conditions = this.buildConditions(pattern);\n \n let query = this.db!.select().from(quints);\n \n if (conditions.length > 0) {\n query = query.where(and(...conditions)) as any;\n }\n\n // ORDER BY 支持\n if (options?.order && options.order.length > 0) {\n // 使用 sql 模板构建 ORDER BY\n const orderCol = options.order[0]; // 目前只支持单列排序\n const direction = options.reverse ? 'DESC' : 'ASC';\n query = query.orderBy(sql.raw(`${orderCol} ${direction}`)) as any;\n }\n\n if (options?.limit !== undefined) {\n query = query.limit(options.limit) as any;\n }\n if (options?.offset !== undefined) {\n // SQLite requires LIMIT when using OFFSET\n if (options?.limit === undefined) {\n query = query.limit(SQLITE_UNBOUNDED_LIMIT) as any;\n }\n query = query.offset(options.offset) as any;\n }\n\n const rows = await query;\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 conditions = this.buildConditions(pattern);\n\n let query = this.db!.select({ count: sql<number>`count(*)` }).from(quints);\n\n if (conditions.length > 0) {\n query = query.where(and(...conditions)) as any;\n }\n\n const result = await query;\n return result[0]?.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\n /**\n * Serialize operator value for comparison\n * - Term: use serializeObject/termToId\n * - number: for exact match ($eq, $ne, $in, $notIn) use full serialization\n * for range comparison ($gt, $gte, $lt, $lte) use fpstring\n * - string: assume already serialized or use as-is\n */\n const serializeOpValue = (value: OperatorValue, isObject: boolean, filterOp: string): string | number => {\n if (typeof value === 'object' && 'termType' in value) {\n // It's a Term - use full serialization\n return isObject ? serializeObject(value as any) : termToId(value as any);\n }\n \n if (typeof value === 'number') {\n if (isObject) {\n // For exact match operations, use full serialization (includes datatype and original value)\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 // For range comparisons, use fpstring\n const fpValue = `N${SEP}${fpEncode(value)}`;\n // $gt and $lte need max suffix to compare correctly\n if (filterOp === '$gt' || filterOp === '$lte') {\n return fpValue + SEP + '\\uffff';\n }\n // $lt and $gte use prefix only\n return fpValue;\n }\n return value;\n }\n \n if (isObject) {\n if (isSerializedObjectValue(value)) {\n return value;\n }\n return `\"${value}\"`;\n }\n return value;\n };\n\n const addCondition = (\n column: string,\n match: TermMatch | undefined,\n isObject: boolean = false\n ) => {\n if (!match) return;\n\n const fullColumn = `${alias}.${column}`;\n\n if (isTerm(match)) {\n conditions.push(`${fullColumn} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n } else {\n const ops = match as TermOperators;\n\n if (ops.$eq !== undefined) {\n conditions.push(`${fullColumn} = ?`);\n params.push(serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$ne !== undefined) {\n conditions.push(`${fullColumn} != ?`);\n params.push(serializeOpValue(ops.$ne, isObject, '$ne'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${fullColumn} > ?`);\n params.push(serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${fullColumn} >= ?`);\n params.push(serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${fullColumn} < ?`);\n params.push(serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${fullColumn} <= ?`);\n params.push(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(`${fullColumn} IN (${placeholders})`);\n params.push(...ops.$in.map(v => serializeOpValue(v, isObject, '$in')));\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const placeholders = ops.$notIn.map(() => '?').join(', ');\n conditions.push(`${fullColumn} NOT IN (${placeholders})`);\n params.push(...ops.$notIn.map(v => serializeOpValue(v, isObject, '$notIn')));\n }\n if (ops.$startsWith !== undefined) {\n conditions.push(`${fullColumn} >= ?`);\n conditions.push(`${fullColumn} < ?`);\n params.push(ops.$startsWith);\n params.push(ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n conditions.push(`${fullColumn} LIKE ?`);\n params.push(`%${ops.$endsWith}`);\n }\n if (ops.$contains !== undefined) {\n conditions.push(`${fullColumn} LIKE ?`);\n params.push(`%${ops.$contains}%`);\n }\n if (isObject && ops.$strStartsWith !== undefined) {\n const lexical = this.objectLexicalSql(fullColumn);\n conditions.push(`${lexical} >= ?`);\n conditions.push(`${lexical} < ?`);\n params.push(ops.$strStartsWith);\n params.push(ops.$strStartsWith + '\\uffff');\n }\n if (isObject && ops.$strEndsWith !== undefined) {\n conditions.push(`${this.objectLexicalSql(fullColumn)} LIKE ?`);\n params.push(`%${ops.$strEndsWith}`);\n }\n if (isObject && ops.$strContains !== undefined) {\n conditions.push(`${this.objectLexicalSql(fullColumn)} LIKE ?`);\n params.push(`%${ops.$strContains}%`);\n }\n if (isObject && ops.$strRegex !== undefined) {\n conditions.push(`${this.objectLexicalSql(fullColumn)} GLOB ?`);\n params.push(ops.$strRegex.replace(/\\.\\*/g, '*').replace(/\\./g, '?'));\n }\n if (isObject && ops.$language !== undefined) {\n conditions.push(`lower(${fullColumn}) LIKE ?`);\n params.push(ops.$language === '*' ? '%\"@%' : `%\"@${ops.$language.toLowerCase()}`);\n }\n if (ops.$isNull === true) {\n conditions.push(`${fullColumn} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${fullColumn} IS NOT NULL`);\n }\n }\n };\n\n addCondition('graph', pattern.graph);\n addCondition('subject', pattern.subject);\n addCondition('predicate', pattern.predicate);\n addCondition('object', pattern.object, true);\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\n await this.db!.insert(quints)\n .values(row)\n .onConflictDoUpdate({\n target: [quints.graph, quints.subject, quints.predicate, quints.object],\n set: { vector: row.vector },\n });\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.quintToRow(q));\n\n // Use transaction for batch insert\n this.sqlite!.transaction(() => {\n for (const row of rows) {\n this.db!.insert(quints)\n .values(row)\n .onConflictDoUpdate({\n target: [quints.graph, quints.subject, quints.predicate, quints.object],\n set: { vector: row.vector },\n })\n .run();\n }\n })();\n }\n\n async updateEmbedding(pattern: QuintPattern, embedding: number[]): Promise<number> {\n this.ensureOpen();\n\n const conditions = this.buildConditions(pattern);\n const vectorJson = JSON.stringify(embedding);\n\n if (conditions.length === 0) {\n const result = await this.db!.update(quints)\n .set({ vector: vectorJson });\n return result.changes;\n }\n\n const result = await this.db!.update(quints)\n .set({ vector: vectorJson })\n .where(and(...conditions));\n\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 conditions = this.buildConditions(pattern);\n\n if (conditions.length === 0) {\n // Delete all - dangerous!\n const result = await this.db!.delete(quints);\n return result.changes;\n }\n\n const result = await this.db!.delete(quints).where(and(...conditions));\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.db!.delete(quints)\n .where(\n and(\n eq(quints.graph, g),\n eq(quints.subject, s),\n eq(quints.predicate, p),\n eq(quints.object, o),\n ),\n )\n .run();\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 buildConditions(pattern: QuintPattern): SQL[] {\n const conditions: SQL[] = [];\n\n /**\n * Serialize operator value for comparison\n * - Term: use serializeObject/termToId\n * - number: for exact match ($eq, $ne, $in, $notIn) use full serialization\n * for range comparison ($gt, $gte, $lt, $lte) use fpstring\n * - string: assume already serialized or use as-is\n */\n const 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 // For exact match operations, use full serialization (includes datatype and original value)\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 // For range comparisons, use fpstring\n const fpValue = `N${SEP}${fpEncode(value)}`;\n // $gt and $lte need max suffix\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 const addTermConditions = (\n column: typeof quints.graph | typeof quints.subject | typeof quints.predicate | typeof quints.object,\n match: TermMatch | undefined,\n isObject: boolean = false\n ) => {\n if (!match) return;\n\n if (isTerm(match)) {\n // Exact Term match\n conditions.push(eq(column, isObject ? serializeObject(match as any) : termToId(match as any)));\n } else {\n // Operator match\n const ops = match as TermOperators;\n\n if (ops.$eq !== undefined) {\n conditions.push(eq(column, serializeOpValue(ops.$eq, isObject, '$eq')));\n }\n if (ops.$ne !== undefined) {\n conditions.push(ne(column, serializeOpValue(ops.$ne, isObject, '$ne')));\n }\n if (ops.$gt !== undefined) {\n conditions.push(gt(column, serializeOpValue(ops.$gt, isObject, '$gt')));\n }\n if (ops.$gte !== undefined) {\n conditions.push(gte(column, serializeOpValue(ops.$gte, isObject, '$gte')));\n }\n if (ops.$lt !== undefined) {\n conditions.push(lt(column, serializeOpValue(ops.$lt, isObject, '$lt')));\n }\n if (ops.$lte !== undefined) {\n conditions.push(lte(column, serializeOpValue(ops.$lte, isObject, '$lte')));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const serializedValues = ops.$in.map(v => serializeOpValue(v, isObject, '$in'));\n conditions.push(inArray(column, serializedValues));\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const serializedValues = ops.$notIn.map(v => serializeOpValue(v, isObject, '$notIn'));\n conditions.push(notInArray(column, serializedValues));\n }\n if (ops.$startsWith !== undefined) {\n // Use range query for prefix matching (index-friendly)\n conditions.push(gte(column, ops.$startsWith));\n conditions.push(lt(column, ops.$startsWith + '\\uffff'));\n }\n if (ops.$endsWith !== undefined) {\n conditions.push(like(column, `%${ops.$endsWith}`));\n }\n if (ops.$contains !== undefined) {\n conditions.push(like(column, `%${ops.$contains}%`));\n }\n if (ops.$regex !== undefined) {\n // SQLite uses GLOB as regex approximation\n conditions.push(sql`${column} GLOB ${ops.$regex.replace(/\\.\\*/g, '*').replace(/\\./g, '?')}`);\n }\n if (isObject && ops.$strStartsWith !== undefined) {\n const lexical = sql.raw(this.objectLexicalSql('object'));\n conditions.push(sql`${lexical} >= ${ops.$strStartsWith}`);\n conditions.push(sql`${lexical} < ${ops.$strStartsWith + '\\uffff'}`);\n }\n if (isObject && ops.$strEndsWith !== undefined) {\n conditions.push(sql`${sql.raw(this.objectLexicalSql('object'))} LIKE ${`%${ops.$strEndsWith}`}`);\n }\n if (isObject && ops.$strContains !== undefined) {\n conditions.push(sql`${sql.raw(this.objectLexicalSql('object'))} LIKE ${`%${ops.$strContains}%`}`);\n }\n if (isObject && ops.$strRegex !== undefined) {\n conditions.push(sql`${sql.raw(this.objectLexicalSql('object'))} GLOB ${ops.$strRegex.replace(/\\.\\*/g, '*').replace(/\\./g, '?')}`);\n }\n if (isObject && ops.$language !== undefined) {\n conditions.push(\n ops.$language === '*'\n ? sql`lower(${column}) LIKE ${`%\"@%`}`\n : sql`lower(${column}) LIKE ${`%\"@${ops.$language.toLowerCase()}`}`,\n );\n }\n if (ops.$isNull === true) {\n conditions.push(isNull(column));\n }\n if (ops.$isNull === false) {\n conditions.push(isNotNull(column));\n }\n }\n };\n\n addTermConditions(quints.graph, pattern.graph);\n addTermConditions(quints.subject, pattern.subject);\n addTermConditions(quints.predicate, pattern.predicate);\n addTermConditions(quints.object, pattern.object, true);\n\n return conditions;\n }\n\n private objectLexicalSql(column: string): string {\n return `CASE\n WHEN ${column} LIKE '\"%\"@%' THEN substr(${column}, 2, instr(substr(${column}, 2), '\"') - 1)\n WHEN ${column} LIKE '\"%\"^^%' THEN substr(${column}, 2, instr(substr(${column}, 2), '\"') - 1)\n WHEN ${column} LIKE '\"%\"' THEN substr(${column}, 2, length(${column}) - 2)\n WHEN ${column} LIKE 'N${SEP}%' THEN substr(${column}, length('N${SEP}') + instr(substr(${column}, length('N${SEP}') + 1), '${SEP}') + instr(substr(${column}, length('N${SEP}') + instr(substr(${column}, length('N${SEP}') + 1), '${SEP}') + 1), '${SEP}') + 1)\n WHEN ${column} LIKE 'D${SEP}%' THEN substr(${column}, length('D${SEP}') + instr(substr(${column}, length('D${SEP}') + 1), '${SEP}') + 1)\n ELSE ${column}\n END`;\n }\n\n private quintToRow(quint: Quint): NewQuintRow {\n return {\n graph: termToId(quint.graph as any),\n subject: termToId(quint.subject as any),\n predicate: termToId(quint.predicate as any),\n object: serializeObject(quint.object as any),\n vector: quint.vector ? JSON.stringify(quint.vector) : null,\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 { 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"]}
@@ -202,13 +202,113 @@
202
202
  "memberFieldName": "ensureOpen"
203
203
  },
204
204
  {
205
- "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_buildConditions",
206
- "memberFieldName": "buildConditions"
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"
211
+ },
212
+ {
213
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_backfillMissingObjectIndexFields",
214
+ "memberFieldName": "backfillMissingObjectIndexFields"
215
+ },
216
+ {
217
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_buildSelectQuery",
218
+ "memberFieldName": "buildSelectQuery"
219
+ },
220
+ {
221
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_buildWhereClause",
222
+ "memberFieldName": "buildWhereClause"
223
+ },
224
+ {
225
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addTermConditions",
226
+ "memberFieldName": "addTermConditions"
227
+ },
228
+ {
229
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_serializeOpValue",
230
+ "memberFieldName": "serializeOpValue"
231
+ },
232
+ {
233
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectConditions",
234
+ "memberFieldName": "addObjectConditions"
235
+ },
236
+ {
237
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectExactCondition",
238
+ "memberFieldName": "addObjectExactCondition"
239
+ },
240
+ {
241
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectExactValueCondition",
242
+ "memberFieldName": "addObjectExactValueCondition"
243
+ },
244
+ {
245
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectExactSerializedCondition",
246
+ "memberFieldName": "addObjectExactSerializedCondition"
247
+ },
248
+ {
249
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectComparableCondition",
250
+ "memberFieldName": "addObjectComparableCondition"
251
+ },
252
+ {
253
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectTextCondition",
254
+ "memberFieldName": "addObjectTextCondition"
255
+ },
256
+ {
257
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectLexicalStringCondition",
258
+ "memberFieldName": "addObjectLexicalStringCondition"
259
+ },
260
+ {
261
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_addObjectLanguageCondition",
262
+ "memberFieldName": "addObjectLanguageCondition"
207
263
  },
208
264
  {
209
265
  "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectLexicalSql",
210
266
  "memberFieldName": "objectLexicalSql"
211
267
  },
268
+ {
269
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectPredicateForOperatorValue",
270
+ "memberFieldName": "objectPredicateForOperatorValue"
271
+ },
272
+ {
273
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectFieldsForOperatorValue",
274
+ "memberFieldName": "objectFieldsForOperatorValue"
275
+ },
276
+ {
277
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectIndexForTerm",
278
+ "memberFieldName": "objectIndexForTerm"
279
+ },
280
+ {
281
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectIndexForSerialized",
282
+ "memberFieldName": "objectIndexForSerialized"
283
+ },
284
+ {
285
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectFieldsForPrefix",
286
+ "memberFieldName": "objectFieldsForPrefix"
287
+ },
288
+ {
289
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_objectDigestForIndex",
290
+ "memberFieldName": "objectDigestForIndex"
291
+ },
292
+ {
293
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_assertComparableObject",
294
+ "memberFieldName": "assertComparableObject"
295
+ },
296
+ {
297
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_extractExactPredicate",
298
+ "memberFieldName": "extractExactPredicate"
299
+ },
300
+ {
301
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_resolveObjectDataTypeForPattern",
302
+ "memberFieldName": "resolveObjectDataTypeForPattern"
303
+ },
304
+ {
305
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_predicateForIndex",
306
+ "memberFieldName": "predicateForIndex"
307
+ },
308
+ {
309
+ "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_writeStatementForRow",
310
+ "memberFieldName": "writeStatementForRow"
311
+ },
212
312
  {
213
313
  "@id": "undefineds:dist/storage/quint/SqliteQuintStore.jsonld#SqliteQuintStore__member_quintToRow",
214
314
  "memberFieldName": "quintToRow"
@@ -15,6 +15,82 @@ export declare const quints: import("drizzle-orm/sqlite-core").SQLiteTableWithCo
15
15
  name: "quints";
16
16
  schema: undefined;
17
17
  columns: {
18
+ objectKind: import("drizzle-orm/sqlite-core").SQLiteColumn<{
19
+ name: "object_kind";
20
+ tableName: "quints";
21
+ dataType: "string";
22
+ columnType: "SQLiteText";
23
+ data: string;
24
+ driverParam: string;
25
+ notNull: false;
26
+ hasDefault: false;
27
+ isPrimaryKey: false;
28
+ isAutoincrement: false;
29
+ hasRuntimeDefault: false;
30
+ enumValues: [string, ...string[]];
31
+ baseColumn: never;
32
+ identity: undefined;
33
+ generated: undefined;
34
+ }, {}, {
35
+ length: number | undefined;
36
+ }>;
37
+ objectKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
38
+ name: "object_key";
39
+ tableName: "quints";
40
+ dataType: "string";
41
+ columnType: "SQLiteText";
42
+ data: string;
43
+ driverParam: string;
44
+ notNull: false;
45
+ hasDefault: false;
46
+ isPrimaryKey: false;
47
+ isAutoincrement: false;
48
+ hasRuntimeDefault: false;
49
+ enumValues: [string, ...string[]];
50
+ baseColumn: never;
51
+ identity: undefined;
52
+ generated: undefined;
53
+ }, {}, {
54
+ length: number | undefined;
55
+ }>;
56
+ objectText: import("drizzle-orm/sqlite-core").SQLiteColumn<{
57
+ name: "object_text";
58
+ tableName: "quints";
59
+ dataType: "string";
60
+ columnType: "SQLiteText";
61
+ data: string;
62
+ driverParam: string;
63
+ notNull: false;
64
+ hasDefault: false;
65
+ isPrimaryKey: false;
66
+ isAutoincrement: false;
67
+ hasRuntimeDefault: false;
68
+ enumValues: [string, ...string[]];
69
+ baseColumn: never;
70
+ identity: undefined;
71
+ generated: undefined;
72
+ }, {}, {
73
+ length: number | undefined;
74
+ }>;
75
+ objectDigest: import("drizzle-orm/sqlite-core").SQLiteColumn<{
76
+ name: "object_digest";
77
+ tableName: "quints";
78
+ dataType: "string";
79
+ columnType: "SQLiteText";
80
+ data: string;
81
+ driverParam: string;
82
+ notNull: false;
83
+ hasDefault: false;
84
+ isPrimaryKey: false;
85
+ isAutoincrement: false;
86
+ hasRuntimeDefault: false;
87
+ enumValues: [string, ...string[]];
88
+ baseColumn: never;
89
+ identity: undefined;
90
+ generated: undefined;
91
+ }, {}, {
92
+ length: number | undefined;
93
+ }>;
18
94
  graph: import("drizzle-orm/sqlite-core").SQLiteColumn<{
19
95
  name: "graph";
20
96
  tableName: "quints";
@@ -16,18 +16,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.quints = void 0;
17
17
  const sqlite_core_1 = require("drizzle-orm/sqlite-core");
18
18
  exports.quints = (0, sqlite_core_1.sqliteTable)('quints', {
19
+ objectKind: (0, sqlite_core_1.text)('object_kind'),
20
+ objectKey: (0, sqlite_core_1.text)('object_key'),
21
+ objectText: (0, sqlite_core_1.text)('object_text'),
22
+ objectDigest: (0, sqlite_core_1.text)('object_digest'),
19
23
  graph: (0, sqlite_core_1.text)('graph').notNull(),
20
24
  subject: (0, sqlite_core_1.text)('subject').notNull(),
21
25
  predicate: (0, sqlite_core_1.text)('predicate').notNull(),
22
26
  object: (0, sqlite_core_1.text)('object').notNull(),
23
27
  vector: (0, sqlite_core_1.text)('vector'), // JSON serialized float array, will switch to vector extension later
24
28
  }, (table) => ({
25
- // 6 indexes aligned with quadstore
26
- idx_spog: (0, sqlite_core_1.index)('idx_spog').on(table.subject, table.predicate, table.object, table.graph),
27
- idx_ogsp: (0, sqlite_core_1.index)('idx_ogsp').on(table.object, table.graph, table.subject, table.predicate),
28
- idx_gspo: (0, sqlite_core_1.index)('idx_gspo').on(table.graph, table.subject, table.predicate, table.object),
29
- idx_sopg: (0, sqlite_core_1.index)('idx_sopg').on(table.subject, table.object, table.predicate, table.graph),
30
- idx_pogs: (0, sqlite_core_1.index)('idx_pogs').on(table.predicate, table.object, table.graph, table.subject),
31
- idx_gpos: (0, sqlite_core_1.index)('idx_gpos').on(table.graph, table.predicate, table.object, table.subject),
29
+ idx_graph: (0, sqlite_core_1.index)('idx_quints_graph').on(table.graph),
30
+ idx_subject: (0, sqlite_core_1.index)('idx_quints_subject').on(table.subject),
31
+ idx_predicate: (0, sqlite_core_1.index)('idx_quints_predicate').on(table.predicate),
32
+ idx_object_key: (0, sqlite_core_1.index)('idx_quints_object_key').on(table.objectKind, table.objectKey),
33
+ idx_predicate_object_key: (0, sqlite_core_1.index)('idx_quints_predicate_object_key').on(table.predicate, table.objectKind, table.objectKey),
34
+ idx_predicate_object_digest: (0, sqlite_core_1.index)('idx_quints_predicate_object_digest').on(table.predicate, table.objectKind, table.objectDigest),
35
+ idx_gsp: (0, sqlite_core_1.index)('idx_quints_gsp').on(table.graph, table.subject, table.predicate),
36
+ idx_sp: (0, sqlite_core_1.index)('idx_quints_sp').on(table.subject, table.predicate),
37
+ idx_gp: (0, sqlite_core_1.index)('idx_quints_gp').on(table.graph, table.predicate),
32
38
  }));
33
39
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/quint/schema.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,yDAAmE;AAEtD,QAAA,MAAM,GAAG,IAAA,yBAAW,EAAC,QAAQ,EAAE;IAC1C,KAAK,EAAE,IAAA,kBAAI,EAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IAC9B,OAAO,EAAE,IAAA,kBAAI,EAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,SAAS,EAAE,IAAA,kBAAI,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,IAAA,kBAAI,EAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,MAAM,EAAE,IAAA,kBAAI,EAAC,QAAQ,CAAC,EAAE,qEAAqE;CAC9F,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;IACzF,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzF,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IACzF,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IACzF,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;IACzF,QAAQ,EAAE,IAAA,mBAAK,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;CAC1F,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Drizzle schema for QuintStore\n * \n * Quint = G, S, P, O, V (Graph, Subject, Predicate, Object, Vector)\n * \n * 6 indexes aligned with quadstore:\n * - SPOG: subject, predicate, object, graph\n * - OGSP: object, graph, subject, predicate\n * - GSPO: graph, subject, predicate, object\n * - SOPG: subject, object, predicate, graph\n * - POGS: predicate, object, graph, subject\n * - GPOS: graph, predicate, object, subject\n */\n\nimport { sqliteTable, text, index } from 'drizzle-orm/sqlite-core';\n\nexport const quints = sqliteTable('quints', {\n graph: text('graph').notNull(),\n subject: text('subject').notNull(),\n predicate: text('predicate').notNull(),\n object: text('object').notNull(),\n vector: text('vector'), // JSON serialized float array, will switch to vector extension later\n}, (table) => ({\n // 6 indexes aligned with quadstore\n idx_spog: index('idx_spog').on(table.subject, table.predicate, table.object, table.graph),\n idx_ogsp: index('idx_ogsp').on(table.object, table.graph, table.subject, table.predicate),\n idx_gspo: index('idx_gspo').on(table.graph, table.subject, table.predicate, table.object),\n idx_sopg: index('idx_sopg').on(table.subject, table.object, table.predicate, table.graph),\n idx_pogs: index('idx_pogs').on(table.predicate, table.object, table.graph, table.subject),\n idx_gpos: index('idx_gpos').on(table.graph, table.predicate, table.object, table.subject),\n}));\n\nexport type QuintRow = typeof quints.$inferSelect;\nexport type NewQuintRow = typeof quints.$inferInsert;\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/quint/schema.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,yDAAmE;AAEtD,QAAA,MAAM,GAAG,IAAA,yBAAW,EAAC,QAAQ,EAAE;IAC1C,UAAU,EAAE,IAAA,kBAAI,EAAC,aAAa,CAAC;IAC/B,SAAS,EAAE,IAAA,kBAAI,EAAC,YAAY,CAAC;IAC7B,UAAU,EAAE,IAAA,kBAAI,EAAC,aAAa,CAAC;IAC/B,YAAY,EAAE,IAAA,kBAAI,EAAC,eAAe,CAAC;IACnC,KAAK,EAAE,IAAA,kBAAI,EAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IAC9B,OAAO,EAAE,IAAA,kBAAI,EAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,SAAS,EAAE,IAAA,kBAAI,EAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,IAAA,kBAAI,EAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,MAAM,EAAE,IAAA,kBAAI,EAAC,QAAQ,CAAC,EAAE,qEAAqE;CAC9F,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,IAAA,mBAAK,EAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IACpD,WAAW,EAAE,IAAA,mBAAK,EAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAC1D,aAAa,EAAE,IAAA,mBAAK,EAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IAChE,cAAc,EAAE,IAAA,mBAAK,EAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IACpF,wBAAwB,EAAE,IAAA,mBAAK,EAAC,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IACzH,2BAA2B,EAAE,IAAA,mBAAK,EAAC,oCAAoC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC;IAClI,OAAO,EAAE,IAAA,mBAAK,EAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IAChF,MAAM,EAAE,IAAA,mBAAK,EAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACjE,MAAM,EAAE,IAAA,mBAAK,EAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CAChE,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Drizzle schema for QuintStore\n * \n * Quint = G, S, P, O, V (Graph, Subject, Predicate, Object, Vector)\n * \n * 6 indexes aligned with quadstore:\n * - SPOG: subject, predicate, object, graph\n * - OGSP: object, graph, subject, predicate\n * - GSPO: graph, subject, predicate, object\n * - SOPG: subject, object, predicate, graph\n * - POGS: predicate, object, graph, subject\n * - GPOS: graph, predicate, object, subject\n */\n\nimport { sqliteTable, text, index } from 'drizzle-orm/sqlite-core';\n\nexport const quints = sqliteTable('quints', {\n objectKind: text('object_kind'),\n objectKey: text('object_key'),\n objectText: text('object_text'),\n objectDigest: text('object_digest'),\n graph: text('graph').notNull(),\n subject: text('subject').notNull(),\n predicate: text('predicate').notNull(),\n object: text('object').notNull(),\n vector: text('vector'), // JSON serialized float array, will switch to vector extension later\n}, (table) => ({\n idx_graph: index('idx_quints_graph').on(table.graph),\n idx_subject: index('idx_quints_subject').on(table.subject),\n idx_predicate: index('idx_quints_predicate').on(table.predicate),\n idx_object_key: index('idx_quints_object_key').on(table.objectKind, table.objectKey),\n idx_predicate_object_key: index('idx_quints_predicate_object_key').on(table.predicate, table.objectKind, table.objectKey),\n idx_predicate_object_digest: index('idx_quints_predicate_object_digest').on(table.predicate, table.objectKind, table.objectDigest),\n idx_gsp: index('idx_quints_gsp').on(table.graph, table.subject, table.predicate),\n idx_sp: index('idx_quints_sp').on(table.subject, table.predicate),\n idx_gp: index('idx_quints_gp').on(table.graph, table.predicate),\n}));\n\nexport type QuintRow = typeof quints.$inferSelect;\nexport type NewQuintRow = typeof quints.$inferInsert;\n"]}