@deebeetech/sqleasy-engine 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../src/introspection/build-schema.ts","../../src/introspection/mssql.ts","../../src/introspection/mysql.ts","../../src/introspection/postgres.ts","../../src/introspection/sqlite.ts","../../src/introspection/index.ts"],"sourcesContent":["import type {\n SchemaColumn,\n SchemaData,\n SchemaForeignKey,\n SchemaIndex,\n SchemaTable,\n} from './schema';\n\n/** A table row as read from the catalog, before assembly. */\nexport type RawTable = {\n schema: string;\n name: string;\n isView: boolean;\n};\n\n/** One (index, column) pair as read from the catalog, before grouping into per-table indexes. */\nexport type IndexColumnRow = {\n schema: string;\n table: string;\n indexName: string;\n unique: boolean;\n columnName: string;\n ordinal: number;\n};\n\n/** Stitch flat catalog rows into per-table column/FK/index lists. Shared by every dialect reader. */\nexport function buildSchema(\n tables: RawTable[],\n columns: (SchemaColumn & { schema: string; table: string })[],\n fks: (SchemaForeignKey & { schema: string; table: string })[],\n indexColumns: IndexColumnRow[] = [],\n rowCounts: { schema: string; table: string; count: number }[] = [],\n): SchemaData {\n const colMap = new Map<string, SchemaColumn[]>();\n for (const c of columns) {\n const key = `${c.schema}.${c.table}`;\n const list = colMap.get(key) ?? [];\n list.push({\n name: c.name,\n dataType: c.dataType,\n nullable: c.nullable,\n isPrimaryKey: c.isPrimaryKey,\n defaultValue: c.defaultValue,\n });\n colMap.set(key, list);\n }\n\n const fkMap = new Map<string, SchemaForeignKey[]>();\n for (const fk of fks) {\n const key = `${fk.schema}.${fk.table}`;\n const list = fkMap.get(key) ?? [];\n list.push({\n columnName: fk.columnName,\n referencedTable: fk.referencedTable,\n referencedColumn: fk.referencedColumn,\n referencedSchema: fk.referencedSchema,\n });\n fkMap.set(key, list);\n }\n\n // Group flat (index, column) rows into per-table indexes, columns ordered within each index.\n const idxMap = new Map<\n string,\n Map<string, { unique: boolean; cols: { name: string; ordinal: number }[] }>\n >();\n for (const r of indexColumns) {\n const key = `${r.schema}.${r.table}`;\n const byName = idxMap.get(key) ?? new Map();\n const idx = byName.get(r.indexName) ?? { unique: r.unique, cols: [] };\n idx.cols.push({ name: r.columnName, ordinal: r.ordinal });\n byName.set(r.indexName, idx);\n idxMap.set(key, byName);\n }\n const indexesFor = (key: string): SchemaIndex[] =>\n [...(idxMap.get(key)?.entries() ?? [])].map(([name, i]) => ({\n name,\n unique: i.unique,\n columns: i.cols.sort((a, b) => a.ordinal - b.ordinal).map((c) => c.name),\n }));\n\n const rowCountMap = new Map(rowCounts.map((r) => [`${r.schema}.${r.table}`, r.count]));\n\n const result: SchemaTable[] = tables.map((t) => {\n const key = `${t.schema}.${t.name}`;\n return {\n schema: t.schema,\n name: t.name,\n type: t.isView ? 'view' : 'table',\n columns: colMap.get(key) ?? [],\n foreignKeys: fkMap.get(key) ?? [],\n indexes: indexesFor(key),\n approxRowCount: rowCountMap.get(key),\n };\n });\n\n return { tables: result };\n}\n","import type { DbExecutor } from '../index';\nimport { buildSchema } from './build-schema';\nimport type { SchemaData } from './schema';\n\n/** SQL Server catalog reader (INFORMATION_SCHEMA + sys catalog). Pass an executor connected to a\n * SQL Server database (`createMssqlExecutor`). */\nexport async function introspectMssql(executor: DbExecutor, schema?: string): Promise<SchemaData> {\n const target = schema || 'dbo';\n\n const tables = await executor.run<{ table_name: string; table_type: string }>({\n sql: `SELECT TABLE_NAME AS table_name, TABLE_TYPE AS table_type\n FROM INFORMATION_SCHEMA.TABLES\n WHERE TABLE_SCHEMA = @p0 AND TABLE_TYPE IN ('BASE TABLE', 'VIEW')\n ORDER BY TABLE_TYPE, TABLE_NAME`,\n params: [target],\n });\n\n const columns = await executor.run<{\n table_name: string;\n column_name: string;\n data_type: string;\n is_nullable: string;\n column_default: string | null;\n }>({\n sql: `SELECT TABLE_NAME AS table_name, COLUMN_NAME AS column_name, DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default\n FROM INFORMATION_SCHEMA.COLUMNS\n WHERE TABLE_SCHEMA = @p0\n ORDER BY TABLE_NAME, ORDINAL_POSITION`,\n params: [target],\n });\n\n const pks = await executor.run<{ table_name: string; column_name: string }>({\n sql: `SELECT kcu.TABLE_NAME AS table_name, kcu.COLUMN_NAME AS column_name\n FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc\n JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu\n ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME AND tc.TABLE_SCHEMA = kcu.TABLE_SCHEMA\n WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY' AND tc.TABLE_SCHEMA = @p0`,\n params: [target],\n });\n\n const fks = await executor.run<{\n table_name: string;\n column_name: string;\n referenced_schema: string;\n referenced_table: string;\n referenced_column: string;\n }>({\n sql: `SELECT t1.name AS table_name, c1.name AS column_name,\n s2.name AS referenced_schema, t2.name AS referenced_table, c2.name AS referenced_column\n FROM sys.foreign_key_columns fkc\n JOIN sys.objects t1 ON fkc.parent_object_id = t1.object_id\n JOIN sys.columns c1 ON fkc.parent_object_id = c1.object_id AND fkc.parent_column_id = c1.column_id\n JOIN sys.objects t2 ON fkc.referenced_object_id = t2.object_id\n JOIN sys.columns c2 ON fkc.referenced_object_id = c2.object_id AND fkc.referenced_column_id = c2.column_id\n JOIN sys.schemas s1 ON t1.schema_id = s1.schema_id\n JOIN sys.schemas s2 ON t2.schema_id = s2.schema_id\n WHERE s1.name = @p0`,\n params: [target],\n });\n\n // Secondary indexes (sys.index_columns, key columns only in key_ordinal order; `i.type > 0` skips\n // heaps) + an approximate row count from partition stats.\n const indexes = await executor.run<{\n table_name: string;\n index_name: string;\n is_unique: boolean | number;\n column_name: string;\n ordinal: number;\n }>({\n sql: `SELECT t.name AS table_name, i.name AS index_name, i.is_unique AS is_unique,\n c.name AS column_name, ic.key_ordinal AS ordinal\n FROM sys.indexes i\n JOIN sys.tables t ON t.object_id = i.object_id\n JOIN sys.schemas s ON s.schema_id = t.schema_id\n JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id\n JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id\n WHERE s.name = @p0 AND i.type > 0 AND ic.is_included_column = 0\n ORDER BY t.name, i.name, ic.key_ordinal`,\n params: [target],\n });\n\n const rowCounts = await executor.run<{ table_name: string; n: number }>({\n sql: `SELECT t.name AS table_name, SUM(p.rows) AS n\n FROM sys.tables t\n JOIN sys.schemas s ON s.schema_id = t.schema_id\n JOIN sys.partitions p ON p.object_id = t.object_id AND p.index_id IN (0, 1)\n WHERE s.name = @p0\n GROUP BY t.name`,\n params: [target],\n });\n\n const pkSet = new Set(pks.rows.map((p) => `${p.table_name}.${p.column_name}`));\n\n return buildSchema(\n tables.rows.map((t) => ({\n schema: target,\n name: t.table_name,\n isView: t.table_type === 'VIEW',\n })),\n columns.rows.map((c) => ({\n schema: target,\n table: c.table_name,\n name: c.column_name,\n dataType: c.data_type,\n nullable: c.is_nullable === 'YES',\n isPrimaryKey: pkSet.has(`${c.table_name}.${c.column_name}`),\n defaultValue: c.column_default ?? undefined,\n })),\n fks.rows.map((fk) => ({\n schema: target,\n table: fk.table_name,\n columnName: fk.column_name,\n referencedTable: fk.referenced_table,\n referencedColumn: fk.referenced_column,\n referencedSchema: fk.referenced_schema,\n })),\n indexes.rows.map((r) => ({\n schema: target,\n table: r.table_name,\n indexName: r.index_name,\n unique: Boolean(r.is_unique),\n columnName: r.column_name,\n ordinal: Number(r.ordinal),\n })),\n rowCounts.rows.map((r) => ({ schema: target, table: r.table_name, count: Number(r.n) })),\n );\n}\n","import type { DbExecutor } from '../index';\nimport { buildSchema } from './build-schema';\nimport type { SchemaData } from './schema';\n\n/** MySQL / MariaDB catalog reader (information_schema). Pass an executor connected to a MySQL\n * database (`createMysqlExecutor`). */\nexport async function introspectMysql(executor: DbExecutor, schema?: string): Promise<SchemaData> {\n let target = schema;\n if (!target) {\n const r = await executor.run<{ db: string }>({ sql: 'SELECT DATABASE() AS db' });\n target = r.rows[0]?.db ?? '';\n }\n\n // Explicit lowercase aliases: MySQL 8's information_schema returns UPPERCASE column headers unless\n // aliased (5.7/MariaDB return them as written) — without them every row property reads undefined.\n const tables = await executor.run<{ table_name: string; table_type: string }>({\n sql: `SELECT TABLE_NAME AS table_name, TABLE_TYPE AS table_type\n FROM information_schema.tables\n WHERE table_schema = ? AND table_type IN ('BASE TABLE', 'VIEW')\n ORDER BY table_type, table_name`,\n params: [target],\n });\n\n const columns = await executor.run<{\n table_name: string;\n column_name: string;\n data_type: string;\n is_nullable: string;\n column_default: string | null;\n column_key: string;\n }>({\n sql: `SELECT TABLE_NAME AS table_name, COLUMN_NAME AS column_name, DATA_TYPE AS data_type,\n IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, COLUMN_KEY AS column_key\n FROM information_schema.columns\n WHERE table_schema = ?\n ORDER BY table_name, ordinal_position`,\n params: [target],\n });\n\n const fks = await executor.run<{\n table_name: string;\n column_name: string;\n referenced_table_schema: string;\n referenced_table_name: string;\n referenced_column_name: string;\n }>({\n sql: `SELECT TABLE_NAME AS table_name, COLUMN_NAME AS column_name,\n REFERENCED_TABLE_SCHEMA AS referenced_table_schema,\n REFERENCED_TABLE_NAME AS referenced_table_name,\n REFERENCED_COLUMN_NAME AS referenced_column_name\n FROM information_schema.key_column_usage\n WHERE table_schema = ? AND referenced_table_name IS NOT NULL`,\n params: [target],\n });\n\n // Secondary indexes (one row per index column, ordered by SEQ_IN_INDEX) + approx row count.\n const indexes = await executor.run<{\n table_name: string;\n index_name: string;\n non_unique: number;\n column_name: string | null;\n seq: number;\n }>({\n sql: `SELECT TABLE_NAME AS table_name, INDEX_NAME AS index_name, NON_UNIQUE AS non_unique,\n COLUMN_NAME AS column_name, SEQ_IN_INDEX AS seq\n FROM information_schema.statistics\n WHERE table_schema = ?\n ORDER BY table_name, index_name, seq`,\n params: [target],\n });\n\n const rowCounts = await executor.run<{ table_name: string; n: number | null }>({\n sql: `SELECT TABLE_NAME AS table_name, TABLE_ROWS AS n\n FROM information_schema.tables\n WHERE table_schema = ? AND table_type = 'BASE TABLE'`,\n params: [target],\n });\n\n return buildSchema(\n tables.rows.map((t) => ({\n schema: target,\n name: t.table_name,\n isView: t.table_type === 'VIEW',\n })),\n columns.rows.map((c) => ({\n schema: target,\n table: c.table_name,\n name: c.column_name,\n dataType: c.data_type,\n nullable: c.is_nullable === 'YES',\n isPrimaryKey: c.column_key === 'PRI',\n defaultValue: c.column_default ?? undefined,\n })),\n fks.rows.map((fk) => ({\n schema: target,\n table: fk.table_name,\n columnName: fk.column_name,\n referencedTable: fk.referenced_table_name,\n referencedColumn: fk.referenced_column_name,\n referencedSchema: fk.referenced_table_schema,\n })),\n indexes.rows\n .filter((r) => r.column_name != null)\n .map((r) => ({\n schema: target,\n table: r.table_name,\n indexName: r.index_name,\n unique: r.non_unique === 0,\n columnName: r.column_name!,\n ordinal: Number(r.seq),\n })),\n rowCounts.rows.map((r) => ({ schema: target, table: r.table_name, count: Number(r.n ?? 0) })),\n );\n}\n","import type { DbExecutor } from '../index';\nimport { buildSchema } from './build-schema';\nimport type { SchemaData } from './schema';\n\n/** Postgres catalog reader (information_schema + pg_catalog). Pass an executor connected to a\n * Postgres database (`createPostgresExecutor`). */\nexport async function introspectPostgres(\n executor: DbExecutor,\n schema?: string,\n): Promise<SchemaData> {\n const target = schema || 'public';\n\n const tables = await executor.run<{ table_name: string; table_type: string }>({\n sql: `SELECT table_name, table_type\n FROM information_schema.tables\n WHERE table_schema = $1 AND table_type IN ('BASE TABLE', 'VIEW')\n ORDER BY table_type, table_name`,\n params: [target],\n });\n\n const columns = await executor.run<{\n table_name: string;\n column_name: string;\n data_type: string;\n is_nullable: string;\n column_default: string | null;\n }>({\n sql: `SELECT table_name, column_name, data_type, is_nullable, column_default\n FROM information_schema.columns\n WHERE table_schema = $1\n ORDER BY table_name, ordinal_position`,\n params: [target],\n });\n\n const pks = await executor.run<{ table_name: string; column_name: string }>({\n sql: `SELECT kcu.table_name, kcu.column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = $1`,\n params: [target],\n });\n\n const fks = await executor.run<{\n table_name: string;\n column_name: string;\n referenced_table_schema: string;\n referenced_table_name: string;\n referenced_column_name: string;\n }>({\n sql: `SELECT kcu.table_name, kcu.column_name,\n ccu.table_schema AS referenced_table_schema,\n ccu.table_name AS referenced_table_name,\n ccu.column_name AS referenced_column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n JOIN information_schema.constraint_column_usage ccu\n ON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema\n WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = $1`,\n params: [target],\n });\n\n // Secondary indexes: columns unnested in key order (WITH ORDINALITY), `attnum > 0` drops\n // expression-index entries. Plus an approximate row count from planner stats (reltuples).\n const indexes = await executor.run<{\n table_name: string;\n index_name: string;\n is_unique: boolean;\n column_name: string;\n ordinal: number;\n }>({\n sql: `SELECT t.relname AS table_name, i.relname AS index_name, ix.indisunique AS is_unique,\n a.attname AS column_name, k.ord AS ordinal\n FROM pg_index ix\n JOIN pg_class i ON i.oid = ix.indexrelid\n JOIN pg_class t ON t.oid = ix.indrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n JOIN LATERAL unnest(string_to_array(ix.indkey::text, ' ')::int[]) WITH ORDINALITY AS k(attnum, ord)\n ON true\n JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum\n WHERE n.nspname = $1 AND t.relkind = 'r' AND k.attnum > 0\n ORDER BY table_name, index_name, ordinal`,\n params: [target],\n });\n\n const rowCounts = await executor.run<{ table_name: string; n: string }>({\n sql: `SELECT c.relname AS table_name, c.reltuples::bigint AS n\n FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE n.nspname = $1 AND c.relkind = 'r'`,\n params: [target],\n });\n\n const pkSet = new Set(pks.rows.map((p) => `${p.table_name}.${p.column_name}`));\n\n return buildSchema(\n tables.rows.map((t) => ({\n schema: target,\n name: t.table_name,\n isView: t.table_type === 'VIEW',\n })),\n columns.rows.map((c) => ({\n schema: target,\n table: c.table_name,\n name: c.column_name,\n dataType: c.data_type,\n nullable: c.is_nullable === 'YES',\n isPrimaryKey: pkSet.has(`${c.table_name}.${c.column_name}`),\n defaultValue: c.column_default ?? undefined,\n })),\n fks.rows.map((fk) => ({\n schema: target,\n table: fk.table_name,\n columnName: fk.column_name,\n referencedTable: fk.referenced_table_name,\n referencedColumn: fk.referenced_column_name,\n referencedSchema: fk.referenced_table_schema,\n })),\n indexes.rows.map((r) => ({\n schema: target,\n table: r.table_name,\n indexName: r.index_name,\n unique: r.is_unique,\n columnName: r.column_name,\n ordinal: Number(r.ordinal),\n })),\n rowCounts.rows\n .map((r) => ({ schema: target, table: r.table_name, count: Number(r.n) }))\n .filter((r) => r.count >= 0),\n );\n}\n","import type { DbExecutor } from '../index';\nimport { buildSchema, type IndexColumnRow } from './build-schema';\nimport type { SchemaColumn, SchemaData, SchemaForeignKey } from './schema';\n\n/** SQLite catalog reader (sqlite_master + pragma table-valued functions). Also serves libsql/turso —\n * they are all SQLite engines with the same catalog. Pass an executor from `createSqliteExecutor`. */\nexport async function introspectSqlite(executor: DbExecutor): Promise<SchemaData> {\n const tables = await executor.run<{ name: string; type: string }>({\n sql: `SELECT name, type FROM sqlite_master\n WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%'\n ORDER BY type, name`,\n });\n\n const columns: (SchemaColumn & { schema: string; table: string })[] = [];\n const fks: (SchemaForeignKey & { schema: string; table: string })[] = [];\n const indexColumns: IndexColumnRow[] = [];\n\n for (const t of tables.rows) {\n // Table-valued pragma functions accept the table name as a bound parameter, so no identifier\n // interpolation is needed.\n const cols = await executor.run<{\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n }>({\n sql: 'SELECT name, type, \"notnull\", dflt_value, pk FROM pragma_table_info(?)',\n params: [t.name],\n });\n\n for (const c of cols.rows) {\n columns.push({\n schema: 'main',\n table: t.name,\n name: c.name,\n dataType: c.type || 'TEXT',\n nullable: c.notnull === 0 && c.pk === 0,\n isPrimaryKey: c.pk > 0,\n defaultValue: c.dflt_value ?? undefined,\n });\n }\n\n const fkRows = await executor.run<{ from: string; table: string; to: string }>({\n sql: 'SELECT \"from\", \"table\", \"to\" FROM pragma_foreign_key_list(?)',\n params: [t.name],\n });\n for (const fk of fkRows.rows) {\n fks.push({\n schema: 'main',\n table: t.name,\n columnName: fk.from,\n referencedTable: fk.table,\n referencedColumn: fk.to,\n });\n }\n\n // Indexes: list them, then read each index's columns (pragma_index_info, ordered by seqno).\n const idxList = await executor.run<{ name: string; unique: number }>({\n sql: 'SELECT name, \"unique\" FROM pragma_index_list(?)',\n params: [t.name],\n });\n for (const idx of idxList.rows) {\n const idxCols = await executor.run<{ seqno: number; name: string | null }>({\n sql: 'SELECT seqno, name FROM pragma_index_info(?)',\n params: [idx.name],\n });\n for (const ic of idxCols.rows) {\n if (ic.name == null) continue; // expression-index columns have no name\n indexColumns.push({\n schema: 'main',\n table: t.name,\n indexName: idx.name,\n unique: idx.unique === 1,\n columnName: ic.name,\n ordinal: ic.seqno,\n });\n }\n }\n }\n\n return buildSchema(\n tables.rows.map((t) => ({ schema: 'main', name: t.name, isView: t.type === 'view' })),\n columns,\n fks,\n indexColumns,\n );\n}\n","/**\n * Schema introspection: read a database's catalog (tables, views, columns, primary keys, foreign\n * keys, indexes, approximate row counts) into a normalized {@link SchemaData}.\n *\n * This entry point pulls in NO driver — it runs entirely through a {@link DbExecutor} you supply, so\n * it reuses that executor's connection, credentials, and placeholder convention rather than opening\n * its own. Build the executor from the matching dialect subpath and pass it in.\n */\nimport type { DbExecutor } from '../index';\nimport { introspectMssql } from './mssql';\nimport { introspectMysql } from './mysql';\nimport { introspectPostgres } from './postgres';\nimport type { SchemaData } from './schema';\nimport { introspectSqlite } from './sqlite';\n\nexport type {\n SchemaColumn,\n SchemaForeignKey,\n SchemaIndex,\n SchemaTable,\n SchemaData,\n} from './schema';\nexport { buildSchema, type RawTable, type IndexColumnRow } from './build-schema';\nexport { introspectPostgres } from './postgres';\nexport { introspectMysql } from './mysql';\nexport { introspectMssql } from './mssql';\nexport { introspectSqlite } from './sqlite';\n\n/** The dialects whose catalog this package can read. libsql and turso use `'sqlite'`. */\nexport type IntrospectDialect = 'postgres' | 'mysql' | 'mssql' | 'sqlite';\n\n/**\n * Read a database's catalog as a {@link SchemaData}, through a supplied {@link DbExecutor}. Choose\n * the `dialect` matching the executor you built — the reader runs that dialect's catalog queries.\n * `schema` scopes the namespace, defaulting per dialect (postgres `public`, mysql the current\n * database, mssql `dbo`, sqlite `main` — sqlite ignores it).\n */\nexport function introspectSchema(\n executor: DbExecutor,\n dialect: IntrospectDialect,\n schema?: string,\n): Promise<SchemaData> {\n switch (dialect) {\n case 'postgres':\n return introspectPostgres(executor, schema);\n case 'mysql':\n return introspectMysql(executor, schema);\n case 'mssql':\n return introspectMssql(executor, schema);\n case 'sqlite':\n return introspectSqlite(executor);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { DbExecutor } from "../index.cjs";
2
+ //#region src/introspection/schema.d.ts
3
+ /** A column as reported by a database's catalog. */
4
+ type SchemaColumn = {
5
+ name: string;
6
+ dataType: string;
7
+ nullable: boolean;
8
+ isPrimaryKey: boolean;
9
+ defaultValue?: string;
10
+ };
11
+ /** A foreign key from one column to another table's column. */
12
+ type SchemaForeignKey = {
13
+ columnName: string;
14
+ referencedTable: string;
15
+ referencedColumn: string;
16
+ referencedSchema?: string;
17
+ };
18
+ /** A secondary index (or unique constraint) on a table. `columns` are in index order — only the
19
+ * LEADING column can drive an index seek or an ordered scan. `unique` also tells a FK target apart
20
+ * as 1:1 vs 1:N (join fan-out). */
21
+ type SchemaIndex = {
22
+ name: string;
23
+ columns: string[];
24
+ unique: boolean;
25
+ };
26
+ /** A table or view with its columns and outgoing foreign keys. */
27
+ type SchemaTable = {
28
+ schema: string;
29
+ name: string;
30
+ type: 'table' | 'view';
31
+ columns: SchemaColumn[];
32
+ foreignKeys: SchemaForeignKey[];
33
+ /** Secondary indexes + unique constraints (the PK included where the catalog reports it). Empty
34
+ * when none, or for a view. */
35
+ indexes: SchemaIndex[];
36
+ /** Approximate row count from catalog statistics — a coarse cost-tier signal, never exact (may be
37
+ * stale or 0). Absent when the dialect can't cheaply estimate it (sqlite). */
38
+ approxRowCount?: number;
39
+ };
40
+ /** The introspected shape of a database. */
41
+ type SchemaData = {
42
+ tables: SchemaTable[];
43
+ };
44
+ //#endregion
45
+ //#region src/introspection/build-schema.d.ts
46
+ /** A table row as read from the catalog, before assembly. */
47
+ type RawTable = {
48
+ schema: string;
49
+ name: string;
50
+ isView: boolean;
51
+ };
52
+ /** One (index, column) pair as read from the catalog, before grouping into per-table indexes. */
53
+ type IndexColumnRow = {
54
+ schema: string;
55
+ table: string;
56
+ indexName: string;
57
+ unique: boolean;
58
+ columnName: string;
59
+ ordinal: number;
60
+ };
61
+ /** Stitch flat catalog rows into per-table column/FK/index lists. Shared by every dialect reader. */
62
+ declare function buildSchema(tables: RawTable[], columns: (SchemaColumn & {
63
+ schema: string;
64
+ table: string;
65
+ })[], fks: (SchemaForeignKey & {
66
+ schema: string;
67
+ table: string;
68
+ })[], indexColumns?: IndexColumnRow[], rowCounts?: {
69
+ schema: string;
70
+ table: string;
71
+ count: number;
72
+ }[]): SchemaData;
73
+ //#endregion
74
+ //#region src/introspection/postgres.d.ts
75
+ /** Postgres catalog reader (information_schema + pg_catalog). Pass an executor connected to a
76
+ * Postgres database (`createPostgresExecutor`). */
77
+ declare function introspectPostgres(executor: DbExecutor, schema?: string): Promise<SchemaData>;
78
+ //#endregion
79
+ //#region src/introspection/mysql.d.ts
80
+ /** MySQL / MariaDB catalog reader (information_schema). Pass an executor connected to a MySQL
81
+ * database (`createMysqlExecutor`). */
82
+ declare function introspectMysql(executor: DbExecutor, schema?: string): Promise<SchemaData>;
83
+ //#endregion
84
+ //#region src/introspection/mssql.d.ts
85
+ /** SQL Server catalog reader (INFORMATION_SCHEMA + sys catalog). Pass an executor connected to a
86
+ * SQL Server database (`createMssqlExecutor`). */
87
+ declare function introspectMssql(executor: DbExecutor, schema?: string): Promise<SchemaData>;
88
+ //#endregion
89
+ //#region src/introspection/sqlite.d.ts
90
+ /** SQLite catalog reader (sqlite_master + pragma table-valued functions). Also serves libsql/turso —
91
+ * they are all SQLite engines with the same catalog. Pass an executor from `createSqliteExecutor`. */
92
+ declare function introspectSqlite(executor: DbExecutor): Promise<SchemaData>;
93
+ //#endregion
94
+ //#region src/introspection/index.d.ts
95
+ /** The dialects whose catalog this package can read. libsql and turso use `'sqlite'`. */
96
+ type IntrospectDialect = 'postgres' | 'mysql' | 'mssql' | 'sqlite';
97
+ /**
98
+ * Read a database's catalog as a {@link SchemaData}, through a supplied {@link DbExecutor}. Choose
99
+ * the `dialect` matching the executor you built — the reader runs that dialect's catalog queries.
100
+ * `schema` scopes the namespace, defaulting per dialect (postgres `public`, mysql the current
101
+ * database, mssql `dbo`, sqlite `main` — sqlite ignores it).
102
+ */
103
+ declare function introspectSchema(executor: DbExecutor, dialect: IntrospectDialect, schema?: string): Promise<SchemaData>;
104
+ //#endregion
105
+ export { type IndexColumnRow, IntrospectDialect, type RawTable, type SchemaColumn, type SchemaData, type SchemaForeignKey, type SchemaIndex, type SchemaTable, buildSchema, introspectMssql, introspectMysql, introspectPostgres, introspectSchema, introspectSqlite };
106
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1,106 @@
1
+ import { DbExecutor } from "../index.mjs";
2
+ //#region src/introspection/schema.d.ts
3
+ /** A column as reported by a database's catalog. */
4
+ type SchemaColumn = {
5
+ name: string;
6
+ dataType: string;
7
+ nullable: boolean;
8
+ isPrimaryKey: boolean;
9
+ defaultValue?: string;
10
+ };
11
+ /** A foreign key from one column to another table's column. */
12
+ type SchemaForeignKey = {
13
+ columnName: string;
14
+ referencedTable: string;
15
+ referencedColumn: string;
16
+ referencedSchema?: string;
17
+ };
18
+ /** A secondary index (or unique constraint) on a table. `columns` are in index order — only the
19
+ * LEADING column can drive an index seek or an ordered scan. `unique` also tells a FK target apart
20
+ * as 1:1 vs 1:N (join fan-out). */
21
+ type SchemaIndex = {
22
+ name: string;
23
+ columns: string[];
24
+ unique: boolean;
25
+ };
26
+ /** A table or view with its columns and outgoing foreign keys. */
27
+ type SchemaTable = {
28
+ schema: string;
29
+ name: string;
30
+ type: 'table' | 'view';
31
+ columns: SchemaColumn[];
32
+ foreignKeys: SchemaForeignKey[];
33
+ /** Secondary indexes + unique constraints (the PK included where the catalog reports it). Empty
34
+ * when none, or for a view. */
35
+ indexes: SchemaIndex[];
36
+ /** Approximate row count from catalog statistics — a coarse cost-tier signal, never exact (may be
37
+ * stale or 0). Absent when the dialect can't cheaply estimate it (sqlite). */
38
+ approxRowCount?: number;
39
+ };
40
+ /** The introspected shape of a database. */
41
+ type SchemaData = {
42
+ tables: SchemaTable[];
43
+ };
44
+ //#endregion
45
+ //#region src/introspection/build-schema.d.ts
46
+ /** A table row as read from the catalog, before assembly. */
47
+ type RawTable = {
48
+ schema: string;
49
+ name: string;
50
+ isView: boolean;
51
+ };
52
+ /** One (index, column) pair as read from the catalog, before grouping into per-table indexes. */
53
+ type IndexColumnRow = {
54
+ schema: string;
55
+ table: string;
56
+ indexName: string;
57
+ unique: boolean;
58
+ columnName: string;
59
+ ordinal: number;
60
+ };
61
+ /** Stitch flat catalog rows into per-table column/FK/index lists. Shared by every dialect reader. */
62
+ declare function buildSchema(tables: RawTable[], columns: (SchemaColumn & {
63
+ schema: string;
64
+ table: string;
65
+ })[], fks: (SchemaForeignKey & {
66
+ schema: string;
67
+ table: string;
68
+ })[], indexColumns?: IndexColumnRow[], rowCounts?: {
69
+ schema: string;
70
+ table: string;
71
+ count: number;
72
+ }[]): SchemaData;
73
+ //#endregion
74
+ //#region src/introspection/postgres.d.ts
75
+ /** Postgres catalog reader (information_schema + pg_catalog). Pass an executor connected to a
76
+ * Postgres database (`createPostgresExecutor`). */
77
+ declare function introspectPostgres(executor: DbExecutor, schema?: string): Promise<SchemaData>;
78
+ //#endregion
79
+ //#region src/introspection/mysql.d.ts
80
+ /** MySQL / MariaDB catalog reader (information_schema). Pass an executor connected to a MySQL
81
+ * database (`createMysqlExecutor`). */
82
+ declare function introspectMysql(executor: DbExecutor, schema?: string): Promise<SchemaData>;
83
+ //#endregion
84
+ //#region src/introspection/mssql.d.ts
85
+ /** SQL Server catalog reader (INFORMATION_SCHEMA + sys catalog). Pass an executor connected to a
86
+ * SQL Server database (`createMssqlExecutor`). */
87
+ declare function introspectMssql(executor: DbExecutor, schema?: string): Promise<SchemaData>;
88
+ //#endregion
89
+ //#region src/introspection/sqlite.d.ts
90
+ /** SQLite catalog reader (sqlite_master + pragma table-valued functions). Also serves libsql/turso —
91
+ * they are all SQLite engines with the same catalog. Pass an executor from `createSqliteExecutor`. */
92
+ declare function introspectSqlite(executor: DbExecutor): Promise<SchemaData>;
93
+ //#endregion
94
+ //#region src/introspection/index.d.ts
95
+ /** The dialects whose catalog this package can read. libsql and turso use `'sqlite'`. */
96
+ type IntrospectDialect = 'postgres' | 'mysql' | 'mssql' | 'sqlite';
97
+ /**
98
+ * Read a database's catalog as a {@link SchemaData}, through a supplied {@link DbExecutor}. Choose
99
+ * the `dialect` matching the executor you built — the reader runs that dialect's catalog queries.
100
+ * `schema` scopes the namespace, defaulting per dialect (postgres `public`, mysql the current
101
+ * database, mssql `dbo`, sqlite `main` — sqlite ignores it).
102
+ */
103
+ declare function introspectSchema(executor: DbExecutor, dialect: IntrospectDialect, schema?: string): Promise<SchemaData>;
104
+ //#endregion
105
+ export { type IndexColumnRow, IntrospectDialect, type RawTable, type SchemaColumn, type SchemaData, type SchemaForeignKey, type SchemaIndex, type SchemaTable, buildSchema, introspectMssql, introspectMysql, introspectPostgres, introspectSchema, introspectSqlite };
106
+ //# sourceMappingURL=index.d.mts.map