From 229c2365d48b464a86ad798454b434eaee570746 Mon Sep 17 00:00:00 2001 From: Narasimhan Kanvar Date: Fri, 25 Apr 2025 18:59:00 -0400 Subject: [PATCH 1/3] Add UI functionality to capture Oracle data source Added Oracle data source functionality in UI to leverage existing Wren Engine code --- wren-ui/public/images/dataSource/oracle.svg | 7 ++ .../src/apollo/client/graphql/__types__.ts | 1 + .../src/apollo/server/adaptors/ibisAdaptor.ts | 2 + wren-ui/src/apollo/server/dataSource.ts | 18 ++++ wren-ui/src/apollo/server/mdl/mdlBuilder.ts | 2 + wren-ui/src/apollo/server/mdl/type.ts | 1 + .../server/repositories/projectRepository.ts | 9 ++ wren-ui/src/apollo/server/schema.ts | 1 + wren-ui/src/apollo/server/types/dataSource.ts | 1 + .../setup/dataSources/OracleProperties.tsx | 97 +++++++++++++++++++ wren-ui/src/components/pages/setup/utils.tsx | 5 + wren-ui/src/utils/dataSourceType.ts | 7 ++ wren-ui/src/utils/enum/dataSources.ts | 1 + 13 files changed, 152 insertions(+) create mode 100644 wren-ui/public/images/dataSource/oracle.svg create mode 100644 wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx diff --git a/wren-ui/public/images/dataSource/oracle.svg b/wren-ui/public/images/dataSource/oracle.svg new file mode 100644 index 0000000000..970a994ddf --- /dev/null +++ b/wren-ui/public/images/dataSource/oracle.svg @@ -0,0 +1,7 @@ + + + + Layer 1 + + + \ No newline at end of file diff --git a/wren-ui/src/apollo/client/graphql/__types__.ts b/wren-ui/src/apollo/client/graphql/__types__.ts index ffd143e0df..ef7edc4397 100644 --- a/wren-ui/src/apollo/client/graphql/__types__.ts +++ b/wren-ui/src/apollo/client/graphql/__types__.ts @@ -285,6 +285,7 @@ export enum DataSourceName { CLICK_HOUSE = 'CLICK_HOUSE', DUCKDB = 'DUCKDB', MSSQL = 'MSSQL', + ORACLE = 'ORACLE', MYSQL = 'MYSQL', POSTGRES = 'POSTGRES', SNOWFLAKE = 'SNOWFLAKE', diff --git a/wren-ui/src/apollo/server/adaptors/ibisAdaptor.ts b/wren-ui/src/apollo/server/adaptors/ibisAdaptor.ts index 75c4f804d5..45ab0f0407 100644 --- a/wren-ui/src/apollo/server/adaptors/ibisAdaptor.ts +++ b/wren-ui/src/apollo/server/adaptors/ibisAdaptor.ts @@ -79,6 +79,7 @@ export enum SupportedDataSource { BIG_QUERY = 'BIG_QUERY', SNOWFLAKE = 'SNOWFLAKE', MYSQL = 'MYSQL', + ORACLE = 'ORACLE', MSSQL = 'MSSQL', CLICK_HOUSE = 'CLICK_HOUSE', TRINO = 'TRINO', @@ -89,6 +90,7 @@ const dataSourceUrlMap: Record = { [SupportedDataSource.BIG_QUERY]: 'bigquery', [SupportedDataSource.SNOWFLAKE]: 'snowflake', [SupportedDataSource.MYSQL]: 'mysql', + [SupportedDataSource.ORACLE]: 'oracle', [SupportedDataSource.MSSQL]: 'mssql', [SupportedDataSource.CLICK_HOUSE]: 'clickhouse', [SupportedDataSource.TRINO]: 'trino', diff --git a/wren-ui/src/apollo/server/dataSource.ts b/wren-ui/src/apollo/server/dataSource.ts index 48d3f8fcaa..1d37b1b4cb 100644 --- a/wren-ui/src/apollo/server/dataSource.ts +++ b/wren-ui/src/apollo/server/dataSource.ts @@ -16,6 +16,7 @@ import { CLICK_HOUSE_CONNECTION_INFO, TRINO_CONNECTION_INFO, SNOWFLAKE_CONNECTION_INFO, + ORACLE_CONNECTION_INFO, } from './repositories'; import { DataSourceName } from './types'; import { getConfig } from './config'; @@ -131,6 +132,23 @@ const dataSource = { HostBasedConnectionInfo >, + // Oracle + [DataSourceName.ORACLE]: { + sensitiveProps: ['password'], + toIbisConnectionInfo(connectionInfo) { + const decryptedConnectionInfo = decryptConnectionInfo( + DataSourceName.ORACLE, + connectionInfo, + ); + const { host, port, database, user, password } = + decryptedConnectionInfo as ORACLE_CONNECTION_INFO; + return { host, port, database, user, password }; + }, + } as IDataSourceConnectionInfo< + ORACLE_CONNECTION_INFO, + HostBasedConnectionInfo + >, + // SQL Server [DataSourceName.MSSQL]: { sensitiveProps: ['password'], diff --git a/wren-ui/src/apollo/server/mdl/mdlBuilder.ts b/wren-ui/src/apollo/server/mdl/mdlBuilder.ts index c2d43718fb..0fab26dc89 100644 --- a/wren-ui/src/apollo/server/mdl/mdlBuilder.ts +++ b/wren-ui/src/apollo/server/mdl/mdlBuilder.ts @@ -500,6 +500,8 @@ export class MDLBuilder implements IMDLBuilder { return WrenEngineDataSourceType.POSTGRES; case DataSourceName.MYSQL: return WrenEngineDataSourceType.MYSQL; + case DataSourceName.ORACLE: + return WrenEngineDataSourceType.ORACLE; case DataSourceName.MSSQL: return WrenEngineDataSourceType.MSSQL; case DataSourceName.CLICK_HOUSE: diff --git a/wren-ui/src/apollo/server/mdl/type.ts b/wren-ui/src/apollo/server/mdl/type.ts index f97966c2d3..3ecde80880 100644 --- a/wren-ui/src/apollo/server/mdl/type.ts +++ b/wren-ui/src/apollo/server/mdl/type.ts @@ -88,6 +88,7 @@ export enum WrenEngineDataSourceType { CANNER = 'CANNER', CLICKHOUSE = 'CLICKHOUSE', MSSQL = 'MSSQL', + ORACLE = 'ORACLE', MYSQL = 'MYSQL', POSTGRES = 'POSTGRES', SNOWFLAKE = 'SNOWFLAKE', diff --git a/wren-ui/src/apollo/server/repositories/projectRepository.ts b/wren-ui/src/apollo/server/repositories/projectRepository.ts index f20d765afd..4de5bb6ef8 100644 --- a/wren-ui/src/apollo/server/repositories/projectRepository.ts +++ b/wren-ui/src/apollo/server/repositories/projectRepository.ts @@ -32,6 +32,14 @@ export interface MYSQL_CONNECTION_INFO { database: string; } +export interface ORACLE_CONNECTION_INFO { + host: string; + port: number; + user: string; + password: string; + database: string; +} + export interface MS_SQL_CONNECTION_INFO { host: string; port: number; @@ -77,6 +85,7 @@ export type WREN_AI_CONNECTION_INFO = | BIG_QUERY_CONNECTION_INFO | POSTGRES_CONNECTION_INFO | MYSQL_CONNECTION_INFO + | ORACLE_CONNECTION_INFO | DUCKDB_CONNECTION_INFO | MS_SQL_CONNECTION_INFO | CLICK_HOUSE_CONNECTION_INFO diff --git a/wren-ui/src/apollo/server/schema.ts b/wren-ui/src/apollo/server/schema.ts index 37a200ffd9..7980962dbe 100644 --- a/wren-ui/src/apollo/server/schema.ts +++ b/wren-ui/src/apollo/server/schema.ts @@ -49,6 +49,7 @@ export const typeDefs = gql` DUCKDB POSTGRES MYSQL + ORACLE MSSQL CLICK_HOUSE TRINO diff --git a/wren-ui/src/apollo/server/types/dataSource.ts b/wren-ui/src/apollo/server/types/dataSource.ts index 66952092c0..bea55b0d08 100644 --- a/wren-ui/src/apollo/server/types/dataSource.ts +++ b/wren-ui/src/apollo/server/types/dataSource.ts @@ -3,6 +3,7 @@ export enum DataSourceName { DUCKDB = 'DUCKDB', POSTGRES = 'POSTGRES', MYSQL = 'MYSQL', + ORACLE = 'ORACLE', MSSQL = 'MSSQL', CLICK_HOUSE = 'CLICK_HOUSE', TRINO = 'TRINO', diff --git a/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx b/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx new file mode 100644 index 0000000000..8aa0806231 --- /dev/null +++ b/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx @@ -0,0 +1,97 @@ +import { Form, Input, Switch } from 'antd'; +import { ERROR_TEXTS } from '@/utils/error'; +import { FORM_MODE } from '@/utils/enum'; +import { hostValidator } from '@/utils/validator'; + +interface Props { + mode?: FORM_MODE; +} + +export default function OracleProperties(props: Props) { + const { mode } = props; + const isEditMode = mode === FORM_MODE.EDIT; + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/wren-ui/src/components/pages/setup/utils.tsx b/wren-ui/src/components/pages/setup/utils.tsx index d5c8eac8e9..407a68082e 100644 --- a/wren-ui/src/components/pages/setup/utils.tsx +++ b/wren-ui/src/components/pages/setup/utils.tsx @@ -77,6 +77,11 @@ export const DATA_SOURCE_OPTIONS = { guide: 'https://docs.getwren.ai/oss/guide/connect/mysql', disabled: false, }, + [DATA_SOURCES.ORACLE]: { + ...getDataSourceConfig(DATA_SOURCES.ORACLE), + guide: 'https://docs.getwren.ai/oss/guide/connect/oracle', + disabled: false, + }, [DATA_SOURCES.MSSQL]: { ...getDataSourceConfig(DATA_SOURCES.MSSQL), guide: 'https://docs.getwren.ai/oss/guide/connect/sqlserver', diff --git a/wren-ui/src/utils/dataSourceType.ts b/wren-ui/src/utils/dataSourceType.ts index fc6eec9893..b755eedbc5 100644 --- a/wren-ui/src/utils/dataSourceType.ts +++ b/wren-ui/src/utils/dataSourceType.ts @@ -2,6 +2,7 @@ import { DATA_SOURCES } from '@/utils/enum'; import BigQueryProperties from '@/components/pages/setup/dataSources/BigQueryProperties'; import DuckDBProperties from '@/components/pages/setup/dataSources/DuckDBProperties'; import MySQLProperties from '@/components/pages/setup/dataSources/MySQLProperties'; +import OracleProperties from '@/components/pages/setup/dataSources/OracleProperties'; import PostgreSQLProperties from '@/components/pages/setup/dataSources/PostgreSQLProperties'; import SQLServerProperties from '@/components/pages/setup/dataSources/SQLServerProperties'; import ClickHouseProperties from '@/components/pages/setup/dataSources/ClickHouseProperties'; @@ -16,6 +17,8 @@ export const getDataSourceImage = (dataSource: DATA_SOURCES | string) => { return '/images/dataSource/postgreSql.svg'; case DATA_SOURCES.MYSQL: return '/images/dataSource/mysql.svg'; + case DATA_SOURCES.ORACLE: + return '/images/dataSource/oracle.svg'; case DATA_SOURCES.MSSQL: return '/images/dataSource/sqlserver.svg'; case DATA_SOURCES.CLICK_HOUSE: @@ -39,6 +42,8 @@ export const getDataSourceName = (dataSource: DATA_SOURCES | string) => { return 'PostgreSQL'; case DATA_SOURCES.MYSQL: return 'MySQL'; + case DATA_SOURCES.ORACLE: + return 'Oracle'; case DATA_SOURCES.MSSQL: return 'SQL Server'; case DATA_SOURCES.CLICK_HOUSE: @@ -62,6 +67,8 @@ export const getDataSourceProperties = (dataSource: DATA_SOURCES | string) => { return PostgreSQLProperties; case DATA_SOURCES.MYSQL: return MySQLProperties; + case DATA_SOURCES.ORACLE: + return OracleProperties; case DATA_SOURCES.MSSQL: return SQLServerProperties; case DATA_SOURCES.CLICK_HOUSE: diff --git a/wren-ui/src/utils/enum/dataSources.ts b/wren-ui/src/utils/enum/dataSources.ts index f7822341b2..0ec83508a1 100644 --- a/wren-ui/src/utils/enum/dataSources.ts +++ b/wren-ui/src/utils/enum/dataSources.ts @@ -3,6 +3,7 @@ export enum DATA_SOURCES { DUCKDB = 'DUCKDB', POSTGRES = 'POSTGRES', MYSQL = 'MYSQL', + ORACLE = 'ORACLE', MSSQL = 'MSSQL', CLICK_HOUSE = 'CLICK_HOUSE', TRINO = 'TRINO', From 20585262254e4b402e2b4b89dd603788e548238b Mon Sep 17 00:00:00 2001 From: Narasimhan Kanvar Date: Mon, 28 Apr 2025 17:12:06 -0400 Subject: [PATCH 2/3] Update projectRepository.ts updated with CodeRabbit suggestions --- wren-ui/src/apollo/server/repositories/projectRepository.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/wren-ui/src/apollo/server/repositories/projectRepository.ts b/wren-ui/src/apollo/server/repositories/projectRepository.ts index 4de5bb6ef8..0cd38807a7 100644 --- a/wren-ui/src/apollo/server/repositories/projectRepository.ts +++ b/wren-ui/src/apollo/server/repositories/projectRepository.ts @@ -38,6 +38,7 @@ export interface ORACLE_CONNECTION_INFO { user: string; password: string; database: string; + ssl: boolean; } export interface MS_SQL_CONNECTION_INFO { From e9b1cbb7ebd5c13b488bb9210f529e636ee31b50 Mon Sep 17 00:00:00 2001 From: Narasimhan Kanvar Date: Tue, 13 May 2025 09:36:41 -0400 Subject: [PATCH 3/3] Removed the SSL checkbox. Need to put it back in once engine starts offering support Removed the SSL information passing field from Oracle connection info structs --- wren-engine | 2 +- wren-ui/src/apollo/server/repositories/projectRepository.ts | 1 - .../components/pages/setup/dataSources/OracleProperties.tsx | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/wren-engine b/wren-engine index 922ec70dd8..47ca29ebba 160000 --- a/wren-engine +++ b/wren-engine @@ -1 +1 @@ -Subproject commit 922ec70dd838b004fcb9e5e4be27a5da295a2c76 +Subproject commit 47ca29ebba291100ba5d70ce1790f9887eaed7a0 diff --git a/wren-ui/src/apollo/server/repositories/projectRepository.ts b/wren-ui/src/apollo/server/repositories/projectRepository.ts index 0cd38807a7..4de5bb6ef8 100644 --- a/wren-ui/src/apollo/server/repositories/projectRepository.ts +++ b/wren-ui/src/apollo/server/repositories/projectRepository.ts @@ -38,7 +38,6 @@ export interface ORACLE_CONNECTION_INFO { user: string; password: string; database: string; - ssl: boolean; } export interface MS_SQL_CONNECTION_INFO { diff --git a/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx b/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx index 8aa0806231..e970ef3537 100644 --- a/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx +++ b/wren-ui/src/components/pages/setup/dataSources/OracleProperties.tsx @@ -89,9 +89,6 @@ export default function OracleProperties(props: Props) { > - - - ); }