Browse Source

Merge pull request #133 in DEC/decision-webui-dcm from ~ALAN/decision-webui-dcm:release/10.0 to release/10.0

* commit 'fe1e00b2f8af9731ab6646a17b4ed008abf61e9b':
  fix: 更新单元测试名称
  fix: DEC-11030 修复切换驱动时解析url的问题并补充单元测试
research/10.0
alan 5 years ago
parent
commit
85f7cd1ebd
  1. 31
      src/modules/__test__/app.test.ts
  2. 14
      src/modules/app.service.ts
  3. 4
      src/modules/constants/constant.ts
  4. 19
      src/modules/pages/maintain/forms/components/form.jdbc.ts

31
src/modules/__test__/app.test.ts

@ -1,10 +1,18 @@
import { connectionCanEdit, resolveUrlInfo } from '../app.service';
import { connectionCanEdit, resolveUrlInfo, splitUrl } from '../app.service';
const connection = {
connectionId: '',
connectionType: '',
connectionName: '',
connectionData: '',
};
/**
* test_author_alan
*/
test('DEC-11030 拼接url', () => {
expect(splitUrl('localhost', '22', 'dbname', 'jdbc:pivotal:greenplum://hostname:port;dbname')).toEqual('jdbc:pivotal:greenplum://localhost:22;dbname');
});
/**
* test_author_alan
*/
@ -17,6 +25,27 @@ test('DEC-10992 数据连接名称带-', () => {
});
});
test('解析url', () => {
expect(resolveUrlInfo('jdbc:postgresql://endpoint:port/database')).toEqual({
host: 'endpoint',
port: '',
databaseName: 'database',
urlInfo: '',
});
expect(resolveUrlInfo('jdbc:pivotal:greenplum://hostname:port;dbname')).toEqual({
host: 'hostname',
port: '',
databaseName: 'dbname',
urlInfo: '',
});
expect(resolveUrlInfo('jdbc:mysql://hostname:22/database')).toEqual({
host: 'hostname',
port: '22',
databaseName: 'database',
urlInfo: '',
});
});
/**
* test_author_alan
*/

14
src/modules/app.service.ts

@ -47,7 +47,16 @@ export function getJdbcDatabaseType(database: string, driver: string): DatabaseT
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|port]+))?(:|\/|;DatabaseName=)([^]+)(.*)/i);
const greenplumUrl = url.match(/^jdbc:(pivotal:greenplum):(thin:([0-9a-zA-Z/]*)?@\/\/|\/\/|)([0-9a-zA-Z_\\.-]+)(:([0-9|port]+))?(:|\/|;)([^]+)(.*)/i);
if (greenplumUrl) {
return {
host: greenplumUrl[4],
port: greenplumUrl[6] === 'port' ? '' : greenplumUrl[6],
databaseName: greenplumUrl[8],
urlInfo: greenplumUrl[9],
};
}
const result = url.match(/^jdbc:(oracle|mysql|sqlserver|db2|impala|kylin|phoenix|derby|gbase|gbasedbt-sqli|informix-sqli|h2|postgresql|hive2|vertica|kingbase|presto|redshift|postgresql):(thin:([0-9a-zA-Z/]*)?@|thin:([0-9a-zA-Z/]*)?@\/\/|\/\/|)([0-9a-zA-Z_\\.-]+)(:([0-9|port]+))?(:|\/|;DatabaseName=)([^]+)(.*)/i);
if (result) {
return {
host: result[5],
@ -87,7 +96,8 @@ export function splitUrl(host: string, port: string, database: string, baseUrl:
}
return baseUrl.replace('hostname', host).replace(':port', port ? `:${port}` : '')
.replace('database', database);
.replace('database', database)
.replace('dbname', database);
}
export function connectionCanEdit(connection: Connection) {

4
src/modules/constants/constant.ts

@ -446,8 +446,8 @@ export const DATA_BASE_TYPES = [
hasSchema: false,
kerberos: false,
urls: {
'com.mysql.jdbc.Driver': 'jdbc:mysql://localhost/dbname',
'org.gjt.mm.mysql.Driver': 'jdbc:mysql://localhost/dbname',
'com.mysql.jdbc.Driver': 'jdbc:mysql://hostname:port/database',
'org.gjt.mm.mysql.Driver': 'jdbc:mysql://hostname:port/database',
},
},
{

19
src/modules/pages/maintain/forms/components/form.jdbc.ts

@ -98,13 +98,12 @@ export class FormJdbc extends BI.Widget {
const value = this.form.driver.getValue();
const connectionData = this.options.formData.connectionData as ConnectionJDBC;
const connectionType = getJdbcDatabaseType(connectionData.database, connectionData.driver);
if (connectionType.urls) {
this.form.url.setValue(connectionType.urls[value]);
const urlInfo = resolveUrlInfo(connectionType.urls[value]);
this.form.host.setValue(urlInfo.host);
this.form.database.setValue(urlInfo.databaseName);
this.form.port.setValue(urlInfo.port);
}
const url = connectionType.urls ? connectionType.urls[value] : connectionType.url;
this.form.url.setValue(url);
const urlInfo = resolveUrlInfo(url);
this.form.host.setValue(urlInfo.host);
this.form.database.setValue(urlInfo.databaseName);
this.form.port.setValue(urlInfo.port);
},
}],
}],
@ -692,11 +691,13 @@ export class FormJdbc extends BI.Widget {
}
private onHostPortChange(databaseType) {
const { url = '' } = databaseType;
const { urls, url } = databaseType;
const driver = this.form.driver.getValue();
const selectUrl = BI.get(urls, driver) || url;
const host = this.form.host.getValue();
const port = this.form.port.getValue();
const database = this.form.database.getValue();
this.form.url.setValue(splitUrl(host, port, database, url));
this.form.url.setValue(splitUrl(host, port, database, selectUrl));
}
public setSchemas(schemas: string[]) {

Loading…
Cancel
Save