From 2aefebd1d916eed64b5088da075b31ab98cbef89 Mon Sep 17 00:00:00 2001 From: Andrey Avtomonov Date: Wed, 20 May 2026 14:08:22 +0200 Subject: [PATCH] Deduplicate enabled tables filtering --- .../live-database/daemon-introspection.ts | 21 +++---------------- packages/context/src/scan/enabled-tables.ts | 17 +++++++++++++++ packages/context/src/scan/local-scan.ts | 19 +++-------------- 3 files changed, 23 insertions(+), 34 deletions(-) create mode 100644 packages/context/src/scan/enabled-tables.ts diff --git a/packages/context/src/ingest/adapters/live-database/daemon-introspection.ts b/packages/context/src/ingest/adapters/live-database/daemon-introspection.ts index ee33a980..d20b0adc 100644 --- a/packages/context/src/ingest/adapters/live-database/daemon-introspection.ts +++ b/packages/context/src/ingest/adapters/live-database/daemon-introspection.ts @@ -3,6 +3,7 @@ import { request as httpRequest } from 'node:http'; import { request as httpsRequest } from 'node:https'; import { URL } from 'node:url'; import type { KtxProjectConnectionConfig } from '../../../project/config.js'; +import { filterSnapshotTables, resolveEnabledTables } from '../../../scan/enabled-tables.js'; import type { KtxSchemaColumn, KtxSchemaForeignKey, KtxSchemaSnapshot, KtxSchemaTable } from '../../../scan/types.js'; import { inferKtxDimensionType, normalizeKtxNativeType } from '../../../scan/type-normalization.js'; import type { LiveDatabaseIntrospectionPort } from './types.js'; @@ -248,24 +249,8 @@ export function createDaemonLiveDatabaseIntrospection( extractedAt: now().toISOString(), schemas, }); - return applyEnabledTablesFilter(snapshot, connection); + const enabledTables = resolveEnabledTables(connection); + return enabledTables ? filterSnapshotTables(snapshot, enabledTables) : snapshot; }, }; } - -function applyEnabledTablesFilter( - snapshot: KtxSchemaSnapshot, - connection: KtxProjectConnectionConfig, -): KtxSchemaSnapshot { - const allowlist = (connection as { enabled_tables?: unknown }).enabled_tables; - if (!Array.isArray(allowlist) || allowlist.length === 0) return snapshot; - const allowed = new Set(allowlist.filter((value): value is string => typeof value === 'string')); - if (allowed.size === 0) return snapshot; - return { - ...snapshot, - tables: snapshot.tables.filter((table) => { - const qualified = table.db ? `${table.db}.${table.name}` : table.name; - return allowed.has(qualified); - }), - }; -} diff --git a/packages/context/src/scan/enabled-tables.ts b/packages/context/src/scan/enabled-tables.ts new file mode 100644 index 00000000..f522d44f --- /dev/null +++ b/packages/context/src/scan/enabled-tables.ts @@ -0,0 +1,17 @@ +import type { KtxSchemaSnapshot } from './types.js'; + +export function resolveEnabledTables(connection: Record | undefined): Set | null { + const raw = connection?.enabled_tables; + if (!Array.isArray(raw) || raw.length === 0) return null; + return new Set(raw.filter((v): v is string => typeof v === 'string')); +} + +export function filterSnapshotTables(snapshot: KtxSchemaSnapshot, enabledTables: Set): KtxSchemaSnapshot { + return { + ...snapshot, + tables: snapshot.tables.filter((table) => { + const key = table.db ? `${table.db}.${table.name}` : table.name; + return enabledTables.has(key); + }), + }; +} diff --git a/packages/context/src/scan/local-scan.ts b/packages/context/src/scan/local-scan.ts index f9ac77d3..e878f874 100644 --- a/packages/context/src/scan/local-scan.ts +++ b/packages/context/src/scan/local-scan.ts @@ -15,6 +15,7 @@ import type { KtxProjectLlmConfig, KtxScanEnrichmentConfig, KtxScanRelationshipC import type { KtxLocalProject } from '../project/index.js'; import { ktxLocalStateDbPath } from '../project/local-state-db.js'; import { redactKtxScanReport } from './credentials.js'; +import { filterSnapshotTables, resolveEnabledTables } from './enabled-tables.js'; import { completedKtxScanEnrichmentStateSummary } from './enrichment-state.js'; import { failedKtxScanEnrichmentSummary, ktxScanErrorMessage } from './enrichment-summary.js'; import { @@ -320,22 +321,6 @@ async function readScanReport( } } -export function resolveEnabledTables(connection: Record | undefined): Set | null { - const raw = connection?.enabled_tables; - if (!Array.isArray(raw) || raw.length === 0) return null; - return new Set(raw.filter((v): v is string => typeof v === 'string')); -} - -export function filterSnapshotTables(snapshot: KtxSchemaSnapshot, enabledTables: Set): KtxSchemaSnapshot { - return { - ...snapshot, - tables: snapshot.tables.filter((table) => { - const key = table.db ? `${table.db}.${table.name}` : table.name; - return enabledTables.has(key); - }), - }; -} - function createFilteredConnector(connector: KtxScanConnector, enabledTables: Set): KtxScanConnector { return { ...connector, @@ -346,6 +331,8 @@ function createFilteredConnector(connector: KtxScanConnector, enabledTables: Set }; } +export { filterSnapshotTables, resolveEnabledTables } from './enabled-tables.js'; + function withInternalLiveDatabaseAdapter(project: KtxLocalProject): KtxLocalProject { if (project.config.ingest.adapters.includes(LIVE_DATABASE_ADAPTER)) { return project;