@@ -1408,82 +1408,76 @@ private void getCreateTableTemporalSQL(String tableName) throws SQLException {
1408
1408
}
1409
1409
1410
1410
/**
1411
- * Test batch insert using bulk copy with string values when setSendStringParametersAsUnicode is true.
1411
+ * Test string values using prepared statement using accented and unicode characters.
1412
+ * This test covers all combinations of useBulkCopyForBatchInsert and sendStringParametersAsUnicode.
1413
+ *
1414
+ * @throws Exception
1412
1415
*/
1413
1416
@ Test
1414
- public void testBulkInsertStringWhenSentAsUnicode () throws Exception {
1415
- String insertSQL = "INSERT INTO " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString )
1416
- + " (charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol) VALUES (?, ?, ?, ?, ?, ?)" ;
1417
-
1418
- String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol FROM "
1419
- + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString );
1420
-
1421
- try (Connection connection = PrepUtil .getConnection (
1422
- connectionString + ";useBulkCopyForBatchInsert=true;sendStringParametersAsUnicode=true;" );
1423
- SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement ) connection .prepareStatement (insertSQL );
1424
- Statement stmt = (SQLServerStatement ) connection .createStatement ()) {
1425
-
1426
- getCreateTableWithStringData ();
1427
-
1428
- pstmt .setString (1 , "CHAR_VAL" );
1429
- pstmt .setString (2 , "VARCHAR_VALUE" );
1430
- pstmt .setString (3 , "LONGVARCHAR_VALUE_WITH_MORE_TEXT" );
1431
- pstmt .setString (4 , "NCHAR_VAL" );
1432
- pstmt .setString (5 , "NVARCHAR_VALUE" );
1433
- pstmt .setString (6 , "LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" );
1434
- pstmt .addBatch ();
1435
- pstmt .executeBatch ();
1436
-
1437
- // Validate inserted data
1438
- try (ResultSet rs = stmt .executeQuery (selectSQL )) {
1439
- assertTrue (rs .next (), "Expected at least one row in result set" );
1440
- assertEquals ("CHAR_VAL" , rs .getString ("charCol" ));
1441
- assertEquals ("VARCHAR_VALUE" , rs .getString ("varcharCol" ));
1442
- assertEquals ("LONGVARCHAR_VALUE_WITH_MORE_TEXT" , rs .getString ("longvarcharCol" ));
1443
- assertEquals ("NCHAR_VAL" , rs .getString ("ncharCol" ));
1444
- assertEquals ("NVARCHAR_VALUE" , rs .getString ("nvarcharCol" ));
1445
- assertEquals ("LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" , rs .getString ("longnvarcharCol" ));
1446
- assertFalse (rs .next ());
1417
+ public void testBulkInsertStringAllCombinations () throws Exception {
1418
+ boolean [] bulkCopyOptions = { true , false };
1419
+ boolean [] unicodeOptions = { true , false };
1420
+ for (boolean useBulkCopy : bulkCopyOptions ) {
1421
+ for (boolean sendUnicode : unicodeOptions ) {
1422
+ runBulkInsertStringTest (useBulkCopy , sendUnicode );
1447
1423
}
1448
1424
}
1449
1425
}
1450
1426
1451
1427
/**
1452
- * Test batch insert using bulk copy with string values when setSendStringParametersAsUnicode is false .
1428
+ * Test batch insert using accented and unicode characters .
1453
1429
*/
1454
- @ Test
1455
- public void testBulkInsertStringWhenNotSentAsUnicode () throws Exception {
1430
+ public void runBulkInsertStringTest (boolean useBulkCopy , boolean sendUnicode ) throws Exception {
1456
1431
String insertSQL = "INSERT INTO " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString )
1457
- + " (charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol) VALUES (?, ?, ?, ?, ?, ?)" ;
1432
+ + " (charCol, varcharCol, longvarcharCol, ncharCol1, nvarcharCol1, longnvarcharCol1, "
1433
+ + "ncharCol2, nvarcharCol2, longnvarcharCol2) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" ;
1458
1434
1459
- String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol FROM "
1435
+ String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol1, nvarcharCol1, "
1436
+ + "longnvarcharCol1, ncharCol2, nvarcharCol2, longnvarcharCol2 FROM "
1460
1437
+ AbstractSQLGenerator .escapeIdentifier (tableNameBulkString );
1461
1438
1462
1439
try (Connection connection = PrepUtil .getConnection (
1463
- connectionString + ";useBulkCopyForBatchInsert=true;sendStringParametersAsUnicode=false;" );
1440
+ connectionString + ";useBulkCopyForBatchInsert=" + useBulkCopy + ";sendStringParametersAsUnicode="
1441
+ + sendUnicode + ";" );
1464
1442
SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement ) connection .prepareStatement (insertSQL );
1465
1443
Statement stmt = (SQLServerStatement ) connection .createStatement ()) {
1466
1444
1467
1445
getCreateTableWithStringData ();
1468
1446
1469
- pstmt .setString (1 , "CHAR_VAL" );
1470
- pstmt .setString (2 , "VARCHAR_VALUE" );
1471
- pstmt .setString (3 , "LONGVARCHAR_VALUE_WITH_MORE_TEXT" );
1472
- pstmt .setString (4 , "NCHAR_VAL" );
1473
- pstmt .setString (5 , "NVARCHAR_VALUE" );
1474
- pstmt .setString (6 , "LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" );
1447
+ String charValue = "Anaïs_Ni" ;
1448
+ String varcharValue = "café" ;
1449
+ String longVarcharValue = "Sørén Kierkégaard" ;
1450
+ String ncharValue1 = "José Müll" ;
1451
+ String nvarcharValue1 = "José Müller" ;
1452
+ String longNvarcharValue1 = "François Saldaña" ;
1453
+ String ncharValue2 = "Test1汉字😀" ;
1454
+ String nvarcharValue2 = "汉字" ;
1455
+ String longNvarcharValue2 = "日本語" ;
1456
+
1457
+ pstmt .setString (1 , charValue );
1458
+ pstmt .setString (2 , varcharValue );
1459
+ pstmt .setString (3 , longVarcharValue );
1460
+ pstmt .setString (4 , ncharValue1 );
1461
+ pstmt .setString (5 , nvarcharValue1 );
1462
+ pstmt .setString (6 , longNvarcharValue1 );
1463
+ pstmt .setNString (7 , ncharValue2 );
1464
+ pstmt .setNString (8 , nvarcharValue2 );
1465
+ pstmt .setNString (9 , longNvarcharValue2 );
1475
1466
pstmt .addBatch ();
1476
1467
pstmt .executeBatch ();
1477
1468
1478
1469
// Validate inserted data
1479
1470
try (ResultSet rs = stmt .executeQuery (selectSQL )) {
1480
1471
assertTrue (rs .next (), "Expected at least one row in result set" );
1481
- assertEquals ("CHAR_VAL" , rs .getString ("charCol" ));
1482
- assertEquals ("VARCHAR_VALUE" , rs .getString ("varcharCol" ));
1483
- assertEquals ("LONGVARCHAR_VALUE_WITH_MORE_TEXT" , rs .getString ("longvarcharCol" ));
1484
- assertEquals ("NCHAR_VAL" , rs .getString ("ncharCol" ));
1485
- assertEquals ("NVARCHAR_VALUE" , rs .getString ("nvarcharCol" ));
1486
- assertEquals ("LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" , rs .getString ("longnvarcharCol" ));
1472
+ assertEquals (charValue , rs .getString ("charCol" ));
1473
+ assertEquals (varcharValue , rs .getString ("varcharCol" ));
1474
+ assertEquals (longVarcharValue , rs .getString ("longvarcharCol" ));
1475
+ assertEquals (ncharValue1 , rs .getString ("ncharCol1" ));
1476
+ assertEquals (nvarcharValue1 , rs .getString ("nvarcharCol1" ));
1477
+ assertEquals (longNvarcharValue1 , rs .getString ("longnvarcharCol1" ));
1478
+ assertEquals (ncharValue2 , rs .getString ("ncharCol2" ));
1479
+ assertEquals (nvarcharValue2 , rs .getString ("nvarcharCol2" ));
1480
+ assertEquals (longNvarcharValue2 , rs .getString ("longnvarcharCol2" ));
1487
1481
assertFalse (rs .next ());
1488
1482
}
1489
1483
}
@@ -1493,12 +1487,15 @@ private void getCreateTableWithStringData() throws SQLException {
1493
1487
try (Statement stmt = connection .createStatement ()) {
1494
1488
TestUtils .dropTableIfExists (AbstractSQLGenerator .escapeIdentifier (tableNameBulkString ), stmt );
1495
1489
String createTableSQL = "CREATE TABLE " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString ) + " (" +
1496
- "charCol CHAR(8) NOT NULL, " +
1497
- "varcharCol VARCHAR(50) NOT NULL, " +
1498
- "longvarcharCol VARCHAR(MAX) NOT NULL, " +
1499
- "ncharCol NCHAR(9) NOT NULL, " +
1500
- "nvarcharCol NVARCHAR(50) NOT NULL, " +
1501
- "longnvarcharCol NVARCHAR(MAX) NOT NULL" + ")" ;
1490
+ "charCol CHAR(8), " +
1491
+ "varcharCol VARCHAR(50), " +
1492
+ "longvarcharCol VARCHAR(MAX), " +
1493
+ "ncharCol1 NCHAR(9), " +
1494
+ "nvarcharCol1 NVARCHAR(50), " +
1495
+ "longnvarcharCol1 NVARCHAR(MAX), " +
1496
+ "ncharCol2 NCHAR(9), " +
1497
+ "nvarcharCol2 NVARCHAR(50), " +
1498
+ "longnvarcharCol2 NVARCHAR(MAX)" + ")" ;
1502
1499
1503
1500
stmt .execute (createTableSQL );
1504
1501
}
0 commit comments