# HG changeset patch
# User Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
# Date 1574362698 -3600
# Node ID bcb9a99d399db3b5fcf98fa5b55af35c627c96a5
# Parent  4e2685f0b7fd4c751e05c70ef01d92f2f47837e1
Add private checkNotClosed() method to check if the connection is not closed.
Call the method from all methods which require that the connection is not closed.
Disabled not needed check in setNetworkTimeout(), such that it can be used now.

diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
@@ -238,7 +238,8 @@ public class MonetConnection
 		if (hostname == null || hostname.isEmpty())
 			throw new IllegalArgumentException("Missing or empty host name");
 		if (port <= 0 || port > 65535)
-			throw new IllegalArgumentException("Invalid port number: " + port + ". It should not be " + (port < 0 ? "negative" : (port > 65535 ? "larger than 65535" : "0")));
+			throw new IllegalArgumentException("Invalid port number: " + port
+					+ ". It should not be " + (port < 0 ? "negative" : (port > 65535 ? "larger than 65535" : "0")));
 		if (username == null || username.isEmpty())
 			throw new IllegalArgumentException("Missing or empty user name");
 		if (password == null || password.isEmpty())
@@ -584,9 +585,7 @@ public class MonetConnection
 	 */
 	@Override
 	public SQLWarning getWarnings() throws SQLException {
-		if (closed)
-			throw new SQLException("Cannot call on closed Connection", "M1M20");
-
+		checkNotClosed();
 		// if there are no warnings, this will be null, which fits with the
 		// specification.
 		return warnings;
@@ -700,6 +699,7 @@ public class MonetConnection
 	public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability)
 		throws SQLException
 	{
+		checkNotClosed();
 		try {
 			final CallableStatement ret = new MonetCallableStatement(
 				this,
@@ -804,6 +804,7 @@ public class MonetConnection
 	public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability)
 		throws SQLException
 	{
+		checkNotClosed();
 		try {
 			final PreparedStatement ret = new MonetPreparedStatement(
 				this,
@@ -934,6 +935,7 @@ public class MonetConnection
 	 */
 	@Override
 	public void releaseSavepoint(final Savepoint savepoint) throws SQLException {
+		checkNotClosed();
 		if (!(savepoint instanceof MonetSavepoint))
 			throw new SQLException("This driver can only handle savepoints it created itself", "M0M06");
 
@@ -955,6 +957,7 @@ public class MonetConnection
 	 */
 	@Override
 	public void rollback() throws SQLException {
+		checkNotClosed();
 		// note: can't use sendIndependentCommand here because we need
 		// to process the auto_commit state the server gives
 		sendTransactionCommand("ROLLBACK");
@@ -972,6 +975,7 @@ public class MonetConnection
 	 */
 	@Override
 	public void rollback(final Savepoint savepoint) throws SQLException {
+		checkNotClosed();
 		if (!(savepoint instanceof MonetSavepoint))
 			throw new SQLException("This driver can only handle savepoints it created itself", "M0M06");
 
@@ -1008,6 +1012,7 @@ public class MonetConnection
 	 */
 	@Override
 	public void setAutoCommit(final boolean autoCommit) throws SQLException {
+		checkNotClosed();
 		if (this.autoCommit != autoCommit) {
 			sendControlCommand("auto_commit " + (autoCommit ? "1" : "0"));
 			this.autoCommit = autoCommit;
@@ -1069,6 +1074,7 @@ public class MonetConnection
 	 */
 	@Override
 	public Savepoint setSavepoint() throws SQLException {
+		checkNotClosed();
 		// create a new Savepoint object
 		final MonetSavepoint sp = new MonetSavepoint();
 
@@ -1089,6 +1095,7 @@ public class MonetConnection
 	 */
 	@Override
 	public Savepoint setSavepoint(final String name) throws SQLException {
+		checkNotClosed();
 		// create a new Savepoint object
 		final MonetSavepoint sp;
 		try {
@@ -1361,6 +1368,7 @@ public class MonetConnection
 	public String getClientInfo(final String name) throws SQLException {
 		if (name == null || name.isEmpty())
 			return null;
+		checkNotClosed();
 		return conn_props.getProperty(name);
 	}
 
@@ -1378,6 +1386,7 @@ public class MonetConnection
 	 */
 	@Override
 	public Properties getClientInfo() throws SQLException {
+		checkNotClosed();
 		// return a clone of the connection properties object
 		return new Properties(conn_props);
 	}
@@ -1494,8 +1503,7 @@ public class MonetConnection
 	 */
 	@Override
 	public void setSchema(final String schema) throws SQLException {
-		if (closed)
-			throw new SQLException("Cannot call on closed Connection", "M1M20");
+		checkNotClosed();
 		if (schema == null || schema.isEmpty())
 			throw new SQLException("Missing schema name", "M1M05");
 
@@ -1520,8 +1528,7 @@ public class MonetConnection
 	 */
 	@Override
 	public String getSchema() throws SQLException {
-		if (closed)
-			throw new SQLException("Cannot call on closed Connection", "M1M20");
+		checkNotClosed();
 
 		String cur_schema = null;
 		Statement st = null;
@@ -1595,10 +1602,10 @@ public class MonetConnection
 	 */
 	@Override
 	public void setNetworkTimeout(final Executor executor, final int millis) throws SQLException {
-		if (closed)
-			throw new SQLException("Cannot call on closed Connection", "M1M20");
-		if (executor == null)
-			throw new SQLException("executor is null", "M1M05");
+		checkNotClosed();
+//		executor object is not used yet, so no need to test it.
+//		if (executor == null)
+//			throw new SQLException("executor is null", "M1M05");
 		if (millis < 0)
 			throw new SQLException("milliseconds is less than zero", "M1M05");
 
@@ -1622,9 +1629,7 @@ public class MonetConnection
 	 */
 	@Override
 	public int getNetworkTimeout() throws SQLException {
-		if (closed)
-			throw new SQLException("Cannot call on closed Connection", "M1M20");
-
+		checkNotClosed();
 		try {
 			return server.getSoTimeout();
 		} catch (SocketException e) {
@@ -1656,6 +1661,15 @@ public class MonetConnection
 	}
 
 	/**
+	 * Local helper method to test whether the Connection object is closed
+	 * When closed it throws an SQLException
+	 */
+	private void checkNotClosed() throws SQLException {
+		if (closed)
+			throw new SQLException("Connection is closed", "M1M20");
+	}
+
+	/**
 	 * @return the MonetDB JDBC Connection URL (without user name and password).
 	 * It is called from: getURL()in MonetDatabaseMetaData
 	 */