Skip to content

Commit d905323

Browse files
authored
Fix Cassandra case insensitive issue (#2897)
1 parent 819ae90 commit d905323

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

core/src/main/java/com/scalar/db/storage/cassandra/CassandraAdmin.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ private void upsertIntoNamespacesTable(String keyspace) {
139139
String insertQuery =
140140
QueryBuilder.insertInto(
141141
quoteIfNecessary(metadataKeyspace), quoteIfNecessary(NAMESPACES_TABLE))
142-
.value(NAMESPACES_NAME_COL, quoteIfNecessary(keyspace))
142+
.value(NAMESPACES_NAME_COL, keyspace)
143143
.toString();
144144
clusterManager.getSession().execute(insertQuery);
145145
}
@@ -180,7 +180,7 @@ private void deleteFromNamespacesTable(String keyspace) {
180180
String deleteQuery =
181181
QueryBuilder.delete()
182182
.from(quoteIfNecessary(metadataKeyspace), quoteIfNecessary(NAMESPACES_TABLE))
183-
.where(QueryBuilder.eq(NAMESPACES_NAME_COL, quoteIfNecessary(keyspace)))
183+
.where(QueryBuilder.eq(NAMESPACES_NAME_COL, keyspace))
184184
.toString();
185185
clusterManager.getSession().execute(deleteQuery);
186186
}
@@ -279,7 +279,9 @@ private TableMetadata createTableMetadata(com.datastax.driver.core.TableMetadata
279279
ClusteringOrder clusteringOrder = metadata.getClusteringOrder().get(i);
280280
builder.addClusteringKey(clusteringColumnName, convertOrder(clusteringOrder));
281281
}
282-
metadata.getIndexes().forEach(i -> builder.addSecondaryIndex(i.getTarget()));
282+
metadata
283+
.getIndexes()
284+
.forEach(i -> builder.addSecondaryIndex(unquoteIfNecessary(i.getTarget())));
283285
return builder.build();
284286
}
285287

@@ -349,7 +351,7 @@ public boolean namespaceExists(String namespace) throws ExecutionException {
349351
String query =
350352
QueryBuilder.select(NAMESPACES_NAME_COL)
351353
.from(quoteIfNecessary(metadataKeyspace), quoteIfNecessary(NAMESPACES_TABLE))
352-
.where(QueryBuilder.eq(NAMESPACES_NAME_COL, quoteIfNecessary(namespace)))
354+
.where(QueryBuilder.eq(NAMESPACES_NAME_COL, namespace))
353355
.toString();
354356
ResultSet resultSet = clusterManager.getSession().execute(query);
355357

@@ -396,8 +398,8 @@ public void addNewColumnToTable(
396398
}
397399
try {
398400
String alterTableQuery =
399-
SchemaBuilder.alterTable(namespace, table)
400-
.addColumn(columnName)
401+
SchemaBuilder.alterTable(quoteIfNecessary(namespace), quoteIfNecessary(table))
402+
.addColumn(quoteIfNecessary(columnName))
401403
.type(toCassandraDataType(columnType))
402404
.getQueryString();
403405

@@ -686,4 +688,14 @@ public String toString() {
686688
return strategyName;
687689
}
688690
}
691+
692+
private String unquoteIfNecessary(String identifier) {
693+
if (identifier == null) {
694+
return null;
695+
}
696+
if (identifier.length() >= 2 && identifier.startsWith("\"") && identifier.endsWith("\"")) {
697+
return identifier.substring(1, identifier.length() - 1).replace("\"\"", "\"");
698+
}
699+
return identifier;
700+
}
689701
}

core/src/test/java/com/scalar/db/storage/cassandra/CassandraAdminTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private void verifyInsertIntoKeyspacesTableQuery(String keyspace) {
229229
QueryBuilder.insertInto(
230230
quoteIfNecessary(METADATA_KEYSPACE),
231231
quoteIfNecessary(CassandraAdmin.NAMESPACES_TABLE))
232-
.value(CassandraAdmin.NAMESPACES_NAME_COL, quoteIfNecessary(keyspace))
232+
.value(CassandraAdmin.NAMESPACES_NAME_COL, keyspace)
233233
.toString();
234234
verify(cassandraSession).execute(query);
235235
}
@@ -569,7 +569,7 @@ private void verifyDeleteFromKeyspacesTableQuery(String keyspace) {
569569
.from(
570570
quoteIfNecessary(METADATA_KEYSPACE),
571571
quoteIfNecessary(CassandraAdmin.NAMESPACES_TABLE))
572-
.where(QueryBuilder.eq(CassandraAdmin.NAMESPACES_NAME_COL, quoteIfNecessary(keyspace)))
572+
.where(QueryBuilder.eq(CassandraAdmin.NAMESPACES_NAME_COL, keyspace))
573573
.toString();
574574
verify(cassandraSession).execute(query);
575575
}

0 commit comments

Comments
 (0)