From 3d07480596e9414a644a1d221590a284c7e7c711 Mon Sep 17 00:00:00 2001 From: Ananya Garg Date: Fri, 21 Feb 2025 10:44:20 +0530 Subject: [PATCH] Optimized string parsing to avoid unnecessary allocations. --- .../sqlserver/jdbc/SQLServerBulkCSVFileRecord.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerBulkCSVFileRecord.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerBulkCSVFileRecord.java index d395f1b7c..ffd5047d6 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerBulkCSVFileRecord.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerBulkCSVFileRecord.java @@ -651,7 +651,7 @@ private static String[] escapeQuotesRFC4180(String[] tokens) throws SQLServerExc private static String[] parseString(String buffer, String delimiter) { ArrayList tokens = new ArrayList<>(); - StringBuilder currentToken = new StringBuilder(); + int position = 0; boolean quoted = false; int braceCount = 0; // track nested JSON @@ -668,17 +668,15 @@ private static String[] parseString(String buffer, String delimiter) { // If delimiter is encountered and we're not inside quotes or JSON, we add the token if (!quoted && braceCount == 0 && buffer.startsWith(delimiter, i)) { - tokens.add(currentToken.toString()); - currentToken.setLength(0); // Reset current token - i += delimiter.length() - 1; // Skip delimiter - continue; + // Add field to token list when delimiter is found + tokens.add(buffer.substring(position, i)); + position = i + delimiter.length(); + i = position - 1;// Adjust the index to start after the delimiter } - - currentToken.append(c); } // Add the last field - tokens.add(currentToken.toString()); + tokens.add(buffer.substring(position)); return tokens.toArray(new String[0]); } }