Skip to content

Commit

Permalink
Updated and added more test scenarios for Bulk Copy
Browse files Browse the repository at this point in the history
  • Loading branch information
muskan124947 committed Feb 20, 2025
1 parent 0b6b392 commit c69dfb1
Showing 1 changed file with 187 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -119,26 +119,26 @@ public void testBulkCopyDateTimePrecision() throws SQLException {
bulkCopy.writeToServer(new BulkRecordDT(data8));

String select = "SELECT * FROM " + dstTable + " order by Dataid";
ResultSet rs = dstStmt.executeQuery(select);

assertTrue(rs.next());
assertTrue(data.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data3.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data4.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data5.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data6.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data7.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data8.equals(rs.getObject(2, LocalDateTime.class)));
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertTrue(data.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data3.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data4.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data5.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data6.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data7.equals(rs.getObject(2, LocalDateTime.class)));
assertTrue(rs.next());
assertTrue(data8.equals(rs.getObject(2, LocalDateTime.class)));
}

} catch (Exception e) {
fail(e.getMessage());
Expand Down Expand Up @@ -170,10 +170,94 @@ public void testBulkCopyJSON() throws SQLException {
bulkCopy.writeToServer(new BulkRecordJSON(data));

String select = "SELECT * FROM " + dstTable;
ResultSet rs = dstStmt.executeQuery(select);
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertTrue(data.equals(rs.getObject(1)));
}

} catch (Exception e) {
fail(e.getMessage());
} finally {
try (Statement stmt = conn.createStatement();) {
TestUtils.dropTableIfExists(dstTable, stmt);
}
}
}
}

/**
* Test bulk copy with empty JSON document
*/
@Test
public void testBulkCopyWithEmptyJsonDocument() throws SQLException {
String dstTable = TestUtils
.escapeSingleQuotes(AbstractSQLGenerator.escapeIdentifier(RandomUtil.getIdentifier("dstTable")));

try (Connection conn = DriverManager.getConnection(connectionString);) {
try (Statement dstStmt = conn.createStatement();
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn)) {

dstStmt.executeUpdate(
"CREATE TABLE " + dstTable + " (testCol JSON);");

bulkCopy.setDestinationTableName(dstTable);
String data1 = "{}";
String data2 = "{\"key2\":\"value2\",\"key3\":123}";
bulkCopy.writeToServer(new BulkRecordJSON(data1));
bulkCopy.writeToServer(new BulkRecordJSON(data2));

assertTrue(rs.next());
assertTrue(data.equals(rs.getObject(1)));
String select = "SELECT * FROM " + dstTable;
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertEquals(data1, rs.getString(1));
assertTrue(rs.next());
assertEquals(data2, rs.getString(1));
}

} catch (Exception e) {
fail(e.getMessage());
} finally {
try (Statement stmt = conn.createStatement();) {
TestUtils.dropTableIfExists(dstTable, stmt);
}
}
}
}


/**
* Test bulk copy with multiple JSON rows containing different structures
* and compared using getString(columnIndex)
*/
@Test
public void testBulkCopyMultipleJsonRowsWithDifferentStructures() throws SQLException {
String dstTable = TestUtils
.escapeSingleQuotes(AbstractSQLGenerator.escapeIdentifier(RandomUtil.getIdentifier("dstTable")));

try (Connection conn = DriverManager.getConnection(connectionString);) {
try (Statement dstStmt = conn.createStatement();
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn)) {

dstStmt.executeUpdate(
"CREATE TABLE " + dstTable + " (testCol JSON);");

bulkCopy.setDestinationTableName(dstTable);
String data1 = "{\"key1\":\"value1\"}";
String data2 = "{\"key2\":\"value2\",\"key3\":123}";
String data3 = "{\"key3\":123,\"key4\":\"value4\",\"key5\":\"value5\"}";
bulkCopy.writeToServer(new BulkRecordJSON(data1));
bulkCopy.writeToServer(new BulkRecordJSON(data2));
bulkCopy.writeToServer(new BulkRecordJSON(data3));

String select = "SELECT * FROM " + dstTable;
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertEquals(data1, rs.getString(1));
assertTrue(rs.next());
assertEquals(data2, rs.getString(1));
assertTrue(rs.next());
assertEquals(data3, rs.getString(1));
}

} catch (Exception e) {
fail(e.getMessage());
Expand Down Expand Up @@ -209,14 +293,14 @@ public void testBulkCopyMultipleJsonRows() throws SQLException {
bulkCopy.writeToServer(new BulkRecordJSON(data3));

String select = "SELECT * FROM " + dstTable;
ResultSet rs = dstStmt.executeQuery(select);

assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data3.equals(rs.getObject(1)));
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data3.equals(rs.getObject(1)));
}

} catch (Exception e) {
fail(e.getMessage());
Expand Down Expand Up @@ -252,14 +336,14 @@ public void testBulkCopyMultipleJsonRowsAndColumns() throws SQLException {
bulkCopy.writeToServer(new BulkRecordJSONMultipleColumns(data2Col1, data2Col2));

String select = "SELECT * FROM " + dstTable;
ResultSet rs = dstStmt.executeQuery(select);

assertTrue(rs.next());
assertTrue(data1Col1.equals(rs.getObject(1)));
assertTrue(data1Col2.equals(rs.getObject(2)));
assertTrue(rs.next());
assertTrue(data2Col1.equals(rs.getObject(1)));
assertTrue(data2Col2.equals(rs.getObject(2)));
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertTrue(data1Col1.equals(rs.getObject(1)));
assertTrue(data1Col2.equals(rs.getObject(2)));
assertTrue(rs.next());
assertTrue(data2Col1.equals(rs.getObject(1)));
assertTrue(data2Col2.equals(rs.getObject(2)));
}

} catch (Exception e) {
fail(e.getMessage());
Expand All @@ -272,7 +356,7 @@ public void testBulkCopyMultipleJsonRowsAndColumns() throws SQLException {
}

/**
* Test bulk copy with nested JSON rows.
* Test bulk copy with nested JSON documents.
*/
@Test
public void testBulkCopyNestedJsonRows() throws SQLException {
Expand All @@ -288,21 +372,21 @@ public void testBulkCopyNestedJsonRows() throws SQLException {

bulkCopy.setDestinationTableName(dstTable);
String data1 = "{\"key1\":{\"nestedKey1\":\"nestedValue1\"}}";
String data2 = "{\"key2\":{\"nestedKey2\":\"nestedValue2\"}}";
String data3 = "{\"key3\":{\"nestedKey3\":\"nestedValue3\"}}";
String data2 = "{\"key2\":{\"nestedKey2\":{\"nestedKey3\":\"nestedValue3\"}}}";
String data3 = "{\"key3\":{\"nestedKey4\":{\"nestedKey5\":{\"nestedKey6\":\"nestedValue6\"}}}}";
bulkCopy.writeToServer(new BulkRecordJSON(data1));
bulkCopy.writeToServer(new BulkRecordJSON(data2));
bulkCopy.writeToServer(new BulkRecordJSON(data3));

String select = "SELECT * FROM " + dstTable;
ResultSet rs = dstStmt.executeQuery(select);

assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data3.equals(rs.getObject(1)));
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
assertTrue(data1.equals(rs.getObject(1)));
assertTrue(rs.next());
assertTrue(data2.equals(rs.getObject(1)));
assertTrue(rs.next());
assertEquals(data3, rs.getString(1));
}

} catch (Exception e) {
fail(e.getMessage());
Expand Down Expand Up @@ -337,11 +421,60 @@ public void testBulkCopyWithVariousDataTypes() throws SQLException {
bulkCopy.writeToServer(new BulkRecordJSON(data));

String select = "SELECT * FROM " + dstTable;
ResultSet rs = dstStmt.executeQuery(select);
try (ResultSet rs = dstStmt.executeQuery(select)) {
assertTrue(rs.next());
String jsonData = rs.getString(1);
assertEquals(data, jsonData);
}

} catch (Exception e) {
fail(e.getMessage());
} finally {
try (Statement stmt = conn.createStatement();) {
TestUtils.dropTableIfExists(dstTable, stmt);
}
}
}
}

/**
* Test bulk copy with count verification.
*/
@Test
public void testBulkCopyWithCountVerification() throws SQLException {
String dstTable = TestUtils
.escapeSingleQuotes(AbstractSQLGenerator.escapeIdentifier(RandomUtil.getIdentifier("dstTable")));

try (Connection conn = DriverManager.getConnection(connectionString);) {
try (Statement dstStmt = conn.createStatement();
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(conn)) {

dstStmt.executeUpdate(
"CREATE TABLE " + dstTable + " (testCol JSON);");

bulkCopy.setDestinationTableName(dstTable);
String data1 = "{\"key1\":\"value1\"}";
String data2 = "{\"key2\":\"value2\"}";
bulkCopy.writeToServer(new BulkRecordJSON(data1));
bulkCopy.writeToServer(new BulkRecordJSON(data2));

String selectCount = "SELECT COUNT(*) FROM " + dstTable;
int count1 = 0;
try (ResultSet rs = dstStmt.executeQuery(selectCount)) {
if (rs.next()) {
count1 = rs.getInt(1);
}
}

String select = "SELECT * FROM " + dstTable;
int count2 = 0;
try (ResultSet rs = dstStmt.executeQuery(select)) {
while (rs.next()) {
count2++;
}
}

assertTrue(rs.next());
String jsonData = rs.getString(1);
assertEquals(data, jsonData);
assertEquals(count1, count2);

} catch (Exception e) {
fail(e.getMessage());
Expand Down

0 comments on commit c69dfb1

Please sign in to comment.