diff --git a/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts b/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts
index 47da26851ef..24229268883 100644
--- a/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts
@@ -43,4 +43,5 @@ export enum TabSpecificField {
DATAMODEL = 'dataModel',
CHARTS = 'charts',
TASKS = 'tasks',
+ TABLE_QUERIES = 'tableQueries',
}
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx
index a646938c057..ce26b4f7229 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx
@@ -78,6 +78,8 @@ const DatasetDetailsPage: FunctionComponent = () => {
const [isLineageLoading, setIsLineageLoading] = useState
(false);
const [isSampleDataLoading, setIsSampleDataLoading] =
useState(false);
+ const [isTableQueriesLoading, setIsTableQueriesLoading] =
+ useState(false);
const USERId = getCurrentUserId();
const [tableId, setTableId] = useState('');
const [tier, setTier] = useState();
@@ -123,6 +125,7 @@ const DatasetDetailsPage: FunctionComponent = () => {
);
const [deleted, setDeleted] = useState(false);
const [isError, setIsError] = useState(false);
+ const [tableQueries, setTableQueries] = useState([]);
const activeTabHandler = (tabValue: number) => {
const currentTabIndex = tabValue - 1;
@@ -280,6 +283,28 @@ const DatasetDetailsPage: FunctionComponent = () => {
break;
}
+ case TabSpecificField.TABLE_QUERIES: {
+ if ((tableQueries?.length ?? 0) > 0) {
+ break;
+ } else {
+ setIsTableQueriesLoading(true);
+ getTableDetailsByFQN(tableFQN, tabField)
+ .then((res: AxiosResponse) => {
+ const { tableQueries } = res.data;
+ setTableQueries(tableQueries);
+ })
+ .catch(() =>
+ showToast({
+ variant: 'error',
+ body: 'Error while getting table queries',
+ })
+ )
+ .finally(() => setIsTableQueriesLoading(false));
+
+ break;
+ }
+ }
+
default:
break;
}
@@ -493,6 +518,7 @@ const DatasetDetailsPage: FunctionComponent = () => {
followers={followers}
isLineageLoading={isLineageLoading}
isNodeLoading={isNodeLoading}
+ isQueriesLoading={isTableQueriesLoading}
isSampleDataLoading={isSampleDataLoading}
joins={joins}
lineageLeafNodes={leafNodes}
@@ -505,6 +531,7 @@ const DatasetDetailsPage: FunctionComponent = () => {
slashedTableName={slashedTableName}
tableDetails={tableDetails}
tableProfile={tableProfile}
+ tableQueries={tableQueries}
tableTags={tableTags}
tier={tier as TagLabel}
unfollowTableHandler={unfollowTable}
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx
index c7416911bc6..1fca03d8ac2 100644
--- a/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx
@@ -193,6 +193,7 @@ const TourPage = () => {
tableProfile={
mockDatasetData.tableProfile as unknown as Table['tableProfile']
}
+ tableQueries={[]}
tableTags={mockDatasetData.tableTags}
tier={'' as unknown as TagLabel}
unfollowTableHandler={handleCountChange}
diff --git a/openmetadata-ui/src/main/resources/ui/src/styles/x-master.css b/openmetadata-ui/src/main/resources/ui/src/styles/x-master.css
index a6ef62a3d91..a58f38be269 100644
--- a/openmetadata-ui/src/main/resources/ui/src/styles/x-master.css
+++ b/openmetadata-ui/src/main/resources/ui/src/styles/x-master.css
@@ -887,3 +887,6 @@ body .profiler-graph .recharts-active-dot circle {
);
pointer-events: none; /* so the text is still selectable */
}
+.table-query-editor > .CodeMirror {
+ height: auto !important;
+}
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DatasetDetailsUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/DatasetDetailsUtils.ts
index 46b7da9324d..b2dfce176c7 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/DatasetDetailsUtils.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/DatasetDetailsUtils.ts
@@ -27,6 +27,11 @@ export const datasetTableTabs = [
path: 'sample_data',
field: TabSpecificField.SAMPLE_DATA,
},
+ {
+ name: 'Queries',
+ path: 'table_queries',
+ field: TabSpecificField.TABLE_QUERIES,
+ },
{
name: 'Profiler',
path: 'profiler',
@@ -53,27 +58,31 @@ export const getCurrentDatasetTab = (tab: string) => {
currentTab = 2;
break;
-
- case 'profiler':
+ case 'table_queries':
currentTab = 3;
break;
- case 'lineage':
+ case 'profiler':
currentTab = 4;
break;
- case 'dbt':
+ case 'lineage':
currentTab = 5;
break;
- case 'manage':
+ case 'dbt':
currentTab = 6;
break;
+ case 'manage':
+ currentTab = 7;
+
+ break;
+
case 'schema':
default:
currentTab = 1;
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx
index 305eeaefae9..5f6dca3abc0 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx
@@ -28,7 +28,6 @@ import IconConfigColor from '../assets/svg/config-color.svg';
import IconConfig from '../assets/svg/config.svg';
import IconControlMinus from '../assets/svg/control-minus.svg';
import IconControlPlus from '../assets/svg/control-plus.svg';
-import IconCopy from '../assets/svg/copy.svg';
import IconDashboardGrey from '../assets/svg/dashboard-grey.svg';
import IconDashboard from '../assets/svg/dashboard.svg';
import IconAsstest from '../assets/svg/data-assets.svg';
@@ -81,10 +80,13 @@ import IconUpArrow from '../assets/svg/ic-up-arrow.svg';
import IconVEllipsis from '../assets/svg/ic-v-ellipsis.svg';
import IconWorkflows from '../assets/svg/ic-workflows.svg';
import IconChevronDown from '../assets/svg/icon-chevron-down.svg';
+import IconCopy from '../assets/svg/icon-copy.svg';
+import IconDown from '../assets/svg/icon-down.svg';
import IconKey from '../assets/svg/icon-key.svg';
import IconNotNull from '../assets/svg/icon-notnull.svg';
import IconTour from '../assets/svg/icon-tour.svg';
import IconUnique from '../assets/svg/icon-unique.svg';
+import IconUp from '../assets/svg/icon-up.svg';
import IconInfo from '../assets/svg/info.svg';
import IconIngestion from '../assets/svg/ingestion.svg';
import IconLineageColor from '../assets/svg/lineage-color.svg';
@@ -239,6 +241,8 @@ export const Icons = {
ANNOUNCEMENT: 'icon-announcement',
ANNOUNCEMENT_WHITE: 'icon-announcement-white',
CHEVRON_DOWN: 'icon-chevron-down',
+ ICON_UP: 'icon-up',
+ ICON_DOWN: 'icon-down',
};
const SVGIcons: FunctionComponent = ({
@@ -690,6 +694,14 @@ const SVGIcons: FunctionComponent = ({
case Icons.CHEVRON_DOWN:
IconComponent = IconChevronDown;
+ break;
+ case Icons.ICON_DOWN:
+ IconComponent = IconDown;
+
+ break;
+ case Icons.ICON_UP:
+ IconComponent = IconUp;
+
break;
default: