diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDatabaseMetaData.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDatabaseMetaData.java index de376a5e3..405e01023 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDatabaseMetaData.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDatabaseMetaData.java @@ -28,6 +28,7 @@ * The API javadoc for JDBC API methods that this class implements are not repeated here. Please see Sun's JDBC API * interfaces javadoc for those details. */ +@SuppressWarnings("unused") public final class SQLServerDatabaseMetaData implements java.sql.DatabaseMetaData, Serializable { /** * Always update serialVersionUID when prompted. @@ -1014,16 +1015,23 @@ public int getMaxColumnsInTable() throws SQLServerException { @Override public int getMaxConnections() throws SQLException, SQLTimeoutException { checkClosed(); - try { - String s = "sp_configure 'user connections'"; - SQLServerResultSet rs = getResultSetFromInternalQueries(null, s); - if (!rs.next()) + try (SQLServerResultSet rs = getResultSetFromInternalQueries(null, + "select maximum from sys.configurations where name = 'user connections'")) { + if (!rs.next()) { return 0; + } return rs.getInt("maximum"); } catch (SQLServerException e) { - return 0; + // Try with sp_configure if users do not have privileges to execute sys.configurations + try (SQLServerResultSet rs1 = getResultSetFromInternalQueries(null, "sp_configure 'user connections'")) { + if (!rs1.next()) { + return 0; + } + return rs1.getInt("maximum"); + } catch (SQLServerException e1) { + return 0; + } } - } @Override diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/SQLServerConnectionTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/SQLServerConnectionTest.java index 3d1eff7b4..2f5edccee 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/SQLServerConnectionTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/SQLServerConnectionTest.java @@ -531,7 +531,7 @@ public void testAbortBadParam() throws SQLException { try { conn.abort(null); } catch (SQLException e) { - assertTrue(e.getMessage().contains(TestResource.getResource("R_invalidArgumentExecutor"))); + assertTrue(e.getMessage().matches(TestUtils.formatErrorMsg("R_invalidArgument"))); } } } diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/TestResource.java b/src/test/java/com/microsoft/sqlserver/jdbc/TestResource.java index 6a0444bc2..638453043 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/TestResource.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/TestResource.java @@ -81,7 +81,6 @@ protected Object[][] getContents() { {"R_cannotOpenDatabase", "Cannot open database"}, {"R_shouldNotConnect", "Should not have connected"}, {"R_loginFailed", "Login failed"}, {"R_exitedMoreSeconds", "Exited in more than {0} seconds."}, {"R_exitedLessSeconds", "Exited in less than {0} seconds."}, - {"R_invalidArgumentExecutor", "The argument executor is not valid"}, {"R_threadInterruptNotSet", "Thread's interrupt status is not set."}, {"R_connectMirrored", "Connecting to a mirrored"}, {"R_trustStorePasswordNotSet", "The DataSource trustStore password needs to be set."}, diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/databasemetadata/DatabaseMetaDataTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/databasemetadata/DatabaseMetaDataTest.java index eca0cc2de..61a9cbad1 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/databasemetadata/DatabaseMetaDataTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/databasemetadata/DatabaseMetaDataTest.java @@ -423,8 +423,10 @@ public void testGetColumnPrivileges() throws SQLException { public void testGetFunctionsWithWrongParams() throws SQLException { try (Connection conn = getConnection()) { conn.getMetaData().getFunctions("", null, "xp_%"); - assertTrue(false, TestResource.getResource("R_noSchemaShouldFail")); - } catch (Exception ae) {} + fail(TestResource.getResource("R_noSchemaShouldFail")); + } catch (SQLException e) { + assert (e.getMessage().matches(TestUtils.formatErrorMsg("R_invalidArgument"))); + } } /** @@ -544,4 +546,21 @@ public void testPreparedStatementMetadataCaching() throws SQLException { } } } + + @Test + @Tag(Constants.xAzureSQLDW) + public void testGetMaxConnections() throws SQLException { + try (Statement stmt = connection.createStatement(); ResultSet rs = stmt + .executeQuery("select maximum from sys.configurations where name = 'user connections'")) { + assert (null != rs); + rs.next(); + + DatabaseMetaData databaseMetaData = connection.getMetaData(); + int maxConn = databaseMetaData.getMaxConnections(); + + assertEquals(maxConn, rs.getInt(1)); + } catch (SQLException e) { + fail(e.getMessage()); + } + } }