From 3be641e7a58e2dc45c42cf778b54d8020a0efdce Mon Sep 17 00:00:00 2001 From: tyqi11 <443564687@qq.com> Date: Tue, 3 Mar 2020 13:24:23 -0800 Subject: [PATCH] Improve performance by avoiding string concatenation in a loop using StringBuilder --- .../apache/cassandra/hadoop/cql3/CqlRecordWriter.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java index 989d154f1519..d7822e6c4a90 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java @@ -474,14 +474,16 @@ private ByteBuffer getPartitionKey(Map keyColumns) */ private String appendKeyWhereClauses(String cqlQuery) { - String keyWhereClause = ""; + StringBuilder keyWhereClause = new StringBuilder(); + + keyWhereClause.append(cqlQuery).append(" WHERE "); for (ColumnMetadata partitionKey : partitionKeyColumns) - keyWhereClause += String.format("%s = ?", keyWhereClause.isEmpty() ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName()))); + keyWhereClause.append(String.format("%s = ?", (keyWhereClause.length() == 0) ? quote(partitionKey.getName()) : (" AND " + quote(partitionKey.getName())))); for (ColumnMetadata clusterColumn : clusterColumns) - keyWhereClause += " AND " + quote(clusterColumn.getName()) + " = ?"; + keyWhereClause.append(" AND " + quote(clusterColumn.getName()) + " = ?"); - return cqlQuery + " WHERE " + keyWhereClause; + return keyWhereClause.toString(); } /** Quoting for working with uppercase */