proto.io 0.0.211 → 0.0.213
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/file/aliyun-oss.d.ts +3 -3
- package/dist/adapters/file/database.d.ts +2 -2
- package/dist/adapters/file/database.js +1 -1
- package/dist/adapters/file/database.js.map +1 -1
- package/dist/adapters/file/database.mjs +2 -2
- package/dist/adapters/file/database.mjs.map +1 -1
- package/dist/adapters/file/filesystem.d.ts +3 -3
- package/dist/adapters/file/google-cloud-storage.d.ts +3 -3
- package/dist/adapters/storage/progres.d.ts +8 -6
- package/dist/adapters/storage/progres.js +148 -80
- package/dist/adapters/storage/progres.js.map +1 -1
- package/dist/adapters/storage/progres.mjs +149 -81
- package/dist/adapters/storage/progres.mjs.map +1 -1
- package/dist/client.d.ts +3 -3
- package/dist/client.js +1 -1
- package/dist/client.mjs +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/dist/index.mjs.map +1 -1
- package/dist/internals/{base-BCWOHUaQ.d.ts → base-CZGalGrd.d.ts} +2 -2
- package/dist/internals/base-CZGalGrd.d.ts.map +1 -0
- package/dist/internals/{chunk-2pKgkO5-.d.ts → chunk-BsT9SYny.d.ts} +3 -3
- package/dist/internals/chunk-BsT9SYny.d.ts.map +1 -0
- package/dist/internals/{index-lTzbCO8S.d.ts → index-Boxwkqe0.d.ts} +32 -15
- package/dist/internals/index-Boxwkqe0.d.ts.map +1 -0
- package/dist/internals/{index-DPPLcZx8.mjs → index-DG9HHO_U.mjs} +2 -2
- package/dist/internals/{index-DPPLcZx8.mjs.map → index-DG9HHO_U.mjs.map} +1 -1
- package/dist/internals/{index-Btxxs0KS.js → index-DfnPpl1I.js} +16 -10
- package/dist/internals/index-DfnPpl1I.js.map +1 -0
- package/dist/internals/{index-8AdKlZUU.d.ts → index-NF-U_3zG.d.ts} +2 -2
- package/dist/internals/index-NF-U_3zG.d.ts.map +1 -0
- package/dist/internals/{index-CoeDMG5V.mjs → index-ZPbBr9Db.mjs} +16 -10
- package/dist/internals/index-ZPbBr9Db.mjs.map +1 -0
- package/dist/internals/{random-ycCeBd0S.mjs → random-CufRbivU.mjs} +121 -19
- package/dist/internals/random-CufRbivU.mjs.map +1 -0
- package/dist/internals/{random-CyU_Y2Ay.js → random-DzvxbWAc.js} +161 -58
- package/dist/internals/random-DzvxbWAc.js.map +1 -0
- package/package.json +1 -1
- package/dist/internals/base-BCWOHUaQ.d.ts.map +0 -1
- package/dist/internals/chunk-2pKgkO5-.d.ts.map +0 -1
- package/dist/internals/index-8AdKlZUU.d.ts.map +0 -1
- package/dist/internals/index-Btxxs0KS.js.map +0 -1
- package/dist/internals/index-CoeDMG5V.mjs.map +0 -1
- package/dist/internals/index-lTzbCO8S.d.ts.map +0 -1
- package/dist/internals/random-CyU_Y2Ay.js.map +0 -1
- package/dist/internals/random-ycCeBd0S.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progres.js","sources":["../../../../src/adapters/storage/sql/sql.ts","../../../../src/adapters/storage/sql/compiler.ts","../../../../src/adapters/storage/sql/storage.ts","../../../../src/adapters/storage/progres/dialect/query/utils.ts","../../../../src/adapters/storage/progres/dialect/basic.ts","../../../../src/adapters/storage/progres/driver/index.ts","../../../../src/adapters/storage/progres/dialect/encode.ts","../../../../src/adapters/storage/progres/dialect/update.ts","../../../../src/adapters/storage/progres/dialect/query/expressions.ts","../../../../src/adapters/storage/progres/dialect/populate.ts","../../../../src/adapters/storage/progres/dialect/query/selectors.ts","../../../../src/adapters/storage/progres/dialect/relation.ts","../../../../src/adapters/storage/progres/dialect/index.ts","../../../../src/adapters/storage/progres/client/base.ts","../../../../src/adapters/storage/progres/client/pool.ts","../../../../src/adapters/storage/progres/index.ts"],"sourcesContent":["//\n// sql.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SqlDialect } from './dialect';\nimport { TValueWithUndefined } from '../../../internals/types';\nimport Decimal from 'decimal.js';\n\ntype SQLLiteral = SQL | SQL[] | { literal: string | SQL[], separator?: string };\ntype SQLIdentifier = { identifier: string };\ntype SQLEscapeString = { quote: string };\ntype SQLValue = { value: TValueWithUndefined } | SQLIdentifier | SQLLiteral | SQLEscapeString;\n\nconst isSQLArray = (v: any): v is SQL[] => _.isArray(v) && _.every(v, x => x instanceof SQL);\n\nexport class SQL {\n\n strings: TemplateStringsArray;\n values: SQLValue[];\n\n constructor(templates: TemplateStringsArray, values: SQLValue[]) {\n this.strings = templates;\n this.values = values;\n }\n\n private _compile(dialect: SqlDialect, nextIdx: () => number) {\n let [query, ...strings] = this.strings;\n const values: any[] = [];\n for (const [value, str] of _.zip(this.values, strings)) {\n if (_.isNil(value)) break;\n if (value instanceof SQL) {\n const { query: _query, values: _values } = value._compile(dialect, nextIdx);\n query += _query;\n values.push(..._values);\n } else if (isSQLArray(value)) {\n const queries: string[] = [];\n for (const subquery of value) {\n const { query: _query, values: _values } = subquery._compile(dialect, nextIdx);\n queries.push(_query);\n values.push(..._values);\n }\n query += queries.join(', ');\n } else if ('quote' in value) {\n query += dialect.quote(value.quote);\n } else if ('identifier' in value) {\n query += dialect.identifier(value.identifier);\n } else if ('literal' in value) {\n if (_.isString(value.literal)) {\n query += value.literal;\n } else {\n const queries: string[] = [];\n for (const subquery of value.literal) {\n const { query: _query, values: _values } = subquery._compile(dialect, nextIdx);\n queries.push(_query);\n values.push(..._values);\n }\n query += queries.join(value.separator ?? ', ');\n }\n } else if (_.isBoolean(value.value)) {\n query += dialect.boolean(value.value);\n } else if (_.isString(value.value)) {\n query += `${dialect.placeholder(nextIdx())}::TEXT`;\n values.push(value.value);\n } else if (_.isSafeInteger(value.value)) {\n query += `${value.value}`;\n } else if (_.isNumber(value.value)) {\n query += `${dialect.placeholder(nextIdx())}::DOUBLE PRECISION`;\n values.push(value.value);\n } else if (value.value instanceof Decimal) {\n query += `${dialect.placeholder(nextIdx())}::DECIMAL`;\n values.push(value.value.toString());\n } else {\n query += dialect.placeholder(nextIdx());\n values.push(value.value);\n }\n query += str;\n }\n return { query: _.compact(query.split('\\n').filter(x => !x.match(/^\\s+$/g))).join('\\n'), values };\n }\n\n compile(dialect: SqlDialect) {\n let idx = 1;\n return this._compile(dialect, () => idx++);\n }\n}\n\nexport const sql = (templates: TemplateStringsArray, ...values: SQLValue[]) => new SQL(templates, values);\n","//\n// compiler.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { TSchema, isPointer, isPrimitive, isRelation, isShape, shapePaths } from '../../../internals/schema';\nimport { QueryCoditionalSelector, QueryExpressionSelector, QueryFieldSelector, QuerySelector } from '../../../server/query/dispatcher/parser';\nimport { DecodedBaseQuery, DecodedQuery, FindOptions, InsertOptions, DecodedSortOption, RelationOptions } from '../../../server/storage';\nimport { SQL, sql } from './sql';\nimport { generateId } from '../../../server/crypto/random';\nimport { SqlDialect } from './dialect';\nimport { resolveColumn, resolveDataType } from '../../../server/query/dispatcher/validator';\nimport { decodeUpdateOp } from '../../../internals/object';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { TValue, TValueWithUndefined } from '../../../internals/types';\n\nexport type QueryCompilerOptions = {\n className: string;\n filter?: QuerySelector;\n sort?: Record<string, 1 | -1> | DecodedSortOption[];\n includes: string[];\n matches: Record<string, DecodedBaseQuery>;\n}\n\nexport type QueryContext = {\n name: string;\n className?: string;\n includes?: Record<string, TSchema.DataType>;\n populates?: Record<string, Populate>;\n countMatches?: string[];\n}\n\nexport type Populate = Required<QueryContext> & {\n colname: string;\n type: 'pointer' | 'relation';\n foreignField?: string;\n subpaths: string[];\n filter?: QuerySelector;\n sort?: Record<string, 1 | -1> | DecodedSortOption[];\n skip?: number;\n limit?: number;\n}\n\nconst _resolveSortingName = (\n key: string,\n includes: Record<string, TSchema.DataType>,\n populates: Record<string, Populate>,\n) => {\n let resolved: string | undefined;\n let resolvedField = false;\n for (const colname of _.toPath(key)) {\n const name = resolved ? `${resolved}.${colname}` : colname;\n if (resolvedField || includes[name]) {\n resolved = name;\n resolvedField = true;\n } else if (populates[name]) {\n resolved = populates[name].name;\n includes = populates[name].includes;\n populates = populates[name].populates;\n } else if (_.some(_.keys(includes), x => _.startsWith(x, `${name}.`))) {\n resolved = name;\n } else {\n throw Error(`Invalid path: ${key}`);\n }\n }\n return resolved;\n}\n\nconst _encodeSorting = (\n includes: Record<string, TSchema.DataType>,\n populates: Record<string, Populate>,\n sort?: Record<string, 1 | -1> | DecodedSortOption[],\n) => {\n if (_.isArray(sort)) {\n return _.map(sort, x => ({\n order: x.order,\n expr: x.expr.mapKey(key => {\n const resolved = _resolveSortingName(key, includes, populates);\n if (!resolved) throw Error(`Invalid path: ${key}`);\n return resolved;\n }),\n }));\n }\n const sorting: Record<string, 1 | -1> = {};\n for (const [key, order] of _.toPairs(sort)) {\n const resolved = _resolveSortingName(key, includes, populates);\n if (!resolved) throw Error(`Invalid path: ${key}`);\n sorting[resolved] = order;\n }\n return sorting;\n}\n\nconst _defaultInsertOpts = (options: InsertOptions) => {\n const objectId = generateId(options.objectIdSize);\n return {\n _id: sql`${{ value: objectId }}`,\n ...options.className === 'User' ? {\n _rperm: sql`${{ value: [objectId] }}`,\n _wperm: sql`${{ value: [objectId] }}`,\n } : {},\n };\n}\n\ntype _SelectOptions = {\n select?: SQL,\n sort?: SQL,\n extraFilter?: SQL,\n};\n\nexport class QueryCompiler {\n\n schema: Record<string, TSchema>;\n dialect: SqlDialect;\n selectLock: boolean;\n isUpdate: boolean;\n\n extraFilter?: (className: string) => QuerySelector;\n\n idx = 0;\n\n constructor(options: {\n schema: Record<string, TSchema>;\n dialect: SqlDialect;\n selectLock: boolean;\n isUpdate: boolean;\n extraFilter?: (className: string) => QuerySelector;\n }) {\n this.schema = options.schema;\n this.dialect = options.dialect;\n this.selectLock = options.selectLock;\n this.isUpdate = options.isUpdate;\n this.extraFilter = options.extraFilter;\n }\n\n nextIdx() {\n return this.idx++;\n }\n\n private _encodeIncludes(query: {\n className: string;\n includes: string[];\n matches: Record<string, DecodedBaseQuery>;\n countMatches: string[];\n }) {\n\n const names: Record<string, TSchema.DataType> = {};\n const populates: Record<string, Populate> = {};\n const countMatches: string[] = [];\n\n for (const include of query.includes) {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(this.schema, query.className, include);\n\n names[colname] = dataType;\n\n if (isRelation(dataType) && _.includes(query.countMatches, colname)) countMatches.push(colname);\n\n if (isPointer(dataType) || isRelation(dataType)) {\n if (_.isEmpty(subpath)) throw Error(`Invalid path: ${include}`);\n const _matches = query.matches[colname];\n populates[colname] = populates[colname] ?? {\n name: `t${this.nextIdx()}`,\n className: dataType.target,\n subpaths: [],\n filter: _matches.filter,\n skip: _matches.skip,\n limit: _matches.limit,\n type: dataType.type,\n colname,\n };\n if (isRelation(dataType) && dataType.foreignField) {\n const targetType = resolveDataType(this.schema, dataType.target, dataType.foreignField);\n if (_.isNil(targetType)) throw Error(`Invalid path: ${include}`);\n if (!isPointer(targetType) && !isRelation(targetType)) throw Error(`Invalid path: ${include}`);\n populates[colname].foreignField = dataType.foreignField;\n }\n populates[colname].subpaths.push(subpath.join('.'));\n } else if (!_.isEmpty(subpath)) {\n throw Error(`Invalid path: ${include}`);\n }\n }\n\n for (const [colname, populate] of _.toPairs(populates)) {\n const _matches = query.matches[colname];\n const { includes, populates, countMatches } = this._encodeIncludes({\n className: populate.className,\n includes: populate.subpaths,\n matches: _matches.matches,\n countMatches: [\n ..._.filter(query.countMatches, x => _.startsWith(x, `${colname}.`)).map(x => x.slice(colname.length + 1)),\n ..._matches.countMatches ?? [],\n ],\n });\n populate.sort = _encodeSorting(includes, populates, _matches.sort);\n populate.includes = includes;\n populate.populates = populates;\n populate.countMatches = countMatches;\n }\n\n return { className: query.className, includes: names, populates, countMatches: _.uniq(countMatches) };\n }\n\n private _baseSelectQuery(\n query: DecodedQuery<FindOptions & RelationOptions>,\n options?: _SelectOptions | ((x: { fetchName: string; }) => _SelectOptions),\n ) {\n\n const fetchName = `_fetch_$${query.className.toLowerCase()}`;\n const context = { ...this._encodeIncludes(query), name: fetchName };\n\n const _stages = _.mapValues(context.populates, (populate) => this.dialect.encodePopulate(this, populate));\n const stages = _.fromPairs(_.flatMap(_.values(_stages), (p) => _.toPairs(p)));\n\n const baseFilter = this._encodeFilter(context, query.filter);\n const populates = this._selectPopulateMap(context);\n const joins = _.compact(_.map(populates, ({ join }) => join));\n\n const includes = {\n literal: [\n ...this._selectIncludes(fetchName, context.includes),\n ..._.flatMap(populates, ({ columns }) => columns),\n ],\n separator: ',\\n',\n };\n\n const _options = _.isFunction(options) ? options({ fetchName }) : options;\n const filter = _.compact([\n baseFilter,\n _options?.extraFilter,\n query.relatedBy && this.dialect.encodeRelation(this, context, query.relatedBy),\n ]);\n\n return {\n stages,\n fetchName,\n context,\n query: sql`\n SELECT ${_options?.select ? _options?.select : sql`*`} FROM (\n SELECT ${includes}\n FROM ${{ identifier: query.className }} AS ${{ identifier: fetchName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n ${this.selectLock ? this.isUpdate ? sql`FOR UPDATE NOWAIT` : sql`FOR SHARE NOWAIT` : sql``}\n ) AS ${{ identifier: fetchName }}\n ${!_.isEmpty(filter) ? sql`WHERE ${{ literal: _.map(filter, x => sql`(${x})`), separator: ' AND ' }}` : sql``}\n ${_options?.sort ? _options?.sort : sql``}\n ${!_.isEmpty(query.sort) ? sql`ORDER BY ${this._encodeSort(query.sort, { className: query.className, name: fetchName })}` : sql``}\n ${query.limit ? sql`LIMIT ${{ literal: `${query.limit}` }}` : sql``}\n ${query.skip ? sql`OFFSET ${{ literal: `${query.skip}` }}` : sql``}\n `,\n };\n }\n\n private _refetch(\n name: string,\n query: DecodedQuery<FindOptions>,\n ) {\n\n const _context = { ...this._encodeIncludes(query), name };\n const populates = _.mapValues(\n _context.populates, (populate) => this.dialect.encodePopulate(this, populate, { className: query.className, name })\n );\n const stages = _.fromPairs(_.flatMap(_.values(populates), (p) => _.toPairs(p)));\n\n const _populates = this._selectPopulateMap(_context);\n const _joins = _.compact(_.map(_populates, ({ join }) => join));\n\n const _includes = {\n literal: [\n ...this._selectIncludes(name, _context.includes),\n ..._.flatMap(_populates, ({ columns }) => columns),\n ], separator: ',\\n'\n };\n\n return sql`\n ${!_.isEmpty(stages) ? sql`, ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n SELECT ${_includes}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(_joins) ? { literal: _joins, separator: '\\n' } : sql``}\n `;\n }\n\n _selectQuery(\n query: DecodedQuery<FindOptions & RelationOptions>,\n options?: _SelectOptions | ((x: { fetchName: string; }) => _SelectOptions),\n ) {\n const { stages, query: _query } = this._baseSelectQuery(query, options);\n return sql`\n ${!_.isEmpty(stages) ? sql`WITH ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n ${_query}\n `;\n }\n\n private _modifyQuery(\n query: DecodedQuery<FindOptions>,\n action: (fetchName: string, context: QueryContext & { className: string; }) => SQL\n ) {\n const { stages, fetchName, query: _query, context } = this._baseSelectQuery(query);\n stages[fetchName] = _query;\n return sql`\n ${!_.isEmpty(stages) ? sql`WITH ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n ${action(fetchName, context)}\n `;\n }\n\n private _encodeUpdateAttrs(className: string, attrs: Record<string, TUpdateOp>): SQL[] {\n const updates: SQL[] = [\n sql`__v = __v + 1`,\n sql`_updated_at = NOW()`,\n ];\n for (const [path, op] of _.toPairs(attrs)) {\n const { paths: [column, ...subpath], dataType } = resolveColumn(this.schema, className, path);\n if (isShape(dataType)) {\n const [_op, value] = decodeUpdateOp(op);\n if (_op !== '$set') throw Error('Invalid update operation');\n for (const { path, type } of shapePaths(dataType)) {\n if (!isRelation(type) || _.isNil(type.foreignField)) {\n updates.push(sql`${{ identifier: `${column}.${path}` }} = ${this.dialect.updateOperation(\n [`${column}.${path}`], type, { $set: _.get(value, path) ?? null }\n )}`);\n }\n }\n } else {\n updates.push(sql`${{ identifier: column }} = ${this.dialect.updateOperation(\n [column, ...subpath], dataType, op\n )}`);\n }\n }\n return updates;\n }\n\n private _encodeObjectAttrs(className: string, attrs: Record<string, TValueWithUndefined>): Record<string, SQL> {\n const result: Record<string, SQL> = {};\n for (const [key, value] of _.toPairs(attrs)) {\n const { paths: [column, ...subpath], dataType } = resolveColumn(this.schema, className, key);\n if (!_.isEmpty(subpath)) throw Error(`Invalid insert key: ${key}`);\n if (isShape(dataType)) {\n for (const { path, type } of shapePaths(dataType)) {\n if (!isRelation(type) || _.isNil(type.foreignField)) {\n result[`${column}.${path}`] = this.dialect.encodeType(`${column}.${path}`, type, _.get(value, path) ?? null);\n }\n }\n } else {\n result[column] = this.dialect.encodeType(column, dataType, value);\n }\n }\n return result;\n }\n\n private _encodeCoditionalSelector(\n parent: QueryContext,\n filter: QueryCoditionalSelector,\n ) {\n const queries = _.compact(_.map(filter.exprs, x => this._encodeFilter(parent, x)));\n if (_.isEmpty(queries)) return;\n switch (filter.type) {\n case '$and': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' AND ' }})`;\n case '$nor': return sql`(${{ literal: _.map(queries, x => sql`NOT (${x})`), separator: ' AND ' }})`;\n case '$or': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' OR ' }})`;\n }\n }\n\n _encodeFilter(\n parent: QueryContext,\n filter: QuerySelector,\n ): SQL | undefined {\n if (filter instanceof QueryCoditionalSelector) {\n return this._encodeCoditionalSelector(parent, filter);\n }\n if (filter instanceof QueryFieldSelector) {\n return this.dialect.encodeFieldExpression(this, parent, filter.field, filter.expr);\n }\n if (filter instanceof QueryExpressionSelector) {\n return this.dialect.encodeQueryExpression(this, parent, filter.expr);\n }\n }\n\n private _selectIncludes(\n className: string,\n includes: Record<string, TSchema.DataType>,\n ): SQL[] {\n const _includes = _.pickBy(includes, v => _.isString(v) || (v.type !== 'pointer' && v.type !== 'relation'));\n return _.map(_includes, (dataType, colname) => {\n if (!_.isString(dataType) && isPrimitive(dataType) && !_.isNil(dataType.default)) {\n return sql`COALESCE(${{ identifier: className }}.${{ identifier: colname }}, ${{ value: dataType.default }}) AS ${{ identifier: colname }}`;\n }\n return sql`${{ identifier: className }}.${{ identifier: colname }}`;\n });\n }\n\n _encodeSort(\n sort: Record<string, 1 | -1> | DecodedSortOption[],\n parent: QueryContext,\n ): SQL {\n if (_.isArray(sort)) {\n return sql`${_.map(sort, ({ expr, order }) => {\n const _expr = this.dialect.encodeQueryExpression(this, parent, expr);\n if (!_expr) throw Error('Invalid expression');\n return sql`${_expr} ${{ literal: order === 1 ? 'ASC' : 'DESC' }}`;\n })}`;\n }\n return sql`${_.map(sort, (order, key) => sql`\n ${this.dialect.encodeSortKey(this, parent, key)} ${{ literal: order === 1 ? 'ASC' : 'DESC' }}\n `)}`;\n }\n\n private _selectPopulateMap(\n context: QueryContext & { className: string; },\n ) {\n return _.map(context.populates, (populate, field) => this.dialect.selectPopulate(\n this,\n context,\n populate,\n field,\n _.includes(context.countMatches, field),\n ));\n }\n\n insert(options: InsertOptions, values: Record<string, TValueWithUndefined>[]) {\n\n const _values: Record<string, SQL>[] = _.map(values, attr => ({\n ..._defaultInsertOpts(options),\n ...this._encodeObjectAttrs(options.className, attr),\n }));\n\n const keys = _.uniq(_.flatMap(_values, x => _.keys(x)));\n\n const name = `_insert_$${options.className.toLowerCase()}`;\n\n const context = { ...this._encodeIncludes(options), name };\n const populates = _.mapValues(context.populates, (populate) => this.dialect.encodePopulate(this, populate));\n const stages = _.fromPairs(_.flatMap(_.values(populates), (p) => _.toPairs(p)));\n\n const _populates = this._selectPopulateMap(context);\n const joins = _.compact(_.map(_populates, ({ join }) => join));\n\n return sql`\n WITH ${{ identifier: name }} AS (\n INSERT INTO ${{ identifier: options.className }}\n (${_.map(keys, x => sql`${{ identifier: x }}`)})\n VALUES ${_.map(_values, v => sql`(${_.map(keys, k => sql`${v[k]}`)})`)}\n RETURNING *\n )${!_.isEmpty(stages) ? sql`, ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n SELECT ${{\n literal: [\n ...this._selectIncludes(name, context.includes),\n ..._.flatMap(_populates, ({ columns }) => columns),\n ], separator: ',\\n'\n }}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n `;\n }\n\n update(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>) {\n return this._modifyQuery(\n query,\n (fetchName) => {\n const name = `_update_$${query.className.toLowerCase()}`;\n return sql`\n , ${{ identifier: name }} AS (\n UPDATE ${{ identifier: query.className }}\n SET ${this._encodeUpdateAttrs(query.className, update)}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n ${this._refetch(name, query)}\n `;\n }\n );\n }\n\n upsert(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValueWithUndefined>) {\n\n const _insert: [string, SQL][] = _.toPairs({\n ..._defaultInsertOpts(query),\n ...this._encodeObjectAttrs(query.className, setOnInsert),\n });\n\n return this._modifyQuery(\n query,\n (fetchName) => {\n const updateName = `_update_$${query.className.toLowerCase()}`;\n const insertName = `_insert_$${query.className.toLowerCase()}`;\n const upsertName = `_upsert_$${query.className.toLowerCase()}`;\n return sql`\n , ${{ identifier: updateName }} AS (\n UPDATE ${{ identifier: query.className }}\n SET ${this._encodeUpdateAttrs(query.className, update)}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n , ${{ identifier: insertName }} AS (\n INSERT INTO ${{ identifier: query.className }}\n (${_.map(_insert, x => sql`${{ identifier: x[0] }}`)})\n SELECT ${_.map(_insert, x => sql`${x[1]} AS ${{ identifier: x[0] }}`)}\n WHERE NOT EXISTS(SELECT * FROM ${{ identifier: updateName }})\n RETURNING *\n )\n , ${{ identifier: upsertName }} AS (\n SELECT * FROM ${{ identifier: updateName }}\n UNION\n SELECT * FROM ${{ identifier: insertName }}\n )\n ${this._refetch(upsertName, query)}\n `;\n }\n );\n }\n\n delete(query: DecodedQuery<FindOptions>) {\n\n return this._modifyQuery(\n query,\n (fetchName, context) => {\n const name = `_delete_$${query.className.toLowerCase()}`;\n const populates = this._selectPopulateMap({ ...context, name });\n const joins = _.compact(_.map(populates, ({ join }) => join));\n return sql`\n , ${{ identifier: name }} AS (\n DELETE FROM ${{ identifier: query.className }}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n SELECT ${{\n literal: [\n ...this._selectIncludes(name, context.includes ?? {}),\n ..._.flatMap(populates, ({ columns }) => columns),\n ], separator: ',\\n'\n }}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n `;\n }\n );\n }\n\n}","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { DecodedQuery, FindOptions, InsertOptions, TStorage, RelationOptions } from '../../../server/storage';\nimport { TransactionOptions } from '../../../internals/proto';\nimport { TSchema, isPointer, isRelation, isShape, shapePaths } from '../../../internals/schema';\nimport { SQL, sql } from './sql';\nimport { SqlDialect } from './dialect';\nimport { QueryCompiler } from './compiler';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { TValue, TValueWithoutObject, TValueWithUndefined } from '../../../internals/types';\nimport { TObject } from '../../../internals/object';\nimport { PVK } from '../../../internals/private';\nimport { TQueryRandomOptions } from '../../../internals/query';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { QuerySelector } from '../../../server/query/dispatcher/parser';\n\nexport abstract class SqlStorage implements TStorage {\n\n schema: Record<string, TSchema> = {};\n\n async prepare(schema: Record<string, TSchema>) {\n this.schema = schema;\n }\n\n async shutdown() { }\n\n classes() {\n return Object.keys(this.schema);\n }\n\n abstract selectLock(): boolean;\n\n abstract config(acl?: string[]): PromiseLike<Record<string, TValueWithoutObject>>;\n abstract configAcl(): PromiseLike<Record<string, string[]>>;\n abstract setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]): PromiseLike<void>;\n abstract lockTable(className: string | string[], update: boolean): Promise<void>;\n abstract withConnection<T>(callback: (connection: TStorage) => PromiseLike<T>): PromiseLike<T>;\n abstract isDuplicateIdError(error: any): boolean;\n abstract atomic<T>(\n callback: (connection: TStorage) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ): PromiseLike<T>;\n abstract withTransaction<T>(\n callback: (connection: TStorage) => PromiseLike<T>,\n options?: TransactionOptions,\n ): PromiseLike<T>;\n\n abstract get dialect(): SqlDialect;\n protected abstract _query(text: string, values: any[]): ReturnType<typeof asyncStream<any>>;\n\n abstract _refs(schema: Record<string, TSchema>, className: string, keys: string[], item: SQL): SQL;\n\n query(sql: SQL) {\n const { query, values } = sql.compile(this.dialect);\n return this._query(query, values);\n }\n\n abstract _explain(compiler: QueryCompiler, query: DecodedQuery<FindOptions & RelationOptions>): PromiseLike<any>\n\n private _decodeShapedObject(dataType: TSchema.ShapeType, value: any) {\n const result = {};\n for (const { path, type } of shapePaths(dataType)) {\n if (_.isString(type)) {\n const _value = this.dialect.decodeType(type, _.get(value, path));\n if (!_.isNil(_value)) _.set(result, path, _value);\n } else if (isPointer(type)) {\n const _value = _.get(value, path);\n if (_.isPlainObject(_value)) {\n const decoded = this._decodeObject(type.target, _value);\n if (decoded.objectId) _.set(result, path, decoded);\n }\n } else if (isRelation(type)) {\n const _value = _.get(value, path);\n if (_.isString(_value) && _value.match(/^\\d+$/g)) _.set(result, path, parseInt(_value));\n else if (_.isArray(_value)) _.set(result, path, _value.map(x => this._decodeObject(type.target, x)));\n } else {\n const _value = this.dialect.decodeType(type.type, _.get(value, path)) ?? type.default;\n if (!_.isNil(_value)) _.set(result, path, _value);\n }\n }\n return result;\n }\n\n protected _decodeObject(className: string, attrs: Record<string, any>): TObject {\n const fields = this.schema[className].fields;\n const obj = new TObject(className);\n const _attrs: Record<string, any> = {};\n for (const [key, value] of _.toPairs(attrs)) {\n _.set(_attrs, key, value);\n }\n for (const [key, value] of _.toPairs(_attrs)) {\n const dataType = fields[key];\n if (!dataType) continue;\n if (_.isString(dataType)) {\n obj[PVK].attributes[key] = this.dialect.decodeType(dataType, value);\n } else if (isShape(dataType)) {\n obj[PVK].attributes[key] = this._decodeShapedObject(dataType, value);\n } else if (isPointer(dataType)) {\n if (_.isPlainObject(value)) {\n const decoded = this._decodeObject(dataType.target, value);\n if (decoded.objectId) obj[PVK].attributes[key] = decoded;\n }\n } else if (isRelation(dataType)) {\n if (_.isString(value) && value.match(/^\\d+$/g)) obj[PVK].attributes[key] = parseInt(value);\n else if (_.isArray(value)) obj[PVK].attributes[key] = value.map(x => this._decodeObject(dataType.target, x));\n } else {\n obj[PVK].attributes[key] = this.dialect.decodeType(dataType.type, value) ?? dataType.default as any;\n }\n }\n return obj;\n }\n\n private _makeCompiler(\n isUpdate: boolean,\n extraFilter?: (className: string) => QuerySelector,\n ) {\n return new QueryCompiler({\n schema: this.schema,\n dialect: this.dialect,\n selectLock: this.selectLock(),\n isUpdate,\n extraFilter,\n });\n }\n\n async explain(query: DecodedQuery<FindOptions & RelationOptions>) {\n const compiler = this._makeCompiler(false, query.extraFilter);\n return this._explain(compiler, query);\n }\n\n async count(query: DecodedQuery<FindOptions & RelationOptions>) {\n const compiler = this._makeCompiler(false, query.extraFilter);\n const [{ count: _count }] = await this.query(compiler._selectQuery(query, {\n select: sql`COUNT(*) AS count`,\n }));\n const count = parseInt(_count);\n return _.isFinite(count) ? count : 0;\n }\n\n find(query: DecodedQuery<FindOptions & RelationOptions>) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery(query);\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object);\n }\n })();\n }\n\n random(query: DecodedQuery<FindOptions & RelationOptions>, opts?: TQueryRandomOptions) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery({ ...query, sort: {} }, {\n sort: sql`ORDER BY ${self.dialect.random(opts ?? {})}`,\n });\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object);\n }\n })();\n }\n\n refs(object: TObject, classNames: string[], roles?: string[]) {\n const self = this;\n const query = sql`\n SELECT *\n FROM (${this._refs(\n _.pick(this.schema, classNames), object.className, TObject.defaultKeys,\n sql`${{ value: `${object.className}$${object.objectId}` }}`,\n )}) AS \"$\"\n ${_.isNil(roles) ? sql`` : sql`WHERE ${{ identifier: '$' }}.${{ identifier: '_rperm' }} && ${{ value: roles }}`}\n `;\n return (async function* () {\n const objects = self.query(query);\n for await (const { _class, ...object } of objects) {\n yield self._decodeObject(_class, object);\n }\n })();\n }\n\n nonrefs(query: DecodedQuery<FindOptions>) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery(query, ({ fetchName }) => ({\n extraFilter: sql`\n NOT EXISTS (${this._refs(\n this.schema, query.className, ['_id'],\n sql`(${{ quote: query.className + '$' }} || ${{ identifier: fetchName }}.${{ identifier: '_id' }})`,\n )})\n `\n }));\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object);\n }\n })();\n }\n\n async insert(options: InsertOptions, values: Record<string, TValueWithUndefined>[]) {\n const compiler = this._makeCompiler(true);\n const result = await this.query(compiler.insert(options, values));\n return _.map(result, x => this._decodeObject(options.className, x));\n }\n\n async update(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const updated = await this.query(compiler.update(query, update));\n return _.map(updated, x => this._decodeObject(query.className, x));\n }\n\n async upsert(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValueWithUndefined>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const upserted = await this.query(compiler.upsert(query, update, setOnInsert));\n return _.map(upserted, x => this._decodeObject(query.className, x));\n }\n\n async delete(query: DecodedQuery<FindOptions>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const deleted = await this.query(compiler.delete(query));\n return _.map(deleted, x => this._decodeObject(query.className, x));\n }\n}\n","//\n// utils.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { sql } from '../../../sql';\nimport { Populate, QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { TSchema, _isTypeof, isPointer, isRelation, isVector } from '../../../../../internals/schema';\nimport { QueryValidator, resolveColumn } from '../../../../../server/query/dispatcher/validator';\n\nconst _fetchElement = (\n parent: QueryContext,\n colname: string,\n subpath: string[],\n dataType?: TSchema.DataType,\n) => {\n const element = sql`${{ identifier: parent.name }}.${{ identifier: parent.name.startsWith('_doller_expr_$') ? '$' : colname }}`;\n if (!parent.className) {\n if (colname !== '$') {\n return {\n element: sql`jsonb_extract_path(${element}, ${_.map([colname, ...subpath], x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)})`,\n json: true,\n };\n } else if (!_.isEmpty(subpath)) {\n return {\n element: sql`jsonb_extract_path(${element}, ${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)})`,\n json: true,\n };\n }\n } else if (!_.isEmpty(subpath)) {\n const _subpath = sql`${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)}`;\n if (dataType && _isTypeof(dataType, ['array', 'string[]', 'relation'])) {\n return {\n element: sql`jsonb_extract_path(to_jsonb(${element}), ${_subpath})`,\n json: true,\n };\n } else {\n return {\n element: sql`jsonb_extract_path(${element}, ${_subpath})`,\n json: true,\n };\n }\n }\n if (parent.name.startsWith('_doller_expr_$') && colname !== '$') {\n return {\n element: sql`jsonb_extract_path(${element}, ${{ quote: colname.startsWith('$') ? `$${colname}` : colname }})`,\n json: true,\n };\n }\n return { element, json: false };\n};\n\nconst resolvePaths = (\n compiler: QueryCompiler,\n className: string,\n paths: string[],\n): { dataType: TSchema.DataType; colname: string; subpath: string[]; } => {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(compiler.schema, className, paths.join('.'));\n if (!_.isEmpty(subpath) && isVector(dataType)) {\n if (subpath.length !== 1) throw Error(`Invalid key: ${paths.join('.')}`);\n const idx = parseInt(subpath[0]);\n if (_.isSafeInteger(idx) && idx >= 0 && idx < dataType.dimension) {\n return { dataType: 'number', colname: `${colname}[${idx}]`, subpath: [] };\n } else {\n throw Error(`Invalid key: ${paths.join('.')}`);\n }\n }\n if (!_.isEmpty(subpath) && isPointer(dataType)) {\n const resolved = resolvePaths(compiler, dataType.target, subpath);\n return { ...resolved, colname: `${colname}.${resolved.colname}` };\n }\n const digit = _.first(subpath);\n if (!_.isEmpty(subpath) && isRelation(dataType) && digit?.match(QueryValidator.patterns.digits)) {\n const resolved = resolvePaths(compiler, dataType.target, _.slice(subpath, 1));\n return { dataType, colname, subpath: [digit, resolved.colname, ...resolved.subpath] };\n }\n return { dataType, colname, subpath };\n}\n\nconst _resolvePopulate = (path: string[], populates?: Record<string, Populate>): Populate | undefined => {\n let [colname, ...subpath] = path;\n while (populates && !_.isEmpty(subpath)) {\n const populate = populates[colname];\n if (populate) return _resolvePopulate(subpath, populate.populates);\n const [key, ...remain] = subpath;\n colname = `${colname}.${key}`;\n subpath = remain;\n }\n return populates?.[colname];\n}\n\nexport const fetchElement = (\n compiler: QueryCompiler,\n parent: QueryContext,\n field: string,\n) => {\n if (parent.className) {\n const { dataType, colname, subpath } = resolvePaths(compiler, parent.className, _.toPath(field));\n const { element, json } = _fetchElement(parent, colname, subpath, dataType);\n if (isPointer(dataType)) return { element: sql`${{ identifier: parent.name }}.${{ identifier: `${colname}._id` }}`, dataType };\n const populate = isRelation(dataType) && _resolvePopulate(_.toPath(colname), parent.populates);\n if (!populate) return { element, dataType: json ? null : dataType };\n return {\n element,\n dataType: json ? null : dataType,\n relation: {\n colname,\n target: dataType.target,\n populate,\n },\n };\n }\n if (field === '$') {\n const mapping = {\n 'number': '_doller_num_expr_$',\n 'string': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (parent.name.startsWith(value)) {\n return {\n element: sql`${{ identifier: parent.name }}.${{ identifier: '$' }}`,\n dataType: key as TSchema.DataType,\n relation: null,\n };\n }\n }\n }\n const [colname, ...subpath] = _.toPath(field);\n const { element } = _fetchElement(parent, colname, subpath);\n return { element, dataType: null, relation: null };\n};\n","//\n// basic.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { escapeIdentifier, escapeLiteral } from 'pg/lib/utils';\nimport { SQL, sql } from '../../sql/sql';\nimport { QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { fetchElement } from './query/utils';\n\nexport const nullSafeEqual = () => sql`IS NOT DISTINCT FROM`;\nexport const nullSafeNotEqual = () => sql`IS DISTINCT FROM`;\n\nexport const quote = (str: string) => escapeLiteral(str);\nexport const identifier = (name: string) => escapeIdentifier(name);\nexport const placeholder = (idx: number) => `$${idx}`;\nexport const boolean = (value: boolean) => value ? 'true' : 'false';\n\nexport const encodeSortKey = (\n compiler: QueryCompiler,\n parent: QueryContext,\n key: string,\n): SQL => {\n const { element } = fetchElement(compiler, parent, key);\n return element;\n};\n\nexport const random = (opts: { weight?: string; }): SQL => {\n return opts.weight ? sql`-ln(random()) / ${{ identifier: opts.weight }}` : sql`random()`;\n};\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Pool, PoolConfig, PoolClient, types } from 'pg';\nimport QueryStream from 'pg-query-stream';\nimport { asyncStream, Awaitable, IteratorPool } from '@o2ter/utils-js';\nimport Decimal from 'decimal.js';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValueWithoutObject } from '../../../../internals/types';\nimport { quote } from '../dialect/basic';\nimport { PROTO_EVENT } from '../../../../internals/const';\n\nconst typeParser = (oid: number, format?: any) => {\n format = format ?? 'text';\n if (format === 'text') {\n switch (oid) {\n case types.builtins.MONEY:\n return (value: string) => new Decimal(value);\n }\n }\n return types.getTypeParser(oid, format);\n};\n\nexport class PostgresClientDriver {\n\n db: Pool | PoolClient;\n\n constructor(db: Pool | PoolClient) {\n this.db = db;\n }\n\n query(text: string, values: any[] = [], batchSize?: number) {\n const db = this.db;\n return asyncStream(async function* () {\n const client = db instanceof Pool ? await db.connect() : db;\n const stream = new QueryStream(text, values, { batchSize });\n yield* IteratorPool(Number.MAX_SAFE_INTEGER, async function* () {\n client.query(stream);\n try {\n yield* stream;\n } finally {\n stream.destroy();\n if (db instanceof Pool) client.release();\n }\n });\n });\n }\n\n async version() {\n const [{ version }] = await this.query('SELECT version()');\n return version as string;\n }\n\n async databases() {\n return _.compact(_.map(\n await this.query('SELECT datname FROM pg_catalog.pg_database'),\n x => x.datname as string\n ));\n }\n\n async tables() {\n return _.compact(_.map(\n await this.query(`\n SELECT tablename FROM pg_catalog.pg_tables\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.tablename as string\n ));\n }\n\n async views() {\n return _.compact(_.map(\n await this.query(`\n SELECT viewname FROM pg_catalog.pg_views\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.viewname as string\n ));\n }\n\n async materializedViews() {\n return _.compact(_.map(\n await this.query(`\n SELECT matviewname FROM pg_catalog.pg_matviews\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.matviewname as string\n ));\n }\n\n async columns(table: string, namespace?: string) {\n const columns = await this.query(`\n SELECT\n a.attname AS column_name,\n format_type(a.atttypid, a.atttypmod) AS data_type,\n a.attnum ,\n a.attnotnull\n FROM\n pg_namespace n,\n pg_class t,\n pg_attribute a\n WHERE\n a.attnum > 0\n AND n.oid = t.relnamespace\n AND a.attrelid = t.oid\n AND NOT a.attisdropped\n AND t.relname = '${table}'\n ${namespace ? `AND n.nspname = '${namespace}'` : ''}\n `);\n return _.map(columns, ({ column_name, data_type, attnotnull }) => ({\n name: column_name as string,\n type: data_type as string,\n required: !!attnotnull,\n }));\n }\n\n async indices(table: string, namespace?: string) {\n const indices = await this.query(`\n SELECT\n n.nspname AS schema_name,\n t.relname AS table_name,\n i.relname AS index_name,\n ix.indisprimary AS is_primary,\n ix.indisunique AS is_unique,\n a.attname AS column_name,\n k.indseq AS seq\n FROM\n pg_namespace n,\n pg_class t,\n pg_class i,\n pg_index ix,\n UNNEST(ix.indkey) WITH ORDINALITY k(attnum, indseq),\n pg_attribute a\n WHERE\n t.oid = ix.indrelid\n AND n.oid = t.relnamespace\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = k.attnum\n AND t.relkind = 'r'\n AND t.relname = '${table}'\n ${namespace ? `AND n.nspname = '${namespace}'` : ''}\n `);\n return _.mapValues(_.groupBy(indices, 'index_name'), v => ({\n keys: _.map(_.sortBy(v, ({ seq }) => parseInt(seq)), 'column_name'),\n ..._.pick(_.first(v), [\n 'schema_name',\n 'table_name',\n 'index_name',\n 'is_primary',\n 'is_unique',\n ])\n }));\n }\n\n async withClient<T>(callback: (client: PostgresClientDriver) => PromiseLike<T>) {\n const client = this.db instanceof Pool ? await this.db.connect() : this.db;\n try {\n return await callback(new PostgresClientDriver(client));\n } finally {\n if (this.db instanceof Pool) client.release();\n }\n }\n\n async publish(channel: string, payload: TValueWithoutObject) {\n await this.withClient(async (db) => {\n await db.query(`NOTIFY ${PROTO_EVENT}, ${quote(JSON.stringify(_encodeValue({ channel, payload })))}`);\n });\n }\n}\n\nclass PostgresPubSub {\n\n client: Awaitable<PoolClient>;\n subscribers: ((payload: TValueWithoutObject) => void)[] = [];\n\n constructor(client: Awaitable<PoolClient>) {\n this.client = client;\n (async () => {\n try {\n client = await client;\n client.on('notification', ({ channel, payload }) => {\n if (_.toUpper(channel) !== PROTO_EVENT || !payload) return;\n try {\n const _payload = _decodeValue(JSON.parse(payload));\n for (const subscriber of this.subscribers) {\n subscriber(_payload);\n }\n } catch (e) {\n console.error(`Unknown payload: ${e}`);\n }\n });\n await client.query(`LISTEN ${PROTO_EVENT}`);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n\n async shutdown() {\n (await this.client).release();\n }\n\n subscribe(callback: (payload: TValueWithoutObject) => void) {\n this.subscribers.push(callback);\n return () => {\n this.subscribers = this.subscribers.filter(x => x !== callback);\n };\n }\n\n isEmpty() {\n return _.isEmpty(this.subscribers);\n }\n}\n\nexport class PostgresDriver extends PostgresClientDriver {\n\n database: Pool;\n\n private pubsub?: PostgresPubSub;\n\n constructor(config: string | PoolConfig) {\n if (_.isEmpty(config)) throw Error('Invalid postgre config.');\n const _types = { getTypeParser: typeParser as typeof types.getTypeParser };\n const database = new Pool(_.isString(config) ? { connectionString: config, types: _types } : { ...config, types: _types });\n super(database);\n this.database = database;\n }\n\n async shutdown() {\n await this._release_pubsub();\n await this.database.end();\n }\n\n private _init_pubsub() {\n if (this.pubsub || this.database.ending || this.database.ended) return;\n this.pubsub = new PostgresPubSub(this.database.connect());\n }\n\n private async _release_pubsub() {\n const pubsub = this.pubsub;\n this.pubsub = undefined;\n await pubsub?.shutdown();\n }\n\n subscribe(channel: string, callback: (payload: TValueWithoutObject) => void) {\n this._init_pubsub();\n if (!this.pubsub) return () => void 0;\n const release = this.pubsub.subscribe(({ channel: _channel, payload }: any) => {\n if (_channel === channel) callback(payload);\n });\n return () => {\n release();\n if (this.pubsub?.isEmpty()) this._release_pubsub();\n };\n }\n}\n","//\n// encode.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql';\nimport { TSchema, _typeof, dimensionOf } from '../../../../internals/schema';\nimport Decimal from 'decimal.js';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValue, TValueWithUndefined } from '../../../../internals/types';\nimport { TObject } from '../../../../internals/object';\n\nexport const _encodeJsonValue = (value: any): SQL => {\n if (_.isArray(value)) return sql`jsonb_build_array(${_.map(value, x => _encodeJsonValue(x))})`;\n if (_.isPlainObject(value)) return sql`jsonb_build_object(${_.map(value, (v, k) => sql`${{ value: k }}, ${_encodeJsonValue(v)}`)})`;\n return sql`to_jsonb(${{ value }})`;\n};\n\nexport const _encodePopulateInclude = (\n className: string,\n colname: string,\n dataType: TSchema.DataType,\n): SQL => {\n switch (_typeof(dataType)) {\n case 'decimal':\n return sql`jsonb_build_object(\n '$decimal', CAST(${{ identifier: className }}.${{ identifier: colname }} AS TEXT)\n ) AS ${{ identifier: colname }}`;\n case 'date':\n return sql`jsonb_build_object(\n '$date', to_char(${{ identifier: className }}.${{ identifier: colname }} AT TIME ZONE 'UTC', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"')\n ) AS ${{ identifier: colname }}`;\n default:\n return sql`${{ identifier: className }}.${{ identifier: colname }}`;\n }\n};\n\nexport const encodeType = (colname: string, dataType: TSchema.DataType, value: TValueWithUndefined) => {\n if (_.isNil(value)) return sql`NULL`;\n switch (_.isString(dataType) ? dataType : dataType.type) {\n case 'boolean':\n if (_.isBoolean(value)) return sql`${{ value }}`;\n break;\n case 'number':\n if (_.isNumber(value) && _.isFinite(value)) return sql`${{ value }}`;\n if (value instanceof Decimal) return sql`${{ value: value.toNumber() }}`;\n break;\n case 'decimal':\n if (_.isNumber(value) && _.isFinite(value)) return sql`CAST(${{ quote: (new Decimal(value)).toString() }} AS DECIMAL)`;\n if (value instanceof Decimal) return sql`CAST(${{ quote: value.toString() }} AS DECIMAL)`;\n break;\n case 'string':\n if (_.isString(value)) return sql`${{ value }}`;\n break;\n case 'string[]':\n if (_.isArray(value) && _.every(value, x => _.isString(x))) return sql`ARRAY[${_.map(value, x => sql`${{ value: x }}`)}]::TEXT[]`;\n break;\n case 'date':\n if (_.isDate(value)) return sql`${{ value }}`;\n break;\n case 'object':\n if (_.isPlainObject(value)) return sql`${{ value: _encodeValue(value) }}`;\n break;\n case 'vector':\n if (!_.isArray(value) || value.length !== dimensionOf(dataType)) break;\n if (!_.every(value, x => _.isFinite(x))) break;\n return sql`${{ value }}::DOUBLE PRECISION[]`;\n case 'array':\n if (!_.isArray(value)) break;\n return sql`ARRAY[${_.map(value, x => _encodeJsonValue(_encodeValue(x)))}]::JSONB[]`;\n case 'pointer':\n if (value instanceof TObject && value.objectId) return sql`${{ value: `${value.className}$${value.objectId}` }}`;\n break;\n case 'relation':\n if (_.isArray(value) && _.every(value, x => x instanceof TObject && x.objectId)) {\n return sql`${{ value: _.uniq(_.map(value, (x: TObject) => `${x.className}$${x.objectId}`)) }}`;\n }\n break;\n default: break;\n }\n\n throw Error('Invalid data type');\n};\n\nexport const decodeType = (type: TSchema.Primitive | 'vector', value: any): TValue => {\n switch (type) {\n case 'boolean':\n if (_.isBoolean(value)) return value;\n if (value === 'true') return true;\n if (value === 'false') return false;\n break;\n case 'number':\n if (_.isNumber(value)) return value;\n if (_.isString(value)) {\n const float = parseFloat(value);\n return _.isNaN(float) ? null : float;\n }\n break;\n case 'decimal':\n if (_.isString(value) || _.isNumber(value)) return new Decimal(value);\n if (value instanceof Decimal) return value;\n if (_.isPlainObject(value) && _.isString(value.$decimal)) return new Decimal(value.$decimal);\n break;\n case 'string':\n if (_.isString(value)) return value;\n break;\n case 'string[]':\n if (_.isArray(value) && _.every(value, x => _.isString(x))) return value;\n break;\n case 'date':\n if (_.isDate(value)) return value;\n if (_.isString(value)) {\n const date = new Date(value);\n if (isFinite(date.valueOf())) return date;\n }\n if (_.isPlainObject(value) && _.isString(value.$date)) return new Date(value.$date);\n break;\n case 'object':\n if (_.isPlainObject(value)) return _decodeValue(value);\n break;\n case 'array':\n if (_.isArray(value)) return _decodeValue(value);\n break;\n case 'vector':\n if (!_.isArray(value)) break;\n if (_.every(value, x => _.isNumber(x))) {\n return value;\n }\n break;\n default: break;\n }\n return null;\n};\n\n","//\n// update.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql/sql';\nimport { TSchema, _isTypeof, isVector } from '../../../../internals/schema';\nimport { _encodeJsonValue } from './encode';\nimport { encodeType } from './encode';\nimport { nullSafeEqual } from './basic';\nimport Decimal from 'decimal.js';\nimport { TObject, decodeUpdateOp } from '../../../../internals/object';\nimport { TUpdateOp } from '../../../../internals/object/types';\nimport { _encodeValue } from '../../../../internals/object';\n\nexport const updateOperation = (paths: string[], dataType: TSchema.DataType, operation: TUpdateOp) => {\n const [column, ...subpath] = paths;\n const [op, value] = decodeUpdateOp(operation);\n if (isVector(dataType)) {\n if (_.isEmpty(subpath)) {\n if (_.isNil(value) && op === '$set') return sql`${encodeType(column, dataType, value)}`;\n if (!_.isArray(value) || value.length !== dataType.dimension) throw Error('Invalid update operation');\n if (!_.every(value, x => _.isFinite(x))) throw Error('Invalid update operation');\n if (op === '$set') {\n return sql`${encodeType(column, dataType, value)}`;\n }\n } else if (subpath.length === 1) {\n const idx = parseInt(subpath[0]);\n if (_.isFinite(value) && _.isSafeInteger(idx) && idx >= 0 && idx < dataType.dimension) {\n switch (op) {\n case '$set': return sql`${{ value }}`;\n case '$inc': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] + ${{ value }}`;\n case '$dec': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] - ${{ value }}`;\n case '$mul': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] * ${{ value }}`;\n case '$div': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] / ${{ value }}`;\n case '$max': return sql`GREATEST(${{ identifier: column }}[${{ literal: `${idx + 1}` }}], ${{ value }})`;\n case '$min': return sql`LEAST(${{ identifier: column }}[${{ literal: `${idx + 1}` }}], ${{ value }})`;\n default: break;\n }\n }\n }\n throw Error('Invalid update operation');\n }\n if (_.isEmpty(subpath)) {\n switch (op) {\n case '$set': return sql`${encodeType(column, dataType, value)}`;\n case '$inc': return sql`${{ identifier: column }} + ${encodeType(column, dataType, value)}`;\n case '$dec': return sql`${{ identifier: column }} - ${encodeType(column, dataType, value)}`;\n case '$mul': return sql`${{ identifier: column }} * ${encodeType(column, dataType, value)}`;\n case '$div': return sql`${{ identifier: column }} / ${encodeType(column, dataType, value)}`;\n case '$max': return sql`GREATEST(${{ identifier: column }}, ${encodeType(column, dataType, value)})`;\n case '$min': return sql`LEAST(${{ identifier: column }}, ${encodeType(column, dataType, value)})`;\n default: break;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n switch (op) {\n case '$popFirst':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return sql`${{ identifier: column }}[${{ literal: `${value + 1}` }}:]`;\n case '$popLast':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return sql`${{ identifier: column }}[:array_length(${{ identifier: column }}, 1) - ${{ literal: `${value}` }}]`;\n default:\n {\n const isStringArray = dataType === 'string[]';\n if (!_.isArray(value)) break;\n if (isStringArray && !_.every(value, x => _.isString(x))) break;\n switch (op) {\n case '$addToSet':\n if (!_.isArray(value)) break;\n return sql`${{ identifier: column }} || ARRAY(\n SELECT *\n FROM UNNEST(ARRAY[${_.map(_.uniq(value), x => isStringArray ? sql`${{ value: x }}` : _encodeJsonValue(_encodeValue(x)))}]) \"$\"\n WHERE \"$\" != ALL(${{ identifier: column }})\n )`;\n case '$push':\n if (!_.isArray(value)) break;\n return sql`${{ identifier: column }} || ARRAY[${_.map(value, (x: any) => isStringArray ? sql`${{ value: x }}` : sql`${_encodeJsonValue(_encodeValue(x))}`)}]`;\n case '$removeAll':\n if (!_.isArray(value)) break;\n return sql`ARRAY(\n SELECT *\n FROM UNNEST(${{ identifier: column }}) \"$\"\n WHERE \"$\" NOT IN (${_.map(_.uniq(value), x => isStringArray ? sql`${{ value: x }}` : _encodeJsonValue(_encodeValue(x)))})\n )`;\n default: break;\n }\n }\n }\n } else if (!_.isString(dataType) && dataType?.type === 'relation' && _.isNil(dataType.foreignField)) {\n switch (op) {\n case '$addToSet':\n case '$push':\n {\n if (!_.isArray(value) || !_.every(value, x => x instanceof TObject && x.objectId)) break;\n const objectIds = _.uniq(_.map(value, (x: any) => `${x.className}$${x.objectId}`));\n return sql`ARRAY(\n SELECT DISTINCT \"$\"\n FROM UNNEST(${{ identifier: column }} || ARRAY[${_.map(objectIds, (x) => sql`${{ value: x }}`)}]) \"$\"\n RIGHT JOIN ${{ identifier: dataType.target }} ON \"$\" = (${{ quote: dataType.target + '$' }} || ${{ identifier: dataType.target }}._id)\n )`;\n }\n case '$removeAll':\n {\n if (!_.isArray(value) || !_.every(value, x => x instanceof TObject && x.objectId)) break;\n const objectIds = _.uniq(_.map(value, (x: any) => `${x.className}$${x.objectId}`));\n return sql`ARRAY(\n SELECT \"$\"\n FROM UNNEST(${{ identifier: column }}) \"$\"\n RIGHT JOIN ${{ identifier: dataType.target }} ON \"$\" = (${{ quote: dataType.target + '$' }} || ${{ identifier: dataType.target }}._id)\n WHERE \"$\" NOT IN (${_.map(objectIds, (x) => sql`${{ value: x }}`)})\n )`;\n }\n default: break;\n }\n }\n } else {\n let element = sql`${{ identifier: column }}`;\n const _subpath = sql`${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)}`;\n let updateKey: (value: SQL) => SQL;\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n element = sql`jsonb_extract_path(to_jsonb(${element}), ${_subpath})`;\n updateKey = (value: SQL) => sql`ARRAY(SELECT * FROM jsonb_array_elements(\n jsonb_set(to_jsonb(${{ identifier: column }}), ARRAY[${_subpath}], ${value})\n ))`;\n } else {\n element = sql`jsonb_extract_path(${element}, ${_subpath})`;\n updateKey = (value: SQL) => sql`jsonb_set(${{ identifier: column }}, ARRAY[${_subpath}], ${value})`;\n }\n switch (op) {\n case '$set': return updateKey(_encodeJsonValue(_encodeValue(value)));\n case '$inc':\n case '$dec':\n case '$mul':\n case '$div':\n {\n const operatorMap = {\n $inc: '+',\n $dec: '-',\n $mul: '*',\n $div: '/',\n };\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n THEN to_jsonb(${element}::NUMERIC ${{ literal: operatorMap[op] }}\n ${{ value: value instanceof Decimal ? value.toNumber() : value }})\n WHEN jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$decimal', CAST(\n ((${element} ->> '$decimal')::DECIMAL ${{ literal: operatorMap[op] }}\n ${{ value: value instanceof Decimal ? value.toString() : value }}::DECIMAL)\n AS TEXT)\n )\n ELSE NULL\n END\n `);\n }\n case '$max':\n case '$min':\n {\n const operatorMap = {\n $max: 'GREATEST',\n $min: 'LEAST',\n };\n if (value instanceof Decimal || _.isNumber(value)) {\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n THEN to_jsonb(${{ literal: operatorMap[op] }}(\n ${element}::NUMERIC,\n ${{ value: value instanceof Decimal ? value.toNumber() : value }}\n ))\n WHEN jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$decimal', CAST(${{ literal: operatorMap[op] }}(\n (${element} ->> '$decimal')::DECIMAL,\n ${{ value: value instanceof Decimal ? value.toString() : value }}::DECIMAL\n ) AS TEXT))\n ELSE NULL\n END\n `);\n } else if (_.isDate(value)) {\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element} -> '$date') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$date', ${{ literal: operatorMap[op] }}(${element} ->> '$date', ${{ value: value.toISOString() }})\n )\n ELSE NULL\n END\n `);\n } else {\n return sql`${{ literal: operatorMap[op] }}(${element}, ${_encodeJsonValue(_encodeValue(value))})`;\n }\n }\n case '$addToSet':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN ${element} || to_jsonb(ARRAY(\n SELECT *\n FROM UNNEST(ARRAY[${_.map(_.uniq(value), x => _encodeJsonValue(_encodeValue(x)))}]) \"$\"\n WHERE NOT to_jsonb(ARRAY[\"$\"]) <@ ${element}\n ))\n ELSE NULL\n END\n `);\n case '$push':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN ${element} || ${_encodeJsonValue(_encodeValue(value))}\n ELSE NULL\n END\n `);\n case '$removeAll':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb(ARRAY(\n SELECT *\n FROM jsonb_array_elements(${element}) \"$\"\n WHERE value NOT IN (${_.map(_.uniq(value), x => _encodeJsonValue(_encodeValue(x)))})\n ))\n ELSE NULL\n END\n `);\n case '$popFirst':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb((ARRAY(\n SELECT jsonb_array_elements(${element})\n ))[${{ literal: `${value + 1}` }}:])\n ELSE NULL\n END\n `);\n case '$popLast':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb((ARRAY(\n SELECT jsonb_array_elements(${element})\n ))[:jsonb_array_length(${element}) - ${{ literal: `${value}` }}])\n ELSE NULL\n END\n `);\n default: break;\n }\n }\n throw Error('Invalid update operation');\n};\n","//\n// expressions.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../../sql';\nimport { _typeof, isPrimitive, isVector } from '../../../../../internals/schema';\nimport { QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { nullSafeEqual, nullSafeNotEqual } from '../basic';\nimport {\n QueryArrayExpression,\n QueryCoditionalExpression,\n QueryComparisonExpression,\n QueryDistanceExpression,\n QueryExpression,\n QueryKeyExpression,\n QueryNotExpression,\n QueryValueExpression\n} from '../../../../../server/query/dispatcher/parser/expressions';\nimport { fetchElement } from './utils';\nimport { _encodeJsonValue } from '../encode';\nimport Decimal from 'decimal.js';\nimport { _encodeValue } from '../../../../../internals/object';\n\nconst isValueExpression = (expr: QueryExpression): boolean => {\n if (expr instanceof QueryArrayExpression) return _.every(expr.exprs, x => isValueExpression(x));\n return expr instanceof QueryValueExpression;\n}\nconst isArrayExpression = (expr: QueryExpression) => {\n if (expr instanceof QueryArrayExpression) return true;\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value);\n return false;\n}\nconst arrayLength = (expr: QueryExpression) => {\n if (expr instanceof QueryArrayExpression) return expr.exprs.length;\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value) ? expr.value.length : 0;\n return 0;\n}\nconst mapExpression = <R>(expr: QueryExpression, callback: (x: QueryExpression) => R): R[] => {\n if (expr instanceof QueryArrayExpression) return _.map(expr.exprs, x => callback(x));\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value) ? _.map(expr.value, x => callback(new QueryValueExpression(x))) : [];\n return [];\n}\n\nconst _PrimitiveValue = ['boolean', 'number', 'decimal', 'string', 'date'] as const;\ntype PrimitiveValue = typeof _PrimitiveValue[number];\n\nconst encodeTypedQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): { type: PrimitiveValue; sql: SQL }[] | undefined => {\n\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n const _dataType = dataType ? _typeof(dataType) : null;\n if (_dataType && _PrimitiveValue.includes(_dataType as any)) {\n return [{ type: _dataType as PrimitiveValue, sql: element }];\n }\n }\n if (expr instanceof QueryValueExpression) {\n if (_.isBoolean(expr.value)) return [{ type: 'boolean', sql: sql`${{ value: expr.value }}` }];\n if (_.isNumber(expr.value)) return [\n { type: 'number', sql: sql`${{ value: expr.value }}` },\n { type: 'decimal', sql: sql`CAST(${{ quote: (new Decimal(expr.value)).toString() }} AS DECIMAL)` },\n ];\n if (expr.value instanceof Decimal) return [\n { type: 'decimal', sql: sql`CAST(${{ quote: expr.value.toString() }} AS DECIMAL)` },\n { type: 'number', sql: sql`${{ value: expr.value.toNumber() }}` },\n ];\n if (_.isString(expr.value)) return [{ type: 'string', sql: sql`${{ value: expr.value }}` }];\n if (_.isDate(expr.value)) return [{ type: 'date', sql: sql`${{ value: expr.value }}` }];\n }\n if (\n expr instanceof QueryCoditionalExpression ||\n expr instanceof QueryComparisonExpression ||\n expr instanceof QueryNotExpression\n ) {\n const value = encodeBooleanExpression(compiler, parent, expr);\n if (value) return [{ type: 'boolean', sql: value }];\n }\n\n if (expr instanceof QueryDistanceExpression) {\n const value = encodeDistanceQueryExpression(compiler, parent, expr);\n return [{ type: 'number', sql: value }];\n }\n};\n\nconst encodeJsonQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL => {\n\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n if (dataType && isPrimitive(dataType)) {\n switch (_typeof(dataType)) {\n case 'boolean': return sql`to_jsonb(${element})`;\n case 'number': return sql`to_jsonb(${element})`;\n case 'decimal': return sql`jsonb_build_object('$decimal', CAST(${element} AS TEXT))`;\n case 'string': return sql`to_jsonb(${element})`;\n case 'string[]': return sql`to_jsonb(${element})`;\n case 'date': return sql`jsonb_build_object(\n '$date', to_char(${element} AT TIME ZONE 'UTC', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"')\n )`;\n default: break;\n }\n }\n return sql`${element}`;\n }\n if (expr instanceof QueryValueExpression) {\n return _encodeJsonValue(_encodeValue(expr.value));\n }\n if (expr instanceof QueryArrayExpression) {\n return sql`jsonb_build_array(${_.map(expr.exprs, x => encodeJsonQueryExpression(compiler, parent, x))})`;\n }\n\n const value = encodeQueryExpression(compiler, parent, expr);\n if (!value) throw Error('Invalid expression');\n return sql`to_jsonb(${value})`;\n};\n\nconst encodeVectorExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n exprs: QueryExpression[]\n) => {\n if (exprs.length === 1) {\n const [expr] = exprs;\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n if (!dataType || !isVector(dataType)) throw Error('Invalid expression');\n return { sql: element, dimension: dataType.dimension };\n }\n if (expr instanceof QueryValueExpression) {\n if (!_.isArray(expr.value) || !_.every(expr.value, x => _.isFinite(x))) throw Error('Invalid expression');\n return { sql: sql`${{ value: expr.value }}::DOUBLE PRECISION[]`, dimension: expr.value.length };\n }\n }\n const result = _.map(exprs, x => _.find(encodeTypedQueryExpression(compiler, parent, x), e => e.type === 'number')?.sql);\n if (_.some(result, x => _.isNil(x))) throw Error('Invalid expression');\n return { sql: sql`ARRAY[${_.map(result, x => sql`COALESCE(${x!}, 0)`)}]`, dimension: result.length };\n}\n\nconst encodeDistanceQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryDistanceExpression\n): SQL => {\n\n const { sql: left, dimension: d1 } = encodeVectorExpression(compiler, parent, expr.left);\n const { sql: right, dimension: d2 } = encodeVectorExpression(compiler, parent, expr.right);\n if (d1 !== d2) throw Error('Invalid expression');\n\n const operatorMap = {\n '$distance': sql`<->`,\n '$innerProduct': sql`<#>`,\n '$negInnerProduct': sql`<#>`,\n '$cosineDistance': sql`<=>`,\n '$rectilinearDistance': sql`<+>`,\n } as const;\n\n const _expr = sql`\n CAST(\n ${left} AS VECTOR(${{ literal: `${d1}` }})\n )\n ${operatorMap[expr.type]} \n CAST(\n ${right} AS VECTOR(${{ literal: `${d2}` }})\n )\n `;\n\n return expr.type === '$innerProduct' ? sql`-1 * (${_expr})` : _expr;\n};\n\nconst matchType = (\n first: { type: PrimitiveValue; sql: SQL }[] | undefined,\n second: { type: PrimitiveValue; sql: SQL }[] | undefined,\n): [{ type: PrimitiveValue; sql: SQL }, { type: PrimitiveValue; sql: SQL }] | undefined => {\n const found = _.find(first, l => _.some(second, r => l.type === r.type));\n return found ? [found, _.find(second, r => r.type === found.type)!] : undefined;\n}\n\nexport const encodeBooleanExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL | undefined => {\n\n if (expr instanceof QueryCoditionalExpression) {\n const queries = _.compact(_.map(expr.exprs, x => encodeBooleanExpression(compiler, parent, x)));\n if (_.isEmpty(queries)) return;\n switch (expr.type) {\n case '$and': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' AND ' }})`;\n case '$nor': return sql`(${{ literal: _.map(queries, x => sql`NOT (${x})`), separator: ' AND ' }})`;\n case '$or': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' OR ' }})`;\n default: break;\n }\n }\n if (expr instanceof QueryComparisonExpression) {\n\n const operatorMap = {\n '$eq': nullSafeEqual(),\n '$ne': nullSafeNotEqual(),\n '$gt': sql`>`,\n '$gte': sql`>=`,\n '$lt': sql`<`,\n '$lte': sql`<=`,\n };\n\n if (\n isArrayExpression(expr.left) &&\n isArrayExpression(expr.right) &&\n arrayLength(expr.left) === arrayLength(expr.right)\n ) {\n const _left = mapExpression(expr.left, x => encodeTypedQueryExpression(compiler, parent, x));\n const _right = mapExpression(expr.right, x => encodeTypedQueryExpression(compiler, parent, x));\n const mapped = _.compact(_.map(_.zip(_left, _right), ([l, r]) => matchType(l, r)));\n if (mapped.length === _left.length) {\n const [l, r] = _.unzip(mapped);\n return sql`(${_.map(l, x => x.sql)}) ${operatorMap[expr.type]} (${_.map(r, x => x.sql)})`;\n }\n }\n\n const _left = encodeTypedQueryExpression(compiler, parent, expr.left);\n const _right = encodeTypedQueryExpression(compiler, parent, expr.right);\n if (_left && _right) {\n const matched = matchType(_left, _right);\n if (matched) return sql`${matched[0].sql} ${operatorMap[expr.type]} ${matched[1].sql}`;\n }\n\n const _left2 = encodeJsonQueryExpression(compiler, parent, expr.left);\n const _right2 = encodeJsonQueryExpression(compiler, parent, expr.right);\n return sql`${_left2} ${operatorMap[expr.type]} ${_right2}`;\n }\n if (expr instanceof QueryNotExpression) {\n const _expr = encodeBooleanExpression(compiler, parent, expr.expr);\n return _expr ? sql`NOT (${_expr})` : undefined;\n }\n throw Error('Invalid expression');\n};\n\nexport const encodeQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL | undefined => {\n\n if (expr instanceof QueryDistanceExpression) {\n return encodeDistanceQueryExpression(compiler, parent, expr);\n }\n\n return encodeBooleanExpression(compiler, parent, expr);\n}","//\n// populate.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql';\nimport { TSchema, isPointer, isPrimitive, isRelation, isShape, isVector } from '../../../../internals/schema';\nimport { Populate, QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { _encodePopulateInclude } from './encode';\nimport { resolveColumn } from '../../../../server/query/dispatcher/validator';\n\nconst resolveSubpaths = (\n compiler: QueryCompiler,\n populate: Populate,\n) => {\n const subpaths: {\n path: string;\n type: TSchema.DataType;\n }[] = [];\n for (const [name, type] of _.toPairs(populate.includes)) {\n if (isPointer(type)) {\n subpaths.push(..._.map(resolveSubpaths(compiler, populate.populates[name]), ({ path, type }) => ({\n path: `${name}.${path}`,\n type,\n })));\n } else {\n subpaths.push({\n path: name,\n type,\n });\n }\n }\n return subpaths;\n}\n\nconst _isPointer = (\n schema: Record<string, TSchema>,\n className: string,\n path: string,\n) => {\n let fields = schema[className].fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) throw Error(`Invalid path: ${path}`);\n if (isShape(dataType)) {\n fields = dataType.shape;\n continue;\n }\n if (dataType.type !== 'pointer') return false;\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid path: ${path}`);\n fields = schema[dataType.target].fields;\n last = dataType;\n }\n return last?.type === 'pointer';\n}\n\nexport const _selectRelationPopulate = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n populate: Populate,\n field: string,\n encode: boolean,\n) => {\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: populate.name }}.${{ identifier: field }}`;\n\n const subpaths = resolveSubpaths(compiler, populate);\n\n let cond: SQL;\n if (_.isNil(populate.foreignField)) {\n cond = sql`${sql`(${{ quote: populate.className + '$' }} || ${_foreign('_id')})`} = ANY(${_local(field)})`;\n } else if (_isPointer(compiler.schema, populate.className, populate.foreignField)) {\n cond = sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${_foreign(populate.colname)}`;\n } else {\n cond = sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${_foreign(populate.colname)})`;\n }\n return sql`\n SELECT ${_.compact(_.flatMap(subpaths, ({ path, type }) => [\n encode && _encodePopulateInclude(populate.name, path, type),\n !encode && sql`${{ identifier: populate.name }}.${{ identifier: path }}`,\n !encode && isRelation(type) && sql`${{ identifier: populate.name }}.${{ identifier: `$${path}` }}`,\n ]))}\n FROM ${{ identifier: populate.name }} WHERE ${cond}\n ${!_.isEmpty(populate.sort) ? sql`ORDER BY ${compiler._encodeSort(populate.sort, { className: populate.className, name: populate.name })}` : sql``}\n ${populate.limit ? sql`LIMIT ${{ literal: `${populate.limit}` }}` : sql``}\n ${populate.skip ? sql`OFFSET ${{ literal: `${populate.skip}` }}` : sql``}\n ${compiler.selectLock ? compiler.isUpdate ? sql`FOR UPDATE NOWAIT` : sql`FOR SHARE NOWAIT` : sql``}\n `;\n}\n\nexport const selectPopulate = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n populate: Populate,\n field: string,\n countMatches: boolean,\n): { columns: SQL[]; join?: SQL; } => {\n if (populate.type === 'relation') {\n return {\n columns: [\n countMatches ? sql`\n (\n SELECT COUNT(*) FROM (\n ${_selectRelationPopulate(compiler, parent, populate, field, false)}\n ) ${{ identifier: populate.name }}\n ) AS ${{ identifier: field }}\n ` : sql`\n ARRAY(\n SELECT to_jsonb(${{ identifier: populate.name }}) FROM (\n ${_selectRelationPopulate(compiler, parent, populate, field, true)}\n ) ${{ identifier: populate.name }}\n ) AS ${{ identifier: field }}\n `,\n sql`${{ identifier: parent.name }}.${{ identifier: field }} AS ${{ identifier: `$${field}` }}`\n ],\n };\n }\n\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: populate.name }}.${{ identifier: field }}`;\n\n const subpaths = resolveSubpaths(compiler, populate);\n return {\n columns: _.compact(_.flatMap(subpaths, ({ path, type }) => [\n sql`${{ identifier: populate.name }}.${{ identifier: path }} AS ${{ identifier: `${field}.${path}` }}`,\n isRelation(type) && sql`${{ identifier: populate.name }}.${{ identifier: `$${path}` }} AS ${{ identifier: `$${field}.${path}` }}`,\n ])),\n join: sql`\n LEFT JOIN ${{ identifier: populate.name }}\n ON ${sql`(${{ quote: populate.className + '$' }} || ${_foreign('_id')})`} = ${_local(field)}\n `,\n };\n};\n\nconst encodeRemix = (\n parent: { className: string; },\n remix?: QueryContext & { className: string; },\n) => sql`${remix?.className === parent.className ? sql`\n (SELECT * FROM ${{ identifier: remix.name }} UNION SELECT * FROM ${{ identifier: parent.className }})\n` : { identifier: parent.className }}`;\n\nexport const encodeForeignField = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n foreignField: string,\n remix?: QueryContext & { className: string; }\n): { joins: SQL[]; field: SQL; rows: boolean; array: boolean; } => {\n\n const { paths: [colname, ...subpath], dataType } = resolveColumn(compiler.schema, parent.className, foreignField);\n\n const tempName = `_populate_$${compiler.nextIdx()}`;\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: tempName }}.${{ identifier: field }}`;\n\n if (_.isEmpty(subpath) && isRelation(dataType) && dataType.foreignField) {\n const { joins, field, rows, array } = encodeForeignField(\n compiler,\n { className: dataType.target, name: tempName },\n dataType.foreignField,\n remix,\n );\n return {\n joins: [],\n field: sql`(\n SELECT ${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`}\n FROM ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${array || rows ? sql`ANY(${field})` : field}\n )`,\n array: false,\n rows: true,\n };\n }\n\n if (_.isEmpty(subpath)) {\n return {\n joins: [],\n field: sql`${{ identifier: parent.name }}.${{ identifier: foreignField }}`,\n array: isRelation(dataType),\n rows: false,\n };\n }\n\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid path: ${foreignField}`);\n\n const { joins, field, rows, array } = encodeForeignField(\n compiler,\n { className: dataType.target, name: tempName },\n subpath.join('.'),\n remix,\n );\n\n const cond: (SQL | undefined)[] = [];\n if (compiler.extraFilter) {\n const filter = compiler.extraFilter(dataType.target);\n cond.push(compiler._encodeFilter({ className: dataType.target, name: tempName }, filter));\n }\n if (isPointer(dataType)) {\n cond.push(\n sql`${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`} = ${_local(colname)}`\n );\n return {\n joins: [sql`\n LEFT JOIN ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ON ${{ literal: _.map(_.compact(cond), x => sql`(${x})`), separator: ' AND ' }}\n `, ...joins],\n field,\n array,\n rows,\n };\n }\n\n if (_.isNil(dataType.foreignField)) {\n cond.push(\n sql`${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`} = ANY(${_local(colname)})`\n );\n } else if (_isPointer(compiler.schema, dataType.target, dataType.foreignField)) {\n cond.push(\n sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${_foreign(dataType.foreignField)}`\n );\n } else {\n cond.push(\n sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${_foreign(dataType.foreignField)})`\n );\n }\n return {\n joins: [],\n field: sql`(\n SELECT ${array ? sql`UNNEST(${field})` : field}\n FROM ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${{ literal: _.map(_.compact(cond), x => sql`(${x})`), separator: ' AND ' }}\n )`,\n array: false,\n rows: true,\n };\n}\n\nexport const encodePopulate = (\n compiler: QueryCompiler,\n parent: Populate,\n remix?: QueryContext & { className: string; }\n): Record<string, SQL> => {\n const _filter = _.compact([\n parent.filter && compiler._encodeFilter(parent, parent.filter),\n compiler.extraFilter && compiler._encodeFilter(parent, compiler.extraFilter(parent.className)),\n ]);\n const _populates = _.map(parent.populates, (populate, field) => selectPopulate(compiler, parent, populate, field, _.includes(parent.countMatches, field)));\n const _joins = _.compact(_.map(_populates, ({ join }) => join));\n const _includes = _.pickBy(parent.includes, v => isPrimitive(v));\n const {\n joins: _joins2 = [],\n field: _foreignField = undefined,\n rows = false,\n } = parent.foreignField ? encodeForeignField(compiler, {\n className: parent.className,\n name: parent.name,\n }, parent.foreignField, remix) : {};\n return _.reduce(parent.populates, (acc, populate) => ({\n ...encodePopulate(compiler, populate, remix),\n ...acc,\n }), {\n [parent.name]: sql`\n SELECT * FROM (\n SELECT\n ${{\n literal: [\n ..._.map(_.keys(_includes), colname => sql`${{ identifier: parent.name }}.${{ identifier: colname }}`),\n ..._.flatMap(_populates, ({ columns: column }) => column),\n ..._foreignField ? [sql`${rows ? sql`ARRAY(${_foreignField})` : _foreignField} AS ${{ identifier: parent.colname }}`] : [],\n ], separator: ',\\n'\n }}\n FROM ${encodeRemix(parent, remix)} AS ${{ identifier: parent.name }}\n ${!_.isEmpty(_joins) || !_.isEmpty(_joins2) ? { literal: [..._joins, ..._joins2], separator: '\\n' } : sql``}\n ) AS ${{ identifier: parent.name }}\n ${!_.isEmpty(_filter) ? sql`WHERE ${{ literal: _.map(_.compact(_filter), x => sql`(${x})`), separator: ' AND ' }}` : sql``}\n `,\n });\n};\n","//\n// selectors.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../../sql';\nimport { _isTypeof, _typeof, isPrimitive } from '../../../../../internals/schema';\nimport { QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { FieldSelectorExpression, QuerySelector } from '../../../../../server/query/dispatcher/parser';\nimport { _encodeJsonValue } from '../encode';\nimport { encodeType } from '../encode';\nimport { nullSafeEqual, nullSafeNotEqual } from '../basic';\nimport { fetchElement } from './utils';\nimport Decimal from 'decimal.js';\nimport { TObject } from '../../../../../internals/object';\nimport { _encodeValue } from '../../../../../internals/object';\nimport { TValue } from '../../../../../internals/types';\nimport { _selectRelationPopulate } from '../populate';\n\nexport const encodeFieldExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n field: string,\n expr: FieldSelectorExpression\n): SQL => {\n const [colname] = _.toPath(field);\n const { element, dataType, relation } = fetchElement(compiler, parent, field);\n const encodeValue = (value: TValue) => dataType ? encodeType(colname, dataType, value) : _encodeJsonValue(_encodeValue(value));\n switch (expr.type) {\n case '$eq':\n {\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (_.isNil(expr.value)) return sql`${element} IS NULL`;\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!(expr.value instanceof TObject) || dataType.target !== expr.value.className || !expr.value.objectId) break;\n return sql`${element} ${nullSafeEqual()} ${{ value: expr.value.objectId }}`;\n }\n if (relation && _.includes(parent.countMatches, relation.colname)) {\n return sql`${element} ${nullSafeEqual()} ${encodeType(colname, 'number', expr.value) }`;\n }\n return sql`${element} ${nullSafeEqual()} ${encodeValue(expr.value)}`;\n }\n case '$ne':\n {\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (_.isNil(expr.value)) return sql`${element} IS NOT NULL`;\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!(expr.value instanceof TObject) || dataType.target !== expr.value.className || !expr.value.objectId) break;\n return sql`${element} ${nullSafeNotEqual()} ${{ value: expr.value.objectId }}`;\n }\n if (relation && _.includes(parent.countMatches, relation.colname)) {\n return sql`${element} ${nullSafeNotEqual()} ${encodeType(colname, 'number', expr.value)}`;\n }\n return sql`${element} ${nullSafeNotEqual()} ${encodeValue(expr.value)}`;\n }\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n {\n const op = {\n '$gt': '>',\n '$gte': '>=',\n '$lt': '<',\n '$lte': '<=',\n }[expr.type];\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (dataType && isPrimitive(dataType)) {\n switch (_typeof(dataType)) {\n case 'boolean':\n if (!_.isBoolean(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'number':\n case 'decimal':\n if (!(expr.value instanceof Decimal) && !_.isNumber(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'string':\n if (!_.isString(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'string[]':\n if (!_.isArray(expr.value) || !_.every(expr.value, _.isString)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'date':\n if (!_.isDate(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n default: break;\n }\n } else if (!_.isString(dataType) && dataType?.type === 'pointer' && expr.value instanceof TObject && expr.value.objectId) {\n return sql`${element} ${{ literal: op }} ${{ value: expr.value.objectId }}`;\n } else if (relation && _.includes(parent.countMatches, relation.colname)) {\n return sql`${element} ${{ literal: op }} ${encodeType(colname, 'number', expr.value) }`;\n } else if (!dataType) {\n if (expr.value instanceof Decimal || _.isNumber(expr.value)) {\n return sql`(\n jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n AND ${element}::NUMERIC ${{ literal: op }} ${{ value: expr.value instanceof Decimal ? expr.value.toNumber() : expr.value }}\n ) OR (\n jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n AND (${element} ->> '$decimal')::DECIMAL ${{ literal: op }} ${{ value: expr.value instanceof Decimal ? expr.value.toString() : expr.value }}::DECIMAL\n )`;\n } else if (_.isDate(expr.value)) {\n return sql`(\n jsonb_typeof(${element} -> '$date') ${nullSafeEqual()} 'string'\n AND ${element} ${{ literal: op }} ${encodeValue(expr.value)}\n )`;\n } else {\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n }\n }\n }\n break;\n case '$in':\n {\n if (!_.isArray(expr.value)) break;\n switch (expr.value.length) {\n case 0: return sql`false`;\n case 1:\n {\n const value = expr.value[0];\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (_.isNil(value)) return sql`${element} IS NULL`;\n if (!(value instanceof TObject) || dataType.target !== value.className || !value.objectId) break;\n return sql`${element} ${nullSafeEqual()} ${{ value: value.objectId }}`;\n }\n return sql`${element} ${nullSafeEqual()} ${encodeValue(value)}`;\n }\n default:\n const containsNil = _.some(expr.value, x => _.isNil(x));\n const values = _.filter(expr.value, x => !_.isNil(x));\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!_.every(values, x => x instanceof TObject && dataType.target === x.className && x.objectId)) break;\n if (containsNil) {\n return sql`${element} IS NULL OR ${element} IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n return sql`${element} IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n if (containsNil) {\n return sql`${element} IS NULL OR ${element} IN (${_.map(values, x => encodeValue(x))})`;\n }\n return sql`${element} IN (${_.map(values, x => encodeValue(x))})`;\n }\n }\n break;\n case '$nin':\n {\n if (!_.isArray(expr.value)) break;\n switch (expr.value.length) {\n case 0: return sql`true`;\n case 1:\n {\n const value = expr.value[0];\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (_.isNil(value)) return sql`${element} IS NOT NULL`;\n if (!(value instanceof TObject) || dataType.target !== value.className || !value.objectId) break;\n return sql`${element} ${nullSafeNotEqual()} ${{ value: value.objectId }}`;\n }\n return sql`${element} ${nullSafeNotEqual()} ${encodeValue(value)}`;\n }\n default:\n const containsNil = _.some(expr.value, x => _.isNil(x));\n const values = _.filter(expr.value, x => !_.isNil(x));\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!_.every(values, x => x instanceof TObject && dataType.target === x.className && x.objectId)) break;\n if (containsNil) {\n return sql`${element} IS NOT NULL AND ${element} NOT IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n return sql`${element} NOT IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n if (containsNil) {\n return sql`${element} IS NOT NULL AND ${element} NOT IN (${_.map(values, x => encodeValue(x))})`;\n }\n return sql`${element} NOT IN (${_.map(values, x => encodeValue(x))})`;\n }\n }\n break;\n case '$subset':\n case '$superset':\n case '$intersect':\n {\n const op = {\n '$subset': '<@',\n '$superset': '@>',\n '$intersect': '&&',\n }[expr.type];\n if (!_.isArray(expr.value)) break;\n if (_.isEmpty(expr.value)) {\n switch (expr.type) {\n case '$superset': return sql`true`;\n case '$intersect': return sql`false`;\n default: break;\n }\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n return sql`${element} ${{ literal: op }} ${{ value: _encodeValue(expr.value) }}`;\n }\n if (relation && parent.className) {\n if (!_.every(expr.value, x => x instanceof TObject && relation.target === x.className && x.objectId)) break;\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`ARRAY(\n SELECT ${{ identifier: '_id' }}\n FROM (${populate}) AS ${{ identifier: tempName }}\n ) ${{ literal: op }} ARRAY[${_.map(expr.value, (x: any) => sql`${{ value: x.objectId }}`)}]::TEXT[]`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND ${element} ${{ literal: op }} ${_encodeJsonValue(_encodeValue(expr.value))}`;\n }\n }\n break;\n case '$not':\n {\n if (!(expr.value instanceof FieldSelectorExpression)) break;\n return sql`NOT (${encodeFieldExpression(compiler, parent, field, expr.value)})`;\n }\n case '$pattern':\n {\n if (dataType && _isTypeof(dataType, 'string')) {\n if (_.isString(expr.value)) {\n return sql`${element} LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (_.isRegExp(expr.value)) {\n if (expr.value.ignoreCase) return sql`${element} ~* ${{ value: expr.value.source }}`;\n return sql`${element} ~ ${{ value: expr.value.source }}`;\n }\n } else if (!dataType) {\n if (_.isString(expr.value)) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (_.isRegExp(expr.value)) {\n if (expr.value.ignoreCase) return sql`${element} ~* ${{ value: expr.value.source }}`;\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') ~ ${{ value: expr.value.source }}`;\n }\n }\n }\n break;\n case '$starts':\n {\n if (!_.isString(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`${element} LIKE ${{ value: `${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n }\n break;\n case '$ends':\n {\n if (!_.isString(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`${element} LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}` }}`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}` }}`;\n }\n }\n break;\n case '$size':\n {\n if (!_.isNumber(expr.value) || !_.isSafeInteger(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`COALESCE(length(${element}), 0) = ${{ value: expr.value }}`;\n }\n if (relation && _.includes(parent.countMatches, relation.colname)) {\n return sql`${element} = ${{ value: expr.value }}`;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]', 'vector', 'relation'])) {\n return sql`COALESCE(array_length(${element}, 1), 0) = ${{ value: expr.value }}`;\n }\n if (!dataType) {\n return sql`(\n CASE jsonb_typeof(${element})\n WHEN 'array' THEN jsonb_array_length(${element}) = ${{ value: expr.value }}\n WHEN 'string' THEN length(${element} #>> '{}') = ${{ value: expr.value }}\n ELSE jsonb_typeof(${element}) IS NULL AND ${{ value: expr.value === 0 }}\n END\n )`;\n }\n }\n break;\n case '$empty':\n {\n if (!_.isBoolean(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`COALESCE(length(${element}), 0) ${{ literal: expr.value ? '=' : '<>' }} 0`;\n }\n if (relation && _.includes(parent.countMatches, relation.colname)) {\n return sql`${element} ${{ literal: expr.value ? '=' : '<>' }} 0`;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]', 'vector', 'relation'])) {\n return sql`COALESCE(array_length(${element}, 1), 0) ${{ literal: expr.value ? '=' : '<>' }} 0`;\n }\n if (!dataType) {\n return sql`(\n CASE jsonb_typeof(${element})\n WHEN 'array' THEN jsonb_array_length(${element}) ${{ literal: expr.value ? '=' : '<>' }} 0\n WHEN 'string' THEN length(${element} #>> '{}') ${{ literal: expr.value ? '=' : '<>' }} 0\n ELSE jsonb_typeof(${element}) IS NULL AND ${{ value: expr.value }}\n END\n )`;\n }\n }\n break;\n case '$every':\n {\n if (!(expr.value instanceof QuerySelector)) break;\n\n if (relation && parent.className) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({\n name: tempName,\n className: relation.target,\n populates: relation.populate.populates,\n }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`NOT EXISTS(\n SELECT * FROM (${populate}) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n\n const mapping = {\n 'vector': '_doller_num_expr_$',\n 'string[]': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (dataType && _isTypeof(dataType, key)) {\n const tempName = `${value}${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n return sql`NOT EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n }\n\n const tempName = `_doller_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n if (dataType && _isTypeof(dataType, 'array')) {\n return sql`NOT EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND NOT EXISTS(\n SELECT * FROM (SELECT value AS \"$\" FROM jsonb_array_elements(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n }\n break;\n case '$some':\n {\n if (!(expr.value instanceof QuerySelector)) break;\n\n if (relation && parent.className) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({\n name: tempName,\n className: relation.target,\n populates: relation.populate.populates,\n }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`EXISTS(\n SELECT * FROM (${populate}) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n\n const mapping = {\n 'vector': '_doller_num_expr_$',\n 'string[]': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (dataType && _isTypeof(dataType, key)) {\n const tempName = `${value}${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n return sql`EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n }\n\n const tempName = `_doller_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n if (dataType && _isTypeof(dataType, 'array')) {\n return sql`EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND EXISTS(\n SELECT * FROM (SELECT value AS \"$\" FROM jsonb_array_elements(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n }\n break;\n default: break;\n }\n throw Error('Invalid expression');\n};\n","//\n// relation.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { RelationOptions } from '../../../../server/storage';\nimport { sql, SQL } from '../../sql';\nimport { encodeForeignField } from './populate';\n\nexport const encodeRelation = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n relatedBy: NonNullable<RelationOptions['relatedBy']>\n): SQL => {\n const name = `_relation_$${relatedBy.className.toLowerCase()}`;\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: name }}.${{ identifier: field }}`;\n const { joins, field } = encodeForeignField(compiler, { className: relatedBy.className, name }, relatedBy.key);\n return sql`EXISTS (\n SELECT 1\n FROM ${{ identifier: relatedBy.className }} AS ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${_foreign('_id')} = ${{ value: relatedBy.objectId }} AND ${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${field})\n )`;\n}","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { SqlDialect } from '../../sql';\nimport {\n quote,\n identifier,\n placeholder,\n boolean,\n encodeSortKey,\n random, \n} from './basic';\nimport { updateOperation } from './update';\nimport {\n encodeQueryExpression\n} from './query';\nimport { encodeFieldExpression } from './query/selectors';\nimport { selectPopulate, encodePopulate } from './populate';\nimport { encodeRelation } from './relation';\nimport {\n encodeType,\n decodeType\n} from './encode';\n\nexport const PostgresDialect = {\n quote,\n identifier,\n placeholder,\n boolean,\n encodeType,\n decodeType,\n updateOperation,\n selectPopulate,\n encodeFieldExpression,\n encodeQueryExpression,\n encodePopulate,\n encodeRelation,\n encodeSortKey,\n random,\n};\n","//\n// base.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PostgresClientDriver, PostgresDriver } from '../driver';\nimport { SQL, SqlStorage, sql } from '../../sql';\nimport { PostgresDialect } from '../dialect';\nimport { _encodeJsonValue } from '../dialect/encode';\nimport { QueryCompiler } from '../../sql/compiler';\nimport { DecodedQuery, FindOptions } from '../../../../server/storage';\nimport { TransactionOptions } from '../../../../internals/proto';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValueWithoutObject } from '../../../../internals/types';\nimport { TPubSub } from '../../../../server/pubsub';\nimport { TSchema, isPointer, isRelation } from '../../../../internals/schema';\n\nexport class PostgresStorageClient<Driver extends PostgresClientDriver> extends SqlStorage implements TPubSub {\n\n protected _driver: Driver;\n\n constructor(driver: Driver) {\n super();\n this._driver = driver;\n }\n\n get dialect() {\n return PostgresDialect;\n }\n\n selectLock() {\n return false;\n }\n\n async config(acl?: string[]) {\n const config: Record<string, TValueWithoutObject> = {};\n const query = _.isNil(acl)\n ? sql`SELECT * FROM ${{ identifier: '_Config' }}`\n : sql`SELECT * FROM ${{ identifier: '_Config' }} WHERE _rperm && ${{ value: acl }}`;\n for await (const record of this.query(query)) {\n config[record._id] = _decodeValue(record.value);\n }\n return config;\n }\n async configAcl() {\n const config: Record<string, string[]> = {};\n const query = sql`SELECT * FROM ${{ identifier: '_Config' }}`;\n for await (const record of this.query(query)) {\n config[record._id] = record._rperm;\n }\n return config;\n }\n async setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]) {\n const _values = _.pickBy(values, v => !_.isNil(v));\n const nilKeys = _.keys(_.pickBy(values, v => _.isNil(v)));\n if (!_.isEmpty(_values)) {\n await this.query(sql`\n INSERT INTO ${{ identifier: '_Config' }}\n ${_.isNil(acl) ? sql`(_id, value)` : sql`(_id, _rperm, value)`}\n VALUES\n ${_.map(_values, (v, k) => _.isNil(acl)\n ? sql`(${{ value: k }}, ${_encodeJsonValue(_encodeValue(v))})`\n : sql`(${{ value: k }}, ${{ value: acl }}, ${_encodeJsonValue(_encodeValue(v))})`)}\n ON CONFLICT (_id) DO UPDATE SET value = EXCLUDED.value;\n `);\n }\n if (!_.isEmpty(nilKeys)) {\n await this.query(sql`\n DELETE FROM ${{ identifier: '_Config' }}\n WHERE _id IN (${_.map(nilKeys, k => sql`${{ value: k }}`)})\n `);\n }\n }\n\n _query(text: string, values: any[] = [], batchSize?: number) {\n return this._driver.query(text, values, batchSize);\n }\n\n async _explain(compiler: QueryCompiler, query: DecodedQuery<FindOptions>) {\n const [explain] = await this.query(sql`EXPLAIN (ANALYZE, VERBOSE, BUFFERS, FORMAT JSON) ${compiler._selectQuery(query)}`);\n return explain['QUERY PLAN'];\n }\n\n classes() {\n return Object.keys(this.schema);\n }\n\n async version() {\n return this._driver.version();\n }\n\n async databases() {\n return this._driver.databases();\n }\n\n async tables() {\n return this._driver.tables();\n }\n\n async views() {\n return this._driver.views();\n }\n\n async materializedViews() {\n return this._driver.materializedViews();\n }\n\n async columns(table: string, namespace?: string) {\n return this._driver.columns(table, namespace);\n }\n\n async indices(table: string, namespace?: string) {\n return this._driver.indices(table, namespace);\n }\n\n async lockTable(table: string | string[], update: boolean): Promise<void> {\n await this.query(sql`\n LOCK ${_.map(_.castArray(table), x => sql`${{ identifier: x }}`)} \n IN ${update ? sql`EXCLUSIVE` : sql`SHARE`} MODE \n NOWAIT\n `);\n }\n\n withConnection<T>(\n callback: (connection: PostgresStorageClient<PostgresClientDriver>) => PromiseLike<T>\n ) {\n return callback(this);\n }\n\n isDuplicateIdError(error: any) {\n return error.code === '23505' && error.table && error.constraint === `${error.table}_pkey`;\n }\n\n atomic<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ): PromiseLike<T> {\n return this.withTransaction(async conn => {\n if (options?.lockTable) await conn.lockTable(options.lockTable, true);\n return callback(conn);\n }, { mode: 'repeatable', retry: true });\n }\n\n async withTransaction<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n\n const beginMap = {\n 'committed': sql`BEGIN ISOLATION LEVEL READ COMMITTED`,\n 'repeatable': sql`BEGIN ISOLATION LEVEL REPEATABLE READ`,\n 'serializable': sql`BEGIN ISOLATION LEVEL SERIALIZABLE`,\n default: sql`BEGIN`,\n };\n\n const _begin = options && _.isString(options.mode)\n ? beginMap[options.mode as keyof typeof beginMap] ?? beginMap.default\n : beginMap.default;\n\n try {\n\n return await this.withConnection(async (connection) => {\n\n const transaction = new PostgresStorageTransaction(connection._driver, 0, options?.mode === 'repeatable');\n transaction.schema = this.schema;\n\n try {\n\n await transaction.query(_begin);\n const result = await callback(transaction);\n await transaction.query(sql`COMMIT`);\n\n return result\n\n } catch (e: any) {\n await transaction.query(sql`ROLLBACK`);\n throw e;\n }\n });\n\n } catch (e: any) {\n\n if (options?.retry && ['40001', '40P01', '55P03'].includes(e.code)) {\n return this.withTransaction(callback, {\n ...options,\n retry: _.isNumber(options.retry) ? Math.max(0, options.retry - 1) : options.retry,\n });\n }\n\n throw e;\n }\n }\n\n subscribe(channel: string, callback: (payload: TValueWithoutObject) => void) {\n const db = this._driver;\n if (!(db instanceof PostgresDriver)) throw Error('Invalid pubsub instance');\n return db.subscribe(channel, callback);\n }\n\n publish(channel: string, payload: TValueWithoutObject) {\n return this._driver.publish(channel, payload);\n }\n\n _refs(\n schema: Record<string, TSchema>,\n className: string,\n keys: string[],\n item: SQL,\n ) {\n const _schema = _.pickBy(_.mapValues(schema, s => _.pickBy(\n s.fields,\n f => (isPointer(f) || (isRelation(f) && _.isNil(f.foreignField))) && f.target === className\n )) as Record<string, Record<string, TSchema.PointerType | TSchema.RelationType>>, s => !_.isEmpty(s));\n return sql`${{\n literal: _.map(_schema, (fields, className) => sql`\n SELECT\n ${{ quote: className }} AS ${{ identifier: '_class' }},\n ${_.map(keys, k => sql`${{ identifier: className }}.${{ identifier: k }}`)}\n FROM ${{ identifier: className }}\n WHERE ${{\n literal: _.map(fields, (f, key) => isPointer(f)\n ? sql`${item} = ${{ identifier: className }}.${{ identifier: key }}`\n : sql`${item} = ANY(${{ identifier: className }}.${{ identifier: key }})`),\n separator: ' OR ',\n }}\n `),\n separator: ' UNION '\n }}`;\n }\n}\n\nclass PostgresStorageTransaction extends PostgresStorageClient<PostgresClientDriver> {\n\n counter: number;\n private _selectLock: boolean;\n\n constructor(driver: PostgresClientDriver, counter: number, selectLock: boolean) {\n super(driver);\n this.counter = counter;\n this._selectLock = selectLock;\n }\n\n selectLock() {\n return this._selectLock;\n }\n\n override atomic<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ) {\n if (!options?.retry) return callback(this);\n return this.withTransaction(async conn => {\n if (options?.lockTable) await conn.lockTable(options.lockTable, true);\n return callback(conn);\n });\n }\n\n override async withTransaction<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>\n ) {\n\n const transaction = new PostgresStorageTransaction(this._driver, this.counter + 1, this._selectLock);\n transaction.schema = this.schema;\n\n try {\n\n await transaction.query(sql`SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n const result = await callback(transaction);\n await transaction.query(sql`RELEASE SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n\n return result;\n\n } catch (e) {\n await transaction.query(sql`ROLLBACK TO SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n throw e;\n }\n }\n}\n","//\n// pool.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PoolConfig } from 'pg';\nimport { TSchema, _isTypeof, isPointer, isPrimitive, isRelation, isShape, isVector, shapePaths } from '../../../../internals/schema';\nimport { PostgresDriver, PostgresClientDriver } from '../driver';\nimport { sql } from '../../sql';\nimport { PostgresStorageClient } from './base';\nimport { TObject } from '../../../../internals/object';\n\nconst resolveDataType = (\n schema: TSchema,\n path: string,\n) => {\n let fields = schema.fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) return dataType;\n if (!isShape(dataType)) return dataType;\n fields = dataType.shape;\n }\n return last;\n}\n\nexport class PostgresStorage extends PostgresStorageClient<PostgresDriver> {\n\n constructor(config: string | PoolConfig) {\n super(new PostgresDriver(config));\n }\n\n async shutdown() {\n await super.shutdown();\n await this._driver.shutdown();\n }\n\n async prepare(schema: Record<string, TSchema>) {\n await super.prepare(schema);\n await this._enableExtensions();\n await this._createSystemTable();\n for (const [className, _schema] of _.toPairs(schema)) {\n await this._createTable(className, _schema);\n await this._dropIndices(className, _schema);\n await this._rebuildColumns(className, _schema);\n await this._createIndices(className, _schema);\n }\n }\n\n private _pgType(type: TSchema.Primitive | 'pointer' | 'relation' | 'vector') {\n switch (type) {\n case 'boolean': return 'BOOLEAN';\n case 'number': return 'DOUBLE PRECISION';\n case 'decimal': return 'DECIMAL';\n case 'string': return 'TEXT';\n case 'string[]': return 'TEXT[]';\n case 'date': return 'TIMESTAMP(3) WITH TIME ZONE';\n case 'object': return 'JSONB';\n case 'array': return 'JSONB[]';\n case 'vector': return 'DOUBLE PRECISION[]';\n case 'pointer': return 'TEXT';\n case 'relation': return 'TEXT[]';\n default: throw Error('Unknown data type');\n }\n }\n\n private async _enableExtensions() {\n const found = await this.query(sql`SELECT * FROM pg_available_extensions WHERE name = 'vector'`);\n if (!_.isEmpty(found)) {\n await this.query(sql`CREATE EXTENSION IF NOT EXISTS vector`);\n }\n }\n\n private async _createSystemTable() {\n await this.query(sql`\n CREATE TABLE\n IF NOT EXISTS ${{ identifier: '_Config' }}\n (\n _id TEXT PRIMARY KEY,\n _rperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[],\n value JSONB\n )\n `);\n }\n\n private _fields(schema: TSchema) {\n const fields: Record<string, Exclude<TSchema.DataType, TSchema.ShapeType>> = {};\n for (const [key, dataType] of _.entries(schema.fields)) {\n if (isShape(dataType)) {\n for (const { path, type } of shapePaths(dataType)) {\n fields[`${key}.${path}`] = type;\n }\n } else {\n fields[key] = dataType;\n }\n }\n return fields;\n }\n\n private async _createTable(className: string, schema: TSchema) {\n const fields = _.pickBy(\n this._fields(schema), (x, k) => !_.includes(TObject.defaultKeys, k) && (!isRelation(x) || _.isNil(x.foreignField))\n );\n await this.query(sql`\n CREATE TABLE\n IF NOT EXISTS ${{ identifier: className }}\n (\n _id TEXT PRIMARY KEY,\n __v INTEGER NOT NULL DEFAULT 0,\n __i BIGSERIAL NOT NULL UNIQUE,\n _created_at TIMESTAMP(3) WITH TIME ZONE NOT NULL DEFAULT NOW(),\n _updated_at TIMESTAMP(3) WITH TIME ZONE NOT NULL DEFAULT NOW(),\n _expired_at TIMESTAMP(3) WITH TIME ZONE,\n _rperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[],\n _wperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[]\n ${_.isEmpty(fields) ? sql`` : sql`, ${_.map(fields, (dataType, col) => sql`\n ${{ identifier: col }} ${{ literal: this._pgType(_.isString(dataType) ? dataType : dataType.type) }}\n `)}`}\n )\n `);\n await this.query(sql`\n CREATE UNIQUE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: `${className}$_id` }}\n ON ${{ identifier: className }}\n ((${{ quote: className + '$' }} || _id))\n `);\n }\n\n private _indicesOf(schema: TSchema) {\n const fields = this._fields(schema);\n const pointers = _.pickBy(fields, v => isPointer(v));\n const relations = _.pickBy(fields, v => isRelation(v) && _.isNil(v.foreignField));\n return {\n relations,\n indexes: [\n ..._.map(_.keys(pointers), k => ({ keys: { [k]: 1 } }) as TSchema.Indexes),\n ..._.map(_.keys(relations), k => ({ keys: { [k]: 1 } }) as TSchema.Indexes),\n ...(schema.indexes ?? []),\n ],\n };\n }\n\n private _indexBasicName(className: string, keys: Record<string, 1 | -1>, unique: boolean) {\n if (unique) return `${className}$u$${_.map(keys, (v, k) => `${k}:${v}`).join('$')}`;\n return `${className}$b$${_.map(keys, (v, k) => `${k}:${v}`).join('$')}`;\n }\n\n private _indexVectorName(className: string, keys: string[]) {\n return {\n 'vector_l1_ops': `${className}$v1$${keys.join('$')}`,\n 'vector_l2_ops': `${className}$v2$${keys.join('$')}`,\n 'vector_ip_ops': `${className}$vi$${keys.join('$')}`,\n 'vector_cosine_ops': `${className}$vc$${keys.join('$')}`,\n };\n }\n\n private async _dropIndices(className: string, schema: TSchema) {\n const { indexes } = this._indicesOf(schema);\n const names: string[] = [];\n for (const index of indexes) {\n if (_.isEmpty(index.keys)) continue;\n switch (index.type) {\n case 'vector':\n names.push(..._.values(this._indexVectorName(className, _.castArray(index.keys))));\n break;\n default:\n names.push(this._indexBasicName(className, index.keys, !!index.unique));\n break;\n }\n }\n for (const [name, { is_primary }] of _.toPairs(await this.indices(className))) {\n if (is_primary || names.includes(name)) continue;\n if (name.endsWith('__i_key')) continue;\n await this.query(sql`DROP INDEX CONCURRENTLY IF EXISTS ${{ identifier: name }}`);\n }\n }\n\n private async _rebuildColumns(className: string, schema: TSchema) {\n const columns = await this.columns(className);\n const typeMap: Record<string, string> = {\n 'timestamp': 'timestamp(3) without time zone',\n 'numeric': 'decimal',\n };\n const fields = this._fields(schema);\n const rebuild: { name: string; type: string; }[] = [];\n for (const column of columns) {\n if (TObject.defaultKeys.includes(column.name)) continue;\n const dataType = fields[column.name];\n if (!dataType) continue;\n if (!_.isString(dataType) && dataType.type === 'relation' && !_.isNil(dataType.foreignField)) continue;\n const pgType = this._pgType(_.isString(dataType) ? dataType : dataType.type);\n if (pgType.toLowerCase() === (typeMap[column.type] ?? column.type)) continue;\n rebuild.push({ name: column.name, type: pgType });\n }\n for (const column of _.difference(_.keys(fields), _.map(columns, x => x.name))) {\n const dataType = fields[column];\n const pgType = this._pgType(_.isString(dataType) ? dataType : dataType.type);\n rebuild.push({ name: column, type: pgType });\n }\n if (_.isEmpty(rebuild)) return;\n await this.query(sql`\n ALTER TABLE ${{ identifier: className }}\n ${_.map(rebuild, ({ name, type }) => sql`\n DROP COLUMN IF EXISTS ${{ identifier: name }},\n ADD COLUMN ${{ identifier: name }} ${{ literal: type }}\n `)}\n `);\n }\n\n private async _createIndices(className: string, schema: TSchema) {\n const { relations, indexes } = this._indicesOf(schema);\n for (const index of indexes) {\n if (_.isEmpty(index.keys)) continue;\n switch (index.type) {\n case 'vector':\n {\n const name = this._indexVectorName(className, _.castArray(index.keys));\n const ops = _.keys(name) as (keyof typeof name)[];\n const method = index.method ?? 'hnsw';\n if (_.isArray(index.keys)) {\n for (const op of ops) {\n await this.query(sql`\n CREATE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name[op] }}\n ON ${{ identifier: className }}\n USING ${{ literal: method }} (\n CAST(\n ARRAY[${_.map(index.keys, k => sql`COALESCE(${{ identifier: k }}, 0)`)}]\n AS VECTOR(${{ literal: `${index.keys.length}` }})\n ) ${{ literal: op }}\n )\n `);\n }\n } else {\n const column = index.keys;\n const dataType = schema.fields[column];\n if (!isVector(dataType)) throw Error('Invalid index type');\n for (const op of ops) {\n await this.query(sql`\n CREATE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name[op] }}\n ON ${{ identifier: className }}\n USING ${{ literal: method }} (\n CAST(\n ${{ identifier: column }} AS VECTOR(${{ literal: `${dataType.dimension}` }})\n ) ${{ literal: op }}\n )\n `);\n }\n }\n }\n break;\n default:\n {\n const name = this._indexBasicName(className, index.keys, !!index.unique);\n const useGin = _.some(_.keys(index.keys), column => {\n const dataType = resolveDataType(schema, column);\n if (!dataType || isShape(dataType)) throw Error('Invalid index type');\n return _isTypeof(dataType, 'string[]') || _.has(relations, column);\n });\n await this.query(sql`\n CREATE ${{ literal: index.unique ? 'UNIQUE' : '' }} INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name }}\n ON ${{ identifier: className }}\n ${{ literal: useGin ? 'USING GIN' : '' }}\n (${_.map(index.keys, (v, k) => sql`\n ${{ identifier: k }} ${{ literal: useGin ? '' : v === 1 ? 'ASC' : 'DESC' }}\n `)})\n `);\n }\n break;\n }\n }\n }\n\n override withConnection<T>(\n callback: (connection: PostgresStorageClient<PostgresClientDriver>) => PromiseLike<T>\n ) {\n return this._driver.withClient((client) => {\n const connection = new PostgresStorageClient(client);\n connection.schema = this.schema;\n return callback(connection);\n });\n }\n}\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { PostgresStorage } from './client/pool';\n\nexport { PostgresStorage };\nexport default PostgresStorage;"],"names":["generateId","resolveColumn","isRelation","isPointer","resolveDataType","isShape","decodeUpdateOp","shapePaths","QueryCoditionalSelector","QueryFieldSelector","QueryExpressionSelector","isPrimitive","TObject","PVK","_isTypeof","isVector","QueryValidator","escapeLiteral","escapeIdentifier","types","asyncStream","Pool","IteratorPool","PROTO_EVENT","_encodeValue","_decodeValue","_typeof","dimensionOf","QueryArrayExpression","QueryValueExpression","QueryKeyExpression","QueryCoditionalExpression","QueryComparisonExpression","QueryNotExpression","QueryDistanceExpression","QuerySelector","FieldSelectorExpression","index"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"progres.js","sources":["../../../../src/adapters/storage/sql/sql.ts","../../../../src/adapters/storage/sql/compiler.ts","../../../../src/adapters/storage/sql/storage.ts","../../../../src/adapters/storage/progres/dialect/query/utils.ts","../../../../src/adapters/storage/progres/dialect/basic.ts","../../../../src/adapters/storage/progres/driver/index.ts","../../../../src/adapters/storage/progres/dialect/encode.ts","../../../../src/adapters/storage/progres/dialect/update.ts","../../../../src/adapters/storage/progres/dialect/query/expressions.ts","../../../../src/adapters/storage/progres/dialect/populate.ts","../../../../src/adapters/storage/progres/dialect/query/selectors.ts","../../../../src/adapters/storage/progres/dialect/relation.ts","../../../../src/adapters/storage/progres/dialect/index.ts","../../../../src/adapters/storage/progres/client/base.ts","../../../../src/adapters/storage/progres/client/pool.ts","../../../../src/adapters/storage/progres/index.ts"],"sourcesContent":["//\n// sql.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SqlDialect } from './dialect';\nimport { TValueWithUndefined } from '../../../internals/types';\nimport Decimal from 'decimal.js';\n\ntype SQLLiteral = SQL | SQL[] | { literal: string | SQL[], separator?: string };\ntype SQLIdentifier = { identifier: string };\ntype SQLEscapeString = { quote: string };\ntype SQLValue = { value: TValueWithUndefined } | SQLIdentifier | SQLLiteral | SQLEscapeString;\n\nconst isSQLArray = (v: any): v is SQL[] => _.isArray(v) && _.every(v, x => x instanceof SQL);\n\nexport class SQL {\n\n strings: TemplateStringsArray;\n values: SQLValue[];\n\n constructor(templates: TemplateStringsArray, values: SQLValue[]) {\n this.strings = templates;\n this.values = values;\n }\n\n private _compile(dialect: SqlDialect, nextIdx: () => number) {\n let [query, ...strings] = this.strings;\n const values: any[] = [];\n for (const [value, str] of _.zip(this.values, strings)) {\n if (_.isNil(value)) break;\n if (value instanceof SQL) {\n const { query: _query, values: _values } = value._compile(dialect, nextIdx);\n query += _query;\n values.push(..._values);\n } else if (isSQLArray(value)) {\n const queries: string[] = [];\n for (const subquery of value) {\n const { query: _query, values: _values } = subquery._compile(dialect, nextIdx);\n queries.push(_query);\n values.push(..._values);\n }\n query += queries.join(', ');\n } else if ('quote' in value) {\n query += dialect.quote(value.quote);\n } else if ('identifier' in value) {\n query += dialect.identifier(value.identifier);\n } else if ('literal' in value) {\n if (_.isString(value.literal)) {\n query += value.literal;\n } else {\n const queries: string[] = [];\n for (const subquery of value.literal) {\n const { query: _query, values: _values } = subquery._compile(dialect, nextIdx);\n queries.push(_query);\n values.push(..._values);\n }\n query += queries.join(value.separator ?? ', ');\n }\n } else if (_.isBoolean(value.value)) {\n query += dialect.boolean(value.value);\n } else if (_.isString(value.value)) {\n query += `${dialect.placeholder(nextIdx())}::TEXT`;\n values.push(value.value);\n } else if (_.isSafeInteger(value.value)) {\n query += `${value.value}`;\n } else if (_.isNumber(value.value)) {\n query += `${dialect.placeholder(nextIdx())}::DOUBLE PRECISION`;\n values.push(value.value);\n } else if (value.value instanceof Decimal) {\n query += `${dialect.placeholder(nextIdx())}::DECIMAL`;\n values.push(value.value.toString());\n } else {\n query += dialect.placeholder(nextIdx());\n values.push(value.value);\n }\n query += str;\n }\n return { query: _.compact(query.split('\\n').filter(x => !x.match(/^\\s+$/g))).join('\\n'), values };\n }\n\n compile(dialect: SqlDialect) {\n let idx = 1;\n return this._compile(dialect, () => idx++);\n }\n}\n\nexport const sql = (templates: TemplateStringsArray, ...values: SQLValue[]) => new SQL(templates, values);\n","//\n// compiler.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { TSchema, isPointer, isPrimitive, isRelation, isShape, shapePaths } from '../../../internals/schema';\nimport { QueryCoditionalSelector, QueryExpressionSelector, QueryFieldSelector, QuerySelector } from '../../../server/query/dispatcher/parser';\nimport { DecodedBaseQuery, DecodedQuery, FindOptions, InsertOptions, DecodedSortOption, RelationOptions } from '../../../server/storage';\nimport { SQL, sql } from './sql';\nimport { generateId } from '../../../server/crypto/random';\nimport { SqlDialect } from './dialect';\nimport { resolveColumn, resolveDataType } from '../../../server/query/dispatcher/validator';\nimport { decodeUpdateOp } from '../../../internals/object';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { TValueWithUndefined } from '../../../internals/types';\nimport { QueryAccumulator } from '../../../server/query/dispatcher/parser/accumulators';\n\nexport type QueryCompilerOptions = {\n className: string;\n filter?: QuerySelector;\n sort?: Record<string, 1 | -1> | DecodedSortOption[];\n includes: string[];\n matches: Record<string, DecodedBaseQuery>;\n}\n\nexport type QueryContext = {\n name: string;\n className?: string;\n includes?: Record<string, TSchema.DataType>;\n populates?: Record<string, Populate>;\n groupMatches?: Record<string, Record<string, QueryAccumulator>>;\n}\n\nexport type Populate = Required<QueryContext> & {\n colname: string;\n type: 'pointer' | 'relation';\n foreignField?: string;\n subpaths: string[];\n filter?: QuerySelector;\n sort?: Record<string, 1 | -1> | DecodedSortOption[];\n skip?: number;\n limit?: number;\n}\n\nconst _resolveSortingName = (\n key: string,\n includes: Record<string, TSchema.DataType>,\n populates: Record<string, Populate>,\n) => {\n let resolved: string | undefined;\n let resolvedField = false;\n for (const colname of _.toPath(key)) {\n const name = resolved ? `${resolved}.${colname}` : colname;\n if (resolvedField || includes[name]) {\n resolved = name;\n resolvedField = true;\n } else if (populates[name]) {\n resolved = populates[name].name;\n includes = populates[name].includes;\n populates = populates[name].populates;\n } else if (_.some(_.keys(includes), x => _.startsWith(x, `${name}.`))) {\n resolved = name;\n } else {\n throw Error(`Invalid path: ${key}`);\n }\n }\n return resolved;\n}\n\nconst _encodeSorting = (\n includes: Record<string, TSchema.DataType>,\n populates: Record<string, Populate>,\n sort?: Record<string, 1 | -1> | DecodedSortOption[],\n) => {\n if (_.isArray(sort)) {\n return _.map(sort, x => ({\n order: x.order,\n expr: x.expr.mapKey(key => {\n const resolved = _resolveSortingName(key, includes, populates);\n if (!resolved) throw Error(`Invalid path: ${key}`);\n return resolved;\n }),\n }));\n }\n const sorting: Record<string, 1 | -1> = {};\n for (const [key, order] of _.toPairs(sort)) {\n const resolved = _resolveSortingName(key, includes, populates);\n if (!resolved) throw Error(`Invalid path: ${key}`);\n sorting[resolved] = order;\n }\n return sorting;\n}\n\nconst _defaultInsertOpts = (options: InsertOptions) => {\n const objectId = generateId(options.objectIdSize);\n return {\n _id: sql`${{ value: objectId }}`,\n ...options.className === 'User' ? {\n _rperm: sql`${{ value: [objectId] }}`,\n _wperm: sql`${{ value: [objectId] }}`,\n } : {},\n };\n}\n\ntype _SelectOptions = {\n select?: SQL,\n sort?: SQL,\n extraFilter?: SQL,\n};\n\nexport class QueryCompiler {\n\n schema: Record<string, TSchema>;\n dialect: SqlDialect;\n selectLock: boolean;\n isUpdate: boolean;\n\n extraFilter?: (className: string) => QuerySelector;\n\n idx = 0;\n\n constructor(options: {\n schema: Record<string, TSchema>;\n dialect: SqlDialect;\n selectLock: boolean;\n isUpdate: boolean;\n extraFilter?: (className: string) => QuerySelector;\n }) {\n this.schema = options.schema;\n this.dialect = options.dialect;\n this.selectLock = options.selectLock;\n this.isUpdate = options.isUpdate;\n this.extraFilter = options.extraFilter;\n }\n\n nextIdx() {\n return this.idx++;\n }\n\n private _encodeIncludes(query: {\n className: string;\n includes: string[];\n matches: Record<string, DecodedBaseQuery>;\n groupMatches: Record<string, Record<string, QueryAccumulator>>;\n }) {\n\n const names: Record<string, TSchema.DataType> = {};\n const populates: Record<string, Populate> = {};\n const groupMatches: Record<string, Record<string, QueryAccumulator>> = {};\n\n for (const include of query.includes) {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(this.schema, query.className, include);\n\n names[colname] = dataType;\n\n if (isRelation(dataType) && !_.isNil(query.groupMatches[colname])) groupMatches[colname] = query.groupMatches[colname];\n\n if (isPointer(dataType) || isRelation(dataType)) {\n if (_.isEmpty(subpath)) throw Error(`Invalid path: ${include}`);\n const _matches = query.matches[colname];\n populates[colname] = populates[colname] ?? {\n name: `t${this.nextIdx()}`,\n className: dataType.target,\n subpaths: [],\n filter: _matches.filter,\n skip: _matches.skip,\n limit: _matches.limit,\n type: dataType.type,\n colname,\n };\n if (isRelation(dataType) && dataType.foreignField) {\n const targetType = resolveDataType(this.schema, dataType.target, dataType.foreignField);\n if (_.isNil(targetType)) throw Error(`Invalid path: ${include}`);\n if (!isPointer(targetType) && !isRelation(targetType)) throw Error(`Invalid path: ${include}`);\n populates[colname].foreignField = dataType.foreignField;\n }\n populates[colname].subpaths.push(subpath.join('.'));\n } else if (!_.isEmpty(subpath)) {\n throw Error(`Invalid path: ${include}`);\n }\n }\n\n for (const [colname, populate] of _.toPairs(populates)) {\n const _matches = query.matches[colname];\n const { includes, populates, groupMatches } = this._encodeIncludes({\n className: populate.className,\n includes: populate.subpaths,\n matches: _matches.matches,\n groupMatches: {\n ..._.mapKeys(_.pickBy(query.groupMatches, (x, k) => _.startsWith(k, `${colname}.`)) , (x, k) => k.slice(colname.length + 1)),\n ..._matches.groupMatches ?? {},\n },\n });\n populate.sort = _encodeSorting(includes, populates, _matches.sort);\n populate.includes = includes;\n populate.populates = populates;\n populate.groupMatches = groupMatches;\n }\n\n return {\n className: query.className,\n includes: names,\n populates,\n groupMatches,\n };\n }\n\n private _baseSelectQuery(\n query: DecodedQuery<FindOptions & RelationOptions>,\n options?: _SelectOptions | ((x: { fetchName: string; }) => _SelectOptions),\n ) {\n\n const fetchName = `_fetch_$${query.className.toLowerCase()}`;\n const context = { ...this._encodeIncludes(query), name: fetchName };\n\n const _stages = _.mapValues(context.populates, (populate) => this.dialect.encodePopulate(this, populate));\n const stages = _.fromPairs(_.flatMap(_.values(_stages), (p) => _.toPairs(p)));\n\n const baseFilter = this._encodeFilter(context, query.filter);\n const populates = this._selectPopulateMap(context);\n const joins = _.compact(_.map(populates, ({ join }) => join));\n\n const includes = {\n literal: [\n ...this._selectIncludes(fetchName, context.includes),\n ..._.flatMap(populates, ({ columns }) => columns),\n ],\n separator: ',\\n',\n };\n\n const _options = _.isFunction(options) ? options({ fetchName }) : options;\n const filter = _.compact([\n baseFilter,\n _options?.extraFilter,\n query.relatedBy && this.dialect.encodeRelation(this, context, query.relatedBy),\n ]);\n\n return {\n stages,\n fetchName,\n context,\n query: sql`\n SELECT ${_options?.select ? _options?.select : sql`*`} FROM (\n SELECT ${includes}\n FROM ${{ identifier: query.className }} AS ${{ identifier: fetchName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n ${this.selectLock ? this.isUpdate ? sql`FOR UPDATE NOWAIT` : sql`FOR SHARE NOWAIT` : sql``}\n ) AS ${{ identifier: fetchName }}\n ${!_.isEmpty(filter) ? sql`WHERE ${{ literal: _.map(filter, x => sql`(${x})`), separator: ' AND ' }}` : sql``}\n ${_options?.sort ? _options?.sort : sql``}\n ${!_.isEmpty(query.sort) ? sql`ORDER BY ${this._encodeSort(query.sort, {\n name: fetchName,\n className: query.className,\n groupMatches: query.groupMatches,\n })}` : sql``}\n ${query.limit ? sql`LIMIT ${{ literal: `${query.limit}` }}` : sql``}\n ${query.skip ? sql`OFFSET ${{ literal: `${query.skip}` }}` : sql``}\n `,\n };\n }\n\n private _refetch(\n name: string,\n query: DecodedQuery<FindOptions>,\n ) {\n\n const _context = { ...this._encodeIncludes(query), name };\n const populates = _.mapValues(\n _context.populates, (populate) => this.dialect.encodePopulate(this, populate, { className: query.className, name })\n );\n const stages = _.fromPairs(_.flatMap(_.values(populates), (p) => _.toPairs(p)));\n\n const _populates = this._selectPopulateMap(_context);\n const _joins = _.compact(_.map(_populates, ({ join }) => join));\n\n const _includes = {\n literal: [\n ...this._selectIncludes(name, _context.includes),\n ..._.flatMap(_populates, ({ columns }) => columns),\n ], separator: ',\\n'\n };\n\n return sql`\n ${!_.isEmpty(stages) ? sql`, ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n SELECT ${_includes}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(_joins) ? { literal: _joins, separator: '\\n' } : sql``}\n `;\n }\n\n _selectQuery(\n query: DecodedQuery<FindOptions & RelationOptions>,\n options?: _SelectOptions | ((x: { fetchName: string; }) => _SelectOptions),\n ) {\n const { stages, query: _query } = this._baseSelectQuery(query, options);\n return sql`\n ${!_.isEmpty(stages) ? sql`WITH ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n ${_query}\n `;\n }\n\n private _modifyQuery(\n query: DecodedQuery<FindOptions>,\n action: (fetchName: string, context: QueryContext & { className: string; }) => SQL\n ) {\n const { stages, fetchName, query: _query, context } = this._baseSelectQuery(query);\n stages[fetchName] = _query;\n return sql`\n ${!_.isEmpty(stages) ? sql`WITH ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n ${action(fetchName, context)}\n `;\n }\n\n private _encodeUpdateAttrs(className: string, attrs: Record<string, TUpdateOp>): SQL[] {\n const updates: SQL[] = [\n sql`__v = __v + 1`,\n sql`_updated_at = NOW()`,\n ];\n for (const [path, op] of _.toPairs(attrs)) {\n const { paths: [column, ...subpath], dataType } = resolveColumn(this.schema, className, path);\n if (isShape(dataType)) {\n const [_op, value] = decodeUpdateOp(op);\n if (_op !== '$set') throw Error('Invalid update operation');\n for (const { path, type } of shapePaths(dataType)) {\n if (!isRelation(type) || _.isNil(type.foreignField)) {\n updates.push(sql`${{ identifier: `${column}.${path}` }} = ${this.dialect.updateOperation(\n [`${column}.${path}`], type, { $set: _.get(value, path) ?? null }\n )}`);\n }\n }\n } else {\n updates.push(sql`${{ identifier: column }} = ${this.dialect.updateOperation(\n [column, ...subpath], dataType, op\n )}`);\n }\n }\n return updates;\n }\n\n private _encodeObjectAttrs(className: string, attrs: Record<string, TValueWithUndefined>): Record<string, SQL> {\n const result: Record<string, SQL> = {};\n for (const [key, value] of _.toPairs(attrs)) {\n const { paths: [column, ...subpath], dataType } = resolveColumn(this.schema, className, key);\n if (!_.isEmpty(subpath)) throw Error(`Invalid insert key: ${key}`);\n if (isShape(dataType)) {\n for (const { path, type } of shapePaths(dataType)) {\n if (!isRelation(type) || _.isNil(type.foreignField)) {\n result[`${column}.${path}`] = this.dialect.encodeType(`${column}.${path}`, type, _.get(value, path) ?? null);\n }\n }\n } else {\n result[column] = this.dialect.encodeType(column, dataType, value);\n }\n }\n return result;\n }\n\n private _encodeCoditionalSelector(\n parent: QueryContext,\n filter: QueryCoditionalSelector,\n ) {\n const queries = _.compact(_.map(filter.exprs, x => this._encodeFilter(parent, x)));\n if (_.isEmpty(queries)) return;\n switch (filter.type) {\n case '$and': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' AND ' }})`;\n case '$nor': return sql`(${{ literal: _.map(queries, x => sql`NOT (${x})`), separator: ' AND ' }})`;\n case '$or': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' OR ' }})`;\n }\n }\n\n _encodeFilter(\n parent: QueryContext,\n filter: QuerySelector,\n ): SQL | undefined {\n if (filter instanceof QueryCoditionalSelector) {\n return this._encodeCoditionalSelector(parent, filter);\n }\n if (filter instanceof QueryFieldSelector) {\n return this.dialect.encodeFieldExpression(this, parent, filter.field, filter.expr);\n }\n if (filter instanceof QueryExpressionSelector) {\n return this.dialect.encodeQueryExpression(this, parent, filter.expr);\n }\n }\n\n _selectIncludes(\n className: string,\n includes: Record<string, TSchema.DataType>,\n ): SQL[] {\n const _includes = _.pickBy(includes, v => _.isString(v) || (v.type !== 'pointer' && v.type !== 'relation'));\n return _.flatMap(_includes, (dataType, colname) => {\n if (!_.isString(dataType) && isPrimitive(dataType) && !_.isNil(dataType.default)) {\n return sql`COALESCE(${{ identifier: className }}.${{ identifier: colname }}, ${{ value: dataType.default }}) AS ${{ identifier: colname }}`;\n }\n return sql`${{ identifier: className }}.${{ identifier: colname }}`;\n });\n }\n\n _encodeSort(\n sort: Record<string, 1 | -1> | DecodedSortOption[],\n parent: QueryContext,\n ): SQL {\n if (_.isArray(sort)) {\n return sql`${_.map(sort, ({ expr, order }) => {\n const _expr = this.dialect.encodeQueryExpression(this, parent, expr);\n if (!_expr) throw Error('Invalid expression');\n return sql`${_expr} ${{ literal: order === 1 ? 'ASC' : 'DESC' }}`;\n })}`;\n }\n return sql`${_.map(sort, (order, key) => sql`\n ${this.dialect.encodeSortKey(this, parent, key)} ${{ literal: order === 1 ? 'ASC' : 'DESC' }}\n `)}`;\n }\n\n private _selectPopulateMap(\n context: QueryContext & { className: string; },\n ) {\n return _.map(context.populates, (populate, field) => this.dialect.selectPopulate(\n this,\n context,\n populate,\n field,\n ));\n }\n\n insert(options: InsertOptions, values: Record<string, TValueWithUndefined>[]) {\n\n const _values: Record<string, SQL>[] = _.map(values, attr => ({\n ..._defaultInsertOpts(options),\n ...this._encodeObjectAttrs(options.className, attr),\n }));\n\n const keys = _.uniq(_.flatMap(_values, x => _.keys(x)));\n\n const name = `_insert_$${options.className.toLowerCase()}`;\n\n const context = { ...this._encodeIncludes(options), name };\n const populates = _.mapValues(context.populates, (populate) => this.dialect.encodePopulate(this, populate));\n const stages = _.fromPairs(_.flatMap(_.values(populates), (p) => _.toPairs(p)));\n\n const _populates = this._selectPopulateMap(context);\n const joins = _.compact(_.map(_populates, ({ join }) => join));\n\n return sql`\n WITH ${{ identifier: name }} AS (\n INSERT INTO ${{ identifier: options.className }}\n (${_.map(keys, x => sql`${{ identifier: x }}`)})\n VALUES ${_.map(_values, v => sql`(${_.map(keys, k => sql`${v[k]}`)})`)}\n RETURNING *\n )${!_.isEmpty(stages) ? sql`, ${_.map(stages, (q, n) => sql`${{ identifier: n }} AS (${q})`)}` : sql``}\n SELECT ${{\n literal: [\n ...this._selectIncludes(name, context.includes),\n ..._.flatMap(_populates, ({ columns }) => columns),\n ], separator: ',\\n'\n }}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n `;\n }\n\n update(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>) {\n return this._modifyQuery(\n query,\n (fetchName) => {\n const name = `_update_$${query.className.toLowerCase()}`;\n return sql`\n , ${{ identifier: name }} AS (\n UPDATE ${{ identifier: query.className }}\n SET ${this._encodeUpdateAttrs(query.className, update)}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n ${this._refetch(name, query)}\n `;\n }\n );\n }\n\n upsert(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValueWithUndefined>) {\n\n const _insert: [string, SQL][] = _.toPairs({\n ..._defaultInsertOpts(query),\n ...this._encodeObjectAttrs(query.className, setOnInsert),\n });\n\n return this._modifyQuery(\n query,\n (fetchName) => {\n const updateName = `_update_$${query.className.toLowerCase()}`;\n const insertName = `_insert_$${query.className.toLowerCase()}`;\n const upsertName = `_upsert_$${query.className.toLowerCase()}`;\n return sql`\n , ${{ identifier: updateName }} AS (\n UPDATE ${{ identifier: query.className }}\n SET ${this._encodeUpdateAttrs(query.className, update)}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n , ${{ identifier: insertName }} AS (\n INSERT INTO ${{ identifier: query.className }}\n (${_.map(_insert, x => sql`${{ identifier: x[0] }}`)})\n SELECT ${_.map(_insert, x => sql`${x[1]} AS ${{ identifier: x[0] }}`)}\n WHERE NOT EXISTS(SELECT * FROM ${{ identifier: updateName }})\n RETURNING *\n )\n , ${{ identifier: upsertName }} AS (\n SELECT * FROM ${{ identifier: updateName }}\n UNION\n SELECT * FROM ${{ identifier: insertName }}\n )\n ${this._refetch(upsertName, query)}\n `;\n }\n );\n }\n\n delete(query: DecodedQuery<FindOptions>) {\n\n return this._modifyQuery(\n query,\n (fetchName, context) => {\n const name = `_delete_$${query.className.toLowerCase()}`;\n const populates = this._selectPopulateMap({ ...context, name });\n const joins = _.compact(_.map(populates, ({ join }) => join));\n return sql`\n , ${{ identifier: name }} AS (\n DELETE FROM ${{ identifier: query.className }}\n WHERE ${{ identifier: query.className }}._id IN (SELECT ${{ identifier: fetchName }}._id FROM ${{ identifier: fetchName }})\n RETURNING *\n )\n SELECT ${{\n literal: [\n ...this._selectIncludes(name, context.includes ?? {}),\n ..._.flatMap(populates, ({ columns }) => columns),\n ], separator: ',\\n'\n }}\n FROM ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n `;\n }\n );\n }\n\n}","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { DecodedQuery, FindOptions, InsertOptions, TStorage, RelationOptions, DecodedBaseQuery } from '../../../server/storage';\nimport { TransactionOptions } from '../../../internals/proto';\nimport { TSchema, isPointer, isRelation, isShape, shapePaths } from '../../../internals/schema';\nimport { SQL, sql } from './sql';\nimport { SqlDialect } from './dialect';\nimport { QueryCompiler } from './compiler';\nimport { asyncStream } from '@o2ter/utils-js';\nimport { TValue, TValueWithoutObject, TValueWithUndefined } from '../../../internals/types';\nimport { TObject } from '../../../internals/object';\nimport { PVK } from '../../../internals/private';\nimport { TQueryRandomOptions } from '../../../internals/query';\nimport { TUpdateOp } from '../../../internals/object/types';\nimport { QuerySelector } from '../../../server/query/dispatcher/parser';\nimport { QueryAccumulator } from '../../../server/query/dispatcher/parser/accumulators';\nimport { accumulatorKeyTypes } from '../../../internals/query/types/accumulators';\n\nexport abstract class SqlStorage implements TStorage {\n\n schema: Record<string, TSchema> = {};\n\n async prepare(schema: Record<string, TSchema>) {\n this.schema = schema;\n }\n\n async shutdown() { }\n\n classes() {\n return Object.keys(this.schema);\n }\n\n abstract selectLock(): boolean;\n\n abstract config(acl?: string[]): PromiseLike<Record<string, TValueWithoutObject>>;\n abstract configAcl(): PromiseLike<Record<string, string[]>>;\n abstract setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]): PromiseLike<void>;\n abstract lockTable(className: string | string[], update: boolean): Promise<void>;\n abstract withConnection<T>(callback: (connection: TStorage) => PromiseLike<T>): PromiseLike<T>;\n abstract isDuplicateIdError(error: any): boolean;\n abstract atomic<T>(\n callback: (connection: TStorage) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ): PromiseLike<T>;\n abstract withTransaction<T>(\n callback: (connection: TStorage) => PromiseLike<T>,\n options?: TransactionOptions,\n ): PromiseLike<T>;\n\n abstract get dialect(): SqlDialect;\n protected abstract _query(text: string, values: any[]): ReturnType<typeof asyncStream<any>>;\n\n abstract _refs(schema: Record<string, TSchema>, className: string, keys: string[], item: SQL): SQL;\n\n query(sql: SQL) {\n const { query, values } = sql.compile(this.dialect);\n return this._query(query, values);\n }\n\n abstract _explain(compiler: QueryCompiler, query: DecodedQuery<FindOptions & RelationOptions>): PromiseLike<any>\n\n private _decodeMatchTypes(value: any, matchType: Record<string, any>): any {\n if (!_.isPlainObject(value)) return;\n return _.mapValues(value, (v, k) => this.dialect.decodeType(matchType[k], v));\n }\n\n private _decodeShapedObject(dataType: TSchema.ShapeType, value: any, matchesType: Record<string, any>) {\n const result = {};\n for (const { path, type } of shapePaths(dataType)) {\n const matchType = _.get(matchesType, path) ?? {};\n if (_.isString(type)) {\n const _value = this.dialect.decodeType(type, _.get(value, path));\n if (!_.isNil(_value)) _.set(result, path, _value);\n } else if (isPointer(type)) {\n const _value = _.get(value, path);\n if (_.isPlainObject(_value)) {\n const decoded = this._decodeObject(type.target, _value, matchType);\n if (decoded.objectId) _.set(result, path, decoded);\n }\n } else if (isRelation(type)) {\n const _value = _.get(value, path);\n if (_.isArray(_value)) _.set(result, path, _value.map(x => this._decodeObject(type.target, x, matchType)));\n else if (_.isPlainObject(_value)) _.set(result, path, this._decodeMatchTypes(_value, matchType));\n } else {\n const _value = this.dialect.decodeType(type.type, _.get(value, path)) ?? type.default;\n if (!_.isNil(_value)) _.set(result, path, _value);\n }\n }\n return result;\n }\n\n protected _decodeObject(className: string, attrs: Record<string, any>, matchesType: Record<string, any>): TObject {\n const fields = this.schema[className].fields;\n const obj = new TObject(className);\n const _attrs: Record<string, any> = {};\n for (const [key, value] of _.toPairs(attrs)) {\n _.set(_attrs, key, value);\n }\n for (const [key, value] of _.toPairs(_attrs)) {\n const matchType = matchesType[key] ?? {};\n const dataType = fields[key];\n if (!dataType) continue;\n if (_.isString(dataType)) {\n obj[PVK].attributes[key] = this.dialect.decodeType(dataType, value);\n } else if (isShape(dataType)) {\n obj[PVK].attributes[key] = this._decodeShapedObject(dataType, value, matchType);\n } else if (isPointer(dataType)) {\n if (_.isPlainObject(value)) {\n const decoded = this._decodeObject(dataType.target, value, matchType);\n if (decoded.objectId) obj[PVK].attributes[key] = decoded;\n }\n } else if (isRelation(dataType)) {\n if (_.isArray(value)) obj[PVK].attributes[key] = value.map(x => this._decodeObject(dataType.target, x, matchType));\n else if (_.isPlainObject(value)) obj[PVK].attributes[key] = this._decodeMatchTypes(value, matchType);\n } else {\n obj[PVK].attributes[key] = this.dialect.decodeType(dataType.type, value) ?? dataType.default as any;\n }\n }\n return obj;\n }\n\n private _makeCompiler(\n isUpdate: boolean,\n extraFilter?: (className: string) => QuerySelector,\n ) {\n return new QueryCompiler({\n schema: this.schema,\n dialect: this.dialect,\n selectLock: this.selectLock(),\n isUpdate,\n extraFilter,\n });\n }\n\n async explain(query: DecodedQuery<FindOptions & RelationOptions>) {\n const compiler = this._makeCompiler(false, query.extraFilter);\n return this._explain(compiler, query);\n }\n\n async count(query: DecodedQuery<FindOptions & RelationOptions>) {\n const compiler = this._makeCompiler(false, query.extraFilter);\n const [{ count: _count }] = await this.query(compiler._selectQuery(query, {\n select: sql`COUNT(*) AS count`,\n }));\n const count = parseInt(_count);\n return _.isFinite(count) ? count : 0;\n }\n\n private _matchesType(options: {\n matches: Record<string, DecodedBaseQuery>;\n groupMatches?: Record<string, Record<string, QueryAccumulator>>;\n }): Record<string, any> {\n const types: Record<string, any> = {};\n for (const [key, match] of _.entries(options.matches)) {\n types[key] = this._matchesType(match);\n }\n for (const [key, group] of _.entries(options.groupMatches)) {\n for (const [field, expr] of _.entries(group)) {\n _.set(types, `${key}.${field}`, accumulatorKeyTypes[expr.type]);\n }\n }\n return types;\n }\n\n find(query: DecodedQuery<FindOptions & RelationOptions>) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery(query);\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object, self._matchesType(query));\n }\n })();\n }\n\n random(query: DecodedQuery<FindOptions & RelationOptions>, opts?: TQueryRandomOptions) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery({ ...query, sort: {} }, {\n sort: sql`ORDER BY ${self.dialect.random(opts ?? {})}`,\n });\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object, self._matchesType(query));\n }\n })();\n }\n\n refs(object: TObject, classNames: string[], roles?: string[]) {\n const self = this;\n const query = sql`\n SELECT *\n FROM (${this._refs(\n _.pick(this.schema, classNames), object.className, TObject.defaultKeys,\n sql`${{ value: `${object.className}$${object.objectId}` }}`,\n )}) AS \"$\"\n ${_.isNil(roles) ? sql`` : sql`WHERE ${{ identifier: '$' }}.${{ identifier: '_rperm' }} && ${{ value: roles }}`}\n `;\n return (async function* () {\n const objects = self.query(query);\n for await (const { _class, ...object } of objects) {\n yield self._decodeObject(_class, object, {});\n }\n })();\n }\n\n nonrefs(query: DecodedQuery<FindOptions>) {\n const self = this;\n const compiler = self._makeCompiler(false, query.extraFilter);\n const _query = compiler._selectQuery(query, ({ fetchName }) => ({\n extraFilter: sql`\n NOT EXISTS (${this._refs(\n this.schema, query.className, ['_id'],\n sql`(${{ quote: query.className + '$' }} || ${{ identifier: fetchName }}.${{ identifier: '_id' }})`,\n )})\n `\n }));\n return (async function* () {\n const objects = self.query(_query);\n for await (const object of objects) {\n yield self._decodeObject(query.className, object, self._matchesType(query));\n }\n })();\n }\n\n async insert(options: InsertOptions, values: Record<string, TValueWithUndefined>[]) {\n const compiler = this._makeCompiler(true);\n const result = await this.query(compiler.insert(options, values));\n return _.map(result, x => this._decodeObject(options.className, x, this._matchesType(options)));\n }\n\n async update(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const updated = await this.query(compiler.update(query, update));\n return _.map(updated, x => this._decodeObject(query.className, x, this._matchesType(query)));\n }\n\n async upsert(query: DecodedQuery<FindOptions>, update: Record<string, TUpdateOp>, setOnInsert: Record<string, TValueWithUndefined>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const upserted = await this.query(compiler.upsert(query, update, setOnInsert));\n return _.map(upserted, x => this._decodeObject(query.className, x, this._matchesType(query)));\n }\n\n async delete(query: DecodedQuery<FindOptions>) {\n const compiler = this._makeCompiler(true, query.extraFilter);\n const deleted = await this.query(compiler.delete(query));\n return _.map(deleted, x => this._decodeObject(query.className, x, this._matchesType(query)));\n }\n}\n","//\n// utils.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { sql } from '../../../sql';\nimport { Populate, QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { TSchema, _isTypeof, isPointer, isRelation, isVector } from '../../../../../internals/schema';\nimport { QueryValidator, resolveColumn } from '../../../../../server/query/dispatcher/validator';\nimport { accumulatorKeyTypes } from '../../../../../internals/query/types/accumulators';\n\nconst _fetchElement = (\n parent: QueryContext,\n colname: string,\n subpath: string[],\n dataType?: TSchema.DataType,\n) => {\n const element = sql`${{ identifier: parent.name }}.${{ identifier: parent.name.startsWith('_doller_expr_$') ? '$' : colname }}`;\n if (!parent.className) {\n if (colname !== '$') {\n return {\n element: sql`jsonb_extract_path(${element}, ${_.map([colname, ...subpath], x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)})`,\n json: true,\n };\n } else if (!_.isEmpty(subpath)) {\n return {\n element: sql`jsonb_extract_path(${element}, ${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)})`,\n json: true,\n };\n }\n } else if (!_.isEmpty(subpath)) {\n const _subpath = sql`${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)}`;\n const match = parent.groupMatches?.[colname]?.[subpath[0]];\n if (dataType && isRelation(dataType) && subpath.length === 1 && match) {\n return {\n element: sql`${{ identifier: parent.name }}.${{ identifier: `${colname}.${subpath[0]}` }}`,\n json: false,\n dataType: accumulatorKeyTypes[match.type],\n };\n } else if (dataType && _isTypeof(dataType, ['array', 'string[]', 'relation'])) {\n return {\n element: sql`jsonb_extract_path(to_jsonb(${element}), ${_subpath})`,\n json: true,\n };\n } else {\n return {\n element: sql`jsonb_extract_path(${element}, ${_subpath})`,\n json: true,\n };\n }\n }\n if (parent.name.startsWith('_doller_expr_$') && colname !== '$') {\n return {\n element: sql`jsonb_extract_path(${element}, ${{ quote: colname.startsWith('$') ? `$${colname}` : colname }})`,\n json: true,\n };\n }\n return { element, json: false };\n};\n\nconst resolvePaths = (\n compiler: QueryCompiler,\n className: string,\n paths: string[],\n): { dataType: TSchema.DataType; colname: string; subpath: string[]; } => {\n const { paths: [colname, ...subpath], dataType } = resolveColumn(compiler.schema, className, paths.join('.'));\n if (!_.isEmpty(subpath) && isVector(dataType)) {\n if (subpath.length !== 1) throw Error(`Invalid key: ${paths.join('.')}`);\n const idx = parseInt(subpath[0]);\n if (_.isSafeInteger(idx) && idx >= 0 && idx < dataType.dimension) {\n return { dataType: 'number', colname: `${colname}[${idx}]`, subpath: [] };\n } else {\n throw Error(`Invalid key: ${paths.join('.')}`);\n }\n }\n if (!_.isEmpty(subpath) && isPointer(dataType)) {\n const resolved = resolvePaths(compiler, dataType.target, subpath);\n return { ...resolved, colname: `${colname}.${resolved.colname}` };\n }\n const digit = _.first(subpath);\n if (!_.isEmpty(subpath) && isRelation(dataType) && digit?.match(QueryValidator.patterns.digits)) {\n const resolved = resolvePaths(compiler, dataType.target, _.slice(subpath, 1));\n return { dataType, colname, subpath: [digit, resolved.colname, ...resolved.subpath] };\n }\n return { dataType, colname, subpath };\n}\n\nconst _resolvePopulate = (path: string[], populates?: Record<string, Populate>): Populate | undefined => {\n let [colname, ...subpath] = path;\n while (populates && !_.isEmpty(subpath)) {\n const populate = populates[colname];\n if (populate) return _resolvePopulate(subpath, populate.populates);\n const [key, ...remain] = subpath;\n colname = `${colname}.${key}`;\n subpath = remain;\n }\n return populates?.[colname];\n}\n\nexport const fetchElement = (\n compiler: QueryCompiler,\n parent: QueryContext,\n field: string,\n) => {\n if (parent.className) {\n const { dataType, colname, subpath } = resolvePaths(compiler, parent.className, _.toPath(field));\n const { element, json, dataType: _dataType } = _fetchElement(parent, colname, subpath, dataType);\n if (isPointer(dataType)) return { element: sql`${{ identifier: parent.name }}.${{ identifier: `${colname}._id` }}`, dataType };\n const populate = isRelation(dataType) && _resolvePopulate(_.toPath(colname), parent.populates);\n if (!populate) return { element, dataType: json ? null : dataType };\n return {\n element,\n dataType: json ? null : _dataType ?? dataType,\n relation: {\n colname,\n target: dataType.target,\n populate,\n },\n };\n }\n if (field === '$') {\n const mapping = {\n 'number': '_doller_num_expr_$',\n 'string': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (parent.name.startsWith(value)) {\n return {\n element: sql`${{ identifier: parent.name }}.${{ identifier: '$' }}`,\n dataType: key as TSchema.DataType,\n relation: null,\n };\n }\n }\n }\n const [colname, ...subpath] = _.toPath(field);\n const { element } = _fetchElement(parent, colname, subpath);\n return { element, dataType: null, relation: null };\n};\n","//\n// basic.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { escapeIdentifier, escapeLiteral } from 'pg/lib/utils';\nimport { SQL, sql } from '../../sql/sql';\nimport { QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { fetchElement } from './query/utils';\n\nexport const nullSafeEqual = () => sql`IS NOT DISTINCT FROM`;\nexport const nullSafeNotEqual = () => sql`IS DISTINCT FROM`;\n\nexport const quote = (str: string) => escapeLiteral(str);\nexport const identifier = (name: string) => escapeIdentifier(name);\nexport const placeholder = (idx: number) => `$${idx}`;\nexport const boolean = (value: boolean) => value ? 'true' : 'false';\n\nexport const encodeSortKey = (\n compiler: QueryCompiler,\n parent: QueryContext,\n key: string,\n): SQL => {\n const { element } = fetchElement(compiler, parent, key);\n return element;\n};\n\nexport const random = (opts: { weight?: string; }): SQL => {\n return opts.weight ? sql`-ln(random()) / ${{ identifier: opts.weight }}` : sql`random()`;\n};\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { Pool, PoolConfig, PoolClient, types } from 'pg';\nimport QueryStream from 'pg-query-stream';\nimport { asyncStream, Awaitable, IteratorPool } from '@o2ter/utils-js';\nimport Decimal from 'decimal.js';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValueWithoutObject } from '../../../../internals/types';\nimport { quote } from '../dialect/basic';\nimport { PROTO_EVENT } from '../../../../internals/const';\n\nconst typeParser = (oid: number, format?: any) => {\n format = format ?? 'text';\n if (format === 'text') {\n switch (oid) {\n case types.builtins.MONEY:\n return (value: string) => new Decimal(value);\n }\n }\n return types.getTypeParser(oid, format);\n};\n\nexport class PostgresClientDriver {\n\n db: Pool | PoolClient;\n\n constructor(db: Pool | PoolClient) {\n this.db = db;\n }\n\n query(text: string, values: any[] = [], batchSize?: number) {\n const db = this.db;\n return asyncStream(async function* () {\n const client = db instanceof Pool ? await db.connect() : db;\n const stream = new QueryStream(text, values, { batchSize });\n yield* IteratorPool(Number.MAX_SAFE_INTEGER, async function* () {\n client.query(stream);\n try {\n yield* stream;\n } finally {\n stream.destroy();\n if (db instanceof Pool) client.release();\n }\n });\n });\n }\n\n async version() {\n const [{ version }] = await this.query('SELECT version()');\n return version as string;\n }\n\n async databases() {\n return _.compact(_.map(\n await this.query('SELECT datname FROM pg_catalog.pg_database'),\n x => x.datname as string\n ));\n }\n\n async tables() {\n return _.compact(_.map(\n await this.query(`\n SELECT tablename FROM pg_catalog.pg_tables\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.tablename as string\n ));\n }\n\n async views() {\n return _.compact(_.map(\n await this.query(`\n SELECT viewname FROM pg_catalog.pg_views\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.viewname as string\n ));\n }\n\n async materializedViews() {\n return _.compact(_.map(\n await this.query(`\n SELECT matviewname FROM pg_catalog.pg_matviews\n WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'\n `),\n x => x.matviewname as string\n ));\n }\n\n async columns(table: string, namespace?: string) {\n const columns = await this.query(`\n SELECT\n a.attname AS column_name,\n format_type(a.atttypid, a.atttypmod) AS data_type,\n a.attnum ,\n a.attnotnull\n FROM\n pg_namespace n,\n pg_class t,\n pg_attribute a\n WHERE\n a.attnum > 0\n AND n.oid = t.relnamespace\n AND a.attrelid = t.oid\n AND NOT a.attisdropped\n AND t.relname = '${table}'\n ${namespace ? `AND n.nspname = '${namespace}'` : ''}\n `);\n return _.map(columns, ({ column_name, data_type, attnotnull }) => ({\n name: column_name as string,\n type: data_type as string,\n required: !!attnotnull,\n }));\n }\n\n async indices(table: string, namespace?: string) {\n const indices = await this.query(`\n SELECT\n n.nspname AS schema_name,\n t.relname AS table_name,\n i.relname AS index_name,\n ix.indisprimary AS is_primary,\n ix.indisunique AS is_unique,\n a.attname AS column_name,\n k.indseq AS seq\n FROM\n pg_namespace n,\n pg_class t,\n pg_class i,\n pg_index ix,\n UNNEST(ix.indkey) WITH ORDINALITY k(attnum, indseq),\n pg_attribute a\n WHERE\n t.oid = ix.indrelid\n AND n.oid = t.relnamespace\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = k.attnum\n AND t.relkind = 'r'\n AND t.relname = '${table}'\n ${namespace ? `AND n.nspname = '${namespace}'` : ''}\n `);\n return _.mapValues(_.groupBy(indices, 'index_name'), v => ({\n keys: _.map(_.sortBy(v, ({ seq }) => parseInt(seq)), 'column_name'),\n ..._.pick(_.first(v), [\n 'schema_name',\n 'table_name',\n 'index_name',\n 'is_primary',\n 'is_unique',\n ])\n }));\n }\n\n async withClient<T>(callback: (client: PostgresClientDriver) => PromiseLike<T>) {\n const client = this.db instanceof Pool ? await this.db.connect() : this.db;\n try {\n return await callback(new PostgresClientDriver(client));\n } finally {\n if (this.db instanceof Pool) client.release();\n }\n }\n\n async publish(channel: string, payload: TValueWithoutObject) {\n await this.withClient(async (db) => {\n await db.query(`NOTIFY ${PROTO_EVENT}, ${quote(JSON.stringify(_encodeValue({ channel, payload })))}`);\n });\n }\n}\n\nclass PostgresPubSub {\n\n client: Awaitable<PoolClient>;\n subscribers: ((payload: TValueWithoutObject) => void)[] = [];\n\n constructor(client: Awaitable<PoolClient>) {\n this.client = client;\n (async () => {\n try {\n client = await client;\n client.on('notification', ({ channel, payload }) => {\n if (_.toUpper(channel) !== PROTO_EVENT || !payload) return;\n try {\n const _payload = _decodeValue(JSON.parse(payload));\n for (const subscriber of this.subscribers) {\n subscriber(_payload);\n }\n } catch (e) {\n console.error(`Unknown payload: ${e}`);\n }\n });\n await client.query(`LISTEN ${PROTO_EVENT}`);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n\n async shutdown() {\n (await this.client).release();\n }\n\n subscribe(callback: (payload: TValueWithoutObject) => void) {\n this.subscribers.push(callback);\n return () => {\n this.subscribers = this.subscribers.filter(x => x !== callback);\n };\n }\n\n isEmpty() {\n return _.isEmpty(this.subscribers);\n }\n}\n\nexport class PostgresDriver extends PostgresClientDriver {\n\n database: Pool;\n\n private pubsub?: PostgresPubSub;\n\n constructor(config: string | PoolConfig) {\n if (_.isEmpty(config)) throw Error('Invalid postgre config.');\n const _types = { getTypeParser: typeParser as typeof types.getTypeParser };\n const database = new Pool(_.isString(config) ? { connectionString: config, types: _types } : { ...config, types: _types });\n super(database);\n this.database = database;\n }\n\n async shutdown() {\n await this._release_pubsub();\n await this.database.end();\n }\n\n private _init_pubsub() {\n if (this.pubsub || this.database.ending || this.database.ended) return;\n this.pubsub = new PostgresPubSub(this.database.connect());\n }\n\n private async _release_pubsub() {\n const pubsub = this.pubsub;\n this.pubsub = undefined;\n await pubsub?.shutdown();\n }\n\n subscribe(channel: string, callback: (payload: TValueWithoutObject) => void) {\n this._init_pubsub();\n if (!this.pubsub) return () => void 0;\n const release = this.pubsub.subscribe(({ channel: _channel, payload }: any) => {\n if (_channel === channel) callback(payload);\n });\n return () => {\n release();\n if (this.pubsub?.isEmpty()) this._release_pubsub();\n };\n }\n}\n","//\n// encode.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql';\nimport { TSchema, _typeof, dimensionOf } from '../../../../internals/schema';\nimport Decimal from 'decimal.js';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValue, TValueWithUndefined } from '../../../../internals/types';\nimport { TObject } from '../../../../internals/object';\n\nexport const _encodeJsonValue = (value: any): SQL => {\n if (_.isArray(value)) return sql`jsonb_build_array(${_.map(value, x => _encodeJsonValue(x))})`;\n if (_.isPlainObject(value)) return sql`jsonb_build_object(${_.map(value, (v, k) => sql`${{ value: k }}, ${_encodeJsonValue(v)}`)})`;\n return sql`to_jsonb(${{ value }})`;\n};\n\nexport const _jsonPopulateInclude = (\n className: string,\n colname: string,\n dataType: TSchema.DataType,\n): SQL => {\n switch (_typeof(dataType)) {\n case 'decimal':\n return sql`jsonb_build_object(\n '$decimal', CAST(${{ identifier: className }}.${{ identifier: colname }} AS TEXT)\n ) AS ${{ identifier: colname }}`;\n case 'date':\n return sql`jsonb_build_object(\n '$date', to_char(${{ identifier: className }}.${{ identifier: colname }} AT TIME ZONE 'UTC', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"')\n ) AS ${{ identifier: colname }}`;\n default:\n return sql`${{ identifier: className }}.${{ identifier: colname }}`;\n }\n};\n\nexport const encodeType = (colname: string, dataType: TSchema.DataType, value: TValueWithUndefined) => {\n if (_.isNil(value)) return sql`NULL`;\n switch (_.isString(dataType) ? dataType : dataType.type) {\n case 'boolean':\n if (_.isBoolean(value)) return sql`${{ value }}`;\n break;\n case 'number':\n if (_.isNumber(value) && _.isFinite(value)) return sql`${{ value }}`;\n if (value instanceof Decimal) return sql`${{ value: value.toNumber() }}`;\n break;\n case 'decimal':\n if (_.isNumber(value) && _.isFinite(value)) return sql`CAST(${{ quote: (new Decimal(value)).toString() }} AS DECIMAL)`;\n if (value instanceof Decimal) return sql`CAST(${{ quote: value.toString() }} AS DECIMAL)`;\n break;\n case 'string':\n if (_.isString(value)) return sql`${{ value }}`;\n break;\n case 'string[]':\n if (_.isArray(value) && _.every(value, x => _.isString(x))) return sql`ARRAY[${_.map(value, x => sql`${{ value: x }}`)}]::TEXT[]`;\n break;\n case 'date':\n if (_.isDate(value)) return sql`${{ value }}`;\n break;\n case 'object':\n if (_.isPlainObject(value)) return sql`${{ value: _encodeValue(value) }}`;\n break;\n case 'vector':\n if (!_.isArray(value) || value.length !== dimensionOf(dataType)) break;\n if (!_.every(value, x => _.isFinite(x))) break;\n return sql`${{ value }}::DOUBLE PRECISION[]`;\n case 'array':\n if (!_.isArray(value)) break;\n return sql`ARRAY[${_.map(value, x => _encodeJsonValue(_encodeValue(x)))}]::JSONB[]`;\n case 'pointer':\n if (value instanceof TObject && value.objectId) return sql`${{ value: `${value.className}$${value.objectId}` }}`;\n break;\n case 'relation':\n if (_.isArray(value) && _.every(value, x => x instanceof TObject && x.objectId)) {\n return sql`${{ value: _.uniq(_.map(value, (x: TObject) => `${x.className}$${x.objectId}`)) }}`;\n }\n break;\n default: break;\n }\n\n throw Error('Invalid data type');\n};\n\nexport const decodeType = (type: TSchema.Primitive | 'vector', value: any): TValue => {\n switch (type) {\n case 'boolean':\n if (_.isBoolean(value)) return value;\n if (value === 'true') return true;\n if (value === 'false') return false;\n break;\n case 'number':\n if (_.isNumber(value)) return value;\n if (_.isString(value)) {\n const float = parseFloat(value);\n return _.isNaN(float) ? null : float;\n }\n break;\n case 'decimal':\n if (_.isString(value) || _.isNumber(value)) return new Decimal(value);\n if (value instanceof Decimal) return value;\n if (_.isPlainObject(value) && _.isString(value.$decimal)) return new Decimal(value.$decimal);\n break;\n case 'string':\n if (_.isString(value)) return value;\n break;\n case 'string[]':\n if (_.isArray(value) && _.every(value, x => _.isString(x))) return value;\n break;\n case 'date':\n if (_.isDate(value)) return value;\n if (_.isString(value)) {\n const date = new Date(value);\n if (isFinite(date.valueOf())) return date;\n }\n if (_.isPlainObject(value) && _.isString(value.$date)) return new Date(value.$date);\n break;\n case 'object':\n if (_.isPlainObject(value)) return _decodeValue(value);\n break;\n case 'array':\n if (_.isArray(value)) return _decodeValue(value);\n break;\n case 'vector':\n if (!_.isArray(value)) break;\n if (_.every(value, x => _.isNumber(x))) {\n return value;\n }\n break;\n default: break;\n }\n return null;\n};\n\n","//\n// update.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql/sql';\nimport { TSchema, _isTypeof, isVector } from '../../../../internals/schema';\nimport { _encodeJsonValue } from './encode';\nimport { encodeType } from './encode';\nimport { nullSafeEqual } from './basic';\nimport Decimal from 'decimal.js';\nimport { TObject, decodeUpdateOp } from '../../../../internals/object';\nimport { TUpdateOp } from '../../../../internals/object/types';\nimport { _encodeValue } from '../../../../internals/object';\n\nexport const updateOperation = (paths: string[], dataType: TSchema.DataType, operation: TUpdateOp) => {\n const [column, ...subpath] = paths;\n const [op, value] = decodeUpdateOp(operation);\n if (isVector(dataType)) {\n if (_.isEmpty(subpath)) {\n if (_.isNil(value) && op === '$set') return sql`${encodeType(column, dataType, value)}`;\n if (!_.isArray(value) || value.length !== dataType.dimension) throw Error('Invalid update operation');\n if (!_.every(value, x => _.isFinite(x))) throw Error('Invalid update operation');\n if (op === '$set') {\n return sql`${encodeType(column, dataType, value)}`;\n }\n } else if (subpath.length === 1) {\n const idx = parseInt(subpath[0]);\n if (_.isFinite(value) && _.isSafeInteger(idx) && idx >= 0 && idx < dataType.dimension) {\n switch (op) {\n case '$set': return sql`${{ value }}`;\n case '$inc': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] + ${{ value }}`;\n case '$dec': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] - ${{ value }}`;\n case '$mul': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] * ${{ value }}`;\n case '$div': return sql`${{ identifier: column }}[${{ literal: `${idx + 1}` }}] / ${{ value }}`;\n case '$max': return sql`GREATEST(${{ identifier: column }}[${{ literal: `${idx + 1}` }}], ${{ value }})`;\n case '$min': return sql`LEAST(${{ identifier: column }}[${{ literal: `${idx + 1}` }}], ${{ value }})`;\n default: break;\n }\n }\n }\n throw Error('Invalid update operation');\n }\n if (_.isEmpty(subpath)) {\n switch (op) {\n case '$set': return sql`${encodeType(column, dataType, value)}`;\n case '$inc': return sql`${{ identifier: column }} + ${encodeType(column, dataType, value)}`;\n case '$dec': return sql`${{ identifier: column }} - ${encodeType(column, dataType, value)}`;\n case '$mul': return sql`${{ identifier: column }} * ${encodeType(column, dataType, value)}`;\n case '$div': return sql`${{ identifier: column }} / ${encodeType(column, dataType, value)}`;\n case '$max': return sql`GREATEST(${{ identifier: column }}, ${encodeType(column, dataType, value)})`;\n case '$min': return sql`LEAST(${{ identifier: column }}, ${encodeType(column, dataType, value)})`;\n default: break;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n switch (op) {\n case '$popFirst':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return sql`${{ identifier: column }}[${{ literal: `${value + 1}` }}:]`;\n case '$popLast':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return sql`${{ identifier: column }}[:array_length(${{ identifier: column }}, 1) - ${{ literal: `${value}` }}]`;\n default:\n {\n const isStringArray = dataType === 'string[]';\n if (!_.isArray(value)) break;\n if (isStringArray && !_.every(value, x => _.isString(x))) break;\n switch (op) {\n case '$addToSet':\n if (!_.isArray(value)) break;\n return sql`${{ identifier: column }} || ARRAY(\n SELECT *\n FROM UNNEST(ARRAY[${_.map(_.uniq(value), x => isStringArray ? sql`${{ value: x }}` : _encodeJsonValue(_encodeValue(x)))}]) \"$\"\n WHERE \"$\" != ALL(${{ identifier: column }})\n )`;\n case '$push':\n if (!_.isArray(value)) break;\n return sql`${{ identifier: column }} || ARRAY[${_.map(value, (x: any) => isStringArray ? sql`${{ value: x }}` : sql`${_encodeJsonValue(_encodeValue(x))}`)}]`;\n case '$removeAll':\n if (!_.isArray(value)) break;\n return sql`ARRAY(\n SELECT *\n FROM UNNEST(${{ identifier: column }}) \"$\"\n WHERE \"$\" NOT IN (${_.map(_.uniq(value), x => isStringArray ? sql`${{ value: x }}` : _encodeJsonValue(_encodeValue(x)))})\n )`;\n default: break;\n }\n }\n }\n } else if (!_.isString(dataType) && dataType?.type === 'relation' && _.isNil(dataType.foreignField)) {\n switch (op) {\n case '$addToSet':\n case '$push':\n {\n if (!_.isArray(value) || !_.every(value, x => x instanceof TObject && x.objectId)) break;\n const objectIds = _.uniq(_.map(value, (x: any) => `${x.className}$${x.objectId}`));\n return sql`ARRAY(\n SELECT DISTINCT \"$\"\n FROM UNNEST(${{ identifier: column }} || ARRAY[${_.map(objectIds, (x) => sql`${{ value: x }}`)}]) \"$\"\n RIGHT JOIN ${{ identifier: dataType.target }} ON \"$\" = (${{ quote: dataType.target + '$' }} || ${{ identifier: dataType.target }}._id)\n )`;\n }\n case '$removeAll':\n {\n if (!_.isArray(value) || !_.every(value, x => x instanceof TObject && x.objectId)) break;\n const objectIds = _.uniq(_.map(value, (x: any) => `${x.className}$${x.objectId}`));\n return sql`ARRAY(\n SELECT \"$\"\n FROM UNNEST(${{ identifier: column }}) \"$\"\n RIGHT JOIN ${{ identifier: dataType.target }} ON \"$\" = (${{ quote: dataType.target + '$' }} || ${{ identifier: dataType.target }}._id)\n WHERE \"$\" NOT IN (${_.map(objectIds, (x) => sql`${{ value: x }}`)})\n )`;\n }\n default: break;\n }\n }\n } else {\n let element = sql`${{ identifier: column }}`;\n const _subpath = sql`${_.map(subpath, x => sql`${{ quote: x.startsWith('$') ? `$${x}` : x }}`)}`;\n let updateKey: (value: SQL) => SQL;\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n element = sql`jsonb_extract_path(to_jsonb(${element}), ${_subpath})`;\n updateKey = (value: SQL) => sql`ARRAY(SELECT * FROM jsonb_array_elements(\n jsonb_set(to_jsonb(${{ identifier: column }}), ARRAY[${_subpath}], ${value})\n ))`;\n } else {\n element = sql`jsonb_extract_path(${element}, ${_subpath})`;\n updateKey = (value: SQL) => sql`jsonb_set(${{ identifier: column }}, ARRAY[${_subpath}], ${value})`;\n }\n switch (op) {\n case '$set': return updateKey(_encodeJsonValue(_encodeValue(value)));\n case '$inc':\n case '$dec':\n case '$mul':\n case '$div':\n {\n const operatorMap = {\n $inc: '+',\n $dec: '-',\n $mul: '*',\n $div: '/',\n };\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n THEN to_jsonb(${element}::NUMERIC ${{ literal: operatorMap[op] }}\n ${{ value: value instanceof Decimal ? value.toNumber() : value }})\n WHEN jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$decimal', CAST(\n ((${element} ->> '$decimal')::DECIMAL ${{ literal: operatorMap[op] }}\n ${{ value: value instanceof Decimal ? value.toString() : value }}::DECIMAL)\n AS TEXT)\n )\n ELSE NULL\n END\n `);\n }\n case '$max':\n case '$min':\n {\n const operatorMap = {\n $max: 'GREATEST',\n $min: 'LEAST',\n };\n if (value instanceof Decimal || _.isNumber(value)) {\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n THEN to_jsonb(${{ literal: operatorMap[op] }}(\n ${element}::NUMERIC,\n ${{ value: value instanceof Decimal ? value.toNumber() : value }}\n ))\n WHEN jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$decimal', CAST(${{ literal: operatorMap[op] }}(\n (${element} ->> '$decimal')::DECIMAL,\n ${{ value: value instanceof Decimal ? value.toString() : value }}::DECIMAL\n ) AS TEXT))\n ELSE NULL\n END\n `);\n } else if (_.isDate(value)) {\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element} -> '$date') ${nullSafeEqual()} 'string'\n THEN jsonb_build_object(\n '$date', ${{ literal: operatorMap[op] }}(${element} ->> '$date', ${{ value: value.toISOString() }})\n )\n ELSE NULL\n END\n `);\n } else {\n return sql`${{ literal: operatorMap[op] }}(${element}, ${_encodeJsonValue(_encodeValue(value))})`;\n }\n }\n case '$addToSet':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN ${element} || to_jsonb(ARRAY(\n SELECT *\n FROM UNNEST(ARRAY[${_.map(_.uniq(value), x => _encodeJsonValue(_encodeValue(x)))}]) \"$\"\n WHERE NOT to_jsonb(ARRAY[\"$\"]) <@ ${element}\n ))\n ELSE NULL\n END\n `);\n case '$push':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN ${element} || ${_encodeJsonValue(_encodeValue(value))}\n ELSE NULL\n END\n `);\n case '$removeAll':\n if (!_.isArray(value)) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb(ARRAY(\n SELECT *\n FROM jsonb_array_elements(${element}) \"$\"\n WHERE value NOT IN (${_.map(_.uniq(value), x => _encodeJsonValue(_encodeValue(x)))})\n ))\n ELSE NULL\n END\n `);\n case '$popFirst':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb((ARRAY(\n SELECT jsonb_array_elements(${element})\n ))[${{ literal: `${value + 1}` }}:])\n ELSE NULL\n END\n `);\n case '$popLast':\n if (!_.isNumber(value) || !_.isSafeInteger(value) || value < 0) break;\n return updateKey(sql`\n CASE\n WHEN jsonb_typeof(${element}) ${nullSafeEqual()} 'array'\n THEN to_jsonb((ARRAY(\n SELECT jsonb_array_elements(${element})\n ))[:jsonb_array_length(${element}) - ${{ literal: `${value}` }}])\n ELSE NULL\n END\n `);\n default: break;\n }\n }\n throw Error('Invalid update operation');\n};\n","//\n// expressions.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../../sql';\nimport { _typeof, isPrimitive, isVector } from '../../../../../internals/schema';\nimport { QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { nullSafeEqual, nullSafeNotEqual } from '../basic';\nimport {\n QueryArrayExpression,\n QueryCoditionalExpression,\n QueryComparisonExpression,\n QueryDistanceExpression,\n QueryExpression,\n QueryKeyExpression,\n QueryNotExpression,\n QueryValueExpression\n} from '../../../../../server/query/dispatcher/parser/expressions';\nimport { fetchElement } from './utils';\nimport { _encodeJsonValue } from '../encode';\nimport Decimal from 'decimal.js';\nimport { _encodeValue } from '../../../../../internals/object';\n\nconst isValueExpression = (expr: QueryExpression): boolean => {\n if (expr instanceof QueryArrayExpression) return _.every(expr.exprs, x => isValueExpression(x));\n return expr instanceof QueryValueExpression;\n}\nconst isArrayExpression = (expr: QueryExpression) => {\n if (expr instanceof QueryArrayExpression) return true;\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value);\n return false;\n}\nconst arrayLength = (expr: QueryExpression) => {\n if (expr instanceof QueryArrayExpression) return expr.exprs.length;\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value) ? expr.value.length : 0;\n return 0;\n}\nconst mapExpression = <R>(expr: QueryExpression, callback: (x: QueryExpression) => R): R[] => {\n if (expr instanceof QueryArrayExpression) return _.map(expr.exprs, x => callback(x));\n if (expr instanceof QueryValueExpression) return _.isArray(expr.value) ? _.map(expr.value, x => callback(new QueryValueExpression(x))) : [];\n return [];\n}\n\nconst _PrimitiveValue = ['boolean', 'number', 'decimal', 'string', 'date'] as const;\ntype PrimitiveValue = typeof _PrimitiveValue[number];\n\nexport const encodeTypedQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): { type: PrimitiveValue; sql: SQL }[] | undefined => {\n\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n const _dataType = dataType ? _typeof(dataType) : null;\n if (_dataType && _PrimitiveValue.includes(_dataType as any)) {\n return [{ type: _dataType as PrimitiveValue, sql: element }];\n }\n }\n if (expr instanceof QueryValueExpression) {\n if (_.isBoolean(expr.value)) return [{ type: 'boolean', sql: sql`${{ value: expr.value }}` }];\n if (_.isNumber(expr.value)) return [\n { type: 'number', sql: sql`${{ value: expr.value }}` },\n { type: 'decimal', sql: sql`CAST(${{ quote: (new Decimal(expr.value)).toString() }} AS DECIMAL)` },\n ];\n if (expr.value instanceof Decimal) return [\n { type: 'decimal', sql: sql`CAST(${{ quote: expr.value.toString() }} AS DECIMAL)` },\n { type: 'number', sql: sql`${{ value: expr.value.toNumber() }}` },\n ];\n if (_.isString(expr.value)) return [{ type: 'string', sql: sql`${{ value: expr.value }}` }];\n if (_.isDate(expr.value)) return [{ type: 'date', sql: sql`${{ value: expr.value }}` }];\n }\n if (\n expr instanceof QueryCoditionalExpression ||\n expr instanceof QueryComparisonExpression ||\n expr instanceof QueryNotExpression\n ) {\n const value = encodeBooleanExpression(compiler, parent, expr);\n if (value) return [{ type: 'boolean', sql: value }];\n }\n\n if (expr instanceof QueryDistanceExpression) {\n const value = encodeDistanceQueryExpression(compiler, parent, expr);\n return [{ type: 'number', sql: value }];\n }\n};\n\nconst encodeJsonQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL => {\n\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n if (dataType && isPrimitive(dataType)) {\n switch (_typeof(dataType)) {\n case 'boolean': return sql`to_jsonb(${element})`;\n case 'number': return sql`to_jsonb(${element})`;\n case 'decimal': return sql`jsonb_build_object('$decimal', CAST(${element} AS TEXT))`;\n case 'string': return sql`to_jsonb(${element})`;\n case 'string[]': return sql`to_jsonb(${element})`;\n case 'date': return sql`jsonb_build_object(\n '$date', to_char(${element} AT TIME ZONE 'UTC', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"')\n )`;\n default: break;\n }\n }\n return sql`${element}`;\n }\n if (expr instanceof QueryValueExpression) {\n return _encodeJsonValue(_encodeValue(expr.value));\n }\n if (expr instanceof QueryArrayExpression) {\n return sql`jsonb_build_array(${_.map(expr.exprs, x => encodeJsonQueryExpression(compiler, parent, x))})`;\n }\n\n const value = encodeQueryExpression(compiler, parent, expr);\n if (!value) throw Error('Invalid expression');\n return sql`to_jsonb(${value})`;\n};\n\nconst encodeVectorExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n exprs: QueryExpression[]\n) => {\n if (exprs.length === 1) {\n const [expr] = exprs;\n if (expr instanceof QueryKeyExpression) {\n const { element, dataType } = fetchElement(compiler, parent, expr.key);\n if (!dataType || !isVector(dataType)) throw Error('Invalid expression');\n return { sql: element, dimension: dataType.dimension };\n }\n if (expr instanceof QueryValueExpression) {\n if (!_.isArray(expr.value) || !_.every(expr.value, x => _.isFinite(x))) throw Error('Invalid expression');\n return { sql: sql`${{ value: expr.value }}::DOUBLE PRECISION[]`, dimension: expr.value.length };\n }\n }\n const result = _.map(exprs, x => _.find(encodeTypedQueryExpression(compiler, parent, x), e => e.type === 'number')?.sql);\n if (_.some(result, x => _.isNil(x))) throw Error('Invalid expression');\n return { sql: sql`ARRAY[${_.map(result, x => sql`COALESCE(${x!}, 0)`)}]`, dimension: result.length };\n}\n\nconst encodeDistanceQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryDistanceExpression\n): SQL => {\n\n const { sql: left, dimension: d1 } = encodeVectorExpression(compiler, parent, expr.left);\n const { sql: right, dimension: d2 } = encodeVectorExpression(compiler, parent, expr.right);\n if (d1 !== d2) throw Error('Invalid expression');\n\n const operatorMap = {\n '$distance': sql`<->`,\n '$innerProduct': sql`<#>`,\n '$negInnerProduct': sql`<#>`,\n '$cosineDistance': sql`<=>`,\n '$rectilinearDistance': sql`<+>`,\n } as const;\n\n const _expr = sql`\n CAST(\n ${left} AS VECTOR(${{ literal: `${d1}` }})\n )\n ${operatorMap[expr.type]} \n CAST(\n ${right} AS VECTOR(${{ literal: `${d2}` }})\n )\n `;\n\n return expr.type === '$innerProduct' ? sql`-1 * (${_expr})` : _expr;\n};\n\nconst matchType = (\n first: { type: PrimitiveValue; sql: SQL }[] | undefined,\n second: { type: PrimitiveValue; sql: SQL }[] | undefined,\n): [{ type: PrimitiveValue; sql: SQL }, { type: PrimitiveValue; sql: SQL }] | undefined => {\n const found = _.find(first, l => _.some(second, r => l.type === r.type));\n return found ? [found, _.find(second, r => r.type === found.type)!] : undefined;\n}\n\nexport const encodeBooleanExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL | undefined => {\n\n if (expr instanceof QueryCoditionalExpression) {\n const queries = _.compact(_.map(expr.exprs, x => encodeBooleanExpression(compiler, parent, x)));\n if (_.isEmpty(queries)) return;\n switch (expr.type) {\n case '$and': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' AND ' }})`;\n case '$nor': return sql`(${{ literal: _.map(queries, x => sql`NOT (${x})`), separator: ' AND ' }})`;\n case '$or': return sql`(${{ literal: _.map(queries, x => sql`(${x})`), separator: ' OR ' }})`;\n default: break;\n }\n }\n if (expr instanceof QueryComparisonExpression) {\n\n const operatorMap = {\n '$eq': nullSafeEqual(),\n '$ne': nullSafeNotEqual(),\n '$gt': sql`>`,\n '$gte': sql`>=`,\n '$lt': sql`<`,\n '$lte': sql`<=`,\n };\n\n if (\n isArrayExpression(expr.left) &&\n isArrayExpression(expr.right) &&\n arrayLength(expr.left) === arrayLength(expr.right)\n ) {\n const _left = mapExpression(expr.left, x => encodeTypedQueryExpression(compiler, parent, x));\n const _right = mapExpression(expr.right, x => encodeTypedQueryExpression(compiler, parent, x));\n const mapped = _.compact(_.map(_.zip(_left, _right), ([l, r]) => matchType(l, r)));\n if (mapped.length === _left.length) {\n const [l, r] = _.unzip(mapped);\n return sql`(${_.map(l, x => x.sql)}) ${operatorMap[expr.type]} (${_.map(r, x => x.sql)})`;\n }\n }\n\n const _left = encodeTypedQueryExpression(compiler, parent, expr.left);\n const _right = encodeTypedQueryExpression(compiler, parent, expr.right);\n if (_left && _right) {\n const matched = matchType(_left, _right);\n if (matched) return sql`${matched[0].sql} ${operatorMap[expr.type]} ${matched[1].sql}`;\n }\n\n const _left2 = encodeJsonQueryExpression(compiler, parent, expr.left);\n const _right2 = encodeJsonQueryExpression(compiler, parent, expr.right);\n return sql`${_left2} ${operatorMap[expr.type]} ${_right2}`;\n }\n if (expr instanceof QueryNotExpression) {\n const _expr = encodeBooleanExpression(compiler, parent, expr.expr);\n return _expr ? sql`NOT (${_expr})` : undefined;\n }\n throw Error('Invalid expression');\n};\n\nexport const encodeQueryExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n expr: QueryExpression\n): SQL | undefined => {\n\n if (expr instanceof QueryDistanceExpression) {\n return encodeDistanceQueryExpression(compiler, parent, expr);\n }\n\n return encodeBooleanExpression(compiler, parent, expr);\n}","//\n// populate.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../sql';\nimport { TSchema, isPointer, isPrimitive, isRelation, isShape, isVector } from '../../../../internals/schema';\nimport { Populate, QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { _jsonPopulateInclude } from './encode';\nimport { resolveColumn } from '../../../../server/query/dispatcher/validator';\nimport { QueryAccumulator } from '../../../../server/query/dispatcher/parser/accumulators';\nimport { encodeQueryExpression } from './query';\nimport { encodeTypedQueryExpression } from './query/expressions';\n\nconst resolveSubpaths = (\n compiler: QueryCompiler,\n populate: Populate,\n) => {\n const subpaths: {\n path: string;\n type: TSchema.DataType;\n }[] = [];\n for (const [name, type] of _.toPairs(populate.includes)) {\n if (isPointer(type)) {\n subpaths.push(..._.map(resolveSubpaths(compiler, populate.populates[name]), ({ path, type }) => ({\n path: `${name}.${path}`,\n type,\n })));\n } else {\n subpaths.push({\n path: name,\n type,\n });\n }\n }\n return subpaths;\n}\n\nconst _isPointer = (\n schema: Record<string, TSchema>,\n className: string,\n path: string,\n) => {\n let fields = schema[className].fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) throw Error(`Invalid path: ${path}`);\n if (isShape(dataType)) {\n fields = dataType.shape;\n continue;\n }\n if (dataType.type !== 'pointer') return false;\n if (_.isNil(schema[dataType.target])) throw Error(`Invalid path: ${path}`);\n fields = schema[dataType.target].fields;\n last = dataType;\n }\n return last?.type === 'pointer';\n}\n\nexport const _selectRelationPopulate = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n populate: Populate,\n field: string,\n encode: boolean,\n) => {\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: populate.name }}.${{ identifier: field }}`;\n\n const subpaths = resolveSubpaths(compiler, populate);\n\n let cond: SQL;\n if (_.isNil(populate.foreignField)) {\n cond = sql`${sql`(${{ quote: populate.className + '$' }} || ${_foreign('_id')})`} = ANY(${_local(field)})`;\n } else if (_isPointer(compiler.schema, populate.className, populate.foreignField)) {\n cond = sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${_foreign(populate.colname)}`;\n } else {\n cond = sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${_foreign(populate.colname)})`;\n }\n return sql`\n SELECT ${_.compact(_.flatMap(subpaths, ({ path, type }) =>\n encode ? [\n _jsonPopulateInclude(populate.name, path, type)\n ] : [\n ...(populate.groupMatches[path] ? _.map(_.keys(populate.groupMatches[path]), k =>\n sql`${{ identifier: populate.name }}.${{ identifier: `${path}.${k}` }}`\n ) : [\n sql`${{ identifier: populate.name }}.${{ identifier: path }}`\n ]),\n isRelation(type) && sql`${{ identifier: populate.name }}.${{ identifier: `$${path}` }}`,\n ]\n ))}\n FROM ${{ identifier: populate.name }} WHERE ${cond}\n ${!_.isEmpty(populate.sort) ? sql`ORDER BY ${compiler._encodeSort(populate.sort, populate)}` : sql``}\n ${populate.limit ? sql`LIMIT ${{ literal: `${populate.limit}` }}` : sql``}\n ${populate.skip ? sql`OFFSET ${{ literal: `${populate.skip}` }}` : sql``}\n ${compiler.selectLock ? compiler.isUpdate ? sql`FOR UPDATE NOWAIT` : sql`FOR SHARE NOWAIT` : sql``}\n `;\n}\n\nexport const selectPopulate = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n populate: Populate,\n field: string,\n): { columns: SQL[]; join?: SQL; } => {\n if (populate.type === 'relation') {\n const { groupMatches } = parent;\n const columns = [\n sql`${{ identifier: parent.name }}.${{ identifier: field }} AS ${{ identifier: `$${field}` }}`,\n ];\n if (!_.isEmpty(groupMatches?.[field])) {\n for (const [key, { type, expr }] of _.entries(groupMatches[field])) {\n switch (type) {\n case '$count':\n columns.push(sql`\n (\n SELECT COUNT(*) FROM (\n ${_selectRelationPopulate(compiler, parent, populate, field, false)}\n ) ${{ identifier: populate.name }}\n ) AS ${{ identifier: `${field}.${key}` }}\n `);\n break;\n case '$avg':\n case '$sum':\n {\n const op = {\n '$avg': 'AVG',\n '$sum': 'SUM',\n }[type];\n if (!expr) throw Error('Invalid expression');\n const exprs = encodeTypedQueryExpression(compiler, populate, expr);\n const { sql: value } = (_.includes(['$avg'], type) ? _.find(exprs, e => e.type === 'number') : _.first(exprs)) ?? {};\n if (!value) throw Error('Invalid expression');\n columns.push(sql`\n (\n SELECT ${{ literal: op }}(${value}) FROM (\n ${_selectRelationPopulate(compiler, parent, populate, field, false)}\n ) ${{ identifier: populate.name }}\n ) AS ${{ identifier: `${field}.${key}` }}\n `);\n }\n break;\n default: break;\n }\n }\n } else {\n columns.push(sql`\n ARRAY(\n SELECT to_jsonb(${{ identifier: populate.name }}) FROM (\n ${_selectRelationPopulate(compiler, parent, populate, field, true)}\n ) ${{ identifier: populate.name }}\n ) AS ${{ identifier: field }}\n `);\n }\n return { columns };\n }\n\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: populate.name }}.${{ identifier: field }}`;\n\n const subpaths = resolveSubpaths(compiler, populate);\n return {\n columns: _.compact(_.flatMap(subpaths, ({ path, type }) => [\n ...populate.groupMatches[path] ? _.map(_.keys(populate.groupMatches[path]), k =>\n sql`${{ identifier: populate.name }}.${{ identifier: `${path}.${k}` }} AS ${{ identifier: `${field}.${path}.${k}` }}`\n ) : [\n sql`${{ identifier: populate.name }}.${{ identifier: path }} AS ${{ identifier: `${field}.${path}` }}`\n ],\n isRelation(type) && sql`${{ identifier: populate.name }}.${{ identifier: `$${path}` }} AS ${{ identifier: `$${field}.${path}` }}`,\n ])),\n join: sql`\n LEFT JOIN ${{ identifier: populate.name }}\n ON ${sql`(${{ quote: populate.className + '$' }} || ${_foreign('_id')})`} = ${_local(field)}\n `,\n };\n};\n\nconst encodeRemix = (\n parent: { className: string; },\n remix?: QueryContext & { className: string; },\n) => sql`${remix?.className === parent.className ? sql`\n (SELECT * FROM ${{ identifier: remix.name }} UNION SELECT * FROM ${{ identifier: parent.className }})\n` : { identifier: parent.className }}`;\n\nexport const encodeForeignField = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n foreignField: string,\n remix?: QueryContext & { className: string; }\n): { joins: SQL[]; field: SQL; rows: boolean; array: boolean; } => {\n\n const { paths: [colname, ...subpath], dataType } = resolveColumn(compiler.schema, parent.className, foreignField);\n\n const tempName = `_populate_$${compiler.nextIdx()}`;\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: tempName }}.${{ identifier: field }}`;\n\n if (_.isEmpty(subpath) && isRelation(dataType) && dataType.foreignField) {\n const { joins, field, rows, array } = encodeForeignField(\n compiler,\n { className: dataType.target, name: tempName },\n dataType.foreignField,\n remix,\n );\n return {\n joins: [],\n field: sql`(\n SELECT ${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`}\n FROM ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${array || rows ? sql`ANY(${field})` : field}\n )`,\n array: false,\n rows: true,\n };\n }\n\n if (_.isEmpty(subpath)) {\n return {\n joins: [],\n field: sql`${{ identifier: parent.name }}.${{ identifier: foreignField }}`,\n array: isRelation(dataType),\n rows: false,\n };\n }\n\n if (!isPointer(dataType) && !isRelation(dataType)) throw Error(`Invalid path: ${foreignField}`);\n\n const { joins, field, rows, array } = encodeForeignField(\n compiler,\n { className: dataType.target, name: tempName },\n subpath.join('.'),\n remix,\n );\n\n const cond: (SQL | undefined)[] = [];\n if (compiler.extraFilter) {\n const filter = compiler.extraFilter(dataType.target);\n cond.push(compiler._encodeFilter({ className: dataType.target, name: tempName }, filter));\n }\n if (isPointer(dataType)) {\n cond.push(\n sql`${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`} = ${_local(colname)}`\n );\n return {\n joins: [sql`\n LEFT JOIN ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ON ${{ literal: _.map(_.compact(cond), x => sql`(${x})`), separator: ' AND ' }}\n `, ...joins],\n field,\n array,\n rows,\n };\n }\n\n if (_.isNil(dataType.foreignField)) {\n cond.push(\n sql`${sql`(${{ quote: dataType.target + '$' }} || ${_foreign('_id')})`} = ANY(${_local(colname)})`\n );\n } else if (_isPointer(compiler.schema, dataType.target, dataType.foreignField)) {\n cond.push(\n sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ${_foreign(dataType.foreignField)}`\n );\n } else {\n cond.push(\n sql`${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${_foreign(dataType.foreignField)})`\n );\n }\n return {\n joins: [],\n field: sql`(\n SELECT ${array ? sql`UNNEST(${field})` : field}\n FROM ${encodeRemix({ className: dataType.target }, remix)} AS ${{ identifier: tempName }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${{ literal: _.map(_.compact(cond), x => sql`(${x})`), separator: ' AND ' }}\n )`,\n array: false,\n rows: true,\n };\n}\n\nexport const encodePopulate = (\n compiler: QueryCompiler,\n parent: Populate,\n remix?: QueryContext & { className: string; }\n): Record<string, SQL> => {\n const _filter = _.compact([\n parent.filter && compiler._encodeFilter(parent, parent.filter),\n compiler.extraFilter && compiler._encodeFilter(parent, compiler.extraFilter(parent.className)),\n ]);\n const _populates = _.map(parent.populates, (populate, field) => selectPopulate(compiler, parent, populate, field));\n const _joins = _.compact(_.map(_populates, ({ join }) => join));\n const {\n joins: _joins2 = [],\n field: _foreignField = undefined,\n rows = false,\n } = parent.foreignField ? encodeForeignField(compiler, {\n className: parent.className,\n name: parent.name,\n }, parent.foreignField, remix) : {};\n return _.reduce(parent.populates, (acc, populate) => ({\n ...encodePopulate(compiler, populate, remix),\n ...acc,\n }), {\n [parent.name]: sql`\n SELECT * FROM (\n SELECT\n ${{\n literal: [\n ...compiler._selectIncludes(parent.name, parent.includes),\n ..._.flatMap(_populates, ({ columns: column }) => column),\n ..._foreignField ? [sql`${rows ? sql`ARRAY(${_foreignField})` : _foreignField} AS ${{ identifier: parent.colname }}`] : [],\n ], separator: ',\\n'\n }}\n FROM ${encodeRemix(parent, remix)} AS ${{ identifier: parent.name }}\n ${!_.isEmpty(_joins) || !_.isEmpty(_joins2) ? { literal: [..._joins, ..._joins2], separator: '\\n' } : sql``}\n ) AS ${{ identifier: parent.name }}\n ${!_.isEmpty(_filter) ? sql`WHERE ${{ literal: _.map(_.compact(_filter), x => sql`(${x})`), separator: ' AND ' }}` : sql``}\n `,\n });\n};\n","//\n// selectors.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { SQL, sql } from '../../../sql';\nimport { _isTypeof, _typeof, isPrimitive } from '../../../../../internals/schema';\nimport { QueryCompiler, QueryContext } from '../../../sql/compiler';\nimport { FieldSelectorExpression, QuerySelector } from '../../../../../server/query/dispatcher/parser';\nimport { _encodeJsonValue } from '../encode';\nimport { encodeType } from '../encode';\nimport { nullSafeEqual, nullSafeNotEqual } from '../basic';\nimport { fetchElement } from './utils';\nimport Decimal from 'decimal.js';\nimport { TObject } from '../../../../../internals/object';\nimport { _encodeValue } from '../../../../../internals/object';\nimport { TValue } from '../../../../../internals/types';\nimport { _selectRelationPopulate } from '../populate';\n\nexport const encodeFieldExpression = (\n compiler: QueryCompiler,\n parent: QueryContext,\n field: string,\n expr: FieldSelectorExpression\n): SQL => {\n const [colname] = _.toPath(field);\n const { element, dataType, relation } = fetchElement(compiler, parent, field);\n const encodeValue = (value: TValue) => dataType ? encodeType(colname, dataType, value) : _encodeJsonValue(_encodeValue(value));\n switch (expr.type) {\n case '$eq':\n {\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (_.isNil(expr.value)) return sql`${element} IS NULL`;\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!(expr.value instanceof TObject) || dataType.target !== expr.value.className || !expr.value.objectId) break;\n return sql`${element} ${nullSafeEqual()} ${{ value: expr.value.objectId }}`;\n }\n return sql`${element} ${nullSafeEqual()} ${encodeValue(expr.value)}`;\n }\n case '$ne':\n {\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (_.isNil(expr.value)) return sql`${element} IS NOT NULL`;\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!(expr.value instanceof TObject) || dataType.target !== expr.value.className || !expr.value.objectId) break;\n return sql`${element} ${nullSafeNotEqual()} ${{ value: expr.value.objectId }}`;\n }\n return sql`${element} ${nullSafeNotEqual()} ${encodeValue(expr.value)}`;\n }\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n {\n const op = {\n '$gt': '>',\n '$gte': '>=',\n '$lt': '<',\n '$lte': '<=',\n }[expr.type];\n if (_.isRegExp(expr.value) || expr.value instanceof QuerySelector || expr.value instanceof FieldSelectorExpression) break;\n if (dataType && isPrimitive(dataType)) {\n switch (_typeof(dataType)) {\n case 'boolean':\n if (!_.isBoolean(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'number':\n case 'decimal':\n if (!(expr.value instanceof Decimal) && !_.isNumber(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'string':\n if (!_.isString(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'string[]':\n if (!_.isArray(expr.value) || !_.every(expr.value, _.isString)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n case 'date':\n if (!_.isDate(expr.value)) break;\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n default: break;\n }\n } else if (!_.isString(dataType) && dataType?.type === 'pointer' && expr.value instanceof TObject && expr.value.objectId) {\n return sql`${element} ${{ literal: op }} ${{ value: expr.value.objectId }}`;\n } else if (!dataType) {\n if (expr.value instanceof Decimal || _.isNumber(expr.value)) {\n return sql`(\n jsonb_typeof(${element}) ${nullSafeEqual()} 'number'\n AND ${element}::NUMERIC ${{ literal: op }} ${{ value: expr.value instanceof Decimal ? expr.value.toNumber() : expr.value }}\n ) OR (\n jsonb_typeof(${element} -> '$decimal') ${nullSafeEqual()} 'string'\n AND (${element} ->> '$decimal')::DECIMAL ${{ literal: op }} ${{ value: expr.value instanceof Decimal ? expr.value.toString() : expr.value }}::DECIMAL\n )`;\n } else if (_.isDate(expr.value)) {\n return sql`(\n jsonb_typeof(${element} -> '$date') ${nullSafeEqual()} 'string'\n AND ${element} ${{ literal: op }} ${encodeValue(expr.value)}\n )`;\n } else {\n return sql`${element} ${{ literal: op }} ${encodeValue(expr.value)}`;\n }\n }\n }\n break;\n case '$in':\n {\n if (!_.isArray(expr.value)) break;\n switch (expr.value.length) {\n case 0: return sql`false`;\n case 1:\n {\n const value = expr.value[0];\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (_.isNil(value)) return sql`${element} IS NULL`;\n if (!(value instanceof TObject) || dataType.target !== value.className || !value.objectId) break;\n return sql`${element} ${nullSafeEqual()} ${{ value: value.objectId }}`;\n }\n return sql`${element} ${nullSafeEqual()} ${encodeValue(value)}`;\n }\n default:\n const containsNil = _.some(expr.value, x => _.isNil(x));\n const values = _.filter(expr.value, x => !_.isNil(x));\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!_.every(values, x => x instanceof TObject && dataType.target === x.className && x.objectId)) break;\n if (containsNil) {\n return sql`${element} IS NULL OR ${element} IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n return sql`${element} IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n if (containsNil) {\n return sql`${element} IS NULL OR ${element} IN (${_.map(values, x => encodeValue(x))})`;\n }\n return sql`${element} IN (${_.map(values, x => encodeValue(x))})`;\n }\n }\n break;\n case '$nin':\n {\n if (!_.isArray(expr.value)) break;\n switch (expr.value.length) {\n case 0: return sql`true`;\n case 1:\n {\n const value = expr.value[0];\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (_.isNil(value)) return sql`${element} IS NOT NULL`;\n if (!(value instanceof TObject) || dataType.target !== value.className || !value.objectId) break;\n return sql`${element} ${nullSafeNotEqual()} ${{ value: value.objectId }}`;\n }\n return sql`${element} ${nullSafeNotEqual()} ${encodeValue(value)}`;\n }\n default:\n const containsNil = _.some(expr.value, x => _.isNil(x));\n const values = _.filter(expr.value, x => !_.isNil(x));\n if (!_.isString(dataType) && dataType?.type === 'pointer') {\n if (!_.every(values, x => x instanceof TObject && dataType.target === x.className && x.objectId)) break;\n if (containsNil) {\n return sql`${element} IS NOT NULL AND ${element} NOT IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n return sql`${element} NOT IN (${_.map(values, (x: any) => sql`${{ value: x.objectId }}`)})`;\n }\n if (containsNil) {\n return sql`${element} IS NOT NULL AND ${element} NOT IN (${_.map(values, x => encodeValue(x))})`;\n }\n return sql`${element} NOT IN (${_.map(values, x => encodeValue(x))})`;\n }\n }\n break;\n case '$subset':\n case '$superset':\n case '$intersect':\n {\n const op = {\n '$subset': '<@',\n '$superset': '@>',\n '$intersect': '&&',\n }[expr.type];\n if (!_.isArray(expr.value)) break;\n if (_.isEmpty(expr.value)) {\n switch (expr.type) {\n case '$superset': return sql`true`;\n case '$intersect': return sql`false`;\n default: break;\n }\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]'])) {\n return sql`${element} ${{ literal: op }} ${{ value: _encodeValue(expr.value) }}`;\n }\n if (relation && parent.className) {\n if (!_.every(expr.value, x => x instanceof TObject && relation.target === x.className && x.objectId)) break;\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`ARRAY(\n SELECT ${{ identifier: '_id' }}\n FROM (${populate}) AS ${{ identifier: tempName }}\n ) ${{ literal: op }} ARRAY[${_.map(expr.value, (x: any) => sql`${{ value: x.objectId }}`)}]::TEXT[]`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND ${element} ${{ literal: op }} ${_encodeJsonValue(_encodeValue(expr.value))}`;\n }\n }\n break;\n case '$not':\n {\n if (!(expr.value instanceof FieldSelectorExpression)) break;\n return sql`NOT (${encodeFieldExpression(compiler, parent, field, expr.value)})`;\n }\n case '$pattern':\n {\n if (dataType && _isTypeof(dataType, 'string')) {\n if (_.isString(expr.value)) {\n return sql`${element} LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (_.isRegExp(expr.value)) {\n if (expr.value.ignoreCase) return sql`${element} ~* ${{ value: expr.value.source }}`;\n return sql`${element} ~ ${{ value: expr.value.source }}`;\n }\n } else if (!dataType) {\n if (_.isString(expr.value)) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (_.isRegExp(expr.value)) {\n if (expr.value.ignoreCase) return sql`${element} ~* ${{ value: expr.value.source }}`;\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') ~ ${{ value: expr.value.source }}`;\n }\n }\n }\n break;\n case '$starts':\n {\n if (!_.isString(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`${element} LIKE ${{ value: `${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}%` }}`;\n }\n }\n break;\n case '$ends':\n {\n if (!_.isString(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`${element} LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}` }}`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'string' AND (${element} #>> '{}') LIKE ${{ value: `%${expr.value.replace(/([\\\\_%])/g, '\\\\$1')}` }}`;\n }\n }\n break;\n case '$size':\n {\n if (!_.isNumber(expr.value) || !_.isSafeInteger(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`COALESCE(length(${element}), 0) = ${{ value: expr.value }}`;\n }\n if (relation && parent.className && parent.groupMatches?.[colname]) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`(SELECT COUNT(*) FROM (${populate}) AS ${{ identifier: tempName }}) = ${{ value: expr.value }}`;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]', 'vector', 'relation'])) {\n return sql`COALESCE(array_length(${element}, 1), 0) = ${{ value: expr.value }}`;\n }\n if (!dataType) {\n return sql`(\n CASE jsonb_typeof(${element})\n WHEN 'array' THEN jsonb_array_length(${element}) = ${{ value: expr.value }}\n WHEN 'string' THEN length(${element} #>> '{}') = ${{ value: expr.value }}\n ELSE jsonb_typeof(${element}) IS NULL AND ${{ value: expr.value === 0 }}\n END\n )`;\n }\n }\n break;\n case '$empty':\n {\n if (!_.isBoolean(expr.value)) break;\n if (dataType && _isTypeof(dataType, 'string')) {\n return sql`COALESCE(length(${element}), 0) ${{ literal: expr.value ? '=' : '<>' }} 0`;\n }\n if (relation && parent.className && parent.groupMatches?.[colname]) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`${{ literal: expr.value ? 'NOT EXISTS' : 'EXISTS' }}(SELECT * FROM (${populate}) AS ${{ identifier: tempName }})`;\n }\n if (dataType && _isTypeof(dataType, ['array', 'string[]', 'vector', 'relation'])) {\n return sql`COALESCE(array_length(${element}, 1), 0) ${{ literal: expr.value ? '=' : '<>' }} 0`;\n }\n if (!dataType) {\n return sql`(\n CASE jsonb_typeof(${element})\n WHEN 'array' THEN jsonb_array_length(${element}) ${{ literal: expr.value ? '=' : '<>' }} 0\n WHEN 'string' THEN length(${element} #>> '{}') ${{ literal: expr.value ? '=' : '<>' }} 0\n ELSE jsonb_typeof(${element}) IS NULL AND ${{ value: expr.value }}\n END\n )`;\n }\n }\n break;\n case '$every':\n {\n if (!(expr.value instanceof QuerySelector)) break;\n\n if (relation && parent.className) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({\n name: tempName,\n className: relation.target,\n populates: relation.populate.populates,\n }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`NOT EXISTS(\n SELECT * FROM (${populate}) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n\n const mapping = {\n 'vector': '_doller_num_expr_$',\n 'string[]': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (dataType && _isTypeof(dataType, key)) {\n const tempName = `${value}${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n return sql`NOT EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n }\n\n const tempName = `_doller_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n if (dataType && _isTypeof(dataType, 'array')) {\n return sql`NOT EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND NOT EXISTS(\n SELECT * FROM (SELECT value AS \"$\" FROM jsonb_array_elements(${element})) AS ${{ identifier: tempName }}\n WHERE NOT (${filter})\n )`;\n }\n }\n break;\n case '$some':\n {\n if (!(expr.value instanceof QuerySelector)) break;\n\n if (relation && parent.className) {\n const tempName = `_populate_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({\n name: tempName,\n className: relation.target,\n populates: relation.populate.populates,\n }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n const populate = _selectRelationPopulate(compiler, { className: parent.className, name: parent.name }, relation.populate, `$${field}`, false);\n return sql`EXISTS(\n SELECT * FROM (${populate}) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n\n const mapping = {\n 'vector': '_doller_num_expr_$',\n 'string[]': '_doller_str_expr_$',\n };\n for (const [key, value] of _.entries(mapping)) {\n if (dataType && _isTypeof(dataType, key)) {\n const tempName = `${value}${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n return sql`EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n }\n\n const tempName = `_doller_expr_$${compiler.nextIdx()}`;\n const filter = compiler._encodeFilter({ name: tempName, className: relation?.target }, expr.value);\n if (!filter) throw Error('Invalid expression');\n\n if (dataType && _isTypeof(dataType, 'array')) {\n return sql`EXISTS(\n SELECT * FROM (SELECT UNNEST AS \"$\" FROM UNNEST(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n if (!dataType) {\n return sql`jsonb_typeof(${element}) ${nullSafeEqual()} 'array' AND EXISTS(\n SELECT * FROM (SELECT value AS \"$\" FROM jsonb_array_elements(${element})) AS ${{ identifier: tempName }}\n WHERE ${filter}\n )`;\n }\n }\n break;\n default: break;\n }\n throw Error('Invalid expression');\n};\n","//\n// relation.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { QueryCompiler, QueryContext } from '../../sql/compiler';\nimport { RelationOptions } from '../../../../server/storage';\nimport { sql, SQL } from '../../sql';\nimport { encodeForeignField } from './populate';\n\nexport const encodeRelation = (\n compiler: QueryCompiler,\n parent: QueryContext & { className: string; },\n relatedBy: NonNullable<RelationOptions['relatedBy']>\n): SQL => {\n const name = `_relation_$${relatedBy.className.toLowerCase()}`;\n const _local = (field: string) => sql`${{ identifier: parent.name }}.${{ identifier: field }}`;\n const _foreign = (field: string) => sql`${{ identifier: name }}.${{ identifier: field }}`;\n const { joins, field } = encodeForeignField(compiler, { className: relatedBy.className, name }, relatedBy.key);\n return sql`EXISTS (\n SELECT 1\n FROM ${{ identifier: relatedBy.className }} AS ${{ identifier: name }}\n ${!_.isEmpty(joins) ? { literal: joins, separator: '\\n' } : sql``}\n WHERE ${_foreign('_id')} = ${{ value: relatedBy.objectId }} AND ${sql`(${{ quote: parent.className + '$' }} || ${_local('_id')})`} = ANY(${field})\n )`;\n}","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { SqlDialect } from '../../sql';\nimport {\n quote,\n identifier,\n placeholder,\n boolean,\n encodeSortKey,\n random, \n} from './basic';\nimport { updateOperation } from './update';\nimport {\n encodeQueryExpression\n} from './query';\nimport { encodeFieldExpression } from './query/selectors';\nimport { selectPopulate, encodePopulate } from './populate';\nimport { encodeRelation } from './relation';\nimport {\n encodeType,\n decodeType\n} from './encode';\n\nexport const PostgresDialect = {\n quote,\n identifier,\n placeholder,\n boolean,\n encodeType,\n decodeType,\n updateOperation,\n selectPopulate,\n encodeFieldExpression,\n encodeQueryExpression,\n encodePopulate,\n encodeRelation,\n encodeSortKey,\n random,\n};\n","//\n// base.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PostgresClientDriver, PostgresDriver } from '../driver';\nimport { SQL, SqlStorage, sql } from '../../sql';\nimport { PostgresDialect } from '../dialect';\nimport { _encodeJsonValue } from '../dialect/encode';\nimport { QueryCompiler } from '../../sql/compiler';\nimport { DecodedQuery, FindOptions } from '../../../../server/storage';\nimport { TransactionOptions } from '../../../../internals/proto';\nimport { _decodeValue, _encodeValue } from '../../../../internals/object';\nimport { TValueWithoutObject } from '../../../../internals/types';\nimport { TPubSub } from '../../../../server/pubsub';\nimport { TSchema, isPointer, isRelation } from '../../../../internals/schema';\n\nexport class PostgresStorageClient<Driver extends PostgresClientDriver> extends SqlStorage implements TPubSub {\n\n protected _driver: Driver;\n\n constructor(driver: Driver) {\n super();\n this._driver = driver;\n }\n\n get dialect() {\n return PostgresDialect;\n }\n\n selectLock() {\n return false;\n }\n\n async config(acl?: string[]) {\n const config: Record<string, TValueWithoutObject> = {};\n const query = _.isNil(acl)\n ? sql`SELECT * FROM ${{ identifier: '_Config' }}`\n : sql`SELECT * FROM ${{ identifier: '_Config' }} WHERE _rperm && ${{ value: acl }}`;\n for await (const record of this.query(query)) {\n config[record._id] = _decodeValue(record.value);\n }\n return config;\n }\n async configAcl() {\n const config: Record<string, string[]> = {};\n const query = sql`SELECT * FROM ${{ identifier: '_Config' }}`;\n for await (const record of this.query(query)) {\n config[record._id] = record._rperm;\n }\n return config;\n }\n async setConfig(values: Record<string, TValueWithoutObject>, acl?: string[]) {\n const _values = _.pickBy(values, v => !_.isNil(v));\n const nilKeys = _.keys(_.pickBy(values, v => _.isNil(v)));\n if (!_.isEmpty(_values)) {\n await this.query(sql`\n INSERT INTO ${{ identifier: '_Config' }}\n ${_.isNil(acl) ? sql`(_id, value)` : sql`(_id, _rperm, value)`}\n VALUES\n ${_.map(_values, (v, k) => _.isNil(acl)\n ? sql`(${{ value: k }}, ${_encodeJsonValue(_encodeValue(v))})`\n : sql`(${{ value: k }}, ${{ value: acl }}, ${_encodeJsonValue(_encodeValue(v))})`)}\n ON CONFLICT (_id) DO UPDATE SET value = EXCLUDED.value;\n `);\n }\n if (!_.isEmpty(nilKeys)) {\n await this.query(sql`\n DELETE FROM ${{ identifier: '_Config' }}\n WHERE _id IN (${_.map(nilKeys, k => sql`${{ value: k }}`)})\n `);\n }\n }\n\n _query(text: string, values: any[] = [], batchSize?: number) {\n return this._driver.query(text, values, batchSize);\n }\n\n async _explain(compiler: QueryCompiler, query: DecodedQuery<FindOptions>) {\n const [explain] = await this.query(sql`EXPLAIN (ANALYZE, VERBOSE, BUFFERS, FORMAT JSON) ${compiler._selectQuery(query)}`);\n return explain['QUERY PLAN'];\n }\n\n classes() {\n return Object.keys(this.schema);\n }\n\n async version() {\n return this._driver.version();\n }\n\n async databases() {\n return this._driver.databases();\n }\n\n async tables() {\n return this._driver.tables();\n }\n\n async views() {\n return this._driver.views();\n }\n\n async materializedViews() {\n return this._driver.materializedViews();\n }\n\n async columns(table: string, namespace?: string) {\n return this._driver.columns(table, namespace);\n }\n\n async indices(table: string, namespace?: string) {\n return this._driver.indices(table, namespace);\n }\n\n async lockTable(table: string | string[], update: boolean): Promise<void> {\n await this.query(sql`\n LOCK ${_.map(_.castArray(table), x => sql`${{ identifier: x }}`)} \n IN ${update ? sql`EXCLUSIVE` : sql`SHARE`} MODE \n NOWAIT\n `);\n }\n\n withConnection<T>(\n callback: (connection: PostgresStorageClient<PostgresClientDriver>) => PromiseLike<T>\n ) {\n return callback(this);\n }\n\n isDuplicateIdError(error: any) {\n return error.code === '23505' && error.table && error.constraint === `${error.table}_pkey`;\n }\n\n atomic<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ): PromiseLike<T> {\n return this.withTransaction(async conn => {\n if (options?.lockTable) await conn.lockTable(options.lockTable, true);\n return callback(conn);\n }, { mode: 'repeatable', retry: true });\n }\n\n async withTransaction<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: TransactionOptions,\n ): Promise<T> {\n\n const beginMap = {\n 'committed': sql`BEGIN ISOLATION LEVEL READ COMMITTED`,\n 'repeatable': sql`BEGIN ISOLATION LEVEL REPEATABLE READ`,\n 'serializable': sql`BEGIN ISOLATION LEVEL SERIALIZABLE`,\n default: sql`BEGIN`,\n };\n\n const _begin = options && _.isString(options.mode)\n ? beginMap[options.mode as keyof typeof beginMap] ?? beginMap.default\n : beginMap.default;\n\n try {\n\n return await this.withConnection(async (connection) => {\n\n const transaction = new PostgresStorageTransaction(connection._driver, 0, options?.mode === 'repeatable');\n transaction.schema = this.schema;\n\n try {\n\n await transaction.query(_begin);\n const result = await callback(transaction);\n await transaction.query(sql`COMMIT`);\n\n return result\n\n } catch (e: any) {\n await transaction.query(sql`ROLLBACK`);\n throw e;\n }\n });\n\n } catch (e: any) {\n\n if (options?.retry && ['40001', '40P01', '55P03'].includes(e.code)) {\n return this.withTransaction(callback, {\n ...options,\n retry: _.isNumber(options.retry) ? Math.max(0, options.retry - 1) : options.retry,\n });\n }\n\n throw e;\n }\n }\n\n subscribe(channel: string, callback: (payload: TValueWithoutObject) => void) {\n const db = this._driver;\n if (!(db instanceof PostgresDriver)) throw Error('Invalid pubsub instance');\n return db.subscribe(channel, callback);\n }\n\n publish(channel: string, payload: TValueWithoutObject) {\n return this._driver.publish(channel, payload);\n }\n\n _refs(\n schema: Record<string, TSchema>,\n className: string,\n keys: string[],\n item: SQL,\n ) {\n const _schema = _.pickBy(_.mapValues(schema, s => _.pickBy(\n s.fields,\n f => (isPointer(f) || (isRelation(f) && _.isNil(f.foreignField))) && f.target === className\n )) as Record<string, Record<string, TSchema.PointerType | TSchema.RelationType>>, s => !_.isEmpty(s));\n return sql`${{\n literal: _.map(_schema, (fields, className) => sql`\n SELECT\n ${{ quote: className }} AS ${{ identifier: '_class' }},\n ${_.map(keys, k => sql`${{ identifier: className }}.${{ identifier: k }}`)}\n FROM ${{ identifier: className }}\n WHERE ${{\n literal: _.map(fields, (f, key) => isPointer(f)\n ? sql`${item} = ${{ identifier: className }}.${{ identifier: key }}`\n : sql`${item} = ANY(${{ identifier: className }}.${{ identifier: key }})`),\n separator: ' OR ',\n }}\n `),\n separator: ' UNION '\n }}`;\n }\n}\n\nclass PostgresStorageTransaction extends PostgresStorageClient<PostgresClientDriver> {\n\n counter: number;\n private _selectLock: boolean;\n\n constructor(driver: PostgresClientDriver, counter: number, selectLock: boolean) {\n super(driver);\n this.counter = counter;\n this._selectLock = selectLock;\n }\n\n selectLock() {\n return this._selectLock;\n }\n\n override atomic<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>,\n options?: { lockTable?: string; retry?: boolean; },\n ) {\n if (!options?.retry) return callback(this);\n return this.withTransaction(async conn => {\n if (options?.lockTable) await conn.lockTable(options.lockTable, true);\n return callback(conn);\n });\n }\n\n override async withTransaction<T>(\n callback: (connection: PostgresStorageTransaction) => PromiseLike<T>\n ) {\n\n const transaction = new PostgresStorageTransaction(this._driver, this.counter + 1, this._selectLock);\n transaction.schema = this.schema;\n\n try {\n\n await transaction.query(sql`SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n const result = await callback(transaction);\n await transaction.query(sql`RELEASE SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n\n return result;\n\n } catch (e) {\n await transaction.query(sql`ROLLBACK TO SAVEPOINT ${{ identifier: `savepoint_${this.counter}` }}`);\n throw e;\n }\n }\n}\n","//\n// pool.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { PoolConfig } from 'pg';\nimport { TSchema, _isTypeof, isPointer, isPrimitive, isRelation, isShape, isVector, shapePaths } from '../../../../internals/schema';\nimport { PostgresDriver, PostgresClientDriver } from '../driver';\nimport { sql } from '../../sql';\nimport { PostgresStorageClient } from './base';\nimport { TObject } from '../../../../internals/object';\n\nconst resolveDataType = (\n schema: TSchema,\n path: string,\n) => {\n let fields = schema.fields;\n let last;\n for (const key of _.toPath(path)) {\n const dataType = fields[key];\n if (_.isNil(dataType)) throw Error(`Invalid path: ${path}`);\n if (isPrimitive(dataType) || isVector(dataType)) return dataType;\n if (!isShape(dataType)) return dataType;\n fields = dataType.shape;\n }\n return last;\n}\n\nexport class PostgresStorage extends PostgresStorageClient<PostgresDriver> {\n\n constructor(config: string | PoolConfig) {\n super(new PostgresDriver(config));\n }\n\n async shutdown() {\n await super.shutdown();\n await this._driver.shutdown();\n }\n\n async prepare(schema: Record<string, TSchema>) {\n await super.prepare(schema);\n await this._enableExtensions();\n await this._createSystemTable();\n for (const [className, _schema] of _.toPairs(schema)) {\n await this._createTable(className, _schema);\n await this._dropIndices(className, _schema);\n await this._rebuildColumns(className, _schema);\n await this._createIndices(className, _schema);\n }\n }\n\n private _pgType(type: TSchema.Primitive | 'pointer' | 'relation' | 'vector') {\n switch (type) {\n case 'boolean': return 'BOOLEAN';\n case 'number': return 'DOUBLE PRECISION';\n case 'decimal': return 'DECIMAL';\n case 'string': return 'TEXT';\n case 'string[]': return 'TEXT[]';\n case 'date': return 'TIMESTAMP(3) WITH TIME ZONE';\n case 'object': return 'JSONB';\n case 'array': return 'JSONB[]';\n case 'vector': return 'DOUBLE PRECISION[]';\n case 'pointer': return 'TEXT';\n case 'relation': return 'TEXT[]';\n default: throw Error('Unknown data type');\n }\n }\n\n private async _enableExtensions() {\n const found = await this.query(sql`SELECT * FROM pg_available_extensions WHERE name = 'vector'`);\n if (!_.isEmpty(found)) {\n await this.query(sql`CREATE EXTENSION IF NOT EXISTS vector`);\n }\n }\n\n private async _createSystemTable() {\n await this.query(sql`\n CREATE TABLE\n IF NOT EXISTS ${{ identifier: '_Config' }}\n (\n _id TEXT PRIMARY KEY,\n _rperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[],\n value JSONB\n )\n `);\n }\n\n private _fields(schema: TSchema) {\n const fields: Record<string, Exclude<TSchema.DataType, TSchema.ShapeType>> = {};\n for (const [key, dataType] of _.entries(schema.fields)) {\n if (isShape(dataType)) {\n for (const { path, type } of shapePaths(dataType)) {\n fields[`${key}.${path}`] = type;\n }\n } else {\n fields[key] = dataType;\n }\n }\n return fields;\n }\n\n private async _createTable(className: string, schema: TSchema) {\n const fields = _.pickBy(\n this._fields(schema), (x, k) => !_.includes(TObject.defaultKeys, k) && (!isRelation(x) || _.isNil(x.foreignField))\n );\n await this.query(sql`\n CREATE TABLE\n IF NOT EXISTS ${{ identifier: className }}\n (\n _id TEXT PRIMARY KEY,\n __v INTEGER NOT NULL DEFAULT 0,\n __i BIGSERIAL NOT NULL UNIQUE,\n _created_at TIMESTAMP(3) WITH TIME ZONE NOT NULL DEFAULT NOW(),\n _updated_at TIMESTAMP(3) WITH TIME ZONE NOT NULL DEFAULT NOW(),\n _expired_at TIMESTAMP(3) WITH TIME ZONE,\n _rperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[],\n _wperm TEXT[] NOT NULL DEFAULT ARRAY['*']::TEXT[]\n ${_.isEmpty(fields) ? sql`` : sql`, ${_.map(fields, (dataType, col) => sql`\n ${{ identifier: col }} ${{ literal: this._pgType(_.isString(dataType) ? dataType : dataType.type) }}\n `)}`}\n )\n `);\n await this.query(sql`\n CREATE UNIQUE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: `${className}$_id` }}\n ON ${{ identifier: className }}\n ((${{ quote: className + '$' }} || _id))\n `);\n }\n\n private _indicesOf(schema: TSchema) {\n const fields = this._fields(schema);\n const pointers = _.pickBy(fields, v => isPointer(v));\n const relations = _.pickBy(fields, v => isRelation(v) && _.isNil(v.foreignField));\n return {\n relations,\n indexes: [\n ..._.map(_.keys(pointers), k => ({ keys: { [k]: 1 } }) as TSchema.Indexes),\n ..._.map(_.keys(relations), k => ({ keys: { [k]: 1 } }) as TSchema.Indexes),\n ...(schema.indexes ?? []),\n ],\n };\n }\n\n private _indexBasicName(className: string, keys: Record<string, 1 | -1>, unique: boolean) {\n if (unique) return `${className}$u$${_.map(keys, (v, k) => `${k}:${v}`).join('$')}`;\n return `${className}$b$${_.map(keys, (v, k) => `${k}:${v}`).join('$')}`;\n }\n\n private _indexVectorName(className: string, keys: string[]) {\n return {\n 'vector_l1_ops': `${className}$v1$${keys.join('$')}`,\n 'vector_l2_ops': `${className}$v2$${keys.join('$')}`,\n 'vector_ip_ops': `${className}$vi$${keys.join('$')}`,\n 'vector_cosine_ops': `${className}$vc$${keys.join('$')}`,\n };\n }\n\n private async _dropIndices(className: string, schema: TSchema) {\n const { indexes } = this._indicesOf(schema);\n const names: string[] = [];\n for (const index of indexes) {\n if (_.isEmpty(index.keys)) continue;\n switch (index.type) {\n case 'vector':\n names.push(..._.values(this._indexVectorName(className, _.castArray(index.keys))));\n break;\n default:\n names.push(this._indexBasicName(className, index.keys, !!index.unique));\n break;\n }\n }\n for (const [name, { is_primary }] of _.toPairs(await this.indices(className))) {\n if (is_primary || names.includes(name)) continue;\n if (name.endsWith('__i_key')) continue;\n await this.query(sql`DROP INDEX CONCURRENTLY IF EXISTS ${{ identifier: name }}`);\n }\n }\n\n private async _rebuildColumns(className: string, schema: TSchema) {\n const columns = await this.columns(className);\n const typeMap: Record<string, string> = {\n 'timestamp': 'timestamp(3) without time zone',\n 'numeric': 'decimal',\n };\n const fields = this._fields(schema);\n const rebuild: { name: string; type: string; }[] = [];\n for (const column of columns) {\n if (TObject.defaultKeys.includes(column.name)) continue;\n const dataType = fields[column.name];\n if (!dataType) continue;\n if (!_.isString(dataType) && dataType.type === 'relation' && !_.isNil(dataType.foreignField)) continue;\n const pgType = this._pgType(_.isString(dataType) ? dataType : dataType.type);\n if (pgType.toLowerCase() === (typeMap[column.type] ?? column.type)) continue;\n rebuild.push({ name: column.name, type: pgType });\n }\n for (const column of _.difference(_.keys(fields), _.map(columns, x => x.name))) {\n const dataType = fields[column];\n const pgType = this._pgType(_.isString(dataType) ? dataType : dataType.type);\n rebuild.push({ name: column, type: pgType });\n }\n if (_.isEmpty(rebuild)) return;\n await this.query(sql`\n ALTER TABLE ${{ identifier: className }}\n ${_.map(rebuild, ({ name, type }) => sql`\n DROP COLUMN IF EXISTS ${{ identifier: name }},\n ADD COLUMN ${{ identifier: name }} ${{ literal: type }}\n `)}\n `);\n }\n\n private async _createIndices(className: string, schema: TSchema) {\n const { relations, indexes } = this._indicesOf(schema);\n for (const index of indexes) {\n if (_.isEmpty(index.keys)) continue;\n switch (index.type) {\n case 'vector':\n {\n const name = this._indexVectorName(className, _.castArray(index.keys));\n const ops = _.keys(name) as (keyof typeof name)[];\n const method = index.method ?? 'hnsw';\n if (_.isArray(index.keys)) {\n for (const op of ops) {\n await this.query(sql`\n CREATE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name[op] }}\n ON ${{ identifier: className }}\n USING ${{ literal: method }} (\n CAST(\n ARRAY[${_.map(index.keys, k => sql`COALESCE(${{ identifier: k }}, 0)`)}]\n AS VECTOR(${{ literal: `${index.keys.length}` }})\n ) ${{ literal: op }}\n )\n `);\n }\n } else {\n const column = index.keys;\n const dataType = schema.fields[column];\n if (!isVector(dataType)) throw Error('Invalid index type');\n for (const op of ops) {\n await this.query(sql`\n CREATE INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name[op] }}\n ON ${{ identifier: className }}\n USING ${{ literal: method }} (\n CAST(\n ${{ identifier: column }} AS VECTOR(${{ literal: `${dataType.dimension}` }})\n ) ${{ literal: op }}\n )\n `);\n }\n }\n }\n break;\n default:\n {\n const name = this._indexBasicName(className, index.keys, !!index.unique);\n const useGin = _.some(_.keys(index.keys), column => {\n const dataType = resolveDataType(schema, column);\n if (!dataType || isShape(dataType)) throw Error('Invalid index type');\n return _isTypeof(dataType, 'string[]') || _.has(relations, column);\n });\n await this.query(sql`\n CREATE ${{ literal: index.unique ? 'UNIQUE' : '' }} INDEX CONCURRENTLY\n IF NOT EXISTS ${{ identifier: name }}\n ON ${{ identifier: className }}\n ${{ literal: useGin ? 'USING GIN' : '' }}\n (${_.map(index.keys, (v, k) => sql`\n ${{ identifier: k }} ${{ literal: useGin ? '' : v === 1 ? 'ASC' : 'DESC' }}\n `)})\n `);\n }\n break;\n }\n }\n }\n\n override withConnection<T>(\n callback: (connection: PostgresStorageClient<PostgresClientDriver>) => PromiseLike<T>\n ) {\n return this._driver.withClient((client) => {\n const connection = new PostgresStorageClient(client);\n connection.schema = this.schema;\n return callback(connection);\n });\n }\n}\n","//\n// index.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport { PostgresStorage } from './client/pool';\n\nexport { PostgresStorage };\nexport default PostgresStorage;"],"names":["generateId","resolveColumn","isRelation","isPointer","resolveDataType","isShape","decodeUpdateOp","shapePaths","QueryCoditionalSelector","QueryFieldSelector","QueryExpressionSelector","isPrimitive","TObject","PVK","accumulatorKeyTypes","_isTypeof","isVector","QueryValidator","escapeLiteral","escapeIdentifier","types","asyncStream","Pool","IteratorPool","PROTO_EVENT","_encodeValue","_decodeValue","_typeof","dimensionOf","QueryArrayExpression","QueryValueExpression","QueryKeyExpression","QueryCoditionalExpression","QueryComparisonExpression","QueryNotExpression","QueryDistanceExpression","QuerySelector","FieldSelectorExpression","index"],"mappings":"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"}
|