From 7e66b078ee095a564518f53d1206e4cef2d8b49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E4=BA=91=E9=87=91YunjinXu?= Date: Tue, 21 Jan 2025 10:17:51 +0800 Subject: [PATCH] test: add tests for column case sensitivity in batch execution - Add test case for matching column case in batch execution - Add test case for mismatched column case in batch execution, expected SQLServerException --- .../unit/statement/BatchExecutionTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/unit/statement/BatchExecutionTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/unit/statement/BatchExecutionTest.java index ba3f6e70c..11f74dac6 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/unit/statement/BatchExecutionTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/unit/statement/BatchExecutionTest.java @@ -568,6 +568,55 @@ public void testBatchStatementCancellation() throws Exception { } } + @Test + public void testExecuteBatchColumnCaseMatching() throws Exception { + String varcharTable1 = AbstractSQLGenerator.escapeIdentifier(RandomUtil.getIdentifier("varchartable1")); + // Insert Timestamp using prepared statement when useBulkCopyForBatchInsert=true + try (Connection con = DriverManager.getConnection(connectionString + + ";useBulkCopyForBatchInsert=true;sendTemporalDataTypesAsStringForBulkCopy=false;")) { + try (Statement statement = con.createStatement()) { + TestUtils.dropTableIfExists(varcharTable1, statement); + String createSql = "CREATE TABLE" + varcharTable1 + " (c1 varchar(10))"; + statement.execute(createSql); + } + try (PreparedStatement preparedStatement = con.prepareStatement("INSERT INTO " + varcharTable1 + "(c1) VALUES(?)")) { + preparedStatement.setObject(1, "value1"); + preparedStatement.addBatch(); + preparedStatement.setObject(1, "value2"); + preparedStatement.addBatch(); + preparedStatement.executeBatch(); + } + } + } + + @Test + public void testExecuteBatchColumnCaseMismatch() throws Exception { + String varcharTable1 = AbstractSQLGenerator.escapeIdentifier(RandomUtil.getIdentifier("varchartable1")); + // Insert Timestamp using prepared statement when useBulkCopyForBatchInsert=true + try (Connection con = DriverManager.getConnection(connectionString + + ";useBulkCopyForBatchInsert=true;sendTemporalDataTypesAsStringForBulkCopy=false;")) { + try (Statement statement = con.createStatement()) { + TestUtils.dropTableIfExists(varcharTable1, statement); + String createSql = "CREATE TABLE" + varcharTable1 + " (c1 varchar(10))"; + statement.execute(createSql); + } + // upper case C1 + try (PreparedStatement preparedStatement = con.prepareStatement("INSERT INTO " + varcharTable1 + "(C1) VALUES(?)")) { + preparedStatement.setObject(1, "value1"); + preparedStatement.addBatch(); + preparedStatement.setObject(1, "value2"); + preparedStatement.addBatch(); + try { + preparedStatement.executeBatch(); + fail("Should have failed"); + } catch (Exception ex) { + assertInstanceOf(SQLServerException.class, ex); + assertEquals("Unable to retrieve column metadata.", ex.getMessage()); + } + } + } + } + /** * Get a PreparedStatement object and call the addBatch() method with 3 SQL statements and call the executeBatch() * method and it should return array of Integer values of length 3