Skip to content

Commit

Permalink
Added a synthetic argument hostOptionalPort, fixes schemaspy#109
Browse files Browse the repository at this point in the history
* If host contains port uses it.
* If host is missing port but -port is used it's by default separated by `:`.
* If port is missing only host is used.
* Host Port Separator can be customized with property in dbType `hostPortSeparator`.
  • Loading branch information
npetzall committed Aug 7, 2017
1 parent 15e4a96 commit 9b3a7ab
Show file tree
Hide file tree
Showing 24 changed files with 147 additions and 61 deletions.
16 changes: 16 additions & 0 deletions src/main/java/org/schemaspy/util/ConnectionURLBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public ConnectionURLBuilder(Config config, Properties properties) {
}
opts.addAll(config.getRemainingParameters());

opts.add("-hostOptionalPort");
opts.add(getHostOptionalPort(config, properties));

DbSpecificConfig dbConfig = new DbSpecificConfig(config.getDbType());
options = dbConfig.getOptions();

Expand All @@ -64,6 +67,19 @@ public ConnectionURLBuilder(Config config, Properties properties) {
logger.config("connectionURL: " + connectionURL);
}

private String getHostOptionalPort(Config config, Properties properties) {
String hostAndOrPort = config.getHost() == null ? "" : config.getHost();
String hostPortSeparator = properties.getProperty("hostPortSeparator", ":");
Integer port = config.getPort();
if (hostAndOrPort.contains(hostPortSeparator)) {
return hostAndOrPort;
}
if (port != null) {
return hostAndOrPort + hostPortSeparator + port;
}
return hostAndOrPort;
}

private String buildUrl(List<String> args, Config config, String connectionSpecification) {
String connectionURL = connectionSpecification;

Expand Down
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/db2net.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ extends=db2

# use the 'net' driver (Type 4) instead of the default 'app' driver
driver=com.ibm.db2.jcc.DB2Driver

connectionSpec=jdbc:db2://<host>:<port>/<db>
host=database host
port=port on database host
connectionSpec=jdbc:db2://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/derbynet.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
description=Derby Network Server

driver=org.apache.derby.jdbc.ClientDriver

connectionSpec=jdbc:derby://<host>/<db>
connectionSpec=jdbc:derby://<hostOptionalPort>/<db>

# the following provide description(s) for above entries in connectionSpec:
host=hostname[:port] host where database resides with optional port
host=host where database resides with optional port
port=port database is listening on
db=database name
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/firebird.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

description=Firebird

connectionSpec=jdbc:firebirdsql://<host>/<db>
host=hostname[:port] (possibly just localhost)
connectionSpec=jdbc:firebirdsql://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=org.firebirdsql.jdbc.FBDriver
Expand Down
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/hsqldb.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

description=HSQLDB Server

connectionSpec=jdbc:hsqldb:hsql://<host>/<db>
host=hostname[:port] (possibly just localhost)
connectionSpec=jdbc:hsqldb:hsql://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=org.hsqldb.jdbcDriver
Expand Down
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/impala.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

description=Imapla
connectionSpec=jdbc:impala://<host>:<port>/<db>
host=hostname
connectionSpec=jdbc:impala://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name
port=databse port

driver=com.cloudera.impala.jdbc41.Driver
8 changes: 4 additions & 4 deletions src/main/resources/org/schemaspy/types/informix.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

# InformixSQL driver details provided by Tom Conlin
description=InformixSQL

connectionSpec=jdbc:informix-sqli://<host>/<db>:INFORMIXSERVER=<server>
host=hostname and port
db=database name
connectionSpec=jdbc:informix-sqli://<hostOptionalPort>/<db>:INFORMIXSERVER=<server>
host=host where database resides with optional port
port=port database is listening on
server=database server
db=database name

driver=com.informix.jdbc.IfxDriver

Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/org/schemaspy/types/jtds.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description=Microsoft SQL Server JTDS
extends=mssql

# JTDS-specific differences from settings in mssql.properties:
connectionSpec=jdbc:jtds:sqlserver://<host>:<port>;databaseName=<db>;progName=schemaSpy
connectionSpec=jdbc:jtds:sqlserver://<hostOptionalPort>;databaseName=<db>;progName=schemaSpy
driver=net.sourceforge.jtds.jdbc.Driver

# Sample path to the jtds drivers.
Expand Down
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/mariadb.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

description=MariaDB

connectionSpec=jdbc:mariadb://<host>:<port>/<db>
host=hostname host where database resides with optional port
connectionSpec=jdbc:mariadb://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=org.mariadb.jdbc.Driver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

# identical to base file except for adding instance to connectionSpec
extends=mssql-jtds

connectionSpec=jdbc:jtds:sqlserver://<host>:<port>/<db>;instance=<instance>
connectionSpec=jdbc:jtds:sqlserver://<hostOptionalPort>/<db>;instance=<instance>

instance=Named instance to connect to
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/mssql-jtds.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ description=jTDS JDBC Driver for Microsoft SQL 2000/2005 Server
extends=mssql

# if domain is required then use -connprops=domain\=mydomain
connectionSpec=jdbc:jtds:sqlserver://<host>:<port>/<db>

host=database server host
port=database port on host
connectionSpec=jdbc:jtds:sqlserver://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=net.sourceforge.jtds.jdbc.Driver
Expand Down
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/mssql.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
#

description=Microsoft SQL Server

connectionSpec=jdbc:microsoft:sqlserver://<host>:<port>;databaseName=<db>
host=database server host
port=database port on host
connectionSpec=jdbc:microsoft:sqlserver://<hostOptionalPort>;databaseName=<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

# identical to base file except for adding instance to connectionSpec
extends=mssql05-jtds

connectionSpec=jdbc:jtds:sqlserver://<host>:<port>/<db>;instance=<instance>
connectionSpec=jdbc:jtds:sqlserver://<hostOptionalPort>/<db>;instance=<instance>

instance=Named instance to connect to
8 changes: 3 additions & 5 deletions src/main/resources/org/schemaspy/types/mssql05.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ description=Microsoft SQL Server 2005+

# some details in mssql.properties:
extends=mssql

connectionSpec=jdbc:sqlserver://<host>:<port>;databaseName=<db>

host=database server host
port=database port on host
connectionSpec=jdbc:sqlserver://<hostOptionalPort>;databaseName=<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
Expand Down
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/mysql.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
# note that MySQL tables must be of type 'InnoDB' or they won't
# have foreign key relationships
description=MySQL

connectionSpec=jdbc:mysql://<host>/<db>
host=hostname[:port] host where database resides with optional port
connectionSpec=jdbc:mysql://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=com.mysql.jdbc.Driver
Expand Down
5 changes: 3 additions & 2 deletions src/main/resources/org/schemaspy/types/netezza.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
#

description=Netezza

connectionSpec=jdbc:netezza://<host>:<port>/<db>
connectionSpec=jdbc:netezza://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on

driver=org.netezza.Driver

Expand Down
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/orathin.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ description=Oracle with Thin Driver

# gory details in ora.properties:
extends=ora

connectionSpec=jdbc:oracle:thin:@<host>:<port>:<db>
host=database host
port=port on database host
connectionSpec=jdbc:oracle:thin:@<hostOptionalPort>:<db>
host=host where database resides with optional port
port=port database is listening on
db=database SID as known on host
6 changes: 3 additions & 3 deletions src/main/resources/org/schemaspy/types/pgsql.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
#

description=PostgreSQL

connectionSpec=jdbc:postgresql://<host>/<db>
host=hostname[:port] (possibly just localhost)
connectionSpec=jdbc:postgresql://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=org.postgresql.Driver
Expand Down
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/redshift.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
description=Amazon redshift

connectionSpec=jdbc:redshift://<host>:<port>/<db>
host=hostname (possibly just localhost)
port=database port on host
connectionSpec=jdbc:redshift://<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=com.amazon.redshift.jdbc42.Driver
Expand Down
7 changes: 3 additions & 4 deletions src/main/resources/org/schemaspy/types/sybase.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
#

description=Sybase Server (jdbc3)

connectionSpec=jdbc:sybase:Tds:<host>:<port>/<db>
host=database server host
port=database port on host
connectionSpec=jdbc:sybase:Tds:<hostOptionalPort>/<db>
host=host where database resides with optional port
port=port database is listening on
db=database name

driver=com.sybase.jdbc3.jdbc.SybDriver
Expand Down
70 changes: 70 additions & 0 deletions src/test/java/org/schemaspy/util/ConnectionURLBuilderTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.schemaspy.util;

import org.junit.Test;
import org.schemaspy.Config;

import java.io.IOException;
import java.util.Properties;

import static org.assertj.core.api.Assertions.assertThat;

public class ConnectionURLBuilderTest {

@Test
public void shouldReplaceHostInConnectionSpec() throws IOException {
Config config = new Config(
"-t", "src/test/resources/dbtypes/onlyHost",
"-host", "abc.com",
"-u", "aUser");
Properties properties = config.determineDbProperties(config.getDbType());
ConnectionURLBuilder connectionURLBuilder = new ConnectionURLBuilder(config, properties);
assertThat(connectionURLBuilder.getConnectionURL()).isEqualToIgnoringCase("abc.com");
}

@Test
public void shouldReplaceHostAndOrPortWithOnlyHost() throws IOException {
Config config = new Config(
"-t", "src/test/resources/dbtypes/hostOptionalPort",
"-host", "abc.com",
"-u", "aUser");
Properties properties = config.determineDbProperties(config.getDbType());
ConnectionURLBuilder connectionURLBuilder = new ConnectionURLBuilder(config, properties);
assertThat(connectionURLBuilder.getConnectionURL()).isEqualToIgnoringCase("abc.com");
}

@Test
public void shouldReplaceHostAndOrPortWithHostAndPort() throws IOException {
Config config = new Config(
"-t", "src/test/resources/dbtypes/hostOptionalPort",
"-host", "abc.com",
"-port", "1234",
"-u", "aUser");
Properties properties = config.determineDbProperties(config.getDbType());
ConnectionURLBuilder connectionURLBuilder = new ConnectionURLBuilder(config, properties);
assertThat(connectionURLBuilder.getConnectionURL()).isEqualToIgnoringCase("abc.com:1234");
}

@Test
public void shouldReplaceHostAndOrPortWithHostAndPortOnlyOnce() throws IOException {
Config config = new Config(
"-t", "src/test/resources/dbtypes/hostOptionalPort",
"-host", "abc.com:4321",
"-port", "1234",
"-u", "aUser");
Properties properties = config.determineDbProperties(config.getDbType());
ConnectionURLBuilder connectionURLBuilder = new ConnectionURLBuilder(config, properties);
assertThat(connectionURLBuilder.getConnectionURL()).isEqualToIgnoringCase("abc.com:4321");
}

@Test
public void shouldReplaceHostAndOrPortWithCustomSeparator() throws IOException {
Config config = new Config(
"-t", "src/test/resources/dbtypes/hostOptionalPortCustomSeparator",
"-host", "abc.com",
"-port", "1234",
"-u", "aUser");
Properties properties = config.determineDbProperties(config.getDbType());
ConnectionURLBuilder connectionURLBuilder = new ConnectionURLBuilder(config, properties);
assertThat(connectionURLBuilder.getConnectionURL()).isEqualToIgnoringCase("abc.com|1234");
}
}
3 changes: 3 additions & 0 deletions src/test/resources/dbtypes/hostOptionalPort.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
connectionSpec=<hostOptionalPort>
host=host where database resides with optional port
port=database server listening port
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
connectionSpec=<hostOptionalPort>
host=host where database resides with optional port
port=database server listening port
hostPortSeparator=|
2 changes: 2 additions & 0 deletions src/test/resources/dbtypes/onlyHost.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
connectionSpec=<host>
host=hostname[:port] host where database resides with optional port

0 comments on commit 9b3a7ab

Please sign in to comment.