From b7aa4d5b451a7bca1b432d5850a2c6ac9b731275 Mon Sep 17 00:00:00 2001 From: alan Date: Tue, 27 Aug 2019 16:39:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20DEC-9068=20url=E6=8B=BC=E6=8E=A5?= =?UTF-8?q?=E4=B8=8E=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/app.service.ts | 34 +++++++++++ .../components/test_status/test_status.ts | 1 + src/modules/constants/constant.ts | 56 +++++++++---------- .../connection_jdbc/connection_jdbc.ts | 9 +-- .../maintain/forms/components/form.jdbc.ts | 23 +++++--- 5 files changed, 83 insertions(+), 40 deletions(-) diff --git a/src/modules/app.service.ts b/src/modules/app.service.ts index 3d49230..4f508b8 100644 --- a/src/modules/app.service.ts +++ b/src/modules/app.service.ts @@ -42,3 +42,37 @@ export function getJdbcDatabaseType(database: string, driver: string): DatabaseT return databaseType; } + +export function resolveUrlInfo (url: string) { + if (BI.isNull(url)) return {}; + const result = url.match(/^jdbc:(oracle|mysql|sqlserver|db2|impala|kylin|phoenix|derby|gbase|gbasedbt-sqli|informix-sqli|h2|postgresql|hive2|vertica|kingbase|presto):(thin:([0-9a-zA-Z/]*)?@|thin:([0-9a-zA-Z/]*)?@\/\/|\/\/|)([0-9a-zA-Z_\\.-]+)(:([0-9]+))?(:|\/|;DatabaseName=)([0-9a-zA-Z_\\.]+)(.*)/i); + if (result) { + return { + host: result[5], + port: result[7], + databaseName: result[9], + urlInfo: result[10], + }; + } + + // 处理oracle的RAC方式 + if (/^jdbc:oracle:thin:([0-9a-zA-Z/]*)?@\(DESCRIPTION/i.test(url)) { + const host = url.match(/\(HOST\s*=\s*([0-9a-zA-Z_\\.-]+)\)/i); + const port = url.match(/\(PORT\s*=\s*([0-9]+)\)/i); + const databaseName = url.match(/\(SERVICE_NAME\s*=\s*([\s0-9a-zA-Z_\\.]+)\)/i); + + return { + host: host ? host[1] : '', + port: port ? port[1] : '', + databaseName: databaseName ? databaseName[1] : '', + urlInfo: '', + }; + } + + return { + host: '', + port: '', + databaseName: '', + urlInfo: '', + }; +} diff --git a/src/modules/components/test_status/test_status.ts b/src/modules/components/test_status/test_status.ts index 54be533..7d73704 100644 --- a/src/modules/components/test_status/test_status.ts +++ b/src/modules/components/test_status/test_status.ts @@ -86,6 +86,7 @@ export class TestStatus extends BI.Widget { { eventName: EVENT_DETAIL, action: (isCollapse: boolean) => { + this.tab.setHeight(isCollapse ? 250 : 200); this.detail.setVisible(!isCollapse); }, }, diff --git a/src/modules/constants/constant.ts b/src/modules/constants/constant.ts index 52c5637..a8be020 100644 --- a/src/modules/constants/constant.ts +++ b/src/modules/constants/constant.ts @@ -33,7 +33,7 @@ export const DATA_BASE_TYPES = [ text: 'ADS', databaseType: 'ads', driver: 'com.mysql.jdbc.Driver', - url: 'jdbc:mysql://hostname:port/my_ads_db', + url: 'jdbc:mysql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -56,7 +56,7 @@ export const DATA_BASE_TYPES = [ text: 'APACHE IMPALA', databaseType: 'apache-impala', driver: 'com.cloudera.impala.jdbc41.Driver', - url: 'jdbc:impala://hostname:port/_impala_builtins', + url: 'jdbc:impala://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -67,7 +67,7 @@ export const DATA_BASE_TYPES = [ text: 'APACHE KYLIN', databaseType: 'apache-kylin', driver: 'org.apache.kylin.jdbc.Driver', - url: 'jdbc:kylin://hostname:port/', + url: 'jdbc:kylin://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -78,7 +78,7 @@ export const DATA_BASE_TYPES = [ text: 'APACHE Phoenix', databaseType: 'apache-phoenix', driver: 'org.apache.phoenix.jdbc.PhoenixDriver', - url: 'jdbc:phoenix:hostname:port/dbname', + url: 'jdbc:phoenix:hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -89,7 +89,7 @@ export const DATA_BASE_TYPES = [ text: 'DERBY', databaseType: 'derby', driver: 'org.apache.derby.jdbc.ClientDriver', - url: 'jdbc:derby://hostname:port/', + url: 'jdbc:derby://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -100,7 +100,7 @@ export const DATA_BASE_TYPES = [ text: 'Gbase 8A', databaseType: 'gbase-8a', driver: 'com.gbase.jdbc.Driver', - url: 'jdbc:gbase://hostname:port/dbname', + url: 'jdbc:gbase://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -111,7 +111,7 @@ export const DATA_BASE_TYPES = [ text: 'Gbase 8S', databaseType: 'gbase-8s', driver: 'com.gbasedbt.jdbc.IfxDriver', - url: 'jdbc:gbasedbt-sqli://hostname:port/{database}', + url: 'jdbc:gbasedbt-sqli://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -122,7 +122,7 @@ export const DATA_BASE_TYPES = [ text: 'Gbase 8T', databaseType: 'gbase-8t', driver: 'com.informix.jdbc.IfxDriver', - url: 'jdbc:informix-sqli://hostname:port/{database}:INFORMIXSERVER={server}', + url: 'jdbc:informix-sqli://hostname:port/database:INFORMIXSERVER={server}', commonly: false, internal: true, type: 'jdbc', @@ -133,7 +133,7 @@ export const DATA_BASE_TYPES = [ text: 'H2', databaseType: 'h2', driver: 'org.h2.Driver', - url: 'jdbc:h2://${ENV_HOME}/../databaseName', + url: 'jdbc:h2://hostname:port/../database', commonly: false, internal: true, type: 'jdbc', @@ -144,7 +144,7 @@ export const DATA_BASE_TYPES = [ text: '华为云DWS', databaseType: 'hw-dws', driver: 'org.postgresql.Driver', - url: 'jdbc:postgresql://hostname:port/dbname', + url: 'jdbc:postgresql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -155,7 +155,7 @@ export const DATA_BASE_TYPES = [ text: 'FusionInsight elk', databaseType: 'hw-elk', driver: 'org.postgresql.Driver', - url: 'jdbc:postgresql://hostname:port/dbname', + url: 'jdbc:postgresql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -177,7 +177,7 @@ export const DATA_BASE_TYPES = [ text: 'GaussDB 200', databaseType: 'hw-libr-a', driver: 'org.postgresql.Driver', - url: 'jdbc:postgresql://hostname:port/dbname', + url: 'jdbc:postgresql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -187,7 +187,7 @@ export const DATA_BASE_TYPES = [ text: 'Hadoop Hive', databaseType: 'hadoop-hive', driver: 'org.apache.hive.jdbc.HiveDriver', - url: 'jdbc:hive2://hostname:port/databasename', + url: 'jdbc:hive2://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -197,7 +197,7 @@ export const DATA_BASE_TYPES = [ text: 'Hbase', databaseType: 'hbase', driver: 'org.apache.phoenix.jdbc.PhoenixDriver', - url: 'jdbc:phoenix:hostname:port/dbname', + url: 'jdbc:phoenix:hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -207,7 +207,7 @@ export const DATA_BASE_TYPES = [ text: 'HP Vertica', databaseType: 'hp-vertica', driver: 'com.vertica.jdbc.Driver', - url: 'jdbc:vertica://hostname:port/databaseName', + url: 'jdbc:vertica://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -227,7 +227,7 @@ export const DATA_BASE_TYPES = [ text: 'IBM DB2', databaseType: 'ibm-db2', driver: 'com.ibm.db2.jcc.DB2Driver', - url: 'jdbc:db2://hostname:port/dbname', + url: 'jdbc:db2://hostname:port/database', commonly: true, internal: true, type: 'jdbc', @@ -237,7 +237,7 @@ export const DATA_BASE_TYPES = [ text: 'INFORMIX', databaseType: 'informix', driver: 'com.informix.jdbc.IfxDriver', - url: 'jdbc:informix-sqli://hostname:port/{database}:INFORMIXSERVER={server}', + url: 'jdbc:informix-sqli://hostname:port/database:INFORMIXSERVER={server}', commonly: false, internal: true, type: 'jdbc', @@ -247,7 +247,7 @@ export const DATA_BASE_TYPES = [ text: 'KINGBASE', databaseType: 'kingbase', driver: 'com.kingbase.Driver', - url: 'jdbc:kingbase://hostname:port', + url: 'jdbc:kingbase://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -257,7 +257,7 @@ export const DATA_BASE_TYPES = [ text: 'Microsoft SQL Server', databaseType: 'sql-server', driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver', - url: 'jdbc:sqlserver://hostname:port;databaseName=', + url: 'jdbc:sqlserver://hostname:port;databaseName=database', commonly: true, internal: true, type: 'jdbc', @@ -268,7 +268,7 @@ export const DATA_BASE_TYPES = [ databaseType: 'mysql', driver: 'com.mysql.jdbc.Driver', drivers: ['com.mysql.jdbc.Driver', 'org.gjt.mm.mysql.Driver'], - url: 'jdbc:mysql://hostname:port/dbname', + url: 'jdbc:mysql://hostname:port/database', commonly: true, internal: true, type: 'jdbc', @@ -279,7 +279,7 @@ export const DATA_BASE_TYPES = [ text: 'Oracle', databaseType: 'oracle', driver: 'oracle.jdbc.driver.OracleDriver', - url: 'jdbc:oracle:thin:@hostname:port:databaseName', + url: 'jdbc:oracle:thin:@hostname:port:database', commonly: true, internal: true, type: 'jdbc', @@ -290,7 +290,7 @@ export const DATA_BASE_TYPES = [ text: 'Pivotal Greenplum Database', databaseType: 'pivotal-greenplum-database', driver: 'org.postgresql.Driver', - url: 'jdbc:postgresql://hostname:port/dbname', + url: 'jdbc:postgresql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -300,7 +300,7 @@ export const DATA_BASE_TYPES = [ text: 'Postgresql', databaseType: 'postgresql', driver: 'org.postgresql.Driver', - url: 'jdbc:postgresql://hostname:port/dbname', + url: 'jdbc:postgresql://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -310,7 +310,7 @@ export const DATA_BASE_TYPES = [ text: 'Presto', databaseType: 'presto', driver: 'com.facebook.presto.jdbc.PrestoDriver', - url: 'jdbc:presto://hostname:port/catalog', + url: 'jdbc:presto://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -330,7 +330,7 @@ export const DATA_BASE_TYPES = [ text: 'SAP Sybase', databaseType: 'sap-sybase', driver: 'com.sybase.jdbc4.jdbc.SybDriver', - url: 'jdbc:sybase:Tds:hostname:port/databasename', + url: 'jdbc:sybase:Tds:hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -340,7 +340,7 @@ export const DATA_BASE_TYPES = [ text: 'SPARK', databaseType: 'spark', driver: 'org.apache.hive.jdbc.HiveDriver', - url: 'jdbc:hive2://hostname:port/databasename', + url: 'jdbc:hive2://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -370,7 +370,7 @@ export const DATA_BASE_TYPES = [ text: 'TRANSWARP INCEPTOR', databaseType: 'transwarp-inceptor', driver: 'org.apache.hive.jdbc.HiveDriver', - url: 'jdbc:hive2://hostname:port/databasename', + url: 'jdbc:hive2://hostname:port/database', commonly: false, internal: true, type: 'jdbc', @@ -392,7 +392,7 @@ export const DATA_BASE_TYPES = [ databaseType: 'other', driver: 'org.ha.Driver', drivers: ['org.ha.Driver', 'com.fr.third.org.hsqldb.jdbcDriver', 'org.sqlite.JDBC'], - url: 'jdbc:h2://hostname:port/../databaseName', + url: 'jdbc:h2://hostname:port/../database', commonly: false, internal: false, type: 'jdbc', diff --git a/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts b/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts index 40a2ae8..2f31903 100644 --- a/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts +++ b/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts @@ -4,7 +4,7 @@ import { FormItemXtype } from '../components/form_item/form_item'; import { CollapseXtype, EVENT_CHANGE } from 'src/modules/components/collapse/collapse'; import { ConnectionJdbcModelXtype, ConnectionJdecModel } from './connection_jdbc.model'; import { ConnectionJDBC } from 'src/modules/crud/crud.typings'; -import { getAllDatabaseTypes, getJdbcDatabaseType } from '../../../app.service'; +import { getAllDatabaseTypes, getJdbcDatabaseType, resolveUrlInfo } from '../../../app.service'; export const ConnectionJdbcXtype = 'dec.dcm.connection_jdbc'; @shortcut(ConnectionJdbcXtype) @store(ConnectionJdbcModelXtype) @@ -16,8 +16,9 @@ export class ConnectionJdbc extends BI.Widget { render () { const connectionData = this.model.connectionSelectedOne.connectionData as ConnectionJDBC; - const { driver, database, host, user, newCharsetName, schema, connectionPoolAttr, port, authType, principal, keyPath, url } = connectionData; + const { driver, database, user, newCharsetName, schema, connectionPoolAttr, authType, principal, keyPath, url } = connectionData; const databaseType = getJdbcDatabaseType(database, driver); + const { host, port, databaseName } = resolveUrlInfo(url); return { type: Vertical, @@ -32,7 +33,7 @@ export class ConnectionJdbc extends BI.Widget { { type: FormItemXtype, name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Name'), - value: '', // TODO: 数据库名称待适配, + value: databaseName, }, { type: FormItemXtype, @@ -42,7 +43,7 @@ export class ConnectionJdbc extends BI.Widget { { type: FormItemXtype, name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'), - value: port === 0 ? '' : port, + value: port, }, { type: FormItemXtype, diff --git a/src/modules/pages/maintain/forms/components/form.jdbc.ts b/src/modules/pages/maintain/forms/components/form.jdbc.ts index 3dbb7a1..20aede1 100644 --- a/src/modules/pages/maintain/forms/components/form.jdbc.ts +++ b/src/modules/pages/maintain/forms/components/form.jdbc.ts @@ -5,7 +5,7 @@ import { FormItemXtype } from '../../components/form_item/form_item'; import { Connection, ConnectionJDBC, ConnectionPoolJDBC } from 'src/modules/crud/crud.typings'; import { connectionType } from '@constants/env'; import { CONNECT_CHARSET } from '@constants/constant'; -import { getAllDatabaseTypes, getJdbcDatabaseType } from '../../../../app.service'; +import { getAllDatabaseTypes, getJdbcDatabaseType, resolveUrlInfo } from '../../../../app.service'; export const FormJdbcXtype = 'dec.dcm.maintain.form.jdbc'; @shortcut(FormJdbcXtype) @@ -56,11 +56,13 @@ export class FormJdbc extends BI.Widget { render() { const { connectionName, connectionData } = this.options.formData; - const { driver, host, port, user, password, newCharsetName, schema, url, connectionPoolAttr, database, authType, principal, keyPath } = connectionData as ConnectionJDBC; + const { driver, user, password, newCharsetName, schema, url, connectionPoolAttr, database, authType, principal, keyPath } = connectionData as ConnectionJDBC; // minIdle 暂未使用 const { initialSize, maxActive, maxIdle, maxWait, validationQuery, testOnBorrow, testOnReturn, testWhileIdle, timeBetweenEvictionRunsMillis, numTestsPerEvictionRun, minEvictableIdleTimeMillis } = connectionPoolAttr as ConnectionPoolJDBC; const databaseType = getJdbcDatabaseType(database, driver); this.oldPassword = password; + + const { host, port, databaseName } = resolveUrlInfo(url); return { type: Vertical, @@ -115,11 +117,16 @@ export class FormJdbc extends BI.Widget { width: 300, allowBlank: true, watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Name'), - value: '', // TODO: 数据库名称待适配 - disabled: true, + value: databaseName, ref: (_ref: any) => { this.form.database = _ref; }, + listeners: [{ + eventName: BI.Editor.EVENT_CHANGE, + action: () => { + this.onHostPortChange(databaseType); + }, + }], }], }, { @@ -131,7 +138,6 @@ export class FormJdbc extends BI.Widget { allowBlank: true, value: host, watermark: BI.i18nText('Dec-Dcm_Connection_Form_Host'), - disabled: true, ref: (_ref: any) => { this.form.host = _ref; }, @@ -150,9 +156,8 @@ export class FormJdbc extends BI.Widget { type: TextEditor, width: 300, allowBlank: true, - value: port === 0 ? '' : port, + value: port, watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'), - disabled: true, ref: (_ref: any) => { this.form.port = _ref; }, @@ -619,7 +624,9 @@ export class FormJdbc extends BI.Widget { const { url = '' } = databaseType; const host = this.form.host.getValue(); const port = this.form.port.getValue(); - this.form.url.setValue(url.replace('hostname', host).replace(':port', port ? `:${port}` : '')); + const database = this.form.database.getValue(); + this.form.url.setValue(url.replace('hostname', host).replace(':port', port ? `:${port}` : '') + .replace('database', database)); } public setSchemas(schemas: string[]) {