@jaepil/usqldb 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +225 -0
- package/dist/types/cli/command-handler.d.ts +52 -0
- package/dist/types/cli/command-handler.d.ts.map +1 -0
- package/dist/types/cli/completer.d.ts +23 -0
- package/dist/types/cli/completer.d.ts.map +1 -0
- package/dist/types/cli/formatter.d.ts +39 -0
- package/dist/types/cli/formatter.d.ts.map +1 -0
- package/dist/types/cli/index.d.ts +4 -0
- package/dist/types/cli/index.d.ts.map +1 -0
- package/dist/types/cli/shell-cli.d.ts +5 -0
- package/dist/types/cli/shell-cli.d.ts.map +1 -0
- package/dist/types/cli/shell.d.ts +41 -0
- package/dist/types/cli/shell.d.ts.map +1 -0
- package/dist/types/core/compiler.d.ts +4 -0
- package/dist/types/core/compiler.d.ts.map +1 -0
- package/dist/types/core/engine.d.ts +14 -0
- package/dist/types/core/engine.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/net/pgwire/auth.d.ts +46 -0
- package/dist/types/net/pgwire/auth.d.ts.map +1 -0
- package/dist/types/net/pgwire/config.d.ts +24 -0
- package/dist/types/net/pgwire/config.d.ts.map +1 -0
- package/dist/types/net/pgwire/connection.d.ts +84 -0
- package/dist/types/net/pgwire/connection.d.ts.map +1 -0
- package/dist/types/net/pgwire/constants.d.ts +73 -0
- package/dist/types/net/pgwire/constants.d.ts.map +1 -0
- package/dist/types/net/pgwire/errors.d.ts +210 -0
- package/dist/types/net/pgwire/errors.d.ts.map +1 -0
- package/dist/types/net/pgwire/index.d.ts +5 -0
- package/dist/types/net/pgwire/index.d.ts.map +1 -0
- package/dist/types/net/pgwire/message-codec.d.ts +65 -0
- package/dist/types/net/pgwire/message-codec.d.ts.map +1 -0
- package/dist/types/net/pgwire/messages.d.ts +126 -0
- package/dist/types/net/pgwire/messages.d.ts.map +1 -0
- package/dist/types/net/pgwire/query-executor.d.ts +34 -0
- package/dist/types/net/pgwire/query-executor.d.ts.map +1 -0
- package/dist/types/net/pgwire/read-buffer.d.ts +24 -0
- package/dist/types/net/pgwire/read-buffer.d.ts.map +1 -0
- package/dist/types/net/pgwire/server-cli.d.ts +2 -0
- package/dist/types/net/pgwire/server-cli.d.ts.map +1 -0
- package/dist/types/net/pgwire/server.d.ts +23 -0
- package/dist/types/net/pgwire/server.d.ts.map +1 -0
- package/dist/types/net/pgwire/type-codec.d.ts +9 -0
- package/dist/types/net/pgwire/type-codec.d.ts.map +1 -0
- package/dist/types/net/pgwire/write-buffer.d.ts +34 -0
- package/dist/types/net/pgwire/write-buffer.d.ts.map +1 -0
- package/dist/types/pg-compat/connection-registry.d.ts +19 -0
- package/dist/types/pg-compat/connection-registry.d.ts.map +1 -0
- package/dist/types/pg-compat/information-schema.d.ts +34 -0
- package/dist/types/pg-compat/information-schema.d.ts.map +1 -0
- package/dist/types/pg-compat/oid.d.ts +48 -0
- package/dist/types/pg-compat/oid.d.ts.map +1 -0
- package/dist/types/pg-compat/pg-catalog.d.ts +45 -0
- package/dist/types/pg-compat/pg-catalog.d.ts.map +1 -0
- package/dist/usqldb.es.js +3598 -0
- package/dist/usqldb.es.js.map +1 -0
- package/dist/usqldb.umd.js +2 -0
- package/dist/usqldb.umd.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usqldb.umd.js","sources":["../src/core/compiler.ts","../src/pg-compat/oid.ts","../src/pg-compat/information-schema.ts","../src/pg-compat/connection-registry.ts","../src/pg-compat/pg-catalog.ts","../src/core/engine.ts"],"sourcesContent":["//\n// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n//\n// Copyright (c) 2023-2026 Cognica, Inc.\n//\n\n// Row normalization utilities for catalog data.\n//\n// Converts values for Arrow-compatible storage:\n// - boolean -> number (0/1), matching PostgreSQL's boolean-to-integer casting\n// - NaN / Infinity -> null\n\ntype Row = Record<string, unknown>;\n\nexport function normalizeRows(rows: Row[]): Row[] {\n if (rows.length === 0) return rows;\n const normalized: Row[] = [];\n for (const row of rows) {\n const newRow: Row = {};\n for (const [key, value] of Object.entries(row)) {\n if (typeof value === \"boolean\") {\n newRow[key] = value ? 1 : 0;\n } else if (\n typeof value === \"number\" &&\n (Number.isNaN(value) || !Number.isFinite(value))\n ) {\n newRow[key] = null;\n } else {\n newRow[key] = value;\n }\n }\n normalized.push(newRow);\n }\n return normalized;\n}\n","// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n// Copyright (c) 2023-2026 Cognica, Inc.\n\n// PostgreSQL OID allocation and type mapping.\n//\n// PostgreSQL assigns a unique OID (Object Identifier) to every database\n// object: types, tables, schemas, indexes, constraints, functions, etc.\n// Tools that inspect the catalog rely on OIDs being consistent across\n// JOINs (e.g. pg_class.oid = pg_attribute.attrelid).\n//\n// OID ranges:\n// 0-16383 Reserved for system objects (built-in types, schemas)\n// 16384+ User-defined objects (tables, indexes, constraints)\n\nimport type { Engine } from \"@jaepil/uqa\";\n\n// ======================================================================\n// Built-in type OIDs (matching PostgreSQL 17)\n// ======================================================================\n\nexport const TYPE_OIDS: Readonly<Record<string, number>> = {\n boolean: 16,\n bool: 16,\n bytea: 17,\n name: 19,\n bigint: 20,\n int8: 20,\n smallint: 21,\n int2: 21,\n integer: 23,\n int: 23,\n int4: 23,\n oid: 26,\n text: 25,\n json: 114,\n xml: 142,\n point: 600,\n real: 700,\n float: 700,\n float4: 700,\n \"double precision\": 701,\n float8: 701,\n character: 1042,\n char: 1042,\n \"character varying\": 1043,\n varchar: 1043,\n date: 1082,\n time: 1083,\n timestamp: 1114,\n \"timestamp without time zone\": 1114,\n timestamptz: 1184,\n \"timestamp with time zone\": 1184,\n interval: 1186,\n numeric: 1700,\n decimal: 1700,\n uuid: 2950,\n jsonb: 3802,\n serial: 23,\n bigserial: 20,\n vector: 16385,\n};\n\n// Array type OIDs: element_type_oid -> array_type_oid\nexport const ARRAY_TYPE_OIDS: Readonly<Record<number, number>> = {\n 16: 1000, // bool[]\n 17: 1001, // bytea[]\n 20: 1016, // int8[]\n 21: 1005, // int2[]\n 23: 1007, // int4[]\n 25: 1009, // text[]\n 26: 1028, // oid[]\n 114: 199, // json[]\n 700: 1021, // float4[]\n 701: 1022, // float8[]\n 1042: 1014, // bpchar[]\n 1043: 1015, // varchar[]\n 1082: 1182, // date[]\n 1083: 1183, // time[]\n 1114: 1115, // timestamp[]\n 1184: 1185, // timestamptz[]\n 1700: 1231, // numeric[]\n 2950: 2951, // uuid[]\n 3802: 3807, // jsonb[]\n};\n\n// Schema OIDs\nexport const SCHEMA_OIDS: Readonly<Record<string, number>> = {\n pg_catalog: 11,\n public: 2200,\n information_schema: 13182,\n pg_toast: 99,\n};\n\n// Database OID\nexport const DATABASE_OID = 1;\n\n// Superuser role OID\nexport const ROLE_OID = 10;\n\n// Access method OIDs\nexport const AM_BTREE = 403;\nexport const AM_HASH = 405;\nexport const AM_GIST = 783;\nexport const AM_GIN = 2742;\nexport const AM_BRIN = 3580;\nexport const AM_HEAP = 2;\nexport const AM_HNSW = 16386;\nexport const AM_IVF = 16387;\n\n// pg_class OIDs for system catalogs (needed for pg_description.classoid)\nexport const CLASS_PG_CLASS = 1259;\nexport const CLASS_PG_TYPE = 1247;\nexport const CLASS_PG_NAMESPACE = 2615;\nexport const CLASS_PG_CONSTRAINT = 2606;\nexport const CLASS_PG_INDEX = 2610;\nexport const CLASS_PG_ATTRDEF = 2604;\nexport const CLASS_PG_AM = 2601;\nexport const CLASS_PG_PROC = 1255;\n\n// Canonical type name mapping (UQA type_name -> PostgreSQL canonical name)\nexport const CANONICAL_TYPE_NAMES: Readonly<Record<string, string>> = {\n int: \"integer\",\n int2: \"smallint\",\n int4: \"integer\",\n int8: \"bigint\",\n float: \"real\",\n float4: \"real\",\n float8: \"double precision\",\n bool: \"boolean\",\n serial: \"integer\",\n bigserial: \"bigint\",\n decimal: \"numeric\",\n char: \"character\",\n \"character varying\": \"character varying\",\n varchar: \"character varying\",\n name: \"name\",\n \"timestamp without time zone\": \"timestamp without time zone\",\n \"timestamp with time zone\": \"timestamp with time zone\",\n};\n\n// Type length in bytes (-1 = variable, -2 = null-terminated C string)\nexport const TYPE_LENGTHS: Readonly<Record<number, number>> = {\n 16: 1, // bool\n 17: -1, // bytea\n 19: 64, // name\n 20: 8, // int8\n 21: 2, // int2\n 23: 4, // int4\n 25: -1, // text\n 26: 4, // oid\n 114: -1, // json\n 142: -1, // xml\n 600: 16, // point\n 700: 4, // float4\n 701: 8, // float8\n 1042: -1, // bpchar\n 1043: -1, // varchar\n 1082: 4, // date\n 1083: 8, // time\n 1114: 8, // timestamp\n 1184: 8, // timestamptz\n 1186: 16, // interval\n 1700: -1, // numeric\n 2950: 16, // uuid\n 3802: -1, // jsonb\n 16385: -1, // vector\n};\n\n// Type category (single character, PostgreSQL convention)\nexport const TYPE_CATEGORIES: Readonly<Record<number, string>> = {\n 16: \"B\", // Boolean\n 17: \"U\", // User-defined (bytea)\n 19: \"S\", // String\n 20: \"N\", // Numeric\n 21: \"N\", // Numeric\n 23: \"N\", // Numeric\n 25: \"S\", // String\n 26: \"N\", // Numeric (oid)\n 114: \"U\", // User-defined (json)\n 142: \"U\", // User-defined (xml)\n 600: \"G\", // Geometric\n 700: \"N\", // Numeric\n 701: \"N\", // Numeric\n 1042: \"S\", // String\n 1043: \"S\", // String\n 1082: \"D\", // Date/Time\n 1083: \"D\", // Date/Time\n 1114: \"D\", // Date/Time\n 1184: \"D\", // Date/Time\n 1186: \"T\", // Timespan\n 1700: \"N\", // Numeric\n 2950: \"U\", // User-defined (uuid)\n 3802: \"U\", // User-defined (jsonb)\n 16385: \"U\", // User-defined (vector)\n};\n\n// Type by-value flag (passed by value vs by reference)\nexport const TYPE_BYVAL: Readonly<Record<number, boolean>> = {\n 16: true, // bool\n 21: true, // int2\n 23: true, // int4\n 26: true, // oid\n 700: true, // float4\n};\n\n// Type alignment\nexport const TYPE_ALIGN: Readonly<Record<number, string>> = {\n 16: \"c\", // char alignment\n 17: \"i\", // int alignment\n 19: \"c\", // char\n 20: \"d\", // double\n 21: \"s\", // short\n 23: \"i\", // int\n 25: \"i\", // int\n 26: \"i\", // int\n 700: \"i\", // int\n 701: \"d\", // double\n 1042: \"i\", // int\n 1043: \"i\", // int\n 1082: \"i\", // int\n 1083: \"d\", // double\n 1114: \"d\", // double\n 1184: \"d\", // double\n 1186: \"d\", // double\n 1700: \"i\", // int\n 2950: \"c\", // char\n 3802: \"i\", // int\n};\n\n// Type storage strategy\nexport const TYPE_STORAGE: Readonly<Record<number, string>> = {\n 16: \"p\", // plain\n 17: \"x\", // extended\n 19: \"p\", // plain\n 20: \"p\", // plain\n 21: \"p\", // plain\n 23: \"p\", // plain\n 25: \"x\", // extended\n 26: \"p\", // plain\n 114: \"x\", // extended\n 700: \"p\", // plain\n 701: \"p\", // plain\n 1042: \"x\", // extended\n 1043: \"x\", // extended\n 1082: \"p\", // plain\n 1114: \"p\", // plain\n 1184: \"p\", // plain\n 1700: \"m\", // main\n 2950: \"p\", // plain\n 3802: \"x\", // extended\n};\n\n// ======================================================================\n// Type helper functions\n// ======================================================================\n\nexport function typeOid(typeName: string): number {\n // Handle array types (e.g. \"text[]\", \"integer[]\")\n if (typeName.endsWith(\"[]\")) {\n const base = typeName.slice(0, -2);\n const baseOid = TYPE_OIDS[base] ?? 25; // default to text\n return ARRAY_TYPE_OIDS[baseOid] ?? 1009; // default to text[]\n }\n return TYPE_OIDS[typeName] ?? 25; // default to text\n}\n\nexport function canonicalTypeName(typeName: string): string {\n if (typeName.endsWith(\"[]\")) {\n const base = typeName.slice(0, -2);\n const baseCanonical = CANONICAL_TYPE_NAMES[base] ?? base;\n return `${baseCanonical}[]`;\n }\n return CANONICAL_TYPE_NAMES[typeName] ?? typeName;\n}\n\nexport function typeLength(typeName: string): number {\n const oid = typeOid(typeName);\n return TYPE_LENGTHS[oid] ?? -1;\n}\n\nexport function numericPrecision(typeName: string): number | null {\n const oid = typeOid(typeName);\n const precisions: Record<number, number> = {\n 21: 16, // int2\n 23: 32, // int4\n 20: 64, // int8\n 700: 24, // float4\n 701: 53, // float8\n };\n return precisions[oid] ?? null;\n}\n\nexport function numericScale(typeName: string): number | null {\n const oid = typeOid(typeName);\n if (oid === 21 || oid === 23 || oid === 20) return 0;\n return null;\n}\n\nexport function numericPrecisionRadix(typeName: string): number | null {\n const oid = typeOid(typeName);\n if (oid === 21 || oid === 23 || oid === 20 || oid === 1700) return 10;\n if (oid === 700 || oid === 701) return 2;\n return null;\n}\n\nexport function characterMaximumLength(_typeName: string): number | null {\n // UQA text types are unbounded\n return null;\n}\n\nexport function characterOctetLength(typeName: string): number | null {\n const oid = typeOid(typeName);\n if (oid === 25 || oid === 1042 || oid === 1043) {\n return 1073741824; // 1 GB (PostgreSQL default)\n }\n return null;\n}\n\n// ======================================================================\n// OID Allocator\n// ======================================================================\n\n// Helper to access engine internals via Engine's public underscore-prefixed fields\ninterface EngineInternals {\n _tables: Map<string, TableInternals>;\n _views: Map<string, unknown>;\n _sequences: Map<string, Record<string, number>>;\n _tempTables: Set<string>;\n _foreignServers: Map<string, ForeignServerInternals>;\n _foreignTables: Map<string, ForeignTableInternals>;\n}\n\ninterface TableInternals {\n primaryKey: string | null;\n columns: Map<string, ColumnDefInternals>;\n foreignKeys: ForeignKeyInternals[];\n checkConstraints: [string, string][];\n rowCount: number;\n _stats: unknown;\n}\n\ninterface ColumnDefInternals {\n typeName: string;\n notNull: boolean;\n primaryKey: boolean;\n unique: boolean;\n defaultValue: unknown;\n autoIncrement: boolean;\n numericPrecision: number | null;\n numericScale: number | null;\n}\n\ninterface ForeignKeyInternals {\n column: string;\n refTable: string;\n refColumn: string;\n}\n\ninterface ForeignServerInternals {\n name: string;\n fdwType: string;\n options: Record<string, string>;\n}\n\ninterface ForeignTableInternals {\n serverName: string;\n columns: Map<string, ColumnDefInternals>;\n options: Record<string, string>;\n}\n\nexport class OIDAllocator {\n private _map: Map<string, number>;\n private _next: number;\n\n constructor(engine: Engine) {\n this._map = new Map();\n this._next = 16384;\n this._build(engine as unknown as EngineInternals);\n }\n\n private _alloc(): number {\n const oid = this._next;\n this._next += 1;\n return oid;\n }\n\n private _build(engine: EngineInternals): void {\n // -- Tables --\n for (const name of [...engine._tables.keys()].sort()) {\n this._map.set(`table:${name}`, this._alloc());\n // Each table has an implicit composite type\n this._map.set(`table_type:${name}`, this._alloc());\n // Each table has an implicit TOAST table OID (placeholder)\n this._map.set(`toast:${name}`, this._alloc());\n }\n\n // -- Views --\n for (const name of [...engine._views.keys()].sort()) {\n this._map.set(`view:${name}`, this._alloc());\n }\n\n // -- Sequences --\n for (const name of [...engine._sequences.keys()].sort()) {\n this._map.set(`sequence:${name}`, this._alloc());\n }\n\n // -- Foreign tables --\n for (const name of [...engine._foreignTables.keys()].sort()) {\n this._map.set(`foreign_table:${name}`, this._alloc());\n }\n\n // -- Foreign servers --\n for (const name of [...engine._foreignServers.keys()].sort()) {\n this._map.set(`foreign_server:${name}`, this._alloc());\n }\n\n // -- FDW wrappers --\n const fdwTypes = new Set<string>();\n for (const srv of engine._foreignServers.values()) {\n fdwTypes.add(srv.fdwType);\n }\n for (const fdwType of [...fdwTypes].sort()) {\n this._map.set(`fdw:${fdwType}`, this._alloc());\n }\n\n // -- Indexes (explicit) --\n const indexManager = (engine as unknown as Record<string, unknown>)[\n \"_indexManager\"\n ] as { _indexes?: Map<string, unknown> } | null;\n if (indexManager !== null && indexManager !== undefined) {\n const indexes = indexManager._indexes;\n if (indexes !== undefined) {\n for (const name of [...indexes.keys()].sort()) {\n this._map.set(`index:${name}`, this._alloc());\n }\n }\n }\n\n // -- Constraints --\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n\n if (table.primaryKey) {\n this._map.set(`constraint:${tname}_pkey`, this._alloc());\n // PK also has a backing index\n this._map.set(`index:${tname}_pkey`, this._alloc());\n }\n\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n this._map.set(`constraint:${tname}_${cname}_key`, this._alloc());\n this._map.set(`index:${tname}_${cname}_key`, this._alloc());\n }\n }\n\n for (const fk of table.foreignKeys) {\n this._map.set(`constraint:${tname}_${fk.column}_fkey`, this._alloc());\n }\n\n for (const [checkName] of table.checkConstraints) {\n this._map.set(`constraint:${tname}_${checkName}_check`, this._alloc());\n }\n }\n }\n\n get(category: string, name: string): number | null {\n return this._map.get(`${category}:${name}`) ?? null;\n }\n\n getOrAlloc(category: string, name: string): number {\n const key = `${category}:${name}`;\n const existing = this._map.get(key);\n if (existing !== undefined) return existing;\n const oid = this._alloc();\n this._map.set(key, oid);\n return oid;\n }\n\n relationOid(name: string, _engine: Engine): number | null {\n for (const category of [\"table\", \"view\", \"foreign_table\", \"sequence\"] as const) {\n const oid = this._map.get(`${category}:${name}`);\n if (oid !== undefined) return oid;\n }\n return null;\n }\n\n allByCategory(category: string): Map<string, number> {\n const prefix = `${category}:`;\n const result = new Map<string, number>();\n for (const [key, oid] of this._map) {\n if (key.startsWith(prefix)) {\n result.set(key.slice(prefix.length), oid);\n }\n }\n return result;\n }\n}\n","// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n// Copyright (c) 2023-2026 Cognica, Inc.\n\n// PostgreSQL 17 information_schema view provider.\n//\n// Generates virtual rows for all standard information_schema views by\n// inspecting UQA Engine state. Each builder returns a\n// [columns, rows] tuple suitable for conversion into virtual rows.\n//\n// Reference: PostgreSQL 17 documentation, Chapter 37 -- The Information Schema\n// https://www.postgresql.org/docs/17/information-schema.html\n\nimport type { Engine } from \"@jaepil/uqa\";\nimport type { OIDAllocator } from \"./oid.js\";\nimport {\n canonicalTypeName,\n characterMaximumLength,\n characterOctetLength,\n numericPrecision,\n numericPrecisionRadix,\n numericScale,\n} from \"./oid.js\";\n\ntype Row = Record<string, unknown>;\ntype BuildResult = [string[], Row[]];\n\n// Helper to access engine internals\ninterface EngineInternals {\n _tables: Map<string, TableInternals>;\n _views: Map<string, unknown>;\n _sequences: Map<string, Record<string, number>>;\n _tempTables: Set<string>;\n _foreignServers: Map<string, ForeignServerInternals>;\n _foreignTables: Map<string, ForeignTableInternals>;\n}\n\ninterface TableInternals {\n primaryKey: string | null;\n columns: Map<string, ColumnDefInternals>;\n foreignKeys: ForeignKeyInternals[];\n checkConstraints: [string, string][];\n}\n\ninterface ColumnDefInternals {\n typeName: string;\n notNull: boolean;\n primaryKey: boolean;\n unique: boolean;\n defaultValue: unknown;\n autoIncrement: boolean;\n numericPrecision: number | null;\n numericScale: number | null;\n}\n\ninterface ForeignKeyInternals {\n column: string;\n refTable: string;\n refColumn: string;\n}\n\ninterface ForeignServerInternals {\n fdwType: string;\n options: Record<string, string>;\n}\n\ninterface ForeignTableInternals {\n serverName: string;\n columns: Map<string, ColumnDefInternals>;\n options: Record<string, string>;\n}\n\n// Database name used as table_catalog\nconst CATALOG = \"uqa\";\nconst SCHEMA = \"public\";\nconst OWNER = \"uqa\";\n\n// UDT name mapping\nfunction udtName(typeName: string): string {\n const mapping: Record<string, string> = {\n integer: \"int4\",\n int: \"int4\",\n int4: \"int4\",\n bigint: \"int8\",\n int8: \"int8\",\n smallint: \"int2\",\n int2: \"int2\",\n serial: \"int4\",\n bigserial: \"int8\",\n text: \"text\",\n varchar: \"varchar\",\n \"character varying\": \"varchar\",\n character: \"bpchar\",\n char: \"bpchar\",\n name: \"name\",\n boolean: \"bool\",\n bool: \"bool\",\n real: \"float4\",\n float: \"float4\",\n float4: \"float4\",\n \"double precision\": \"float8\",\n float8: \"float8\",\n numeric: \"numeric\",\n decimal: \"numeric\",\n date: \"date\",\n timestamp: \"timestamp\",\n \"timestamp without time zone\": \"timestamp\",\n timestamptz: \"timestamptz\",\n \"timestamp with time zone\": \"timestamptz\",\n json: \"json\",\n jsonb: \"jsonb\",\n uuid: \"uuid\",\n bytea: \"bytea\",\n point: \"point\",\n vector: \"vector\",\n };\n if (typeName.endsWith(\"[]\")) {\n const base = typeName.slice(0, -2);\n const baseUdt = mapping[base] ?? base;\n return `_${baseUdt}`;\n }\n return mapping[typeName] ?? typeName;\n}\n\nfunction formatDefault(value: unknown): string {\n if (typeof value === \"string\") {\n const escaped = value.replace(/'/g, \"''\");\n return `'${escaped}'::text`;\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n return String(value);\n}\n\n// The JS UQA engine maps NUMERIC/DECIMAL to typeName=\"float\" internally.\n// When numericScale is set, the original SQL type was NUMERIC(p,s).\n// This helper resolves the effective type name for catalog display.\nfunction effectiveTypeName(cdef: ColumnDefInternals): string {\n if (cdef.typeName === \"float\" && cdef.numericScale !== null) {\n return \"numeric\";\n }\n return cdef.typeName;\n}\n\ntype ViewBuilder = (engine: EngineInternals, oids: OIDAllocator) => BuildResult;\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class InformationSchemaProvider {\n private static readonly _VIEWS: Readonly<Record<string, ViewBuilder>> = {\n schemata: InformationSchemaProvider._buildSchemata,\n tables: InformationSchemaProvider._buildTables,\n columns: InformationSchemaProvider._buildColumns,\n table_constraints: InformationSchemaProvider._buildTableConstraints,\n key_column_usage: InformationSchemaProvider._buildKeyColumnUsage,\n referential_constraints: InformationSchemaProvider._buildReferentialConstraints,\n constraint_column_usage: InformationSchemaProvider._buildConstraintColumnUsage,\n check_constraints: InformationSchemaProvider._buildCheckConstraints,\n views: InformationSchemaProvider._buildViews,\n sequences: InformationSchemaProvider._buildSequences,\n routines: InformationSchemaProvider._buildRoutines,\n parameters: InformationSchemaProvider._buildParameters,\n foreign_tables: InformationSchemaProvider._buildForeignTables,\n foreign_servers: InformationSchemaProvider._buildForeignServers,\n foreign_server_options: InformationSchemaProvider._buildForeignServerOptions,\n foreign_table_options: InformationSchemaProvider._buildForeignTableOptions,\n enabled_roles: InformationSchemaProvider._buildEnabledRoles,\n applicable_roles: InformationSchemaProvider._buildApplicableRoles,\n character_sets: InformationSchemaProvider._buildCharacterSets,\n collations: InformationSchemaProvider._buildCollations,\n domains: InformationSchemaProvider._buildDomains,\n element_types: InformationSchemaProvider._buildElementTypes,\n triggers: InformationSchemaProvider._buildTriggers,\n };\n\n static supportedViews(): string[] {\n return Object.keys(InformationSchemaProvider._VIEWS);\n }\n\n static build(viewName: string, engine: Engine, oids: OIDAllocator): BuildResult {\n const builder = InformationSchemaProvider._VIEWS[viewName];\n if (builder === undefined) {\n throw new Error(`Unknown information_schema view: '${viewName}'`);\n }\n return builder(engine as unknown as EngineInternals, oids);\n }\n\n // ==================================================================\n // information_schema.schemata\n // ==================================================================\n\n private static _buildSchemata(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"catalog_name\",\n \"schema_name\",\n \"schema_owner\",\n \"default_character_set_catalog\",\n \"default_character_set_schema\",\n \"default_character_set_name\",\n \"sql_path\",\n ];\n const rows: Row[] = [\n {\n catalog_name: CATALOG,\n schema_name: \"public\",\n schema_owner: OWNER,\n default_character_set_catalog: null,\n default_character_set_schema: null,\n default_character_set_name: null,\n sql_path: null,\n },\n {\n catalog_name: CATALOG,\n schema_name: \"information_schema\",\n schema_owner: OWNER,\n default_character_set_catalog: null,\n default_character_set_schema: null,\n default_character_set_name: null,\n sql_path: null,\n },\n {\n catalog_name: CATALOG,\n schema_name: \"pg_catalog\",\n schema_owner: OWNER,\n default_character_set_catalog: null,\n default_character_set_schema: null,\n default_character_set_name: null,\n sql_path: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.tables\n // ==================================================================\n\n private static _buildTables(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"table_type\",\n \"self_referencing_column_name\",\n \"reference_generation\",\n \"user_defined_type_catalog\",\n \"user_defined_type_schema\",\n \"user_defined_type_name\",\n \"is_insertable_into\",\n \"is_typed\",\n \"commit_action\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const isTemp = engine._tempTables.has(tname);\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n table_type: isTemp ? \"LOCAL TEMPORARY\" : \"BASE TABLE\",\n self_referencing_column_name: null,\n reference_generation: null,\n user_defined_type_catalog: null,\n user_defined_type_schema: null,\n user_defined_type_name: null,\n is_insertable_into: \"YES\",\n is_typed: \"NO\",\n commit_action: null,\n });\n }\n\n for (const vname of [...engine._views.keys()].sort()) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: vname,\n table_type: \"VIEW\",\n self_referencing_column_name: null,\n reference_generation: null,\n user_defined_type_catalog: null,\n user_defined_type_schema: null,\n user_defined_type_name: null,\n is_insertable_into: \"NO\",\n is_typed: \"NO\",\n commit_action: null,\n });\n }\n\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: ftname,\n table_type: \"FOREIGN\",\n self_referencing_column_name: null,\n reference_generation: null,\n user_defined_type_catalog: null,\n user_defined_type_schema: null,\n user_defined_type_name: null,\n is_insertable_into: \"NO\",\n is_typed: \"NO\",\n commit_action: null,\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.columns\n // ==================================================================\n\n private static _buildColumns(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"column_name\",\n \"ordinal_position\",\n \"column_default\",\n \"is_nullable\",\n \"data_type\",\n \"character_maximum_length\",\n \"character_octet_length\",\n \"numeric_precision\",\n \"numeric_precision_radix\",\n \"numeric_scale\",\n \"datetime_precision\",\n \"interval_type\",\n \"interval_precision\",\n \"character_set_catalog\",\n \"character_set_schema\",\n \"character_set_name\",\n \"collation_catalog\",\n \"collation_schema\",\n \"collation_name\",\n \"domain_catalog\",\n \"domain_schema\",\n \"domain_name\",\n \"udt_catalog\",\n \"udt_schema\",\n \"udt_name\",\n \"scope_catalog\",\n \"scope_schema\",\n \"scope_name\",\n \"maximum_cardinality\",\n \"dtd_identifier\",\n \"is_self_referencing\",\n \"is_identity\",\n \"identity_generation\",\n \"identity_start\",\n \"identity_increment\",\n \"identity_maximum\",\n \"identity_minimum\",\n \"identity_cycle\",\n \"is_generated\",\n \"generation_expression\",\n \"is_updatable\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n let pos = 0;\n for (const [cname, cdef] of table.columns) {\n pos++;\n const effType = effectiveTypeName(cdef);\n const display = canonicalTypeName(effType);\n const udt = udtName(effType);\n\n let defaultStr: string | null = null;\n if (cdef.autoIncrement) {\n defaultStr = `nextval('${tname}_${cname}_seq'::regclass)`;\n } else if (cdef.defaultValue !== null && cdef.defaultValue !== undefined) {\n defaultStr = formatDefault(cdef.defaultValue);\n }\n\n const isIdentity = cdef.autoIncrement ? \"YES\" : \"NO\";\n const identityGen = cdef.autoIncrement ? \"BY DEFAULT\" : null;\n\n let dtPrecision: number | null = null;\n if (\n [\n \"timestamp\",\n \"timestamptz\",\n \"timestamp without time zone\",\n \"timestamp with time zone\",\n \"date\",\n \"time\",\n ].includes(effType)\n ) {\n dtPrecision = 6; // microsecond precision\n }\n\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: cname,\n ordinal_position: pos,\n column_default: defaultStr,\n is_nullable: cdef.notNull ? \"NO\" : \"YES\",\n data_type: display,\n character_maximum_length: characterMaximumLength(effType),\n character_octet_length: characterOctetLength(effType),\n numeric_precision:\n cdef.numericPrecision !== null\n ? cdef.numericPrecision\n : numericPrecision(effType),\n numeric_precision_radix: numericPrecisionRadix(effType),\n numeric_scale:\n cdef.numericScale !== null ? cdef.numericScale : numericScale(effType),\n datetime_precision: dtPrecision,\n interval_type: null,\n interval_precision: null,\n character_set_catalog: null,\n character_set_schema: null,\n character_set_name: null,\n collation_catalog: null,\n collation_schema: null,\n collation_name: null,\n domain_catalog: null,\n domain_schema: null,\n domain_name: null,\n udt_catalog: CATALOG,\n udt_schema: \"pg_catalog\",\n udt_name: udt,\n scope_catalog: null,\n scope_schema: null,\n scope_name: null,\n maximum_cardinality: null,\n dtd_identifier: String(pos),\n is_self_referencing: \"NO\",\n is_identity: isIdentity,\n identity_generation: identityGen,\n identity_start: cdef.autoIncrement ? \"1\" : null,\n identity_increment: cdef.autoIncrement ? \"1\" : null,\n identity_maximum: null,\n identity_minimum: null,\n identity_cycle: cdef.autoIncrement ? \"NO\" : null,\n is_generated: \"NEVER\",\n generation_expression: null,\n is_updatable: \"YES\",\n });\n }\n }\n\n // Foreign table columns\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ft = engine._foreignTables.get(ftname)!;\n let pos = 0;\n for (const [cname, cdef] of ft.columns) {\n pos++;\n const effType = effectiveTypeName(cdef);\n const display = canonicalTypeName(effType);\n const udt = udtName(effType);\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: ftname,\n column_name: cname,\n ordinal_position: pos,\n column_default: null,\n is_nullable: \"YES\",\n data_type: display,\n character_maximum_length: null,\n character_octet_length: null,\n numeric_precision: numericPrecision(effType),\n numeric_precision_radix: numericPrecisionRadix(effType),\n numeric_scale: numericScale(effType),\n datetime_precision: null,\n interval_type: null,\n interval_precision: null,\n character_set_catalog: null,\n character_set_schema: null,\n character_set_name: null,\n collation_catalog: null,\n collation_schema: null,\n collation_name: null,\n domain_catalog: null,\n domain_schema: null,\n domain_name: null,\n udt_catalog: CATALOG,\n udt_schema: \"pg_catalog\",\n udt_name: udt,\n scope_catalog: null,\n scope_schema: null,\n scope_name: null,\n maximum_cardinality: null,\n dtd_identifier: String(pos),\n is_self_referencing: \"NO\",\n is_identity: \"NO\",\n identity_generation: null,\n identity_start: null,\n identity_increment: null,\n identity_maximum: null,\n identity_minimum: null,\n identity_cycle: null,\n is_generated: \"NEVER\",\n generation_expression: null,\n is_updatable: \"NO\",\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.table_constraints\n // ==================================================================\n\n private static _buildTableConstraints(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"constraint_catalog\",\n \"constraint_schema\",\n \"constraint_name\",\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"constraint_type\",\n \"is_deferrable\",\n \"initially_deferred\",\n \"enforced\",\n \"nulls_distinct\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n\n // PRIMARY KEY\n if (table.primaryKey) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_pkey`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n constraint_type: \"PRIMARY KEY\",\n is_deferrable: \"NO\",\n initially_deferred: \"NO\",\n enforced: \"YES\",\n nulls_distinct: null,\n });\n }\n\n // UNIQUE constraints\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${cname}_key`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n constraint_type: \"UNIQUE\",\n is_deferrable: \"NO\",\n initially_deferred: \"NO\",\n enforced: \"YES\",\n nulls_distinct: \"YES\",\n });\n }\n }\n\n // FOREIGN KEY constraints\n for (const fk of table.foreignKeys) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${fk.column}_fkey`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n constraint_type: \"FOREIGN KEY\",\n is_deferrable: \"NO\",\n initially_deferred: \"NO\",\n enforced: \"YES\",\n nulls_distinct: null,\n });\n }\n\n // CHECK constraints\n for (const [checkName] of table.checkConstraints) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${checkName}_check`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n constraint_type: \"CHECK\",\n is_deferrable: \"NO\",\n initially_deferred: \"NO\",\n enforced: \"YES\",\n nulls_distinct: null,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.key_column_usage\n // ==================================================================\n\n private static _buildKeyColumnUsage(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"constraint_catalog\",\n \"constraint_schema\",\n \"constraint_name\",\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"column_name\",\n \"ordinal_position\",\n \"position_in_unique_constraint\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n\n if (table.primaryKey) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_pkey`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: table.primaryKey,\n ordinal_position: 1,\n position_in_unique_constraint: null,\n });\n }\n\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${cname}_key`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: cname,\n ordinal_position: 1,\n position_in_unique_constraint: null,\n });\n }\n }\n\n for (const fk of table.foreignKeys) {\n const refTable = engine._tables.get(fk.refTable);\n let refPos: number | null = null;\n if (refTable !== undefined) {\n const refCols = [...refTable.columns.keys()];\n if (refCols.includes(fk.refColumn)) {\n refPos = 1; // single-column PK/UNIQUE\n }\n }\n\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${fk.column}_fkey`,\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: fk.column,\n ordinal_position: 1,\n position_in_unique_constraint: refPos,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.referential_constraints\n // ==================================================================\n\n private static _buildReferentialConstraints(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"constraint_catalog\",\n \"constraint_schema\",\n \"constraint_name\",\n \"unique_constraint_catalog\",\n \"unique_constraint_schema\",\n \"unique_constraint_name\",\n \"match_option\",\n \"update_rule\",\n \"delete_rule\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n for (const fk of table.foreignKeys) {\n const refTable = engine._tables.get(fk.refTable);\n let refConstraint: string | null = null;\n if (refTable !== undefined) {\n if (refTable.primaryKey === fk.refColumn) {\n refConstraint = `${fk.refTable}_pkey`;\n } else {\n refConstraint = `${fk.refTable}_${fk.refColumn}_key`;\n }\n }\n\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${fk.column}_fkey`,\n unique_constraint_catalog: CATALOG,\n unique_constraint_schema: SCHEMA,\n unique_constraint_name: refConstraint,\n match_option: \"NONE\",\n update_rule: \"NO ACTION\",\n delete_rule: \"NO ACTION\",\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.constraint_column_usage\n // ==================================================================\n\n private static _buildConstraintColumnUsage(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"column_name\",\n \"constraint_catalog\",\n \"constraint_schema\",\n \"constraint_name\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n\n if (table.primaryKey) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: table.primaryKey,\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_pkey`,\n });\n }\n\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: tname,\n column_name: cname,\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${cname}_key`,\n });\n }\n }\n\n // FK: the referenced columns\n for (const fk of table.foreignKeys) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: fk.refTable,\n column_name: fk.refColumn,\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${fk.column}_fkey`,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.check_constraints\n // ==================================================================\n\n private static _buildCheckConstraints(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"constraint_catalog\",\n \"constraint_schema\",\n \"constraint_name\",\n \"check_clause\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n\n // NOT NULL constraints (PostgreSQL exposes these as CHECK)\n for (const [cname, cdef] of table.columns) {\n if (cdef.notNull && !cdef.primaryKey) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${cname}_not_null`,\n check_clause: `${cname} IS NOT NULL`,\n });\n }\n }\n\n // Explicit CHECK constraints\n for (const [checkName] of table.checkConstraints) {\n rows.push({\n constraint_catalog: CATALOG,\n constraint_schema: SCHEMA,\n constraint_name: `${tname}_${checkName}_check`,\n check_clause: checkName,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.views\n // ==================================================================\n\n private static _buildViews(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"table_catalog\",\n \"table_schema\",\n \"table_name\",\n \"view_definition\",\n \"check_option\",\n \"is_updatable\",\n \"is_insertable_into\",\n \"is_trigger_updatable\",\n \"is_trigger_deletable\",\n \"is_trigger_insertable_into\",\n ];\n const rows: Row[] = [];\n\n for (const vname of [...engine._views.keys()].sort()) {\n rows.push({\n table_catalog: CATALOG,\n table_schema: SCHEMA,\n table_name: vname,\n view_definition: \"\",\n check_option: \"NONE\",\n is_updatable: \"NO\",\n is_insertable_into: \"NO\",\n is_trigger_updatable: \"NO\",\n is_trigger_deletable: \"NO\",\n is_trigger_insertable_into: \"NO\",\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.sequences\n // ==================================================================\n\n private static _buildSequences(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"sequence_catalog\",\n \"sequence_schema\",\n \"sequence_name\",\n \"data_type\",\n \"numeric_precision\",\n \"numeric_precision_radix\",\n \"numeric_scale\",\n \"start_value\",\n \"minimum_value\",\n \"maximum_value\",\n \"increment\",\n \"cycle_option\",\n ];\n const rows: Row[] = [];\n\n for (const sname of [...engine._sequences.keys()].sort()) {\n const seq = engine._sequences.get(sname)!;\n rows.push({\n sequence_catalog: CATALOG,\n sequence_schema: SCHEMA,\n sequence_name: sname,\n data_type: \"bigint\",\n numeric_precision: 64,\n numeric_precision_radix: 2,\n numeric_scale: 0,\n start_value: String(seq[\"start\"] ?? 1),\n minimum_value: \"1\",\n maximum_value: \"9223372036854775807\",\n increment: String(seq[\"increment\"] ?? 1),\n cycle_option: \"NO\",\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.routines (empty)\n // ==================================================================\n\n private static _buildRoutines(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"specific_catalog\",\n \"specific_schema\",\n \"specific_name\",\n \"routine_catalog\",\n \"routine_schema\",\n \"routine_name\",\n \"routine_type\",\n \"data_type\",\n \"type_udt_catalog\",\n \"type_udt_schema\",\n \"type_udt_name\",\n \"routine_definition\",\n \"external_language\",\n \"is_deterministic\",\n \"security_type\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // information_schema.parameters (empty)\n // ==================================================================\n\n private static _buildParameters(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"specific_catalog\",\n \"specific_schema\",\n \"specific_name\",\n \"ordinal_position\",\n \"parameter_mode\",\n \"is_result\",\n \"as_locator\",\n \"parameter_name\",\n \"data_type\",\n \"parameter_default\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // information_schema.foreign_tables\n // ==================================================================\n\n private static _buildForeignTables(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"foreign_table_catalog\",\n \"foreign_table_schema\",\n \"foreign_table_name\",\n \"foreign_server_catalog\",\n \"foreign_server_name\",\n ];\n const rows: Row[] = [];\n\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ft = engine._foreignTables.get(ftname)!;\n rows.push({\n foreign_table_catalog: CATALOG,\n foreign_table_schema: SCHEMA,\n foreign_table_name: ftname,\n foreign_server_catalog: CATALOG,\n foreign_server_name: ft.serverName,\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.foreign_servers\n // ==================================================================\n\n private static _buildForeignServers(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"foreign_server_catalog\",\n \"foreign_server_name\",\n \"foreign_data_wrapper_catalog\",\n \"foreign_data_wrapper_name\",\n \"foreign_server_type\",\n \"foreign_server_version\",\n \"authorization_identifier\",\n ];\n const rows: Row[] = [];\n\n for (const sname of [...engine._foreignServers.keys()].sort()) {\n const srv = engine._foreignServers.get(sname)!;\n rows.push({\n foreign_server_catalog: CATALOG,\n foreign_server_name: sname,\n foreign_data_wrapper_catalog: CATALOG,\n foreign_data_wrapper_name: srv.fdwType,\n foreign_server_type: null,\n foreign_server_version: null,\n authorization_identifier: OWNER,\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.foreign_server_options\n // ==================================================================\n\n private static _buildForeignServerOptions(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"foreign_server_catalog\",\n \"foreign_server_name\",\n \"option_name\",\n \"option_value\",\n ];\n const rows: Row[] = [];\n\n for (const sname of [...engine._foreignServers.keys()].sort()) {\n const srv = engine._foreignServers.get(sname)!;\n for (const optName of Object.keys(srv.options).sort()) {\n rows.push({\n foreign_server_catalog: CATALOG,\n foreign_server_name: sname,\n option_name: optName,\n option_value: srv.options[optName],\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.foreign_table_options\n // ==================================================================\n\n private static _buildForeignTableOptions(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"foreign_table_catalog\",\n \"foreign_table_schema\",\n \"foreign_table_name\",\n \"option_name\",\n \"option_value\",\n ];\n const rows: Row[] = [];\n\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ft = engine._foreignTables.get(ftname)!;\n for (const optName of Object.keys(ft.options).sort()) {\n rows.push({\n foreign_table_catalog: CATALOG,\n foreign_table_schema: SCHEMA,\n foreign_table_name: ftname,\n option_name: optName,\n option_value: ft.options[optName],\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.enabled_roles\n // ==================================================================\n\n private static _buildEnabledRoles(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n return [[\"role_name\"], [{ role_name: OWNER }]];\n }\n\n // ==================================================================\n // information_schema.applicable_roles\n // ==================================================================\n\n private static _buildApplicableRoles(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n return [\n [\"grantee\", \"role_name\", \"is_grantable\"],\n [{ grantee: OWNER, role_name: OWNER, is_grantable: \"YES\" }],\n ];\n }\n\n // ==================================================================\n // information_schema.character_sets\n // ==================================================================\n\n private static _buildCharacterSets(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"character_set_catalog\",\n \"character_set_schema\",\n \"character_set_name\",\n \"character_repertoire\",\n \"form_of_use\",\n \"default_collate_catalog\",\n \"default_collate_schema\",\n \"default_collate_name\",\n ];\n return [\n columns,\n [\n {\n character_set_catalog: null,\n character_set_schema: null,\n character_set_name: \"UTF8\",\n character_repertoire: \"UCS\",\n form_of_use: \"UTF8\",\n default_collate_catalog: CATALOG,\n default_collate_schema: \"pg_catalog\",\n default_collate_name: \"en_US.utf8\",\n },\n ],\n ];\n }\n\n // ==================================================================\n // information_schema.collations\n // ==================================================================\n\n private static _buildCollations(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"collation_catalog\",\n \"collation_schema\",\n \"collation_name\",\n \"pad_attribute\",\n ];\n return [\n columns,\n [\n {\n collation_catalog: CATALOG,\n collation_schema: \"pg_catalog\",\n collation_name: \"en_US.utf8\",\n pad_attribute: \"NO PAD\",\n },\n ],\n ];\n }\n\n // ==================================================================\n // information_schema.domains (empty)\n // ==================================================================\n\n private static _buildDomains(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"domain_catalog\",\n \"domain_schema\",\n \"domain_name\",\n \"data_type\",\n \"character_maximum_length\",\n \"numeric_precision\",\n \"domain_default\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // information_schema.element_types\n // ==================================================================\n\n private static _buildElementTypes(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"object_catalog\",\n \"object_schema\",\n \"object_name\",\n \"object_type\",\n \"collection_type_identifier\",\n \"data_type\",\n \"character_maximum_length\",\n \"numeric_precision\",\n \"numeric_precision_radix\",\n \"numeric_scale\",\n \"dtd_identifier\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n let pos = 0;\n for (const [, cdef] of table.columns) {\n pos++;\n if (cdef.typeName.endsWith(\"[]\")) {\n const base = cdef.typeName.slice(0, -2);\n const display = canonicalTypeName(base);\n rows.push({\n object_catalog: CATALOG,\n object_schema: SCHEMA,\n object_name: tname,\n object_type: \"TABLE\",\n collection_type_identifier: String(pos),\n data_type: display,\n character_maximum_length: null,\n numeric_precision: numericPrecision(base),\n numeric_precision_radix: numericPrecisionRadix(base),\n numeric_scale: numericScale(base),\n dtd_identifier: String(pos),\n });\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // information_schema.triggers (empty)\n // ==================================================================\n\n private static _buildTriggers(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"trigger_catalog\",\n \"trigger_schema\",\n \"trigger_name\",\n \"event_manipulation\",\n \"event_object_catalog\",\n \"event_object_schema\",\n \"event_object_table\",\n \"action_order\",\n \"action_condition\",\n \"action_statement\",\n \"action_orientation\",\n \"action_timing\",\n ];\n return [columns, []];\n }\n}\n","// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n// Copyright (c) 2023-2026 Cognica, Inc.\n\n// Module-level connection registry for pg_stat_activity.\n//\n// PGWireConnection instances register themselves here after\n// authentication and unregister on close. The pg_catalog builder\n// reads the registry to produce live pg_stat_activity rows.\n\nexport interface ConnectionInfo {\n pid: number;\n username: string;\n database: string;\n applicationName: string;\n clientAddr: string | null;\n clientPort: number;\n backendStart: Date | null;\n xactStart: Date | null;\n queryStart: Date | null;\n stateChange: Date | null;\n state: string;\n query: string;\n backendType: string;\n}\n\nconst _connections: Map<number, ConnectionInfo> = new Map();\n\nexport function registerConnection(info: ConnectionInfo): void {\n _connections.set(info.pid, info);\n}\n\nexport function unregisterConnection(pid: number): void {\n _connections.delete(pid);\n}\n\nexport function getAllConnections(): ConnectionInfo[] {\n return Array.from(_connections.values());\n}\n","// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n// Copyright (c) 2023-2026 Cognica, Inc.\n\n// PostgreSQL 17 pg_catalog table provider.\n//\n// Generates virtual rows for pg_catalog system tables by inspecting\n// UQA Engine state. Each builder returns a [columns, rows] tuple.\n//\n// The pg_catalog tables are the real system catalog in PostgreSQL.\n// The information_schema views are SQL-standard wrappers built on top\n// of pg_catalog. Tools like psql, SQLAlchemy, DBeaver query pg_catalog\n// directly for features beyond the SQL standard.\n//\n// Reference: PostgreSQL 17 documentation, Chapter 53 -- System Catalogs\n// https://www.postgresql.org/docs/17/catalogs.html\n\nimport type { Engine } from \"@jaepil/uqa\";\nimport {\n AM_BTREE,\n AM_HASH,\n AM_HEAP,\n AM_HNSW,\n AM_IVF,\n ARRAY_TYPE_OIDS,\n DATABASE_OID,\n ROLE_OID,\n SCHEMA_OIDS,\n TYPE_ALIGN,\n TYPE_BYVAL,\n TYPE_LENGTHS,\n TYPE_STORAGE,\n typeOid,\n} from \"./oid.js\";\nimport type { OIDAllocator } from \"./oid.js\";\nimport { getAllConnections } from \"./connection-registry.js\";\n\ntype Row = Record<string, unknown>;\ntype BuildResult = [string[], Row[]];\n\n// Helper to access engine internals\ninterface EngineInternals {\n _tables: Map<string, TableInternals>;\n _views: Map<string, unknown>;\n _sequences: Map<string, Record<string, number>>;\n _tempTables: Set<string>;\n _foreignServers: Map<string, ForeignServerInternals>;\n _foreignTables: Map<string, ForeignTableInternals>;\n}\n\ninterface TableInternals {\n primaryKey: string | null;\n columns: Map<string, ColumnDefInternals>;\n foreignKeys: ForeignKeyInternals[];\n checkConstraints: [string, string][];\n rowCount: number;\n _stats: unknown;\n}\n\ninterface ColumnDefInternals {\n typeName: string;\n notNull: boolean;\n primaryKey: boolean;\n unique: boolean;\n defaultValue: unknown;\n autoIncrement: boolean;\n numericPrecision: number | null;\n numericScale: number | null;\n}\n\ninterface ForeignKeyInternals {\n column: string;\n refTable: string;\n refColumn: string;\n}\n\ninterface ForeignServerInternals {\n name: string;\n fdwType: string;\n options: Record<string, string>;\n}\n\ninterface ForeignTableInternals {\n serverName: string;\n columns: Map<string, ColumnDefInternals>;\n options: Record<string, string>;\n}\n\n// The JS UQA engine maps NUMERIC/DECIMAL to typeName=\"float\" internally.\n// When numericScale is set, the original SQL type was NUMERIC(p,s).\nfunction effectiveTypeName(cdef: ColumnDefInternals): string {\n if (cdef.typeName === \"float\" && cdef.numericScale !== null) {\n return \"numeric\";\n }\n return cdef.typeName;\n}\n\ninterface IndexDefInternals {\n tableName: string;\n columns: string[];\n unique: boolean;\n}\n\ninterface IndexObjectInternals {\n indexDef: IndexDefInternals;\n}\n\n// Database name used as catalog\nconst CATALOG_NAME = \"uqa\";\nconst SCHEMA = \"public\";\nconst OWNER = \"uqa\";\nconst ENCODING_UTF8 = 6;\n\n// Pre-resolved namespace OIDs (avoids undefined index lookups)\nconst NS_PG_CATALOG = SCHEMA_OIDS[\"pg_catalog\"] as number;\nconst NS_PUBLIC = SCHEMA_OIDS[\"public\"] as number;\nconst NS_INFORMATION_SCHEMA = SCHEMA_OIDS[\"information_schema\"] as number;\n\n// ======================================================================\n// Helpers\n// ======================================================================\n\nfunction pgClassRow(options: {\n oid: number;\n relname: string;\n relnamespace: number;\n reltype?: number;\n reloftype?: number;\n relowner?: number;\n relam?: number;\n reltuples?: number;\n relhasindex?: boolean;\n relkind?: string;\n relnatts?: number;\n relchecks?: number;\n relhasrules?: boolean;\n}): Row {\n const reltuples = options.reltuples ?? -1;\n return {\n oid: options.oid,\n relname: options.relname,\n relnamespace: options.relnamespace,\n reltype: options.reltype ?? 0,\n reloftype: options.reloftype ?? 0,\n relowner: options.relowner ?? ROLE_OID,\n relam: options.relam ?? 0,\n relfilenode: options.oid,\n reltablespace: 0,\n relpages: reltuples > 0 ? Math.max(1, Math.floor(reltuples / 100)) : 0,\n reltuples,\n relallvisible: 0,\n reltoastrelid: 0,\n relhasindex: options.relhasindex ?? false,\n relisshared: false,\n relpersistence: \"p\",\n relkind: options.relkind ?? \"r\",\n relnatts: options.relnatts ?? 0,\n relchecks: options.relchecks ?? 0,\n relhasrules: options.relhasrules ?? false,\n relhastriggers: false,\n relhassubclass: false,\n relrowsecurity: false,\n relforcerowsecurity: false,\n relispopulated: true,\n relreplident: \"d\",\n relispartition: false,\n relrewrite: 0,\n relfrozenxid: 0,\n relminmxid: 1,\n relacl: null,\n reloptions: null,\n relpartbound: null,\n };\n}\n\n// Helper to get the index manager from engine internals\nfunction getIndexManager(\n engine: EngineInternals,\n): Map<string, IndexObjectInternals> | null {\n const indexManager = (engine as unknown as Record<string, unknown>)[\n \"_indexManager\"\n ] as { _indexes?: Map<string, IndexObjectInternals> } | null | undefined;\n if (indexManager === null || indexManager === undefined) return null;\n const indexes = indexManager._indexes;\n if (indexes === undefined) return null;\n return indexes;\n}\n\ntype TableBuilder = (engine: EngineInternals, oids: OIDAllocator) => BuildResult;\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class PGCatalogProvider {\n private static readonly _TABLES: Readonly<Record<string, TableBuilder>> = {\n pg_namespace: PGCatalogProvider._buildPgNamespace,\n pg_class: PGCatalogProvider._buildPgClass,\n pg_attribute: PGCatalogProvider._buildPgAttribute,\n pg_type: PGCatalogProvider._buildPgType,\n pg_constraint: PGCatalogProvider._buildPgConstraint,\n pg_index: PGCatalogProvider._buildPgIndex,\n pg_attrdef: PGCatalogProvider._buildPgAttrdef,\n pg_am: PGCatalogProvider._buildPgAm,\n pg_database: PGCatalogProvider._buildPgDatabase,\n pg_roles: PGCatalogProvider._buildPgRoles,\n pg_user: PGCatalogProvider._buildPgUser,\n pg_tables: PGCatalogProvider._buildPgTables,\n pg_views: PGCatalogProvider._buildPgViews,\n pg_indexes: PGCatalogProvider._buildPgIndexes,\n pg_matviews: PGCatalogProvider._buildPgMatviews,\n pg_sequences: PGCatalogProvider._buildPgSequences,\n pg_settings: PGCatalogProvider._buildPgSettings,\n pg_foreign_server: PGCatalogProvider._buildPgForeignServer,\n pg_foreign_table: PGCatalogProvider._buildPgForeignTable,\n pg_foreign_data_wrapper: PGCatalogProvider._buildPgForeignDataWrapper,\n pg_description: PGCatalogProvider._buildPgDescription,\n pg_depend: PGCatalogProvider._buildPgDepend,\n pg_stat_user_tables: PGCatalogProvider._buildPgStatUserTables,\n pg_stat_user_indexes: PGCatalogProvider._buildPgStatUserIndexes,\n pg_stat_activity: PGCatalogProvider._buildPgStatActivity,\n pg_proc: PGCatalogProvider._buildPgProc,\n pg_extension: PGCatalogProvider._buildPgExtension,\n pg_collation: PGCatalogProvider._buildPgCollation,\n pg_enum: PGCatalogProvider._buildPgEnum,\n pg_inherits: PGCatalogProvider._buildPgInherits,\n pg_trigger: PGCatalogProvider._buildPgTrigger,\n pg_statio_user_tables: PGCatalogProvider._buildPgStatioUserTables,\n pg_auth_members: PGCatalogProvider._buildPgAuthMembers,\n pg_available_extensions: PGCatalogProvider._buildPgAvailableExtensions,\n pg_stat_all_tables: PGCatalogProvider._buildPgStatUserTables,\n };\n\n static supportedTables(): string[] {\n return Object.keys(PGCatalogProvider._TABLES);\n }\n\n static build(tableName: string, engine: Engine, oids: OIDAllocator): BuildResult {\n const builder = PGCatalogProvider._TABLES[tableName];\n if (builder === undefined) {\n throw new Error(`Unknown pg_catalog table: '${tableName}'`);\n }\n return builder(engine as unknown as EngineInternals, oids);\n }\n\n // ==================================================================\n // pg_namespace -- schemas\n // ==================================================================\n\n private static _buildPgNamespace(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"oid\", \"nspname\", \"nspowner\", \"nspacl\"];\n const rows: Row[] = [\n {\n oid: NS_PG_CATALOG,\n nspname: \"pg_catalog\",\n nspowner: ROLE_OID,\n nspacl: null,\n },\n {\n oid: NS_PUBLIC,\n nspname: \"public\",\n nspowner: ROLE_OID,\n nspacl: null,\n },\n {\n oid: NS_INFORMATION_SCHEMA,\n nspname: \"information_schema\",\n nspowner: ROLE_OID,\n nspacl: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_class -- all relations (tables, views, indexes, sequences, etc.)\n // ==================================================================\n\n private static _buildPgClass(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"relname\",\n \"relnamespace\",\n \"reltype\",\n \"reloftype\",\n \"relowner\",\n \"relam\",\n \"relfilenode\",\n \"reltablespace\",\n \"relpages\",\n \"reltuples\",\n \"relallvisible\",\n \"reltoastrelid\",\n \"relhasindex\",\n \"relisshared\",\n \"relpersistence\",\n \"relkind\",\n \"relnatts\",\n \"relchecks\",\n \"relhasrules\",\n \"relhastriggers\",\n \"relhassubclass\",\n \"relrowsecurity\",\n \"relforcerowsecurity\",\n \"relispopulated\",\n \"relreplident\",\n \"relispartition\",\n \"relrewrite\",\n \"relfrozenxid\",\n \"relminmxid\",\n \"relacl\",\n \"reloptions\",\n \"relpartbound\",\n ];\n const rows: Row[] = [];\n const nsPublic = NS_PUBLIC;\n\n // -- Regular tables -----------------------------------------------\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n const typeOidVal = oids.get(\"table_type\", tname) ?? 0;\n const hasIndex =\n table.primaryKey !== null || [...table.columns.values()].some((c) => c.unique);\n const nChecks = table.checkConstraints.length;\n const reltuples = table.rowCount;\n\n rows.push(\n pgClassRow({\n oid: tableOid,\n relname: tname,\n relnamespace: nsPublic,\n reltype: typeOidVal,\n relam: AM_HEAP,\n reltuples,\n relhasindex: hasIndex,\n relkind: \"r\",\n relnatts: table.columns.size,\n relchecks: nChecks,\n }),\n );\n }\n\n // -- Views --------------------------------------------------------\n for (const vname of [...engine._views.keys()].sort()) {\n const viewOid = oids.get(\"view\", vname) ?? 0;\n rows.push(\n pgClassRow({\n oid: viewOid,\n relname: vname,\n relnamespace: nsPublic,\n relkind: \"v\",\n relhasrules: true,\n }),\n );\n }\n\n // -- Sequences ----------------------------------------------------\n for (const sname of [...engine._sequences.keys()].sort()) {\n const seqOid = oids.get(\"sequence\", sname) ?? 0;\n rows.push(\n pgClassRow({\n oid: seqOid,\n relname: sname,\n relnamespace: nsPublic,\n relkind: \"S\",\n relnatts: 3,\n }),\n );\n }\n\n // -- Foreign tables -----------------------------------------------\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ftOid = oids.get(\"foreign_table\", ftname) ?? 0;\n const ft = engine._foreignTables.get(ftname)!;\n rows.push(\n pgClassRow({\n oid: ftOid,\n relname: ftname,\n relnamespace: nsPublic,\n relkind: \"f\",\n relnatts: ft.columns.size,\n }),\n );\n }\n\n // -- Indexes (explicit) -------------------------------------------\n const indexes = getIndexManager(engine);\n if (indexes !== null) {\n for (const idxName of [...indexes.keys()].sort()) {\n const idxObj = indexes.get(idxName)!;\n const idxOid = oids.get(\"index\", idxName) ?? 0;\n const idxDef = idxObj.indexDef;\n rows.push(\n pgClassRow({\n oid: idxOid,\n relname: idxName,\n relnamespace: nsPublic,\n relam: AM_BTREE,\n relkind: \"i\",\n relnatts: idxDef.columns.length,\n }),\n );\n }\n }\n\n // -- Implicit PK/UNIQUE indexes -----------------------------------\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n if (table.primaryKey) {\n const pkIdxName = `${tname}_pkey`;\n const pkIdxOid = oids.get(\"index\", pkIdxName) ?? 0;\n rows.push(\n pgClassRow({\n oid: pkIdxOid,\n relname: pkIdxName,\n relnamespace: nsPublic,\n relam: AM_BTREE,\n relkind: \"i\",\n relnatts: 1,\n }),\n );\n }\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n const uqIdxName = `${tname}_${cname}_key`;\n const uqIdxOid = oids.get(\"index\", uqIdxName) ?? 0;\n rows.push(\n pgClassRow({\n oid: uqIdxOid,\n relname: uqIdxName,\n relnamespace: nsPublic,\n relam: AM_BTREE,\n relkind: \"i\",\n relnatts: 1,\n }),\n );\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_attribute -- columns of all relations\n // ==================================================================\n\n private static _buildPgAttribute(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"attrelid\",\n \"attname\",\n \"atttypid\",\n \"attstattarget\",\n \"attlen\",\n \"attnum\",\n \"attndims\",\n \"attcacheoff\",\n \"atttypmod\",\n \"attbyval\",\n \"attalign\",\n \"attstorage\",\n \"attcompression\",\n \"attnotnull\",\n \"atthasdef\",\n \"atthasmissing\",\n \"attidentity\",\n \"attgenerated\",\n \"attisdropped\",\n \"attislocal\",\n \"attinhcount\",\n \"attcollation\",\n \"attacl\",\n \"attoptions\",\n \"attfdwoptions\",\n \"attmissingval\",\n ];\n const rows: Row[] = [];\n\n // System columns present in every table (hidden, negative attnum)\n const systemCols: [string, number, number, number][] = [\n [\"tableoid\", 26, 4, -6],\n [\"cmax\", 29, 4, -5],\n [\"xmax\", 28, 4, -4],\n [\"cmin\", 29, 4, -3],\n [\"xmin\", 28, 4, -2],\n [\"ctid\", 27, 6, -1],\n ];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n\n // User columns\n let attnum = 0;\n for (const [cname, cdef] of table.columns) {\n attnum++;\n const colTypeOid = typeOid(effectiveTypeName(cdef));\n const attlen = TYPE_LENGTHS[colTypeOid] ?? -1;\n const byval = TYPE_BYVAL[colTypeOid] ?? false;\n const align = TYPE_ALIGN[colTypeOid] ?? \"i\";\n const storage = TYPE_STORAGE[colTypeOid] ?? \"p\";\n const ndims = cdef.typeName.endsWith(\"[]\") ? 1 : 0;\n const hasDefault =\n (cdef.defaultValue !== null && cdef.defaultValue !== undefined) ||\n cdef.autoIncrement;\n const identity = cdef.autoIncrement ? \"d\" : \"\";\n\n // String types use default collation\n const collation =\n colTypeOid === 25 || colTypeOid === 1042 || colTypeOid === 1043 ? 100 : 0;\n\n rows.push({\n attrelid: tableOid,\n attname: cname,\n atttypid: colTypeOid,\n attstattarget: -1,\n attlen,\n attnum,\n attndims: ndims,\n attcacheoff: -1,\n atttypmod: -1,\n attbyval: byval,\n attalign: align,\n attstorage: storage,\n attcompression: \"\",\n attnotnull: cdef.notNull || cdef.primaryKey,\n atthasdef: hasDefault,\n atthasmissing: false,\n attidentity: identity,\n attgenerated: \"\",\n attisdropped: false,\n attislocal: true,\n attinhcount: 0,\n attcollation: collation,\n attacl: null,\n attoptions: null,\n attfdwoptions: null,\n attmissingval: null,\n });\n }\n\n // System columns\n for (const [sysName, sysType, sysLen, sysNum] of systemCols) {\n rows.push({\n attrelid: tableOid,\n attname: sysName,\n atttypid: sysType,\n attstattarget: 0,\n attlen: sysLen,\n attnum: sysNum,\n attndims: 0,\n attcacheoff: -1,\n atttypmod: -1,\n attbyval: true,\n attalign: sysLen === 4 ? \"i\" : \"s\",\n attstorage: \"p\",\n attcompression: \"\",\n attnotnull: true,\n atthasdef: false,\n atthasmissing: false,\n attidentity: \"\",\n attgenerated: \"\",\n attisdropped: false,\n attislocal: true,\n attinhcount: 0,\n attcollation: 0,\n attacl: null,\n attoptions: null,\n attfdwoptions: null,\n attmissingval: null,\n });\n }\n }\n\n // Foreign table columns\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ft = engine._foreignTables.get(ftname)!;\n const ftOid = oids.get(\"foreign_table\", ftname) ?? 0;\n let attnum = 0;\n for (const [cname, cdef] of ft.columns) {\n attnum++;\n const colTypeOid = typeOid(effectiveTypeName(cdef));\n const attlen = TYPE_LENGTHS[colTypeOid] ?? -1;\n rows.push({\n attrelid: ftOid,\n attname: cname,\n atttypid: colTypeOid,\n attstattarget: -1,\n attlen,\n attnum,\n attndims: 0,\n attcacheoff: -1,\n atttypmod: -1,\n attbyval: TYPE_BYVAL[colTypeOid] ?? false,\n attalign: TYPE_ALIGN[colTypeOid] ?? \"i\",\n attstorage: TYPE_STORAGE[colTypeOid] ?? \"p\",\n attcompression: \"\",\n attnotnull: false,\n atthasdef: false,\n atthasmissing: false,\n attidentity: \"\",\n attgenerated: \"\",\n attisdropped: false,\n attislocal: true,\n attinhcount: 0,\n attcollation:\n colTypeOid === 25 || colTypeOid === 1042 || colTypeOid === 1043 ? 100 : 0,\n attacl: null,\n attoptions: null,\n attfdwoptions: null,\n attmissingval: null,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_type -- data types\n // ==================================================================\n\n private static _buildPgType(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"typname\",\n \"typnamespace\",\n \"typowner\",\n \"typlen\",\n \"typbyval\",\n \"typtype\",\n \"typcategory\",\n \"typispreferred\",\n \"typisdefined\",\n \"typdelim\",\n \"typrelid\",\n \"typsubscript\",\n \"typelem\",\n \"typarray\",\n \"typinput\",\n \"typoutput\",\n \"typreceive\",\n \"typsend\",\n \"typmodin\",\n \"typmodout\",\n \"typanalyze\",\n \"typalign\",\n \"typstorage\",\n \"typnotnull\",\n \"typbasetype\",\n \"typtypmod\",\n \"typndims\",\n \"typcollation\",\n \"typdefaultbin\",\n \"typdefault\",\n \"typacl\",\n ];\n const nsPgCatalog = NS_PG_CATALOG;\n const rows: Row[] = [];\n\n // All built-in base types\n // [oid, typname, typlen, byval, category, preferred]\n const baseTypes: [number, string, number, boolean, string, boolean][] = [\n [16, \"bool\", 1, true, \"B\", true],\n [17, \"bytea\", -1, false, \"U\", false],\n [18, \"char\", 1, true, \"Z\", false],\n [19, \"name\", 64, false, \"S\", false],\n [20, \"int8\", 8, true, \"N\", false],\n [21, \"int2\", 2, true, \"N\", false],\n [23, \"int4\", 4, true, \"N\", false],\n [25, \"text\", -1, false, \"S\", true],\n [26, \"oid\", 4, true, \"N\", false],\n [27, \"tid\", 6, false, \"U\", false],\n [28, \"xid\", 4, true, \"U\", false],\n [29, \"cid\", 4, true, \"U\", false],\n [114, \"json\", -1, false, \"U\", false],\n [142, \"xml\", -1, false, \"U\", false],\n [600, \"point\", 16, false, \"G\", false],\n [700, \"float4\", 4, true, \"N\", false],\n [701, \"float8\", 8, true, \"N\", true],\n [1042, \"bpchar\", -1, false, \"S\", false],\n [1043, \"varchar\", -1, false, \"S\", false],\n [1082, \"date\", 4, true, \"D\", false],\n [1083, \"time\", 8, true, \"D\", false],\n [1114, \"timestamp\", 8, true, \"D\", false],\n [1184, \"timestamptz\", 8, true, \"D\", true],\n [1186, \"interval\", 16, false, \"T\", true],\n [1700, \"numeric\", -1, false, \"N\", false],\n [2205, \"regclass\", 4, true, \"N\", false],\n [2249, \"record\", -1, false, \"P\", false],\n [2278, \"void\", 4, true, \"P\", false],\n [2950, \"uuid\", 16, false, \"U\", false],\n [3802, \"jsonb\", -1, false, \"U\", false],\n [16385, \"vector\", -1, false, \"U\", false],\n ];\n\n for (const [typeOidVal, typname, typlen, byval, cat, preferred] of baseTypes) {\n const arrayOid = ARRAY_TYPE_OIDS[typeOidVal] ?? 0;\n const align = TYPE_ALIGN[typeOidVal] ?? \"i\";\n const storage = TYPE_STORAGE[typeOidVal] ?? \"p\";\n const collation = cat === \"S\" ? 100 : 0;\n\n rows.push({\n oid: typeOidVal,\n typname,\n typnamespace: nsPgCatalog,\n typowner: ROLE_OID,\n typlen,\n typbyval: byval,\n typtype: \"b\",\n typcategory: cat,\n typispreferred: preferred,\n typisdefined: true,\n typdelim: \",\",\n typrelid: 0,\n typsubscript: \"\",\n typelem: 0,\n typarray: arrayOid,\n typinput: `${typname}in`,\n typoutput: `${typname}out`,\n typreceive: `${typname}recv`,\n typsend: `${typname}send`,\n typmodin: \"\",\n typmodout: \"\",\n typanalyze: \"\",\n typalign: align,\n typstorage: storage,\n typnotnull: false,\n typbasetype: 0,\n typtypmod: -1,\n typndims: 0,\n typcollation: collation,\n typdefaultbin: null,\n typdefault: null,\n typacl: null,\n });\n }\n\n // Array types\n const sortedArrayOids = Object.entries(ARRAY_TYPE_OIDS)\n .map(([k, v]) => [Number(k), v] as [number, number])\n .sort((a, b) => a[0] - b[0]);\n\n for (const [elemOid, arrOid] of sortedArrayOids) {\n // Find the element type name\n let elemName = \"\";\n for (const [btOid, btName] of baseTypes) {\n if (btOid === elemOid) {\n elemName = btName;\n break;\n }\n }\n if (!elemName) continue;\n\n rows.push({\n oid: arrOid,\n typname: `_${elemName}`,\n typnamespace: nsPgCatalog,\n typowner: ROLE_OID,\n typlen: -1,\n typbyval: false,\n typtype: \"b\",\n typcategory: \"A\",\n typispreferred: false,\n typisdefined: true,\n typdelim: \",\",\n typrelid: 0,\n typsubscript: \"array_subscript_handler\",\n typelem: elemOid,\n typarray: 0,\n typinput: \"array_in\",\n typoutput: \"array_out\",\n typreceive: \"array_recv\",\n typsend: \"array_send\",\n typmodin: \"\",\n typmodout: \"\",\n typanalyze: \"\",\n typalign: \"i\",\n typstorage: \"x\",\n typnotnull: false,\n typbasetype: 0,\n typtypmod: -1,\n typndims: 0,\n typcollation: 0,\n typdefaultbin: null,\n typdefault: null,\n typacl: null,\n });\n }\n\n // Composite types for user tables\n for (const tname of [...engine._tables.keys()].sort()) {\n const compOid = oids.get(\"table_type\", tname) ?? 0;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n rows.push({\n oid: compOid,\n typname: tname,\n typnamespace: NS_PUBLIC,\n typowner: ROLE_OID,\n typlen: -1,\n typbyval: false,\n typtype: \"c\",\n typcategory: \"C\",\n typispreferred: false,\n typisdefined: true,\n typdelim: \",\",\n typrelid: tableOid,\n typsubscript: \"\",\n typelem: 0,\n typarray: 0,\n typinput: \"record_in\",\n typoutput: \"record_out\",\n typreceive: \"record_recv\",\n typsend: \"record_send\",\n typmodin: \"\",\n typmodout: \"\",\n typanalyze: \"\",\n typalign: \"d\",\n typstorage: \"x\",\n typnotnull: false,\n typbasetype: 0,\n typtypmod: -1,\n typndims: 0,\n typcollation: 0,\n typdefaultbin: null,\n typdefault: null,\n typacl: null,\n });\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_constraint\n // ==================================================================\n\n private static _buildPgConstraint(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"conname\",\n \"connamespace\",\n \"contype\",\n \"condeferrable\",\n \"condeferred\",\n \"convalidated\",\n \"conrelid\",\n \"contypid\",\n \"conindid\",\n \"conparentid\",\n \"confrelid\",\n \"confupdtype\",\n \"confdeltype\",\n \"confmatchtype\",\n \"conislocal\",\n \"coninhcount\",\n \"connoinherit\",\n \"conkey\",\n \"confkey\",\n \"conpfeqop\",\n \"conppeqop\",\n \"conffeqop\",\n \"conexclop\",\n \"conbin\",\n ];\n const rows: Row[] = [];\n const nsPublic = NS_PUBLIC;\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n const colNums = new Map<string, number>();\n let num = 0;\n for (const cname of table.columns.keys()) {\n num++;\n colNums.set(cname, num);\n }\n\n // PRIMARY KEY\n if (table.primaryKey) {\n const conName = `${tname}_pkey`;\n const conOid = oids.get(\"constraint\", conName) ?? 0;\n const idxOid = oids.get(\"index\", conName) ?? 0;\n const pkAttnum = colNums.get(table.primaryKey) ?? 1;\n rows.push({\n oid: conOid,\n conname: conName,\n connamespace: nsPublic,\n contype: \"p\",\n condeferrable: false,\n condeferred: false,\n convalidated: true,\n conrelid: tableOid,\n contypid: 0,\n conindid: idxOid,\n conparentid: 0,\n confrelid: 0,\n confupdtype: \" \",\n confdeltype: \" \",\n confmatchtype: \" \",\n conislocal: true,\n coninhcount: 0,\n connoinherit: true,\n conkey: `{${pkAttnum}}`,\n confkey: null,\n conpfeqop: null,\n conppeqop: null,\n conffeqop: null,\n conexclop: null,\n conbin: null,\n });\n }\n\n // UNIQUE constraints\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n const conName = `${tname}_${cname}_key`;\n const conOid = oids.get(\"constraint\", conName) ?? 0;\n const idxOid = oids.get(\"index\", conName) ?? 0;\n const attnum = colNums.get(cname) ?? 1;\n rows.push({\n oid: conOid,\n conname: conName,\n connamespace: nsPublic,\n contype: \"u\",\n condeferrable: false,\n condeferred: false,\n convalidated: true,\n conrelid: tableOid,\n contypid: 0,\n conindid: idxOid,\n conparentid: 0,\n confrelid: 0,\n confupdtype: \" \",\n confdeltype: \" \",\n confmatchtype: \" \",\n conislocal: true,\n coninhcount: 0,\n connoinherit: true,\n conkey: `{${attnum}}`,\n confkey: null,\n conpfeqop: null,\n conppeqop: null,\n conffeqop: null,\n conexclop: null,\n conbin: null,\n });\n }\n }\n\n // FOREIGN KEY constraints\n for (const fk of table.foreignKeys) {\n const conName = `${tname}_${fk.column}_fkey`;\n const conOid = oids.get(\"constraint\", conName) ?? 0;\n const fkAttnum = colNums.get(fk.column) ?? 1;\n const refTableOid = oids.get(\"table\", fk.refTable) ?? 0;\n const refTableObj = engine._tables.get(fk.refTable);\n let refAttnum = 1;\n if (refTableObj !== undefined) {\n const refColNums = new Map<string, number>();\n let refNum = 0;\n for (const cn of refTableObj.columns.keys()) {\n refNum++;\n refColNums.set(cn, refNum);\n }\n refAttnum = refColNums.get(fk.refColumn) ?? 1;\n }\n\n rows.push({\n oid: conOid,\n conname: conName,\n connamespace: nsPublic,\n contype: \"f\",\n condeferrable: false,\n condeferred: false,\n convalidated: true,\n conrelid: tableOid,\n contypid: 0,\n conindid: 0,\n conparentid: 0,\n confrelid: refTableOid,\n confupdtype: \"a\",\n confdeltype: \"a\",\n confmatchtype: \"s\",\n conislocal: true,\n coninhcount: 0,\n connoinherit: true,\n conkey: `{${fkAttnum}}`,\n confkey: `{${refAttnum}}`,\n conpfeqop: null,\n conppeqop: null,\n conffeqop: null,\n conexclop: null,\n conbin: null,\n });\n }\n\n // CHECK constraints\n for (const [checkName] of table.checkConstraints) {\n const conName = `${tname}_${checkName}_check`;\n const conOid = oids.get(\"constraint\", conName) ?? 0;\n rows.push({\n oid: conOid,\n conname: conName,\n connamespace: nsPublic,\n contype: \"c\",\n condeferrable: false,\n condeferred: false,\n convalidated: true,\n conrelid: tableOid,\n contypid: 0,\n conindid: 0,\n conparentid: 0,\n confrelid: 0,\n confupdtype: \" \",\n confdeltype: \" \",\n confmatchtype: \" \",\n conislocal: true,\n coninhcount: 0,\n connoinherit: true,\n conkey: null,\n confkey: null,\n conpfeqop: null,\n conppeqop: null,\n conffeqop: null,\n conexclop: null,\n conbin: null,\n });\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_index\n // ==================================================================\n\n private static _buildPgIndex(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"indexrelid\",\n \"indrelid\",\n \"indnatts\",\n \"indnkeyatts\",\n \"indisunique\",\n \"indisprimary\",\n \"indisexclusion\",\n \"indimmediate\",\n \"indisclustered\",\n \"indisvalid\",\n \"indcheckxmin\",\n \"indisready\",\n \"indislive\",\n \"indisreplident\",\n \"indkey\",\n \"indcollation\",\n \"indclass\",\n \"indoption\",\n \"indexprs\",\n \"indpred\",\n ];\n const rows: Row[] = [];\n\n // Explicit indexes from IndexManager\n const indexes = getIndexManager(engine);\n if (indexes !== null) {\n for (const idxName of [...indexes.keys()].sort()) {\n const idxObj = indexes.get(idxName)!;\n const idxOid = oids.get(\"index\", idxName) ?? 0;\n const idxDef = idxObj.indexDef;\n const tableOid = oids.get(\"table\", idxDef.tableName) ?? 0;\n const tableObj = engine._tables.get(idxDef.tableName);\n const nAtts = idxDef.columns.length;\n\n const indkeyParts: string[] = [];\n if (tableObj !== undefined) {\n const colNums = new Map<string, number>();\n let n = 0;\n for (const cn of tableObj.columns.keys()) {\n n++;\n colNums.set(cn, n);\n }\n for (const col of idxDef.columns) {\n indkeyParts.push(String(colNums.get(col) ?? 0));\n }\n }\n const indkey = indkeyParts.length > 0 ? indkeyParts.join(\" \") : \"0\";\n\n const isUnique = idxDef.unique ?? false;\n\n rows.push({\n indexrelid: idxOid,\n indrelid: tableOid,\n indnatts: nAtts,\n indnkeyatts: nAtts,\n indisunique: isUnique,\n indisprimary: false,\n indisexclusion: false,\n indimmediate: true,\n indisclustered: false,\n indisvalid: true,\n indcheckxmin: false,\n indisready: true,\n indislive: true,\n indisreplident: false,\n indkey,\n indcollation: \"\",\n indclass: \"\",\n indoption: \"\",\n indexprs: null,\n indpred: null,\n });\n }\n }\n\n // Implicit PK/UNIQUE indexes\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n const colNums = new Map<string, number>();\n let n = 0;\n for (const cn of table.columns.keys()) {\n n++;\n colNums.set(cn, n);\n }\n\n if (table.primaryKey) {\n const pkIdxName = `${tname}_pkey`;\n const pkIdxOid = oids.get(\"index\", pkIdxName) ?? 0;\n const pkAttnum = colNums.get(table.primaryKey) ?? 0;\n rows.push({\n indexrelid: pkIdxOid,\n indrelid: tableOid,\n indnatts: 1,\n indnkeyatts: 1,\n indisunique: true,\n indisprimary: true,\n indisexclusion: false,\n indimmediate: true,\n indisclustered: false,\n indisvalid: true,\n indcheckxmin: false,\n indisready: true,\n indislive: true,\n indisreplident: false,\n indkey: String(pkAttnum),\n indcollation: \"\",\n indclass: \"\",\n indoption: \"\",\n indexprs: null,\n indpred: null,\n });\n }\n\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n const uqIdxName = `${tname}_${cname}_key`;\n const uqIdxOid = oids.get(\"index\", uqIdxName) ?? 0;\n const attnum = colNums.get(cname) ?? 0;\n rows.push({\n indexrelid: uqIdxOid,\n indrelid: tableOid,\n indnatts: 1,\n indnkeyatts: 1,\n indisunique: true,\n indisprimary: false,\n indisexclusion: false,\n indimmediate: true,\n indisclustered: false,\n indisvalid: true,\n indcheckxmin: false,\n indisready: true,\n indislive: true,\n indisreplident: false,\n indkey: String(attnum),\n indcollation: \"\",\n indclass: \"\",\n indoption: \"\",\n indexprs: null,\n indpred: null,\n });\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_attrdef -- column defaults\n // ==================================================================\n\n private static _buildPgAttrdef(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"oid\", \"adrelid\", \"adnum\", \"adbin\"];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n let attnum = 0;\n for (const [cname, cdef] of table.columns) {\n attnum++;\n if (\n (cdef.defaultValue !== null && cdef.defaultValue !== undefined) ||\n cdef.autoIncrement\n ) {\n const defOid = oids.getOrAlloc(\"attrdef\", `${tname}.${cname}`);\n let adbin: string;\n if (cdef.autoIncrement) {\n adbin = `nextval('${tname}_${cname}_seq'::regclass)`;\n } else {\n adbin = String(cdef.defaultValue);\n }\n rows.push({\n oid: defOid,\n adrelid: tableOid,\n adnum: attnum,\n adbin,\n });\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_am -- access methods\n // ==================================================================\n\n private static _buildPgAm(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"oid\", \"amname\", \"amhandler\", \"amtype\"];\n const rows: Row[] = [\n {\n oid: AM_HEAP,\n amname: \"heap\",\n amhandler: \"heap_tableam_handler\",\n amtype: \"t\",\n },\n {\n oid: AM_BTREE,\n amname: \"btree\",\n amhandler: \"bthandler\",\n amtype: \"i\",\n },\n {\n oid: AM_HASH,\n amname: \"hash\",\n amhandler: \"hashhandler\",\n amtype: \"i\",\n },\n {\n oid: AM_HNSW,\n amname: \"hnsw\",\n amhandler: \"hnsw_handler\",\n amtype: \"i\",\n },\n {\n oid: AM_IVF,\n amname: \"ivf\",\n amhandler: \"ivf_handler\",\n amtype: \"i\",\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_database\n // ==================================================================\n\n private static _buildPgDatabase(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"datname\",\n \"datdba\",\n \"encoding\",\n \"datlocprovider\",\n \"datistemplate\",\n \"datallowconn\",\n \"datconnlimit\",\n \"datfrozenxid\",\n \"datminmxid\",\n \"dattablespace\",\n \"datcollate\",\n \"datctype\",\n \"datlocale\",\n \"datcollversion\",\n \"datacl\",\n ];\n const rows: Row[] = [\n {\n oid: DATABASE_OID,\n datname: CATALOG_NAME,\n datdba: ROLE_OID,\n encoding: ENCODING_UTF8,\n datlocprovider: \"c\",\n datistemplate: false,\n datallowconn: true,\n datconnlimit: -1,\n datfrozenxid: 0,\n datminmxid: 1,\n dattablespace: 1663,\n datcollate: \"en_US.UTF-8\",\n datctype: \"en_US.UTF-8\",\n datlocale: null,\n datcollversion: null,\n datacl: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_roles\n // ==================================================================\n\n private static _buildPgRoles(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"rolname\",\n \"rolsuper\",\n \"rolinherit\",\n \"rolcreaterole\",\n \"rolcreatedb\",\n \"rolcanlogin\",\n \"rolreplication\",\n \"rolconnlimit\",\n \"rolpassword\",\n \"rolvaliduntil\",\n \"rolbypassrls\",\n \"rolconfig\",\n ];\n const rows: Row[] = [\n {\n oid: ROLE_OID,\n rolname: OWNER,\n rolsuper: true,\n rolinherit: true,\n rolcreaterole: true,\n rolcreatedb: true,\n rolcanlogin: true,\n rolreplication: true,\n rolconnlimit: -1,\n rolpassword: null,\n rolvaliduntil: null,\n rolbypassrls: true,\n rolconfig: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_user -- simplified view over pg_roles\n // ==================================================================\n\n private static _buildPgUser(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"usename\",\n \"usesysid\",\n \"usecreatedb\",\n \"usesuper\",\n \"userepl\",\n \"usebypassrls\",\n \"passwd\",\n \"valuntil\",\n \"useconfig\",\n ];\n const rows: Row[] = [\n {\n usename: OWNER,\n usesysid: ROLE_OID,\n usecreatedb: true,\n usesuper: true,\n userepl: true,\n usebypassrls: true,\n passwd: null,\n valuntil: null,\n useconfig: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_tables -- convenience view\n // ==================================================================\n\n private static _buildPgTables(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"schemaname\",\n \"tablename\",\n \"tableowner\",\n \"tablespace\",\n \"hasindexes\",\n \"hasrules\",\n \"hastriggers\",\n \"rowsecurity\",\n ];\n const rows: Row[] = [];\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const hasIdx =\n table.primaryKey !== null || [...table.columns.values()].some((c) => c.unique);\n rows.push({\n schemaname: SCHEMA,\n tablename: tname,\n tableowner: OWNER,\n tablespace: null,\n hasindexes: hasIdx,\n hasrules: false,\n hastriggers: false,\n rowsecurity: false,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_views -- convenience view\n // ==================================================================\n\n private static _buildPgViews(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"schemaname\", \"viewname\", \"viewowner\", \"definition\"];\n const rows: Row[] = [];\n for (const vname of [...engine._views.keys()].sort()) {\n rows.push({\n schemaname: SCHEMA,\n viewname: vname,\n viewowner: OWNER,\n definition: \"\",\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_indexes -- convenience view\n // ==================================================================\n\n private static _buildPgIndexes(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"schemaname\", \"tablename\", \"indexname\", \"tablespace\", \"indexdef\"];\n const rows: Row[] = [];\n\n const indexes = getIndexManager(engine);\n if (indexes !== null) {\n for (const idxName of [...indexes.keys()].sort()) {\n const idxObj = indexes.get(idxName)!;\n const idxDef = idxObj.indexDef;\n const colsStr = idxDef.columns.join(\", \");\n rows.push({\n schemaname: SCHEMA,\n tablename: idxDef.tableName,\n indexname: idxName,\n tablespace: null,\n indexdef: `CREATE INDEX ${idxName} ON ${idxDef.tableName} (${colsStr})`,\n });\n }\n }\n\n // Implicit PK/UNIQUE indexes\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n if (table.primaryKey) {\n const pkName = `${tname}_pkey`;\n rows.push({\n schemaname: SCHEMA,\n tablename: tname,\n indexname: pkName,\n tablespace: null,\n indexdef: `CREATE UNIQUE INDEX ${pkName} ON ${tname} (${table.primaryKey})`,\n });\n }\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n const uqName = `${tname}_${cname}_key`;\n rows.push({\n schemaname: SCHEMA,\n tablename: tname,\n indexname: uqName,\n tablespace: null,\n indexdef: `CREATE UNIQUE INDEX ${uqName} ON ${tname} (${cname})`,\n });\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_matviews -- materialized views (empty, UQA has none)\n // ==================================================================\n\n private static _buildPgMatviews(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"schemaname\",\n \"matviewname\",\n \"matviewowner\",\n \"tablespace\",\n \"hasindexes\",\n \"ispopulated\",\n \"definition\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // pg_sequences\n // ==================================================================\n\n private static _buildPgSequences(\n engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"schemaname\",\n \"sequencename\",\n \"sequenceowner\",\n \"data_type\",\n \"start_value\",\n \"min_value\",\n \"max_value\",\n \"increment_by\",\n \"cycle\",\n \"cache_size\",\n \"last_value\",\n ];\n const rows: Row[] = [];\n for (const sname of [...engine._sequences.keys()].sort()) {\n const seq = engine._sequences.get(sname)!;\n rows.push({\n schemaname: SCHEMA,\n sequencename: sname,\n sequenceowner: OWNER,\n data_type: \"bigint\",\n start_value: seq[\"start\"] ?? 1,\n min_value: 1,\n max_value: 9223372036854775807,\n increment_by: seq[\"increment\"] ?? 1,\n cycle: false,\n cache_size: 1,\n last_value: seq[\"current\"] ?? seq[\"start\"] ?? 1,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_settings -- runtime parameters (GUC)\n // ==================================================================\n\n private static _buildPgSettings(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"name\",\n \"setting\",\n \"unit\",\n \"category\",\n \"short_desc\",\n \"extra_desc\",\n \"context\",\n \"vartype\",\n \"source\",\n \"min_val\",\n \"max_val\",\n \"enumvals\",\n \"boot_val\",\n \"reset_val\",\n \"sourcefile\",\n \"sourceline\",\n \"pending_restart\",\n ];\n\n // [name, setting, unit, category, short_desc, extra_desc,\n // context, vartype, source, min_val, max_val, enumvals,\n // boot_val, reset_val, sourcefile, sourceline, pending_restart]\n const settings: [\n string,\n string,\n string | null,\n string,\n string,\n string | null,\n string,\n string,\n string,\n string | null,\n string | null,\n string | null,\n string,\n string,\n string | null,\n number | null,\n boolean,\n ][] = [\n [\n \"server_version\",\n \"17.0\",\n null,\n \"Preset Options\",\n \"Shows the server version.\",\n null,\n \"internal\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"17.0\",\n \"17.0\",\n null,\n null,\n false,\n ],\n [\n \"server_version_num\",\n \"170000\",\n null,\n \"Preset Options\",\n \"Shows the server version as an integer.\",\n null,\n \"internal\",\n \"integer\",\n \"default\",\n null,\n null,\n null,\n \"170000\",\n \"170000\",\n null,\n null,\n false,\n ],\n [\n \"server_encoding\",\n \"UTF8\",\n null,\n \"Preset Options\",\n \"Shows the server encoding.\",\n null,\n \"internal\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"UTF8\",\n \"UTF8\",\n null,\n null,\n false,\n ],\n [\n \"client_encoding\",\n \"UTF8\",\n null,\n \"Client Connection Defaults\",\n \"Sets the client encoding.\",\n null,\n \"user\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"UTF8\",\n \"UTF8\",\n null,\n null,\n false,\n ],\n [\n \"lc_collate\",\n \"en_US.UTF-8\",\n null,\n \"Preset Options\",\n \"Shows the collation order locale.\",\n null,\n \"internal\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"en_US.UTF-8\",\n \"en_US.UTF-8\",\n null,\n null,\n false,\n ],\n [\n \"lc_ctype\",\n \"en_US.UTF-8\",\n null,\n \"Preset Options\",\n \"Shows the character classification locale.\",\n null,\n \"internal\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"en_US.UTF-8\",\n \"en_US.UTF-8\",\n null,\n null,\n false,\n ],\n [\n \"DateStyle\",\n \"ISO, MDY\",\n null,\n \"Client Connection Defaults\",\n \"Sets the display format for date and time.\",\n null,\n \"user\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"ISO, MDY\",\n \"ISO, MDY\",\n null,\n null,\n false,\n ],\n [\n \"TimeZone\",\n \"UTC\",\n null,\n \"Client Connection Defaults\",\n \"Sets the time zone.\",\n null,\n \"user\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n \"UTC\",\n \"UTC\",\n null,\n null,\n false,\n ],\n [\n \"standard_conforming_strings\",\n \"on\",\n null,\n \"Client Connection Defaults\",\n \"Causes strings to treat backslashes literally.\",\n null,\n \"user\",\n \"bool\",\n \"default\",\n null,\n null,\n null,\n \"on\",\n \"on\",\n null,\n null,\n false,\n ],\n [\n \"search_path\",\n '\"$user\", public',\n null,\n \"Client Connection Defaults\",\n \"Sets the schema search order.\",\n null,\n \"user\",\n \"string\",\n \"default\",\n null,\n null,\n null,\n '\"$user\", public',\n '\"$user\", public',\n null,\n null,\n false,\n ],\n [\n \"default_transaction_isolation\",\n \"read committed\",\n null,\n \"Client Connection Defaults\",\n \"Sets the default transaction isolation level.\",\n null,\n \"user\",\n \"enum\",\n \"default\",\n null,\n null,\n \"serializable,repeatable read,read committed,read uncommitted\",\n \"read committed\",\n \"read committed\",\n null,\n null,\n false,\n ],\n [\n \"max_connections\",\n \"100\",\n null,\n \"Connections and Authentication\",\n \"Sets the maximum number of concurrent connections.\",\n null,\n \"postmaster\",\n \"integer\",\n \"default\",\n \"1\",\n \"262143\",\n null,\n \"100\",\n \"100\",\n null,\n null,\n false,\n ],\n [\n \"shared_buffers\",\n \"16384\",\n \"8kB\",\n \"Resource Usage / Memory\",\n \"Sets the number of shared memory buffers.\",\n null,\n \"postmaster\",\n \"integer\",\n \"default\",\n \"16\",\n \"1073741823\",\n null,\n \"16384\",\n \"16384\",\n null,\n null,\n false,\n ],\n [\n \"work_mem\",\n \"4096\",\n \"kB\",\n \"Resource Usage / Memory\",\n \"Sets the maximum memory for query operations.\",\n null,\n \"user\",\n \"integer\",\n \"default\",\n \"64\",\n \"2147483647\",\n null,\n \"4096\",\n \"4096\",\n null,\n null,\n false,\n ],\n [\n \"is_superuser\",\n \"on\",\n null,\n \"Preset Options\",\n \"Shows whether the current user is a superuser.\",\n null,\n \"internal\",\n \"bool\",\n \"default\",\n null,\n null,\n null,\n \"on\",\n \"on\",\n null,\n null,\n false,\n ],\n [\n \"transaction_isolation\",\n \"read committed\",\n null,\n \"Client Connection Defaults\",\n \"Shows the current transaction isolation level.\",\n null,\n \"user\",\n \"string\",\n \"override\",\n null,\n null,\n null,\n \"read committed\",\n \"read committed\",\n null,\n null,\n false,\n ],\n [\n \"integer_datetimes\",\n \"on\",\n null,\n \"Preset Options\",\n \"Shows if datetimes are stored as 64-bit integers.\",\n null,\n \"internal\",\n \"bool\",\n \"default\",\n null,\n null,\n null,\n \"on\",\n \"on\",\n null,\n null,\n false,\n ],\n ];\n\n const rows: Row[] = [];\n for (const s of settings) {\n rows.push({\n name: s[0],\n setting: s[1],\n unit: s[2],\n category: s[3],\n short_desc: s[4],\n extra_desc: s[5],\n context: s[6],\n vartype: s[7],\n source: s[8],\n min_val: s[9],\n max_val: s[10],\n enumvals: s[11],\n boot_val: s[12],\n reset_val: s[13],\n sourcefile: s[14],\n sourceline: s[15],\n pending_restart: s[16],\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_foreign_server\n // ==================================================================\n\n private static _buildPgForeignServer(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"srvname\",\n \"srvowner\",\n \"srvfdw\",\n \"srvtype\",\n \"srvversion\",\n \"srvacl\",\n \"srvoptions\",\n ];\n const rows: Row[] = [];\n for (const sname of [...engine._foreignServers.keys()].sort()) {\n const srv = engine._foreignServers.get(sname)!;\n const srvOid = oids.get(\"foreign_server\", sname) ?? 0;\n const fdwOid = oids.get(\"fdw\", srv.fdwType) ?? 0;\n const opts = Object.entries(srv.options)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`);\n rows.push({\n oid: srvOid,\n srvname: sname,\n srvowner: ROLE_OID,\n srvfdw: fdwOid,\n srvtype: null,\n srvversion: null,\n srvacl: null,\n srvoptions: opts.length > 0 ? `{${opts.join(\",\")}}` : null,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_foreign_table\n // ==================================================================\n\n private static _buildPgForeignTable(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"ftrelid\", \"ftserver\", \"ftoptions\"];\n const rows: Row[] = [];\n for (const ftname of [...engine._foreignTables.keys()].sort()) {\n const ft = engine._foreignTables.get(ftname)!;\n const ftOid = oids.get(\"foreign_table\", ftname) ?? 0;\n const srvOid = oids.get(\"foreign_server\", ft.serverName) ?? 0;\n const opts = Object.entries(ft.options)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`);\n rows.push({\n ftrelid: ftOid,\n ftserver: srvOid,\n ftoptions: opts.length > 0 ? `{${opts.join(\",\")}}` : null,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_foreign_data_wrapper\n // ==================================================================\n\n private static _buildPgForeignDataWrapper(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"fdwname\",\n \"fdwowner\",\n \"fdwhandler\",\n \"fdwvalidator\",\n \"fdwacl\",\n \"fdwoptions\",\n ];\n const rows: Row[] = [];\n const seen = new Set<string>();\n for (const sname of [...engine._foreignServers.keys()].sort()) {\n const srv = engine._foreignServers.get(sname)!;\n if (seen.has(srv.fdwType)) continue;\n seen.add(srv.fdwType);\n const fdwOid = oids.get(\"fdw\", srv.fdwType) ?? 0;\n rows.push({\n oid: fdwOid,\n fdwname: srv.fdwType,\n fdwowner: ROLE_OID,\n fdwhandler: 0,\n fdwvalidator: 0,\n fdwacl: null,\n fdwoptions: null,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_description -- object comments\n // ==================================================================\n\n private static _buildPgDescription(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"objoid\", \"classoid\", \"objsubid\", \"description\"];\n // UQA does not support COMMENT ON, return empty\n return [columns, []];\n }\n\n // ==================================================================\n // pg_depend -- object dependencies\n // ==================================================================\n\n private static _buildPgDepend(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"classid\",\n \"objid\",\n \"objsubid\",\n \"refclassid\",\n \"refobjid\",\n \"refobjsubid\",\n \"deptype\",\n ];\n // Basic dependency tracking: FK constraints depend on their\n // referenced tables.\n const rows: Row[] = [];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_stat_user_tables (also used for pg_stat_all_tables)\n // ==================================================================\n\n private static _buildPgStatUserTables(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"relid\",\n \"schemaname\",\n \"relname\",\n \"seq_scan\",\n \"seq_tup_read\",\n \"idx_scan\",\n \"idx_tup_fetch\",\n \"n_tup_ins\",\n \"n_tup_upd\",\n \"n_tup_del\",\n \"n_tup_hot_upd\",\n \"n_live_tup\",\n \"n_dead_tup\",\n \"n_mod_since_analyze\",\n \"n_ins_since_vacuum\",\n \"last_vacuum\",\n \"last_autovacuum\",\n \"last_analyze\",\n \"last_autoanalyze\",\n \"vacuum_count\",\n \"autovacuum_count\",\n \"analyze_count\",\n \"autoanalyze_count\",\n ];\n const rows: Row[] = [];\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n const nLive = table.rowCount;\n const hasStats = Boolean(table._stats);\n rows.push({\n relid: tableOid,\n schemaname: SCHEMA,\n relname: tname,\n seq_scan: 0,\n seq_tup_read: 0,\n idx_scan: 0,\n idx_tup_fetch: 0,\n n_tup_ins: nLive,\n n_tup_upd: 0,\n n_tup_del: 0,\n n_tup_hot_upd: 0,\n n_live_tup: nLive,\n n_dead_tup: 0,\n n_mod_since_analyze: hasStats ? 0 : nLive,\n n_ins_since_vacuum: nLive,\n last_vacuum: null,\n last_autovacuum: null,\n last_analyze: null,\n last_autoanalyze: null,\n vacuum_count: 0,\n autovacuum_count: 0,\n analyze_count: hasStats ? 1 : 0,\n autoanalyze_count: 0,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_stat_user_indexes\n // ==================================================================\n\n private static _buildPgStatUserIndexes(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"relid\",\n \"indexrelid\",\n \"schemaname\",\n \"relname\",\n \"indexrelname\",\n \"idx_scan\",\n \"idx_tup_read\",\n \"idx_tup_fetch\",\n ];\n const rows: Row[] = [];\n\n for (const tname of [...engine._tables.keys()].sort()) {\n const table = engine._tables.get(tname)!;\n const tableOid = oids.get(\"table\", tname) ?? 0;\n if (table.primaryKey) {\n const pkName = `${tname}_pkey`;\n const pkOid = oids.get(\"index\", pkName) ?? 0;\n rows.push({\n relid: tableOid,\n indexrelid: pkOid,\n schemaname: SCHEMA,\n relname: tname,\n indexrelname: pkName,\n idx_scan: 0,\n idx_tup_read: 0,\n idx_tup_fetch: 0,\n });\n }\n for (const [cname, cdef] of table.columns) {\n if (cdef.unique && !cdef.primaryKey) {\n const uqName = `${tname}_${cname}_key`;\n const uqOid = oids.get(\"index\", uqName) ?? 0;\n rows.push({\n relid: tableOid,\n indexrelid: uqOid,\n schemaname: SCHEMA,\n relname: tname,\n indexrelname: uqName,\n idx_scan: 0,\n idx_tup_read: 0,\n idx_tup_fetch: 0,\n });\n }\n }\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_stat_activity -- active sessions\n // ==================================================================\n\n private static _buildPgStatActivity(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"datid\",\n \"datname\",\n \"pid\",\n \"leader_pid\",\n \"usesysid\",\n \"usename\",\n \"application_name\",\n \"client_addr\",\n \"client_hostname\",\n \"client_port\",\n \"backend_start\",\n \"xact_start\",\n \"query_start\",\n \"state_change\",\n \"wait_event_type\",\n \"wait_event\",\n \"state\",\n \"backend_xid\",\n \"backend_xmin\",\n \"query_id\",\n \"query\",\n \"backend_type\",\n ];\n\n const liveConnections = getAllConnections();\n let rows: Row[];\n\n if (liveConnections.length > 0) {\n rows = liveConnections.map((conn) => ({\n datid: DATABASE_OID,\n datname: conn.database || CATALOG_NAME,\n pid: conn.pid,\n leader_pid: null,\n usesysid: ROLE_OID,\n usename: conn.username || OWNER,\n application_name: conn.applicationName,\n client_addr: conn.clientAddr,\n client_hostname: null,\n client_port: conn.clientPort,\n backend_start: conn.backendStart?.toISOString() ?? null,\n xact_start: conn.xactStart?.toISOString() ?? null,\n query_start: conn.queryStart?.toISOString() ?? null,\n state_change: conn.stateChange?.toISOString() ?? null,\n wait_event_type: null,\n wait_event: null,\n state: conn.state,\n backend_xid: null,\n backend_xmin: null,\n query_id: null,\n query: conn.query,\n backend_type: conn.backendType,\n }));\n } else {\n rows = [\n {\n datid: DATABASE_OID,\n datname: CATALOG_NAME,\n pid: process.pid,\n leader_pid: null,\n usesysid: ROLE_OID,\n usename: OWNER,\n application_name: \"usqldb\",\n client_addr: null,\n client_hostname: null,\n client_port: -1,\n backend_start: null,\n xact_start: null,\n query_start: null,\n state_change: null,\n wait_event_type: null,\n wait_event: null,\n state: \"active\",\n backend_xid: null,\n backend_xmin: null,\n query_id: null,\n query: \"\",\n backend_type: \"client backend\",\n },\n ];\n }\n\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_proc -- functions/procedures\n // ==================================================================\n\n private static _buildPgProc(\n _engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"proname\",\n \"pronamespace\",\n \"proowner\",\n \"prolang\",\n \"procost\",\n \"prorows\",\n \"provariadic\",\n \"prosupport\",\n \"prokind\",\n \"prosecdef\",\n \"proleakproof\",\n \"proisstrict\",\n \"proretset\",\n \"provolatile\",\n \"proparallel\",\n \"pronargs\",\n \"pronargdefaults\",\n \"prorettype\",\n \"proargtypes\",\n \"proallargtypes\",\n \"proargmodes\",\n \"proargnames\",\n \"proargdefaults\",\n \"protrftypes\",\n \"prosrc\",\n \"probin\",\n \"prosqlbody\",\n \"proconfig\",\n \"proacl\",\n ];\n\n // UQA built-in extended SQL functions\n // [name, nargs, rettype, argtypes]\n const uqaFunctions: [string, number, number, string][] = [\n [\"text_match\", 2, 25, \"25 25\"],\n [\"bayesian_match\", 2, 25, \"25 25\"],\n [\"knn_match\", 3, 25, \"25 2277 23\"],\n [\"traverse_match\", 3, 25, \"23 25 23\"],\n [\"fuse_log_odds\", 0, 25, \"\"],\n [\"fuse_prob_and\", 0, 25, \"\"],\n [\"fuse_prob_or\", 0, 25, \"\"],\n [\"fuse_prob_not\", 1, 25, \"25\"],\n [\"spatial_within\", 4, 25, \"25 600 600 701\"],\n ];\n\n const rows: Row[] = [];\n const nsPublic = NS_PUBLIC;\n for (const [fname, nargs, rettype, argtypes] of uqaFunctions) {\n const funcOid = oids.getOrAlloc(\"function\", fname);\n rows.push({\n oid: funcOid,\n proname: fname,\n pronamespace: nsPublic,\n proowner: ROLE_OID,\n prolang: 14, // SQL\n procost: 100,\n prorows: 0,\n provariadic: 0,\n prosupport: \"\",\n prokind: \"f\",\n prosecdef: false,\n proleakproof: false,\n proisstrict: false,\n proretset: false,\n provolatile: \"v\",\n proparallel: \"u\",\n pronargs: nargs,\n pronargdefaults: 0,\n prorettype: rettype,\n proargtypes: argtypes,\n proallargtypes: null,\n proargmodes: null,\n proargnames: null,\n proargdefaults: null,\n protrftypes: null,\n prosrc: fname,\n probin: null,\n prosqlbody: null,\n proconfig: null,\n proacl: null,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_extension\n // ==================================================================\n\n private static _buildPgExtension(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"extname\",\n \"extowner\",\n \"extnamespace\",\n \"extrelocatable\",\n \"extversion\",\n \"extconfig\",\n \"extcondition\",\n ];\n const rows: Row[] = [\n {\n oid: 13181,\n extname: \"plpgsql\",\n extowner: ROLE_OID,\n extnamespace: NS_PG_CATALOG,\n extrelocatable: false,\n extversion: \"1.0\",\n extconfig: null,\n extcondition: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_collation\n // ==================================================================\n\n private static _buildPgCollation(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"collname\",\n \"collnamespace\",\n \"collowner\",\n \"collprovider\",\n \"collisdeterministic\",\n \"collencoding\",\n \"collcollate\",\n \"collctype\",\n \"colliculocale\",\n \"collicurules\",\n \"collversion\",\n ];\n const rows: Row[] = [\n {\n oid: 100,\n collname: \"default\",\n collnamespace: NS_PG_CATALOG,\n collowner: ROLE_OID,\n collprovider: \"d\",\n collisdeterministic: true,\n collencoding: -1,\n collcollate: \"\",\n collctype: \"\",\n colliculocale: null,\n collicurules: null,\n collversion: null,\n },\n {\n oid: 950,\n collname: \"C\",\n collnamespace: NS_PG_CATALOG,\n collowner: ROLE_OID,\n collprovider: \"c\",\n collisdeterministic: true,\n collencoding: -1,\n collcollate: \"C\",\n collctype: \"C\",\n colliculocale: null,\n collicurules: null,\n collversion: null,\n },\n {\n oid: 951,\n collname: \"POSIX\",\n collnamespace: NS_PG_CATALOG,\n collowner: ROLE_OID,\n collprovider: \"c\",\n collisdeterministic: true,\n collencoding: -1,\n collcollate: \"POSIX\",\n collctype: \"POSIX\",\n colliculocale: null,\n collicurules: null,\n collversion: null,\n },\n ];\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_enum (empty -- UQA has no enum types)\n // ==================================================================\n\n private static _buildPgEnum(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"oid\", \"enumtypid\", \"enumsortorder\", \"enumlabel\"];\n return [columns, []];\n }\n\n // ==================================================================\n // pg_inherits (empty -- no inheritance)\n // ==================================================================\n\n private static _buildPgInherits(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"inhrelid\", \"inhparent\", \"inhseqno\", \"inhdetachpending\"];\n return [columns, []];\n }\n\n // ==================================================================\n // pg_trigger (empty -- no triggers)\n // ==================================================================\n\n private static _buildPgTrigger(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"tgrelid\",\n \"tgparentid\",\n \"tgname\",\n \"tgfoid\",\n \"tgtype\",\n \"tgenabled\",\n \"tgisinternal\",\n \"tgconstrrelid\",\n \"tgconstrindid\",\n \"tgconstraint\",\n \"tgdeferrable\",\n \"tginitdeferred\",\n \"tgnargs\",\n \"tgattr\",\n \"tgargs\",\n \"tgqual\",\n \"tgoldtable\",\n \"tgnewtable\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // pg_statio_user_tables\n // ==================================================================\n\n private static _buildPgStatioUserTables(\n engine: EngineInternals,\n oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"relid\",\n \"schemaname\",\n \"relname\",\n \"heap_blks_read\",\n \"heap_blks_hit\",\n \"idx_blks_read\",\n \"idx_blks_hit\",\n \"toast_blks_read\",\n \"toast_blks_hit\",\n \"tidx_blks_read\",\n \"tidx_blks_hit\",\n ];\n const rows: Row[] = [];\n for (const tname of [...engine._tables.keys()].sort()) {\n const tableOid = oids.get(\"table\", tname) ?? 0;\n rows.push({\n relid: tableOid,\n schemaname: SCHEMA,\n relname: tname,\n heap_blks_read: 0,\n heap_blks_hit: 0,\n idx_blks_read: 0,\n idx_blks_hit: 0,\n toast_blks_read: 0,\n toast_blks_hit: 0,\n tidx_blks_read: 0,\n tidx_blks_hit: 0,\n });\n }\n return [columns, rows];\n }\n\n // ==================================================================\n // pg_auth_members (empty -- single user)\n // ==================================================================\n\n private static _buildPgAuthMembers(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\n \"oid\",\n \"roleid\",\n \"member\",\n \"grantor\",\n \"admin_option\",\n \"inherit_option\",\n \"set_option\",\n ];\n return [columns, []];\n }\n\n // ==================================================================\n // pg_available_extensions\n // ==================================================================\n\n private static _buildPgAvailableExtensions(\n _engine: EngineInternals,\n _oids: OIDAllocator,\n ): BuildResult {\n const columns = [\"name\", \"default_version\", \"installed_version\", \"comment\"];\n const rows: Row[] = [\n {\n name: \"plpgsql\",\n default_version: \"1.0\",\n installed_version: \"1.0\",\n comment: \"PL/pgSQL procedural language\",\n },\n ];\n return [columns, rows];\n }\n}\n","//\n// usqldb -- PostgreSQL 17-compatible catalog layer for UQA\n//\n// Copyright (c) 2023-2026 Cognica, Inc.\n//\n\n// PostgreSQL 17-compatible UQA Engine.\n//\n// Extends the standard UQA Engine so that every SQL query uses\n// comprehensive information_schema and pg_catalog providers instead\n// of the minimal built-in ones. This provides full PostgreSQL 17\n// system catalog compatibility without changing any other Engine behavior.\n//\n// Architecture note:\n//\n// In Python, USQLEngine.sql() creates a NEW USQLCompiler per query.\n// In JS, Engine has a single _compiler (private) created in the\n// constructor and reused across queries. We monkey-patch three\n// methods on the compiler instance to inject catalog support:\n//\n// _resolveFromItem -- intercepts catalog table references\n// _projectColumns -- preserves columns for empty catalog tables\n// _walkAstForTables -- excludes catalog names from table refs\n//\n// Each catalog table is materialized through _resultToTable,\n// registered in _tables, and tracked in _shadowedTables /\n// _expandedViews -- exactly as the Python USQLCompiler does.\n\nimport { Engine } from \"@jaepil/uqa\";\nimport type { SQLResult } from \"@jaepil/uqa\";\nimport { normalizeRows } from \"./compiler.js\";\nimport { OIDAllocator } from \"../pg-compat/oid.js\";\nimport { InformationSchemaProvider } from \"../pg-compat/information-schema.js\";\nimport { PGCatalogProvider } from \"../pg-compat/pg-catalog.js\";\n\ntype Row = Record<string, unknown>;\n\n// pg_catalog tables that can be referenced without schema prefix,\n// matching PostgreSQL's implicit pg_catalog search_path behavior.\nconst PG_CATALOG_NAMES: ReadonlySet<string> = new Set(\n PGCatalogProvider.supportedTables(),\n);\n\n// information_schema views that can be referenced without prefix.\nconst INFO_SCHEMA_NAMES: ReadonlySet<string> = new Set(\n InformationSchemaProvider.supportedViews(),\n);\n\n// Build a composite state object from the compiler's live data and\n// the engine's metadata. In the JS UQA engine, SQL DDL populates\n// the compiler's Maps, not the Engine's. The providers need the\n// compiler's data for tables/views/sequences/FDW, and the engine's\n// data for _tempTables and _indexManager.\nfunction buildCompilerState(\n compiler: Record<string, unknown>,\n eng: Record<string, unknown>,\n): unknown {\n return {\n _tables: compiler[\"_tables\"],\n _views: compiler[\"_views\"],\n _sequences: compiler[\"_sequences\"],\n _foreignServers: compiler[\"_foreignServers\"],\n _foreignTables: compiler[\"_foreignTables\"],\n _tempTables: (eng[\"_tempTables\"] as Set<string> | undefined) ?? new Set<string>(),\n _indexManager: (eng[\"_indexManager\"] as unknown) ?? null,\n };\n}\n\n// Detect A_Star in SELECT targets.\n// A SELECT * AST node looks like:\n// {\"ResTarget\":{\"val\":{\"ColumnRef\":{\"fields\":[{\"A_Star\":{}}]}}}}\nfunction isSelectStar(targets: unknown[]): boolean {\n if (targets.length === 0) return true;\n if (targets.length !== 1) return false;\n try {\n // The nested access will throw (caught below) when the shape\n // does not match, so non-null assertions are safe here.\n const t = targets[0] as Record<string, Record<string, unknown>>;\n const val = t[\"ResTarget\"]![\"val\"] as Record<string, Record<string, unknown[]>>;\n const fields = val[\"ColumnRef\"]![\"fields\"]!;\n return \"A_Star\" in (fields[0] as Record<string, unknown>);\n } catch {\n return false;\n }\n}\n\nexport class USQLEngine extends Engine {\n private _oidAllocator: OIDAllocator | null = null;\n\n constructor(opts?: {\n dbPath?: string;\n parallelWorkers?: number;\n spillThreshold?: number;\n }) {\n super(opts);\n this._patchCompiler();\n }\n\n private _patchCompiler(): void {\n // Access the private _compiler field at runtime.\n // Engine stores its SQLCompiler as `_compiler` (private in TypeScript,\n // but a regular property at JavaScript runtime).\n const compiler = (this as unknown as Record<string, unknown>)[\n \"_compiler\"\n ] as Record<string, unknown>;\n const getOids = this._getOids.bind(this);\n const eng = this as unknown as Record<string, unknown>;\n\n // Capture original methods from the compiler instance.\n const origApplyAlias = compiler[\"_applyAlias\"] as (\n rows: Row[],\n alias: string | null,\n ) => Row[];\n const origResultToTable = compiler[\"_resultToTable\"] as (\n name: string,\n result: { columns: string[]; rows: Row[] },\n ) => unknown;\n\n // ------------------------------------------------------------------\n // Helper: materialize a catalog result as a Table\n // ------------------------------------------------------------------\n // Mirrors Python's _build_information_schema_table / _build_pg_catalog_table:\n // 1. normalize rows\n // 2. call _resultToTable to create a Table\n // 3. register in _tables (saving any shadowed entry)\n // 4. track the internal name in _expandedViews\n // 5. return the internal name\n function materializeCatalog(\n compilerCtx: Record<string, unknown>,\n internalName: string,\n columns: string[],\n rows: Row[],\n ): string {\n const normalized = normalizeRows(rows);\n const table = origResultToTable.call(compilerCtx, internalName, {\n columns,\n rows: normalized,\n });\n\n const tables = compilerCtx[\"_tables\"] as Map<string, unknown>;\n const shadowedTables = compilerCtx[\"_shadowedTables\"] as Map<string, unknown>;\n const expandedViews = compilerCtx[\"_expandedViews\"] as string[];\n\n const existing = tables.get(internalName);\n if (existing !== undefined && !shadowedTables.has(internalName)) {\n shadowedTables.set(internalName, existing);\n }\n tables.set(internalName, table);\n expandedViews.push(internalName);\n\n return internalName;\n }\n\n // Helper: build and materialize an information_schema view.\n function buildInfoSchemaTable(\n compilerCtx: Record<string, unknown>,\n viewName: string,\n ): string {\n const state = buildCompilerState(compilerCtx, eng);\n const oids = getOids(state);\n const [columns, rows] = InformationSchemaProvider.build(\n viewName,\n state as Engine,\n oids,\n );\n return materializeCatalog(compilerCtx, `_info_schema_${viewName}`, columns, rows);\n }\n\n // Helper: build and materialize a pg_catalog table.\n function buildPgCatalogTable(\n compilerCtx: Record<string, unknown>,\n tableName: string,\n ): string {\n const state = buildCompilerState(compilerCtx, eng);\n const oids = getOids(state);\n const [columns, rows] = PGCatalogProvider.build(tableName, state as Engine, oids);\n return materializeCatalog(compilerCtx, `_pg_${tableName}`, columns, rows);\n }\n\n // Helper: read rows back from a materialized table's documentStore.\n function readTableRows(\n compilerCtx: Record<string, unknown>,\n internalName: string,\n alias: string,\n ): Row[] {\n const tables = compilerCtx[\"_tables\"] as Map<string, Record<string, unknown>>;\n const table = tables.get(internalName);\n if (!table) return [];\n\n const docStore = table[\"documentStore\"] as {\n iterAll(): Iterable<[unknown, Record<string, unknown>]>;\n };\n\n const rows: Row[] = [];\n for (const [, doc] of docStore.iterAll()) {\n rows.push({ ...doc });\n }\n return origApplyAlias.call(compilerCtx, rows, alias);\n }\n\n // ------------------------------------------------------------------\n // Override: _resolveFromItem\n // ------------------------------------------------------------------\n // Handles qualified (information_schema.xxx, pg_catalog.xxx) and\n // unqualified catalog name resolution, matching Python's\n // _resolve_from_single logic.\n const origResolveFromItem = compiler[\"_resolveFromItem\"] as (\n node: unknown,\n ctx: unknown,\n ) => Row[];\n\n compiler[\"_resolveFromItem\"] = function (\n this: Record<string, unknown>,\n node: unknown,\n ctx: unknown,\n ): Row[] {\n const rangeVar = (node as Record<string, unknown> | null)?.[\"RangeVar\"] as\n | Record<string, unknown>\n | undefined;\n\n if (rangeVar) {\n const schemaName = (rangeVar[\"schemaname\"] as string | null) || null;\n const relName = rangeVar[\"relname\"] as string;\n const aliasNode = rangeVar[\"alias\"] as Record<string, string> | null;\n const alias = (aliasNode && aliasNode[\"aliasname\"]) || relName;\n\n if (schemaName === \"information_schema\") {\n const internalName = buildInfoSchemaTable(\n this as Record<string, unknown>,\n relName,\n );\n return readTableRows(this as Record<string, unknown>, internalName, alias);\n }\n\n if (schemaName === \"pg_catalog\") {\n const internalName = buildPgCatalogTable(\n this as Record<string, unknown>,\n relName,\n );\n return readTableRows(this as Record<string, unknown>, internalName, alias);\n }\n\n // Unqualified name: check if it matches a known catalog object\n // that is not a user-defined table/view/foreign-table/CTE.\n if (schemaName === null && relName) {\n const tables = this[\"_tables\"] as Map<string, unknown>;\n const views = this[\"_views\"] as Map<string, unknown>;\n const foreignTables = this[\"_foreignTables\"] as Map<string, unknown>;\n const inlinedCTEs = this[\"_inlinedCTEs\"] as Map<string, unknown>;\n\n if (\n !tables.has(relName) &&\n !views.has(relName) &&\n !foreignTables.has(relName) &&\n !inlinedCTEs.has(relName)\n ) {\n if (PG_CATALOG_NAMES.has(relName)) {\n const internalName = buildPgCatalogTable(\n this as Record<string, unknown>,\n relName,\n );\n return readTableRows(\n this as Record<string, unknown>,\n internalName,\n alias,\n );\n }\n if (INFO_SCHEMA_NAMES.has(relName)) {\n const internalName = buildInfoSchemaTable(\n this as Record<string, unknown>,\n relName,\n );\n return readTableRows(\n this as Record<string, unknown>,\n internalName,\n alias,\n );\n }\n }\n }\n }\n\n return origResolveFromItem.call(this, node, ctx);\n };\n\n // ------------------------------------------------------------------\n // Override: _projectColumns\n // ------------------------------------------------------------------\n // When rows are empty and the query is SELECT *, the base\n // _projectColumns infers columns from Object.keys(rows[0]) which\n // returns [[], []] -- column metadata is lost. We check\n // _expandedViews for registered catalog tables and read their\n // column metadata from the Table's columns Map.\n const origProjectColumns = compiler[\"_projectColumns\"] as (\n targets: unknown[],\n rows: Row[],\n ctx: unknown,\n ) => [string[], Row[]];\n\n compiler[\"_projectColumns\"] = function (\n this: Record<string, unknown>,\n targets: unknown[],\n rows: Row[],\n ctx: unknown,\n ): [string[], Row[]] {\n if (rows.length === 0 && isSelectStar(targets)) {\n const expandedViews = this[\"_expandedViews\"] as string[];\n const tables = this[\"_tables\"] as Map<string, Record<string, unknown>>;\n\n // Walk _expandedViews in reverse to find the most recently\n // registered catalog table.\n for (let i = expandedViews.length - 1; i >= 0; i--) {\n const name = expandedViews[i]!;\n if (name.startsWith(\"_pg_\") || name.startsWith(\"_info_schema_\")) {\n const table = tables.get(name);\n if (table) {\n const columnsMap = table[\"columns\"] as Map<string, unknown>;\n if (columnsMap.size > 0) {\n return [[...columnsMap.keys()], []];\n }\n }\n }\n }\n }\n\n return origProjectColumns.call(this, targets, rows, ctx);\n };\n\n // ------------------------------------------------------------------\n // Override static: _walkAstForTables\n // ------------------------------------------------------------------\n // Exclude qualified information_schema / pg_catalog names (same as\n // the base implementation) and ALSO exclude unqualified names that\n // match known catalog objects. This prevents the compiler from\n // treating catalog tables as missing user tables.\n const compilerCtor = compiler.constructor as unknown as Record<string, unknown>;\n\n compilerCtor[\"_walkAstForTables\"] = function walkAstForTables(\n node: unknown,\n refs: Set<string>,\n ): void {\n if (node == null || typeof node !== \"object\") return;\n\n if (Array.isArray(node)) {\n for (const item of node) {\n walkAstForTables(item, refs);\n }\n return;\n }\n\n const obj = node as Record<string, unknown>;\n const rangeVar = obj[\"RangeVar\"] as Record<string, unknown> | undefined;\n\n if (rangeVar !== undefined) {\n const schemaName = rangeVar[\"schemaname\"] as string | undefined;\n if (schemaName === \"information_schema\" || schemaName === \"pg_catalog\") {\n return;\n }\n const relName = rangeVar[\"relname\"] as string | undefined;\n // Skip unqualified names that match known catalog objects.\n if (\n !schemaName &&\n relName &&\n (PG_CATALOG_NAMES.has(relName) || INFO_SCHEMA_NAMES.has(relName))\n ) {\n return;\n }\n if (relName) {\n refs.add(relName);\n }\n return;\n }\n\n // Handle non-RangeVar nodes that have relname directly\n // (e.g., bare table references in some AST positions).\n const relName = obj[\"relname\"];\n if (typeof relName === \"string\" && relName) {\n const schemaName = obj[\"schemaname\"] as string | undefined;\n if (\n schemaName === \"information_schema\" ||\n schemaName === \"pg_catalog\" ||\n (!schemaName &&\n (PG_CATALOG_NAMES.has(relName) || INFO_SCHEMA_NAMES.has(relName)))\n ) {\n // Skip catalog references.\n } else {\n refs.add(relName);\n }\n }\n\n for (const value of Object.values(obj)) {\n if (value !== null && typeof value === \"object\") {\n walkAstForTables(value as unknown, refs);\n }\n }\n };\n }\n\n private _getOids(state?: unknown): OIDAllocator {\n if (this._oidAllocator === null) {\n // Pass the composite state (with compiler tables) to OIDAllocator.\n this._oidAllocator = new OIDAllocator((state ?? this) as Engine);\n }\n return this._oidAllocator;\n }\n\n override async sql(query: string, params?: unknown[]): Promise<SQLResult | null> {\n // Reset OID allocator for each query to ensure consistent OIDs\n // within a single query execution while allowing for schema changes\n // between queries. This mirrors Python's approach of creating a\n // new USQLCompiler (and thus new OIDAllocator) per query.\n this._oidAllocator = null;\n // Lazy-initialize persistence on the first SQL call when dbPath is set.\n // Engine.init() is idempotent -- safe to call every time.\n await this.init();\n return super.sql(query, params);\n }\n}\n"],"names":["normalizeRows","rows","normalized","row","newRow","key","value","TYPE_OIDS","ARRAY_TYPE_OIDS","SCHEMA_OIDS","DATABASE_OID","ROLE_OID","AM_BTREE","AM_HASH","AM_HEAP","AM_HNSW","AM_IVF","CANONICAL_TYPE_NAMES","TYPE_LENGTHS","TYPE_BYVAL","TYPE_ALIGN","TYPE_STORAGE","typeOid","typeName","base","baseOid","canonicalTypeName","numericPrecision","oid","numericScale","numericPrecisionRadix","characterMaximumLength","_typeName","characterOctetLength","OIDAllocator","engine","__publicField","name","fdwTypes","srv","fdwType","indexManager","indexes","tname","table","cname","cdef","fk","checkName","category","existing","_engine","prefix","result","CATALOG","SCHEMA","OWNER","udtName","mapping","formatDefault","effectiveTypeName","_InformationSchemaProvider","viewName","oids","builder","_oids","columns","isTemp","vname","ftname","pos","effType","display","udt","defaultStr","isIdentity","identityGen","dtPrecision","ft","refTable","refPos","refConstraint","sname","seq","optName","InformationSchemaProvider","_connections","getAllConnections","CATALOG_NAME","ENCODING_UTF8","NS_PG_CATALOG","NS_PUBLIC","NS_INFORMATION_SCHEMA","pgClassRow","options","reltuples","getIndexManager","_PGCatalogProvider","tableName","nsPublic","tableOid","typeOidVal","hasIndex","c","nChecks","viewOid","seqOid","ftOid","idxName","idxObj","idxOid","idxDef","pkIdxName","pkIdxOid","uqIdxName","uqIdxOid","systemCols","attnum","colTypeOid","attlen","byval","align","storage","ndims","hasDefault","identity","collation","sysName","sysType","sysLen","sysNum","nsPgCatalog","baseTypes","typname","typlen","cat","preferred","arrayOid","sortedArrayOids","k","v","a","b","elemOid","arrOid","elemName","btOid","btName","compOid","colNums","num","conName","conOid","pkAttnum","fkAttnum","refTableOid","refTableObj","refAttnum","refColNums","refNum","cn","tableObj","nAtts","indkeyParts","n","col","indkey","isUnique","defOid","adbin","hasIdx","colsStr","pkName","uqName","settings","s","srvOid","fdwOid","opts","seen","nLive","hasStats","pkOid","uqOid","liveConnections","conn","_a","_b","_c","_d","uqaFunctions","fname","nargs","rettype","argtypes","funcOid","PGCatalogProvider","PG_CATALOG_NAMES","INFO_SCHEMA_NAMES","buildCompilerState","compiler","eng","isSelectStar","targets","USQLEngine","Engine","getOids","origApplyAlias","origResultToTable","materializeCatalog","compilerCtx","internalName","tables","shadowedTables","expandedViews","buildInfoSchemaTable","state","buildPgCatalogTable","readTableRows","alias","docStore","doc","origResolveFromItem","node","ctx","rangeVar","schemaName","relName","aliasNode","views","foreignTables","inlinedCTEs","origProjectColumns","i","columnsMap","compilerCtor","walkAstForTables","refs","item","obj","query","params"],"mappings":"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EACpB,UAAWiF,IAAS,CAAC,GAAG/C,EAAO,WAAW,KAAA,CAAM,EAAE,OAAQ,CACxD,MAAMgD,EAAMhD,EAAO,WAAW,IAAI+C,CAAK,EACvCjF,EAAK,KAAK,CACR,WAAYsD,EACZ,aAAc2B,EACd,cAAe1B,EACf,UAAW,SACX,YAAa2B,EAAI,OAAY,EAC7B,UAAW,EACX,UAAW,mBACX,aAAcA,EAAI,WAAgB,EAClC,MAAO,GACP,WAAY,EACZ,WAAYA,EAAI,SAAcA,EAAI,OAAY,CAAA,CAC/C,CACH,CACA,MAAO,CAACjB,EAASjE,CAAI,CACvB,CAMA,OAAe,iBACbkD,EACAc,EACa,CACb,MAAMC,EAAU,CACd,OACA,UACA,OACA,WACA,aACA,aACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,YACA,aACA,aACA,iBAAA,EAMI4G,EAkBA,CACJ,CACE,iBACA,OACA,KACA,iBACA,4BACA,KACA,WACA,SACA,UACA,KACA,KACA,KACA,OACA,OACA,KACA,KACA,EAAA,EAEF,CACE,qBACA,SACA,KACA,iBACA,0CACA,KACA,WACA,UACA,UACA,KACA,KACA,KACA,SACA,SACA,KACA,KACA,EAAA,EAEF,CACE,kBACA,OACA,KACA,iBACA,6BACA,KACA,WACA,SACA,UACA,KACA,KACA,KACA,OACA,OACA,KACA,KACA,EAAA,EAEF,CACE,kBACA,OACA,KACA,6BACA,4BACA,KACA,OACA,SACA,UACA,KACA,KACA,KACA,OACA,OACA,KACA,KACA,EAAA,EAEF,CACE,aACA,cACA,KACA,iBACA,oCACA,KACA,WACA,SACA,UACA,KACA,KACA,KACA,cACA,cACA,KACA,KACA,EAAA,EAEF,CACE,WACA,cACA,KACA,iBACA,6CACA,KACA,WACA,SACA,UACA,KACA,KACA,KACA,cACA,cACA,KACA,KACA,EAAA,EAEF,CACE,YACA,WACA,KACA,6BACA,6CACA,KACA,OACA,SACA,UACA,KACA,KACA,KACA,WACA,WACA,KACA,KACA,EAAA,EAEF,CACE,WACA,MACA,KACA,6BACA,sBACA,KACA,OACA,SACA,UACA,KACA,KACA,KACA,MACA,MACA,KACA,KACA,EAAA,EAEF,CACE,8BACA,KACA,KACA,6BACA,iDACA,KACA,OACA,OACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,EAAA,EAEF,CACE,cACA,kBACA,KACA,6BACA,gCACA,KACA,OACA,SACA,UACA,KACA,KACA,KACA,kBACA,kBACA,KACA,KACA,EAAA,EAEF,CACE,gCACA,iBACA,KACA,6BACA,gDACA,KACA,OACA,OACA,UACA,KACA,KACA,+DACA,iBACA,iBACA,KACA,KACA,EAAA,EAEF,CACE,kBACA,MACA,KACA,iCACA,qDACA,KACA,aACA,UACA,UACA,IACA,SACA,KACA,MACA,MACA,KACA,KACA,EAAA,EAEF,CACE,iBACA,QACA,MACA,0BACA,4CACA,KACA,aACA,UACA,UACA,KACA,aACA,KACA,QACA,QACA,KACA,KACA,EAAA,EAEF,CACE,WACA,OACA,KACA,0BACA,gDACA,KACA,OACA,UACA,UACA,KACA,aACA,KACA,OACA,OACA,KACA,KACA,EAAA,EAEF,CACE,eACA,KACA,KACA,iBACA,iDACA,KACA,WACA,OACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,EAAA,EAEF,CACE,wBACA,iBACA,KACA,6BACA,iDACA,KACA,OACA,SACA,WACA,KACA,KACA,KACA,iBACA,iBACA,KACA,KACA,EAAA,EAEF,CACE,oBACA,KACA,KACA,iBACA,oDACA,KACA,WACA,OACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,EAAA,CACF,EAGI7K,EAAc,CAAA,EACpB,UAAW8K,KAAKD,EACd7K,EAAK,KAAK,CACR,KAAM8K,EAAE,CAAC,EACT,QAASA,EAAE,CAAC,EACZ,KAAMA,EAAE,CAAC,EACT,SAAUA,EAAE,CAAC,EACb,WAAYA,EAAE,CAAC,EACf,WAAYA,EAAE,CAAC,EACf,QAASA,EAAE,CAAC,EACZ,QAASA,EAAE,CAAC,EACZ,OAAQA,EAAE,CAA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CACd,MACA,WACA,gBACA,YACA,eACA,sBACA,eACA,cACA,YACA,gBACA,eACA,aAAA,EAEkB,CAClB,CACE,IAAK,IACL,SAAU,UACV,cAAeyB,EACf,UAAW/E,EACX,aAAc,IACd,oBAAqB,GACrB,aAAc,GACd,YAAa,GACb,UAAW,GACX,cAAe,KACf,aAAc,KACd,YAAa,IAAA,EAEf,CACE,IAAK,IACL,SAAU,IACV,cAAe+E,EACf,UAAW/E,EACX,aAAc,IACd,oBAAqB,GACrB,aAAc,GACd,YAAa,IACb,UAAW,IACX,cAAe,KACf,aAAc,KACd,YAAa,IAAA,EAEf,CACE,IAAK,IACL,SAAU,QACV,cAAe+E,EACf,UAAW/E,EACX,aAAc,IACd,oBAAqB,GACrB,aAAc,GACd,YAAa,QACb,UAAW,QACX,cAAe,KACf,aAAc,KACd,YAAa,IAAA,CACf,CAEmB,CACvB,CAMA,OAAe,aACbwC,EACAc,EACa,CAEb,MAAO,CADS,CAAC,MAAO,YAAa,gBAAiB,WAAW,EAChD,EAAE,CACrB,CAMA,OAAe,iBACbd,EACAc,EACa,CAEb,MAAO,CADS,CAAC,WAAY,YAAa,WAAY,kBAAkB,EACvD,EAAE,CACrB,CAMA,OAAe,gBACbd,EACAc,EACa,CAsBb,MAAO,CArBS,CACd,MACA,UACA,aACA,SACA,SACA,SACA,YACA,eACA,gBACA,gBACA,eACA,eACA,iBACA,UACA,SACA,SACA,SACA,aACA,YAAA,EAEe,EAAE,CACrB,CAMA,OAAe,yBACb9B,EACA4B,EACa,CACb,MAAMG,EAAU,CACd,QACA,aACA,UACA,iBACA,gBACA,gBACA,eACA,kBACA,iBACA,iBACA,eAAA,EAEIjE,EAAc,CAAA,EACpB,UAAW0C,IAAS,CAAC,GAAGR,EAAO,QAAQ,KAAA,CAAM,EAAE,OAAQ,CACrD,MAAMiE,EAAWrC,EAAK,IAAI,QAASpB,CAAK,GAAK,EAC7C1C,EAAK,KAAK,CACR,MAAOmG,EACP,WAAY7C,EACZ,QAASZ,EACT,eAAgB,EAChB,cAAe,EACf,cAAe,EACf,aAAc,EACd,gBAAiB,EACjB,eAAgB,EAChB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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jaepil/usqldb",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "PostgreSQL 17-compatible information_schema, pg_catalog, wire protocol server, and interactive CLI for UQA",
|
|
5
|
+
"license": "AGPL-3.0-only",
|
|
6
|
+
"author": "Jaepil Jeong <jaepil@cognica.io>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/cognica-io/usqldb-js"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"postgresql",
|
|
13
|
+
"information-schema",
|
|
14
|
+
"pg-catalog",
|
|
15
|
+
"pgwire",
|
|
16
|
+
"wire-protocol",
|
|
17
|
+
"uqa",
|
|
18
|
+
"sql",
|
|
19
|
+
"compatibility",
|
|
20
|
+
"system-catalog",
|
|
21
|
+
"typescript",
|
|
22
|
+
"browser"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "dist/usqldb.umd.js",
|
|
26
|
+
"module": "dist/usqldb.es.js",
|
|
27
|
+
"types": "dist/types/index.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/types/index.d.ts",
|
|
31
|
+
"import": "./dist/usqldb.es.js",
|
|
32
|
+
"require": "./dist/usqldb.umd.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist/",
|
|
37
|
+
"LICENSE",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc --noEmit && vite build && tsc -p tsconfig.build.json --emitDeclarationOnly --declarationDir dist/types --outDir dist/types",
|
|
42
|
+
"check": "tsc --noEmit",
|
|
43
|
+
"test": "vitest run",
|
|
44
|
+
"test:watch": "vitest",
|
|
45
|
+
"lint": "eslint src/ tests/",
|
|
46
|
+
"format": "prettier --write 'src/**/*.ts' 'tests/**/*.ts'",
|
|
47
|
+
"format:check": "prettier --check 'src/**/*.ts' 'tests/**/*.ts'",
|
|
48
|
+
"prepublishOnly": "npm run build"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@jaepil/uqa": "^0.3.7"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/pg": "^8.20.0",
|
|
55
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
56
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
57
|
+
"eslint": "^9.0.0",
|
|
58
|
+
"pg": "^8.20.0",
|
|
59
|
+
"prettier": "^3.0.0",
|
|
60
|
+
"typescript": "^5.6.0",
|
|
61
|
+
"typescript-eslint": "^8.0.0",
|
|
62
|
+
"vite": "^6.0.0",
|
|
63
|
+
"vitest": "^3.0.0"
|
|
64
|
+
}
|
|
65
|
+
}
|