Skip to content

Commit 2110932

Browse files
authored
[Java] Fix CassandraIO ReadFn to quote column names for reserved keywords (#36459)
* Fix CassandraIO ReadFn to quote column names for reserved keywords * Minor fixes
1 parent 79ea2e8 commit 2110932

File tree

2 files changed

+384
-0
lines changed

2 files changed

+384
-0
lines changed

sdks/java/io/cassandra/src/main/java/org/apache/beam/sdk/io/cassandra/ReadFn.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public void processElement(@Element Read<T> read, OutputReceiver<T> receiver) th
5050
session.getCluster().getMetadata().getKeyspace(read.keyspace().get())
5151
.getTable(read.table().get()).getPartitionKey().stream()
5252
.map(ColumnMetadata::getName)
53+
.map(ReadFn::quoteIdentifier)
5354
.collect(Collectors.joining(","));
5455

5556
String query = generateRangeQuery(read, partitionKey, read.ringRanges() != null);
@@ -148,4 +149,13 @@ private static String buildInitialQuery(Read<?> spec, Boolean hasRingRange) {
148149
private static String getJoinerClause(String queryString) {
149150
return queryString.toUpperCase().contains("WHERE") ? " AND " : " WHERE ";
150151
}
152+
153+
static String quoteIdentifier(String identifier) {
154+
if (identifier == null) {
155+
return null;
156+
}
157+
// Escape any existing double quotes by doubling them
158+
String escaped = identifier.replace("\"", "\"\"");
159+
return "\"" + escaped + "\"";
160+
}
151161
}

0 commit comments

Comments
 (0)