@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":"PgQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/PgQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PgQuintStore - PostgreSQL implementation of QuintStore\n *\n * 支持两种连接方式:\n * - PGLite: 嵌入式 PostgreSQL,用于测试\n * - pg (node-postgres): 真正的 PostgreSQL 连接,用于生产\n *\n * PostgreSQL 不支持 TEXT 字段中的 \\0 (null) 字符,\n * 所以我们需要对序列化的字符串进行转换。\n */\n\nimport { PGlite } from '@electric-sql/pglite';\nimport { createHash } from 'node:crypto';\nimport type { Term } from '@rdfjs/types';\n\nimport { BaseQuintStore, type SqlExecutor } from './BaseQuintStore';\nimport {\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n serializeObject,\n termToId,\n} from './serialization';\nimport type { AttributeMap, CompoundPattern, QuintStoreOptions, Quint, QuintPattern, QueryOptions, TermMatch } from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\n\n/**\n * PostgreSQL 连接配置\n */\nexport interface PgQuintStoreOptions extends QuintStoreOptions {\n /**\n * 连接方式:\n * - 'pglite': 使用 PGLite 嵌入式数据库(测试用)\n * - 'pg': 使用 node-postgres 连接真正的 PostgreSQL(生产用)\n */\n driver?: 'pglite' | 'pg';\n\n /** PGLite 数据目录,仅当 driver='pglite' 时使用 */\n dataDir?: string;\n\n /** PostgreSQL 连接字符串,仅当 driver='pg' 时使用 */\n connectionString?: string;\n\n /** PostgreSQL 连接配置,仅当 driver='pg' 时使用 */\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n\n /**\n * 共享的 pg Pool 实例(避免多个组件创建独立连接池导致死锁)\n * 如果提供,将忽略其他连接配置\n */\n pool?: any;\n}\n\n/**\n * PostgreSQL 兼容的分隔符\n * 使用 Unicode 控制字符 U+001F (Unit Separator) 代替 \\0\n */\nconst PG_SEP = '\\u001f';\n\n/**\n * 将使用 \\0 分隔符的字符串转换为使用 PG_SEP 的字符串\n */\nfunction toPgSafe(str: string): string {\n return str.replace(/\\u0000/g, PG_SEP);\n}\n\n/**\n * 将使用 PG_SEP 分隔符的字符串转换回使用 \\0 的字符串\n */\nfunction fromPgSafe(str: string): string {\n return str.replace(new RegExp(PG_SEP, 'g'), '\\u0000');\n}\n\ninterface PgQuintRow {\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(toPgSafe(value)).digest('hex');\n}\n\n/**\n * PGLite 执行器\n */\nclass PgliteExecutor implements SqlExecutor {\n constructor(private db: PGlite) {}\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query<T>(pgSql, safeParams);\n return result.rows.map(row => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query(pgSql, safeParams);\n return result.affectedRows ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n await this.db.query('BEGIN');\n try {\n for (const { sql, params } of statements) {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n await this.db.query(pgSql, safeParams);\n }\n await this.db.query('COMMIT');\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.db.exec(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * node-postgres 执行器(需要安装 pg 包)\n */\nclass PgExecutor implements SqlExecutor {\n private pool: any; // pg.Pool\n\n constructor(pool: any) {\n this.pool = pool;\n }\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Query: ${pgSql.slice(0, 60)}...`);\n const start = Date.now();\n const result = await this.pool.query(pgSql, safeParams);\n console.log(`[PgExecutor] Query done in ${Date.now() - start}ms, ${result.rows.length} rows`);\n return result.rows.map((row: any) => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.pool.query(pgSql, safeParams);\n return result.rowCount ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n console.log(`[PgExecutor] Getting connection from pool...`);\n const start = Date.now();\n const client = await this.pool.connect();\n console.log(`[PgExecutor] Got connection in ${Date.now() - start}ms`);\n try {\n console.log(`[PgExecutor] BEGIN transaction`);\n await client.query('BEGIN');\n for (let i = 0; i < statements.length; i++) {\n const { sql, params } = statements[i];\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Executing statement ${i + 1}/${statements.length}: ${pgSql.slice(0, 60)}...`);\n await client.query(pgSql, safeParams);\n }\n console.log(`[PgExecutor] COMMIT transaction`);\n await client.query('COMMIT');\n } catch (error) {\n console.error(`[PgExecutor] Error, rolling back:`, error);\n await client.query('ROLLBACK');\n throw error;\n } finally {\n console.log(`[PgExecutor] Releasing connection`);\n client.release();\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.pool.query(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * PostgreSQL QuintStore 实现\n */\nexport class PgQuintStore extends BaseQuintStore {\n private pglite: PGlite | null = null;\n private pgPool: any = null; // pg.Pool\n private pgOptions: PgQuintStoreOptions;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n } | null = null;\n\n constructor(options: PgQuintStoreOptions) {\n super(options);\n this.pgOptions = {\n driver: 'pglite', // 默认使用 PGLite\n ...options,\n };\n }\n\n protected async createExecutor(): Promise<SqlExecutor> {\n if (this.pgOptions.driver === 'pg') {\n // 使用共享的连接池(如果提供),避免死锁\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n return new PgExecutor(this.pgPool);\n }\n\n // 使用共享连接池管理器,避免多个组件创建独立连接池\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n return new PgExecutor(this.pgPool);\n } else {\n // 使用 PGLite\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n return new PgliteExecutor(this.pglite);\n }\n }\n\n protected async closeExecutor(): Promise<void> {\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n }\n\n /**\n * 重写 open 方法,处理 PostgreSQL 特定的语法\n */\n override async open(): Promise<void> {\n if (this.opened) {\n return;\n }\n\n this.opening ??= this.openOnce().finally(() => {\n this.opening = null;\n });\n\n await this.opening;\n }\n\n protected override async openOnce(): Promise<void> {\n const executor = await this.createExecutor();\n this.executor = executor;\n\n try {\n // PostgreSQL 建表语法\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\n const indexes = [\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 ON quints (graph, subject, predicate, object_kind, object_key) WHERE object_key IS NOT NULL',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest ON quints (graph, subject, predicate, object_kind, object_digest) 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 for (const indexSql of indexes) {\n await executor.exec(indexSql);\n }\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 /**\n * 重写 put 方法,避免长文本对象进入 PostgreSQL btree 唯一键\n */\n override async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToPgRow(quint);\n\n await this.executor!.executeInTransaction(this.writeStatementsForRow(row));\n }\n\n /**\n * 重写 multiPut 方法,使用同一事务保持批量写入幂等\n */\n override async multiPut(quintList: Quint[]): Promise<void> {\n console.log(`[PgQuintStore.multiPut] Starting: ${quintList.length} quints`);\n this.ensureOpen();\n\n if (quintList.length === 0) {\n console.log(`[PgQuintStore.multiPut] Empty list, skipping`);\n return;\n }\n\n const statements = quintList.flatMap(quint => {\n const row = this.quintToPgRow(quint);\n return this.writeStatementsForRow(row);\n });\n\n console.log(`[PgQuintStore.multiPut] Executing ${statements.length} statements in transaction`);\n const start = Date.now();\n await this.executor!.executeInTransaction(statements);\n console.log(`[PgQuintStore.multiPut] Completed in ${Date.now() - start}ms`);\n }\n\n override async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToPgRow(quint);\n return {\n sql: `\n DELETE FROM quints\n WHERE graph = $1\n AND subject = $2\n AND predicate = $3\n AND object = $4\n `,\n params: [row.graph, row.subject, row.predicate, row.object],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term,\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n\n let sql = `\n SELECT subject, predicate, object\n FROM quints\n WHERE subject IN (${subjectPlaceholders})\n AND predicate IN (${predicatePlaceholders})\n `;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n const graphValue = termToId(graph);\n sql += ` AND graph = ?`;\n params.push(graphValue);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n const result: AttributeMap = new Map();\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 if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n predicateMap.get(row.predicate)!.push(this.deserializeObject(row.object));\n }\n\n return result;\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.addPgCondition(conditions, params, 'graph', pattern.graph);\n this.addPgCondition(conditions, params, 'subject', pattern.subject);\n this.addPgCondition(conditions, params, 'predicate', pattern.predicate);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n private addPgCondition(\n conditions: string[],\n params: any[],\n column: 'graph' | 'subject' | 'predicate',\n match: TermMatch | undefined,\n ): void {\n if (!match) return;\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match as Term);\n conditions.push(`${column} = ?`);\n params.push(value);\n return;\n }\n\n const ops = match as any;\n if (ops.$eq !== undefined) {\n const value = this.serializeOpValue(ops.$eq, false, '$eq');\n conditions.push(`${column} = ?`);\n params.push(String(value));\n return;\n }\n\n super.addConditions(conditions, params, column, match, false);\n }\n\n protected override addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: any,\n ): void {\n this.addAliasedPgCondition(conditions, params, alias, 'graph', pattern.graph, false);\n this.addAliasedPgCondition(conditions, params, alias, 'subject', pattern.subject, false);\n this.addAliasedPgCondition(conditions, params, alias, 'predicate', pattern.predicate, false);\n this.addAliasedObjectConditions(conditions, params, alias, pattern);\n }\n\n protected override buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n\n let selectClause = `q0.${joinOn} 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 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 let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\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 this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n\n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected override buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n\n let sql = `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 sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n override async count(pattern: QuintPattern): Promise<number> {\n const count = await super.count(pattern);\n return Number(count);\n }\n\n override async stats(): Promise<import('./types').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 };\n }\n\n private async ensureTypedObjectSchema(): Promise<void> {\n const statements = [\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_kind TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_key TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_text TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_digest TEXT',\n ];\n\n for (const statement of statements) {\n await this.executor!.exec(statement);\n }\n\n // The old Postgres schema indexed complete RDF terms. Long literals can\n // exceed the btree tuple size and surface as 500s while creating containers.\n const obsoleteIndexes = [\n 'idx_spog',\n 'idx_ogsp',\n 'idx_gspo',\n 'idx_sopg',\n 'idx_pogs',\n 'idx_gpos',\n 'idx_pg_spog',\n 'idx_pg_ogsp',\n 'idx_pg_gspo',\n 'idx_pg_sopg',\n 'idx_pg_pogs',\n 'idx_pg_gpos',\n 'idx_pg_graph_prefix',\n 'idx_quints_predicate_object_text',\n 'idx_quints_quint_hash',\n 'idx_quints_graph_hash',\n 'idx_quints_subject_hash',\n 'idx_quints_predicate_hash',\n 'idx_quints_object_hash',\n 'idx_quints_gsp_hash',\n 'idx_quints_sp_hash',\n 'idx_quints_gp_hash',\n ];\n\n for (const indexName of obsoleteIndexes) {\n await this.executor!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n await this.executor!.exec('ALTER TABLE quints DROP CONSTRAINT IF EXISTS quints_pkey');\n\n const obsoleteColumns = [\n 'quint_hash',\n 'graph_hash',\n 'subject_hash',\n 'predicate_hash',\n 'object_hash',\n ];\n\n for (const columnName of obsoleteColumns) {\n await this.executor!.exec(`ALTER TABLE quints DROP COLUMN IF EXISTS ${columnName}`);\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 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 = $1,\n object_key = $2,\n object_text = $3,\n object_digest = $4\n WHERE graph = $5\n AND subject = $6\n AND predicate = $7\n AND object = $8\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 quintToPgRow(quint: Quint): PgQuintRow {\n const row = this.quintToRow(quint);\n const objectIndex = this.objectIndexForTerm(row.predicate, quint.object as Term);\n return {\n ...row,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(row.object, objectIndex),\n };\n }\n\n private objectIndexForTerm(predicate: string, 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, 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 private writeStatementsForRow(row: PgQuintRow): { 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 ($1, $2, $3, $4, $5, $6, $7, $8, $9)\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 ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n object = CASE WHEN quints.object = EXCLUDED.object THEN EXCLUDED.object ELSE NULL END,\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text\n `,\n params,\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 any;\n\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: Array<{ serialized: string; fields: ObjectIndexFields }> = ops.$in.map((value: any) => 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 const values = ops.$notIn.map((value: any) => this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n for (const value of values) {\n conditions.push(`${column('object')} != ?`);\n params.push(value);\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 const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n this.addObjectTextCondition(conditions, params, column, 'LIKE', pattern, 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.objectFieldsForTerm(object, predicate);\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: any,\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: any,\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\n if (op === 'startsWith') {\n conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);\n params.push(value, value + '\\uffff');\n return;\n }\n\n if (op === 'endsWith') {\n conditions.push(`RIGHT(${lexical}, LENGTH(?)) = ?`);\n params.push(value, value);\n return;\n }\n\n if (op === 'contains') {\n conditions.push(`POSITION(? IN ${lexical}) > 0`);\n params.push(value);\n return;\n }\n\n conditions.push(`${lexical} ~ ?`);\n params.push(value);\n }\n\n private objectLexicalSql(column: (name: string) => string): string {\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 split_part(${column('object')}, '${PG_SEP}', 4)\n WHEN ${column('object_kind')} = 'dateTime' THEN split_part(${column('object')}, '${PG_SEP}', 3)\n ELSE NULL\n END`;\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\n if (lang === '*') {\n conditions.push(`(${languageLiteralKinds} AND ${column('object')} ~ ?)`);\n params.push('\"@[A-Za-z]+(-[A-Za-z0-9]+)*$');\n return;\n }\n\n const suffix = `\"@${lang.toLowerCase()}`;\n conditions.push(`(${languageLiteralKinds} AND (RIGHT(LOWER(${column('object')}), LENGTH(?)) = ? OR LOWER(${column('object')}) LIKE ?))`);\n params.push(suffix, suffix, `%\"@${lang.toLowerCase()}-%`);\n }\n\n private objectPredicateForOperatorValue(\n value: any,\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.objectFieldsForSerialized(serialized, predicate),\n };\n }\n\n private objectFieldsForTerm(object: Term, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForSerialized(serialized: string, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(serialized, {\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\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 addAliasedObjectConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern,\n ): void {\n if (!pattern.object) return;\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\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 any;\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.objectFieldsForTerm(pattern.object as Term, predicate).objectKind;\n }\n return undefined;\n }\n\n private addAliasedPgCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (!match) return;\n\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match);\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n if (match.$eq !== undefined) {\n const value = this.serializeOpValue(match.$eq, false, '$eq');\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n this.addFallbackAliasedCondition(conditions, params, alias, column, match, isObject);\n }\n\n private addFallbackAliasedCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n if (match.$gt !== undefined) {\n conditions.push(`${alias}.${column} > ?`);\n params.push(this.serializeOpValue(match.$gt, false, '$gt'));\n }\n if (match.$gte !== undefined) {\n conditions.push(`${alias}.${column} >= ?`);\n params.push(this.serializeOpValue(match.$gte, false, '$gte'));\n }\n if (match.$lt !== undefined) {\n conditions.push(`${alias}.${column} < ?`);\n params.push(this.serializeOpValue(match.$lt, false, '$lt'));\n }\n if (match.$lte !== undefined) {\n conditions.push(`${alias}.${column} <= ?`);\n params.push(this.serializeOpValue(match.$lte, false, '$lte'));\n }\n if (match.$in !== undefined && match.$in.length > 0) {\n const placeholders = match.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${column} IN (${placeholders})`);\n params.push(...match.$in.map((value: any) => this.serializeOpValue(value, false, '$in')));\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PgQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/PgQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PgQuintStore - PostgreSQL implementation of QuintStore\n *\n * 支持两种连接方式:\n * - PGLite: 嵌入式 PostgreSQL,用于测试\n * - pg (node-postgres): 真正的 PostgreSQL 连接,用于生产\n *\n * PostgreSQL 不支持 TEXT 字段中的 \\0 (null) 字符,\n * 所以我们需要对序列化的字符串进行转换。\n */\n\nimport { PGlite } from '@electric-sql/pglite';\nimport { createHash } from 'node:crypto';\nimport type { Term } from '@rdfjs/types';\n\nimport { BaseQuintStore, type SqlExecutor } from './BaseQuintStore';\nimport {\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n serializeObject,\n termToId,\n} from './serialization';\nimport type { AttributeMap, CompoundPattern, QuintStoreOptions, Quint, QuintPattern, QueryOptions, TermMatch } from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\n\n/**\n * PostgreSQL 连接配置\n */\nexport interface PgQuintStoreOptions extends QuintStoreOptions {\n /**\n * 连接方式:\n * - 'pglite': 使用 PGLite 嵌入式数据库(测试用)\n * - 'pg': 使用 node-postgres 连接真正的 PostgreSQL(生产用)\n */\n driver?: 'pglite' | 'pg';\n\n /** PGLite 数据目录,仅当 driver='pglite' 时使用 */\n dataDir?: string;\n\n /** PostgreSQL 连接字符串,仅当 driver='pg' 时使用 */\n connectionString?: string;\n\n /** PostgreSQL 连接配置,仅当 driver='pg' 时使用 */\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n\n /**\n * 共享的 pg Pool 实例(避免多个组件创建独立连接池导致死锁)\n * 如果提供,将忽略其他连接配置\n */\n pool?: any;\n}\n\n/**\n * PostgreSQL 兼容的分隔符\n * 使用 Unicode 控制字符 U+001F (Unit Separator) 代替 \\0\n */\nconst PG_SEP = '\\u001f';\n\n/**\n * 将使用 \\0 分隔符的字符串转换为使用 PG_SEP 的字符串\n */\nfunction toPgSafe(str: string): string {\n return str.replace(/\\u0000/g, PG_SEP);\n}\n\n/**\n * 将使用 PG_SEP 分隔符的字符串转换回使用 \\0 的字符串\n */\nfunction fromPgSafe(str: string): string {\n return str.replace(new RegExp(PG_SEP, 'g'), '\\u0000');\n}\n\ninterface PgQuintRow {\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(toPgSafe(value)).digest('hex');\n}\n\n/**\n * PGLite 执行器\n */\nclass PgliteExecutor implements SqlExecutor {\n constructor(private db: PGlite) {}\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query<T>(pgSql, safeParams);\n return result.rows.map(row => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query(pgSql, safeParams);\n return result.affectedRows ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n await this.db.query('BEGIN');\n try {\n for (const { sql, params } of statements) {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n await this.db.query(pgSql, safeParams);\n }\n await this.db.query('COMMIT');\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.db.exec(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * node-postgres 执行器(需要安装 pg 包)\n */\nclass PgExecutor implements SqlExecutor {\n private pool: any; // pg.Pool\n\n constructor(pool: any) {\n this.pool = pool;\n }\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Query: ${pgSql.slice(0, 60)}...`);\n const start = Date.now();\n const result = await this.pool.query(pgSql, safeParams);\n console.log(`[PgExecutor] Query done in ${Date.now() - start}ms, ${result.rows.length} rows`);\n return result.rows.map((row: any) => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.pool.query(pgSql, safeParams);\n return result.rowCount ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n console.log(`[PgExecutor] Getting connection from pool...`);\n const start = Date.now();\n const client = await this.pool.connect();\n console.log(`[PgExecutor] Got connection in ${Date.now() - start}ms`);\n try {\n console.log(`[PgExecutor] BEGIN transaction`);\n await client.query('BEGIN');\n for (let i = 0; i < statements.length; i++) {\n const { sql, params } = statements[i];\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Executing statement ${i + 1}/${statements.length}: ${pgSql.slice(0, 60)}...`);\n await client.query(pgSql, safeParams);\n }\n console.log(`[PgExecutor] COMMIT transaction`);\n await client.query('COMMIT');\n } catch (error) {\n console.error(`[PgExecutor] Error, rolling back:`, error);\n await client.query('ROLLBACK');\n throw error;\n } finally {\n console.log(`[PgExecutor] Releasing connection`);\n client.release();\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.pool.query(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * PostgreSQL QuintStore 实现\n */\nexport class PgQuintStore extends BaseQuintStore {\n private pglite: PGlite | null = null;\n private pgPool: any = null; // pg.Pool\n private pgOptions: PgQuintStoreOptions;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n } | null = null;\n\n constructor(options: PgQuintStoreOptions) {\n super(options);\n this.pgOptions = {\n driver: 'pglite', // 默认使用 PGLite\n ...options,\n };\n }\n\n protected async createExecutor(): Promise<SqlExecutor> {\n if (this.pgOptions.driver === 'pg') {\n // 使用共享的连接池(如果提供),避免死锁\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n return new PgExecutor(this.pgPool);\n }\n\n // 使用共享连接池管理器,避免多个组件创建独立连接池\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n return new PgExecutor(this.pgPool);\n } else {\n // 使用 PGLite\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n return new PgliteExecutor(this.pglite);\n }\n }\n\n protected async closeExecutor(): Promise<void> {\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n }\n\n /**\n * 重写 open 方法,处理 PostgreSQL 特定的语法\n */\n override async open(): Promise<void> {\n if (this.opened) {\n return;\n }\n\n this.opening ??= this.openOnce().finally(() => {\n this.opening = null;\n });\n\n await this.opening;\n }\n\n protected override async openOnce(): Promise<void> {\n const executor = await this.createExecutor();\n this.executor = executor;\n\n try {\n // PostgreSQL 建表语法\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\n const indexes = [\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 ON quints (graph, subject, predicate, object_kind, object_key) WHERE object_key IS NOT NULL',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest ON quints (graph, subject, predicate, object_kind, object_digest) 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 for (const indexSql of indexes) {\n await executor.exec(indexSql);\n }\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 /**\n * 重写 put 方法,避免长文本对象进入 PostgreSQL btree 唯一键\n */\n override async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToPgRow(quint);\n\n await this.executor!.executeInTransaction(this.writeStatementsForRow(row));\n }\n\n /**\n * 重写 multiPut 方法,使用同一事务保持批量写入幂等\n */\n override async multiPut(quintList: Quint[]): Promise<void> {\n console.log(`[PgQuintStore.multiPut] Starting: ${quintList.length} quints`);\n this.ensureOpen();\n\n if (quintList.length === 0) {\n console.log(`[PgQuintStore.multiPut] Empty list, skipping`);\n return;\n }\n\n const statements = quintList.flatMap(quint => {\n const row = this.quintToPgRow(quint);\n return this.writeStatementsForRow(row);\n });\n\n console.log(`[PgQuintStore.multiPut] Executing ${statements.length} statements in transaction`);\n const start = Date.now();\n await this.executor!.executeInTransaction(statements);\n console.log(`[PgQuintStore.multiPut] Completed in ${Date.now() - start}ms`);\n }\n\n override async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToPgRow(quint);\n return {\n sql: `\n DELETE FROM quints\n WHERE graph = $1\n AND subject = $2\n AND predicate = $3\n AND object = $4\n `,\n params: [row.graph, row.subject, row.predicate, row.object],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term,\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n\n let sql = `\n SELECT subject, predicate, object\n FROM quints\n WHERE subject IN (${subjectPlaceholders})\n AND predicate IN (${predicatePlaceholders})\n `;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n const graphValue = termToId(graph);\n sql += ` AND graph = ?`;\n params.push(graphValue);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n const result: AttributeMap = new Map();\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 if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n predicateMap.get(row.predicate)!.push(this.deserializeObject(row.object));\n }\n\n return result;\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.addPgCondition(conditions, params, 'graph', pattern.graph);\n this.addPgCondition(conditions, params, 'subject', pattern.subject);\n this.addPgCondition(conditions, params, 'predicate', pattern.predicate);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n private addPgCondition(\n conditions: string[],\n params: any[],\n column: 'graph' | 'subject' | 'predicate',\n match: TermMatch | undefined,\n ): void {\n if (!match) return;\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match as Term);\n conditions.push(`${column} = ?`);\n params.push(value);\n return;\n }\n\n const ops = match as any;\n if (ops.$eq !== undefined) {\n const value = this.serializeOpValue(ops.$eq, false, '$eq');\n conditions.push(`${column} = ?`);\n params.push(String(value));\n return;\n }\n\n super.addConditions(conditions, params, column, match, false);\n }\n\n protected override addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: any,\n ): void {\n this.addAliasedPgCondition(conditions, params, alias, 'graph', pattern.graph, false);\n this.addAliasedPgCondition(conditions, params, alias, 'subject', pattern.subject, false);\n this.addAliasedPgCondition(conditions, params, alias, 'predicate', pattern.predicate, false);\n this.addAliasedObjectConditions(conditions, params, alias, pattern);\n }\n\n protected override buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n\n let selectClause = `q0.${joinOn} 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 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 let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\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 this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n\n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected override buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n\n let sql = `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 sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n override async count(pattern: QuintPattern): Promise<number> {\n const count = await super.count(pattern);\n return Number(count);\n }\n\n override async stats(): Promise<import('./types').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 };\n }\n\n private async ensureTypedObjectSchema(): Promise<void> {\n const statements = [\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_kind TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_key TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_text TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_digest TEXT',\n ];\n\n for (const statement of statements) {\n await this.executor!.exec(statement);\n }\n\n // The old Postgres schema indexed complete RDF terms. Long literals can\n // exceed the btree tuple size and surface as 500s while creating containers.\n const obsoleteIndexes = [\n 'idx_spog',\n 'idx_ogsp',\n 'idx_gspo',\n 'idx_sopg',\n 'idx_pogs',\n 'idx_gpos',\n 'idx_pg_spog',\n 'idx_pg_ogsp',\n 'idx_pg_gspo',\n 'idx_pg_sopg',\n 'idx_pg_pogs',\n 'idx_pg_gpos',\n 'idx_pg_graph_prefix',\n 'idx_quints_predicate_object_text',\n 'idx_quints_quint_hash',\n 'idx_quints_graph_hash',\n 'idx_quints_subject_hash',\n 'idx_quints_predicate_hash',\n 'idx_quints_object_hash',\n 'idx_quints_gsp_hash',\n 'idx_quints_sp_hash',\n 'idx_quints_gp_hash',\n ];\n\n for (const indexName of obsoleteIndexes) {\n await this.executor!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n await this.executor!.exec('ALTER TABLE quints DROP CONSTRAINT IF EXISTS quints_pkey');\n\n const obsoleteColumns = [\n 'quint_hash',\n 'graph_hash',\n 'subject_hash',\n 'predicate_hash',\n 'object_hash',\n ];\n\n for (const columnName of obsoleteColumns) {\n await this.executor!.exec(`ALTER TABLE quints DROP COLUMN IF EXISTS ${columnName}`);\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 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 = $1,\n object_key = $2,\n object_text = $3,\n object_digest = $4\n WHERE graph = $5\n AND subject = $6\n AND predicate = $7\n AND object = $8\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 quintToPgRow(quint: Quint): PgQuintRow {\n const row = this.quintToRow(quint);\n const objectIndex = this.objectIndexForTerm(row.predicate, quint.object as Term);\n return {\n ...row,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(row.object, objectIndex),\n };\n }\n\n private objectIndexForTerm(predicate: string, 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, 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 private writeStatementsForRow(row: PgQuintRow): { 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 ($1, $2, $3, $4, $5, $6, $7, $8, $9)\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 ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n object = CASE WHEN quints.object = EXCLUDED.object THEN EXCLUDED.object ELSE NULL END,\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text\n `,\n params,\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 any;\n\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: Array<{ serialized: string; fields: ObjectIndexFields }> = ops.$in.map((value: any) => 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 const values = ops.$notIn.map((value: any) => this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n for (const value of values) {\n conditions.push(`${column('object')} != ?`);\n params.push(value);\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 const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n this.addObjectTextCondition(conditions, params, column, 'LIKE', pattern, 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.objectFieldsForTerm(object, predicate);\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: any,\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: any,\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\n if (op === 'startsWith') {\n conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);\n params.push(value, value + '\\uffff');\n return;\n }\n\n if (op === 'endsWith') {\n conditions.push(`RIGHT(${lexical}, LENGTH(?)) = ?`);\n params.push(value, value);\n return;\n }\n\n if (op === 'contains') {\n conditions.push(`POSITION(? IN ${lexical}) > 0`);\n params.push(value);\n return;\n }\n\n conditions.push(`${lexical} ~ ?`);\n params.push(value);\n }\n\n private objectLexicalSql(column: (name: string) => string): string {\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 split_part(${column('object')}, '${PG_SEP}', 4)\n WHEN ${column('object_kind')} = 'dateTime' THEN split_part(${column('object')}, '${PG_SEP}', 3)\n ELSE NULL\n END`;\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\n if (lang === '*') {\n conditions.push(`(${languageLiteralKinds} AND ${column('object')} ~ ?)`);\n params.push('\"@[A-Za-z]+(-[A-Za-z0-9]+)*$');\n return;\n }\n\n const suffix = `\"@${lang.toLowerCase()}`;\n conditions.push(`(${languageLiteralKinds} AND (RIGHT(LOWER(${column('object')}), LENGTH(?)) = ? OR LOWER(${column('object')}) LIKE ?))`);\n params.push(suffix, suffix, `%\"@${lang.toLowerCase()}-%`);\n }\n\n private objectPredicateForOperatorValue(\n value: any,\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.objectFieldsForSerialized(serialized, predicate),\n };\n }\n\n private objectFieldsForTerm(object: Term, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForSerialized(serialized: string, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(serialized, {\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\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 addAliasedObjectConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern,\n ): void {\n if (!pattern.object) return;\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\n }\n\n protected override 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 any;\n if (ops.$eq !== undefined) {\n return String(this.serializeOpValue(ops.$eq, false, '$eq'));\n }\n return undefined;\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.objectFieldsForTerm(pattern.object as Term, predicate).objectKind;\n }\n return undefined;\n }\n\n private addAliasedPgCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (!match) return;\n\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match);\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n if (match.$eq !== undefined) {\n const value = this.serializeOpValue(match.$eq, false, '$eq');\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n this.addFallbackAliasedCondition(conditions, params, alias, column, match, isObject);\n }\n\n private addFallbackAliasedCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n if (match.$gt !== undefined) {\n conditions.push(`${alias}.${column} > ?`);\n params.push(this.serializeOpValue(match.$gt, false, '$gt'));\n }\n if (match.$gte !== undefined) {\n conditions.push(`${alias}.${column} >= ?`);\n params.push(this.serializeOpValue(match.$gte, false, '$gte'));\n }\n if (match.$lt !== undefined) {\n conditions.push(`${alias}.${column} < ?`);\n params.push(this.serializeOpValue(match.$lt, false, '$lt'));\n }\n if (match.$lte !== undefined) {\n conditions.push(`${alias}.${column} <= ?`);\n params.push(this.serializeOpValue(match.$lte, false, '$lte'));\n }\n if (match.$in !== undefined && match.$in.length > 0) {\n const placeholders = match.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${column} IN (${placeholders})`);\n params.push(...match.$in.map((value: any) => this.serializeOpValue(value, false, '$in')));\n }\n }\n}\n"]}
|
|
@@ -1,67 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SqliteQuintStore - SQLite implementation of QuintStore using Drizzle ORM
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
4
|
+
import { BaseQuintStore, type QuintRow, type SqlExecutor } from './BaseQuintStore';
|
|
5
|
+
import type { NewQuintRow } from './schema';
|
|
6
|
+
import type { QuintStoreOptions, StoreStats, QuintPattern, QueryOptions, Quint, TermMatch } from './types';
|
|
7
|
+
import { type PredicateObjectDataType } from './value-types';
|
|
8
|
+
interface SqliteIndexedQuintRow extends NewQuintRow {
|
|
9
|
+
graph: string;
|
|
10
|
+
subject: string;
|
|
11
|
+
predicate: string;
|
|
12
|
+
object: string;
|
|
13
|
+
vector: string | null;
|
|
14
|
+
objectKind: PredicateObjectDataType;
|
|
15
|
+
objectKey: string | null;
|
|
16
|
+
objectText: string | null;
|
|
17
|
+
objectDigest: string | null;
|
|
18
|
+
}
|
|
7
19
|
export interface SqliteQuintStoreOptions extends QuintStoreOptions {
|
|
8
20
|
/** SQLite database file path, use ':memory:' for in-memory database */
|
|
9
21
|
path: string;
|
|
10
22
|
}
|
|
11
|
-
export declare class SqliteQuintStore {
|
|
23
|
+
export declare class SqliteQuintStore extends BaseQuintStore {
|
|
12
24
|
private sqlite;
|
|
13
|
-
private db;
|
|
14
|
-
private options;
|
|
15
25
|
private readonly sqliteRuntime;
|
|
26
|
+
private readonly path;
|
|
16
27
|
constructor(options: SqliteQuintStoreOptions);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* Compound query - multiple patterns JOINed by a common field
|
|
25
|
-
* This executes a single SQL query with JOINs, letting SQLite optimize the execution plan
|
|
26
|
-
*/
|
|
27
|
-
getCompound(compound: CompoundPattern, options?: QueryOptions): Promise<CompoundResult[]>;
|
|
28
|
-
/**
|
|
29
|
-
* 批量获取多个 subject 的多个属性
|
|
30
|
-
*
|
|
31
|
-
* 用于优化 OPTIONAL 查询:避免每个 OPTIONAL 变成一次 LEFT JOIN
|
|
32
|
-
*
|
|
33
|
-
* SQL: SELECT subject, predicate, object FROM quints
|
|
34
|
-
* WHERE subject IN (...) AND predicate IN (...)
|
|
35
|
-
*/
|
|
36
|
-
getAttributes(subjects: string[], predicates: string[], graph?: Term): Promise<Map<string, Map<string, Term[]>>>;
|
|
37
|
-
/**
|
|
38
|
-
* Build SQL for compound query with JOINs
|
|
39
|
-
*/
|
|
40
|
-
private buildCompoundSQL;
|
|
41
|
-
/**
|
|
42
|
-
* Build WHERE conditions for a specific table alias
|
|
43
|
-
*/
|
|
44
|
-
private buildConditionsForAlias;
|
|
45
|
-
put(quint: Quint): Promise<void>;
|
|
46
|
-
multiPut(quintList: Quint[]): Promise<void>;
|
|
47
|
-
updateEmbedding(pattern: QuintPattern, embedding: number[]): Promise<number>;
|
|
48
|
-
del(pattern: QuintPattern): Promise<number>;
|
|
49
|
-
multiDel(quintList: Quint[]): Promise<void>;
|
|
28
|
+
protected createExecutor(): Promise<SqlExecutor>;
|
|
29
|
+
protected closeExecutor(): Promise<void>;
|
|
30
|
+
protected openOnce(): Promise<void>;
|
|
31
|
+
protected buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): {
|
|
32
|
+
sql: string;
|
|
33
|
+
params: any[];
|
|
34
|
+
};
|
|
50
35
|
stats(): Promise<StoreStats>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
private ensureTypedObjectSchema;
|
|
38
|
+
private addColumnIfMissing;
|
|
39
|
+
private createTypedObjectIndexes;
|
|
40
|
+
private backfillMissingObjectIndexFields;
|
|
51
41
|
private sqliteSpaceStats;
|
|
52
42
|
private estimateDatabaseBytes;
|
|
53
43
|
private collectSpaceObjects;
|
|
54
44
|
private estimateSpaceObjectsFromSchema;
|
|
55
45
|
private estimatePageSize;
|
|
56
|
-
|
|
57
|
-
private
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
46
|
+
private objectIndexForSerialized;
|
|
47
|
+
private objectDigestForIndex;
|
|
48
|
+
protected resolveObjectDataTypeForPattern(pattern: QuintPattern): PredicateObjectDataType | undefined;
|
|
49
|
+
protected buildWhereClause(pattern: QuintPattern): {
|
|
50
|
+
whereClause: string;
|
|
51
|
+
params: any[];
|
|
52
|
+
};
|
|
53
|
+
protected addTermConditions(conditions: string[], params: any[], column: string, match: TermMatch | undefined, isObject: boolean): void;
|
|
54
|
+
protected addAliasedConditions(conditions: string[], params: any[], alias: string, pattern: QuintPattern): void;
|
|
65
55
|
private addObjectConditions;
|
|
66
56
|
private addObjectExactCondition;
|
|
67
57
|
private addObjectExactValueCondition;
|
|
@@ -74,14 +64,13 @@ export declare class SqliteQuintStore {
|
|
|
74
64
|
private objectPredicateForOperatorValue;
|
|
75
65
|
private objectFieldsForOperatorValue;
|
|
76
66
|
private objectIndexForTerm;
|
|
77
|
-
private objectIndexForSerialized;
|
|
78
67
|
private objectFieldsForPrefix;
|
|
79
|
-
private objectDigestForIndex;
|
|
80
68
|
private assertComparableObject;
|
|
81
|
-
private extractExactPredicate;
|
|
82
|
-
private resolveObjectDataTypeForPattern;
|
|
83
69
|
private predicateForIndex;
|
|
70
|
+
put(quint: Quint): Promise<void>;
|
|
71
|
+
multiPut(quintList: Quint[]): Promise<void>;
|
|
84
72
|
private writeStatementForRow;
|
|
85
|
-
|
|
86
|
-
|
|
73
|
+
protected quintToRow(quint: Quint): SqliteIndexedQuintRow;
|
|
74
|
+
protected rowToQuint(row: QuintRow): Quint;
|
|
87
75
|
}
|
|
76
|
+
export {};
|