@@ -16,19 +16,30 @@ def get_uri(ds: CoreDatasource):
1616 db_url : str
1717 if ds .type == "mysql" :
1818 if conf .extraJdbc is not None and conf .extraJdbc != '' :
19- db_url = f"mysql+pymysql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ urllib . parse . quote ( conf .extraJdbc ) } "
19+ db_url = f"mysql+pymysql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ conf .extraJdbc } "
2020 else :
2121 db_url = f"mysql+pymysql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} "
2222 elif ds .type == "sqlServer" :
2323 if conf .extraJdbc is not None and conf .extraJdbc != '' :
24- db_url = f"mssql+pymssql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ urllib . parse . quote ( conf .extraJdbc ) } "
24+ db_url = f"mssql+pymssql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ conf .extraJdbc } "
2525 else :
2626 db_url = f"mssql+pymssql://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} "
2727 elif ds .type == "pg" or ds .type == "excel" :
2828 if conf .extraJdbc is not None and conf .extraJdbc != '' :
29- db_url = f"postgresql+psycopg2://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ urllib . parse . quote ( conf .extraJdbc ) } "
29+ db_url = f"postgresql+psycopg2://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ conf .extraJdbc } "
3030 else :
3131 db_url = f"postgresql+psycopg2://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} "
32+ elif ds .type == "oracle" :
33+ if conf .mode == "service_name" :
34+ if conf .extraJdbc is not None and conf .extraJdbc != '' :
35+ db_url = f"oracle+oracledb://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } ?service_name={ urllib .parse .quote (conf .database )} &{ conf .extraJdbc } "
36+ else :
37+ db_url = f"oracle+oracledb://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } ?service_name={ urllib .parse .quote (conf .database )} "
38+ else :
39+ if conf .extraJdbc is not None and conf .extraJdbc != '' :
40+ db_url = f"oracle+oracledb://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} ?{ conf .extraJdbc } "
41+ else :
42+ db_url = f"oracle+oracledb://{ urllib .parse .quote (conf .username )} :{ urllib .parse .quote (conf .password )} @{ conf .host } :{ conf .port } /{ urllib .parse .quote (conf .database )} "
3243 else :
3344 raise 'The datasource type not support.'
3445 return db_url
@@ -65,7 +76,7 @@ def get_tables(ds: CoreDatasource):
6576 FROM
6677 information_schema.TABLES
6778 WHERE
68- TABLE_SCHEMA = '{ conf .database } ';
79+ TABLE_SCHEMA = '{ conf .database } '
6980 """
7081 elif ds .type == "sqlServer" :
7182 sql = f"""
@@ -81,7 +92,7 @@ def get_tables(ds: CoreDatasource):
8192 AND ep.name = 'MS_Description'
8293 WHERE
8394 t.TABLE_TYPE IN ('BASE TABLE', 'VIEW')
84- AND t.TABLE_SCHEMA = '{ conf .dbSchema } ';
95+ AND t.TABLE_SCHEMA = '{ conf .dbSchema } '
8596 """
8697 elif ds .type == "pg" or ds .type == "excel" :
8798 sql = """
@@ -99,7 +110,27 @@ def get_tables(ds: CoreDatasource):
99110 AND c.relkind IN ('r', 'v')
100111 AND c.relname NOT LIKE 'pg_%'
101112 AND c.relname NOT LIKE 'sql_%'
102- ORDER BY c.relname;
113+ ORDER BY c.relname
114+ """
115+ elif ds .type == "oracle" :
116+ sql = f"""
117+ SELECT
118+ t.TABLE_NAME AS "TABLE_NAME",
119+ NVL(c.COMMENTS, '') AS "TABLE_COMMENT"
120+ FROM (
121+ SELECT TABLE_NAME, 'TABLE' AS OBJECT_TYPE
122+ FROM DBA_TABLES
123+ WHERE OWNER = '{ conf .dbSchema } '
124+ UNION ALL
125+ SELECT VIEW_NAME AS TABLE_NAME, 'VIEW' AS OBJECT_TYPE
126+ FROM DBA_VIEWS
127+ WHERE OWNER = '{ conf .dbSchema } '
128+ ) t
129+ LEFT JOIN DBA_TAB_COMMENTS c
130+ ON t.TABLE_NAME = c.TABLE_NAME
131+ AND c.TABLE_TYPE = t.OBJECT_TYPE
132+ AND c.OWNER = '{ conf .dbSchema } '
133+ ORDER BY t.TABLE_NAME
103134 """
104135
105136 result = session .execute (text (sql ))
@@ -130,7 +161,7 @@ def get_fields(ds: CoreDatasource, table_name: str = None):
130161 WHERE
131162 TABLE_SCHEMA = '{ conf .database } '
132163 """
133- sql2 = f" AND TABLE_NAME = '{ table_name } '; " if table_name is not None and table_name != "" else "; "
164+ sql2 = f" AND TABLE_NAME = '{ table_name } '" if table_name is not None and table_name != "" else ""
134165 sql = sql1 + sql2
135166 elif ds .type == "sqlServer" :
136167 sql1 = f"""
@@ -148,7 +179,7 @@ def get_fields(ds: CoreDatasource, table_name: str = None):
148179 WHERE
149180 C.TABLE_SCHEMA = '{ conf .dbSchema } '
150181 """
151- sql2 = f" AND C.TABLE_NAME = '{ table_name } '; " if table_name is not None and table_name != "" else "; "
182+ sql2 = f" AND C.TABLE_NAME = '{ table_name } '" if table_name is not None and table_name != "" else ""
152183 sql = sql1 + sql2
153184 elif ds .type == "pg" or ds .type == "excel" :
154185 sql1 = """
@@ -167,7 +198,32 @@ def get_fields(ds: CoreDatasource, table_name: str = None):
167198 AND a.attnum > 0
168199 AND NOT a.attisdropped
169200 """
170- sql2 = f" AND c.relname = '{ table_name } ';" if table_name is not None and table_name != "" else ";"
201+ sql2 = f" AND c.relname = '{ table_name } '" if table_name is not None and table_name != "" else ""
202+ sql = sql1 + sql2
203+ elif ds .type == "oracle" :
204+ sql1 = f"""
205+ SELECT
206+ col.COLUMN_NAME AS "COLUMN_NAME",
207+ (CASE
208+ WHEN col.DATA_TYPE IN ('VARCHAR2', 'CHAR', 'NVARCHAR2', 'NCHAR')
209+ THEN col.DATA_TYPE || '(' || col.DATA_LENGTH || ')'
210+ WHEN col.DATA_TYPE = 'NUMBER' AND col.DATA_PRECISION IS NOT NULL
211+ THEN col.DATA_TYPE || '(' || col.DATA_PRECISION ||
212+ CASE WHEN col.DATA_SCALE > 0 THEN ',' || col.DATA_SCALE END || ')'
213+ ELSE col.DATA_TYPE
214+ END) AS "DATA_TYPE",
215+ NVL(com.COMMENTS, '') AS "COLUMN_COMMENT"
216+ FROM
217+ DBA_TAB_COLUMNS col
218+ LEFT JOIN
219+ DBA_COL_COMMENTS com
220+ ON col.OWNER = com.OWNER
221+ AND col.TABLE_NAME = com.TABLE_NAME
222+ AND col.COLUMN_NAME = com.COLUMN_NAME
223+ WHERE
224+ col.OWNER = '{ conf .dbSchema } '
225+ """
226+ sql2 = f" AND col.TABLE_NAME = '{ table_name } '" if table_name is not None and table_name != "" else ""
171227 sql = sql1 + sql2
172228
173229 result = session .execute (text (sql ))
0 commit comments