You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Performance fix: ColumnDetailPanel previously fetched ALL columns of a table (up to 500) to find the one the user clicked, then discarded the rest. Now it fetches only the target column by its FQN.
New API endpoint: GET /v1/columns/name/{fqn}?entityType=table&fields=tags,customMetrics,extension,profile — symmetric with the existing PUT /v1/columns/name/{fqn} update endpoint.
Backend: Added getColumnByFQN to ColumnRepository (reuses existing findColumnInHierarchy, extractParentFQN). Added enrichSingleColumnFields to TableRepository (reuses existing private field-enrichment logic for tags, customMetrics, extension, profile). Supports both table and dashboardDataModel entity types.
Frontend: Replaced getTableColumnsByFQN(tableFqn, { limit: PAGE_SIZE_LARGE }) + .find() with getColumnByFQN(columnFqn) in ColumnDetailPanel.fetchColumnDetails. Removed the onColumnsUpdate side-effect (was populated as a bonus from the bulk fetch — callers can fetch independently if needed).
Type of change:
Bug fix
Improvement
New feature
Breaking change (fix or feature that would cause existing functionality to not work as expected)
My PR title is Fixes <issue-number>: <short explanation>
My PR is linked to a GitHub issue via Fixes #<issue-number> above.
I have commented on my code, particularly in hard-to-understand areas.
For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
For UI changes: I attached a screen recording and/or screenshots above.
I have added tests (unit / integration / Playwright as applicable) and listed them above.
Summary by Gitar
Performance Optimization:
Refactored TableRepository to use batch fetching for customMetrics and columnExtensions in getTableColumnsInternal and searchTableColumnsInternal.
Eliminated N+1 query patterns by pre-fetching extensions and metrics for all columns instead of fetching per-column.
Backend Improvements:
Added batchFetchCustomMetricsByColumn and logic to map extension data via COLUMN_EXTENSION_JSON_SCHEMA for efficient batch processing.
Optimized populateEntityFieldTags invocation to avoid redundant execution when tags field is absent.
Playwright E2E tests:
Updated Table.spec.ts, SchemaTable.spec.ts, and Entity.spec.ts to expect the new GET /api/v1/columns/name/ endpoint instead of the old table-column bulk fetch.
Cleaned up redundant columnsProfileResponsePromise references in entity.ts util.
Error: Wait for incident pw_test_case_73b0badf to appear in Incident Manager
�[2mexpect(�[22m�[31mreceived�[39m�[2m).�[22mtoBe�[2m(�[22m�[32mexpected�[39m�[2m) // Object.is equality�[22m
Expected: �[32mtrue�[39m
Received: �[31mfalse�[39m
Call Log:
- Timeout 60000ms exceeded while waiting on the predicate
🟡 15 flaky test(s) (passed on retry)
Pages/Bots.spec.ts › Bots Page should work properly (shard 1, 1 retry)
Features/ActivityAPI.spec.ts › creates an activity event when tags are added (shard 2, 1 retry)
Features/Glossary/GlossaryWorkflow.spec.ts › should display correct status badge color and icon (shard 2, 1 retry)
Features/KnowledgeCenterList.spec.ts › Knowledge Center List - Test infinite scroll/pagination (shard 2, 1 retry)
Features/KnowledgeCenterTextEditor.spec.ts › Rich Text Editor - Text Formatting (shard 2, 1 retry)
Features/KnowledgeCenterTextEditor.spec.ts › Rich Text Editor - Text Formatting (shard 2, 1 retry)
Features/KnowledgeCenterTextEditor.spec.ts › Rich Text Editor - Text Formatting (shard 2, 1 retry)
Features/RTL.spec.ts › Verify Following widget functionality (shard 3, 1 retry)
Flow/PersonaFlow.spec.ts › Set default persona for team should work properly (shard 3, 1 retry)
Pages/CustomProperties.spec.ts › Should clear search and show all properties for apiCollection in right panel (shard 4, 1 retry)
Optimizes ColumnDetailPanel performance by introducing a targeted GET /columns/name/{fqn} endpoint, replacing inefficient bulk table column fetches. Resolved previous issues regarding field parameter matching, missing entity types, and removal of dead code.
📄 openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java:2932-2941
In enrichSingleColumnFields, field checks use String.contains() on the raw comma-separated string (e.g., fieldsParam.contains("tags")). This can produce false positives: a field value like "customTags" would incorrectly trigger the "tags" branch. The rest of the codebase uses a parsed Fields object (backed by a Set) for exact matching. This should be split into a Set<String> first.
✅ Bug: Frontend getColumnByFQN does not pass entityType from caller
📄 openmetadata-ui/src/main/resources/ui/src/components/Database/ColumnDetailPanel/ColumnDetailPanel.component.tsx:269-271📄 openmetadata-ui/src/main/resources/ui/src/rest/tableAPI.ts:371
In ColumnDetailPanel.component.tsx, the call getColumnByFQN(targetFqn, { fields: '...' }) does not pass entityType. The getColumnByFQN helper in tableAPI.ts defaults entityType to 'table' via the spread { entityType: 'table', ...params }. This works for table columns but will silently fail for dashboardDataModel columns opened in the panel, since the component already has an entityType prop available but doesn't forward it.
✅ Quality: Dead code: columnsProfileResponsePromise is always null
📄 openmetadata-ui/src/main/resources/ui/playwright/utils/entity.ts:1076📄 openmetadata-ui/src/main/resources/ui/playwright/utils/entity.ts:1107-1109
At line 1076, columnsProfileResponsePromise is unconditionally set to null, making the conditional check at line 1107-1109 (if (columnsProfileResponsePromise) { await columnsProfileResponsePromise; }) dead code. The variable declaration, assignment, and the if-block should all be removed for clarity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
safe to testAdd this label to run secure Github workflows on PRs
1 participant
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Describe your changes:
Fixes 4082
Summary
ColumnDetailPanelpreviously fetched ALL columns of a table (up to 500) to find the one the user clicked, then discarded the rest. Now it fetches only the target column by its FQN.GET /v1/columns/name/{fqn}?entityType=table&fields=tags,customMetrics,extension,profile— symmetric with the existingPUT /v1/columns/name/{fqn}update endpoint.getColumnByFQNtoColumnRepository(reuses existingfindColumnInHierarchy,extractParentFQN). AddedenrichSingleColumnFieldstoTableRepository(reuses existing private field-enrichment logic for tags, customMetrics, extension, profile). Supports bothtableanddashboardDataModelentity types.getTableColumnsByFQN(tableFqn, { limit: PAGE_SIZE_LARGE })+.find()withgetColumnByFQN(columnFqn)inColumnDetailPanel.fetchColumnDetails. Removed theonColumnsUpdateside-effect (was populated as a bonus from the bulk fetch — callers can fetch independently if needed).Type of change:
High-level design:
N/A — small change.
Tests:
Use cases covered
Unit tests
Backend integration tests
Ingestion integration tests
Playwright (UI) tests
Manual testing performed
UI screen recording / screenshots:
Not applicable.
Checklist:
Fixes <issue-number>: <short explanation>Fixes #<issue-number>above.Summary by Gitar
TableRepositoryto use batch fetching forcustomMetricsandcolumnExtensionsingetTableColumnsInternalandsearchTableColumnsInternal.batchFetchCustomMetricsByColumnand logic to mapextensiondata viaCOLUMN_EXTENSION_JSON_SCHEMAfor efficient batch processing.populateEntityFieldTagsinvocation to avoid redundant execution whentagsfield is absent.Table.spec.ts,SchemaTable.spec.ts, andEntity.spec.tsto expect the newGET /api/v1/columns/name/endpoint instead of the old table-column bulk fetch.columnsProfileResponsePromisereferences inentity.tsutil.This will update automatically on new commits.