--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Wed Jan 01 01:06:38 2014 +0100
@@ -139,7 +139,7 @@
private void processQueryNow() throws ConfigurationException, SQLException, FormatterException {
DatabaseDefinition dd = getConfiguration().getDatabase(options.getDatabaseName());
FormatterDefinition fd = configuration.getFormatter(options.getFormatterName());
- try (DatabaseConnection c = dd.connect()) {
+ try (DatabaseConnection c = dd.connect(options.getDatabaseProperties())) {
log.log(Level.FINE, "Database connected");
try (Formatter f = fd.getInstance(new FormatterContext(options.getOutputStream(), options.getFormatterProperties()))) {
c.executeQuery(options.getSQLCommand(), f);
--- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java Wed Jan 01 01:06:38 2014 +0100
@@ -19,6 +19,7 @@
import info.globalcode.sql.dk.batch.Batch;
import info.globalcode.sql.dk.configuration.DatabaseDefinition;
+import info.globalcode.sql.dk.configuration.Properties;
import info.globalcode.sql.dk.formatting.ColumnsHeader;
import info.globalcode.sql.dk.formatting.Formatter;
import java.sql.Connection;
@@ -39,11 +40,18 @@
private static final Logger log = Logger.getLogger(DatabaseConnection.class.getName());
private DatabaseDefinition databaseDefinition;
private Connection connection;
+ private Properties properties;
- public DatabaseConnection(DatabaseDefinition databaseDefinition) throws SQLException {
+ public DatabaseConnection(DatabaseDefinition databaseDefinition, Properties properties) throws SQLException {
this.databaseDefinition = databaseDefinition;
+ this.properties = properties;
- connection = DriverManager.getConnection(databaseDefinition.getUrl(), databaseDefinition.getUserName(), databaseDefinition.getPassword());
+ properties.setDefaults(databaseDefinition.getProperties());
+ java.util.Properties javaProperties = properties.getJavaProperties();
+ javaProperties.setProperty("user", databaseDefinition.getUserName());
+ javaProperties.setProperty("password", databaseDefinition.getPassword());
+
+ connection = DriverManager.getConnection(databaseDefinition.getUrl(), javaProperties);
}
public void executeQuery(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
--- a/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Wed Jan 01 01:06:38 2014 +0100
@@ -165,7 +165,7 @@
DatabaseDefinition dd = configurationProvider.getConfiguration().getDatabase(dbName);
log.log(Level.FINE, "Database definition was loaded from configuration");
succesfullyConfigured = true;
- try (DatabaseConnection dc = dd.connect()) {
+ try (DatabaseConnection dc = dd.connect(options.getDatabaseProperties())) {
succesfullyConnected = dc.test();
}
log.log(Level.FINE, "Database connection test was successful");
--- a/java/sql-dk/src/info/globalcode/sql/dk/configuration/DatabaseDefinition.java Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/configuration/DatabaseDefinition.java Wed Jan 01 01:06:38 2014 +0100
@@ -80,7 +80,10 @@
this.properties = properties;
}
- public DatabaseConnection connect() throws SQLException {
- return new DatabaseConnection(this);
+ /**
+ * @param properties ad-hoc properties from CLI options
+ */
+ public DatabaseConnection connect(Properties properties) throws SQLException {
+ return new DatabaseConnection(this, properties);
}
}
--- a/java/sql-dk/src/info/globalcode/sql/dk/configuration/Properties.java Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/configuration/Properties.java Wed Jan 01 01:06:38 2014 +0100
@@ -88,4 +88,22 @@
Collections.copy(clone, this);
return clone;
}
+
+ /**
+ * @return merged this and backing defaults as Java Properties
+ */
+ public java.util.Properties getJavaProperties() {
+ java.util.Properties javaProperties = new java.util.Properties();
+ if (defaults != null) {
+ duplicateTo(javaProperties);
+ }
+ duplicateTo(javaProperties);
+ return javaProperties;
+ }
+
+ private void duplicateTo(java.util.Properties javaProperties) {
+ for (Property p : this) {
+ javaProperties.setProperty(p.getName(), p.getValue());
+ }
+ }
}