From 9ea5684a5393c731c27af76496e8fa431522b0e4 Mon Sep 17 00:00:00 2001 From: Shawn Sun Date: Wed, 26 Jul 2017 13:16:38 -0700 Subject: [PATCH 1/3] fix issue on parameter metadata with SQL Server 2008 when parameter name contains braces --- .../sqlserver/jdbc/SQLServerParameterMetaData.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerParameterMetaData.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerParameterMetaData.java index aeeeeb5a79..2e0486859b 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerParameterMetaData.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerParameterMetaData.java @@ -176,8 +176,13 @@ final public String toString() { } if (nState == 1) { if (sToken.trim().length() > 0) { - if (sToken.charAt(0) != ',') + if (sToken.charAt(0) != ',') { sLastField = escapeParse(st, sToken); + + // in case the parameter has braces in its name, e.g. [c2_nvarchar(max)], the original sToken variable just + // contains [c2_nvarchar, sLastField actually has the whole name [c2_nvarchar(max)] + sTokenIndex = sTokenIndex + (sLastField.length() - sToken.length()); + } } } } From a07b9b85ff4fd7787c347de7121ace4a68eec576 Mon Sep 17 00:00:00 2001 From: Shawn Sun Date: Wed, 26 Jul 2017 13:23:49 -0700 Subject: [PATCH 2/3] added test for parameter with braces --- .../ParameterMetaDataTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java index bfc4215715..520f3c6fd3 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java @@ -73,4 +73,28 @@ public void testSQLServerExceptionNotWrapped() throws SQLException { "SQLServerException should not be wrapped by another SQLServerException."); } } + + /** + * Test ParameterMetaData when parameter name contains braces + * + * @throws SQLException + */ + @Test + public void testNameWithBraces() throws SQLException { + try (Connection con = DriverManager.getConnection(connectionString); Statement stmt = con.createStatement()) { + + stmt.executeUpdate("create table " + tableName + " ([c1_varchar(max)] varchar(max))"); + try { + String query = "insert into " + tableName + " ([c1_varchar(max)]) values (?)"; + + try (PreparedStatement pstmt = con.prepareStatement(query)) { + pstmt.getParameterMetaData(); + } + } + finally { + Utils.dropTableIfExists(tableName, stmt); + } + + } + } } From 78d40e0479d166a4254180baefa569645a99861b Mon Sep 17 00:00:00 2001 From: Shawn Sun Date: Wed, 26 Jul 2017 13:26:38 -0700 Subject: [PATCH 3/3] delete extra lines --- .../sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java index 520f3c6fd3..6419d21991 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/parametermetadata/ParameterMetaDataTest.java @@ -52,7 +52,6 @@ public void testParameterMetaDataWrapper() throws SQLException { finally { Utils.dropTableIfExists(tableName, stmt); } - } } @@ -94,7 +93,6 @@ public void testNameWithBraces() throws SQLException { finally { Utils.dropTableIfExists(tableName, stmt); } - } } }