Fix MaterializedViewMetadata when base table name is case sensitive (JAVA-953).
diff --git a/changelog/README.md b/changelog/README.md
index f3f4f94..0bcd2e2 100644
--- a/changelog/README.md
+++ b/changelog/README.md
@@ -16,6 +16,7 @@
- [improvement] Warn if a custom codec collides with an existing one (JAVA-934)
- [improvement] Allow typed getters/setters to target any CQL type (JAVA-940)
- [bug] Fix Cluster.connect with a case-sensitive keyspace (JAVA-950)
+- [bug] Fix MaterializedViewMetadata when base table name is case sensitive (JAVA-953)
### 3.0.0-alpha3
diff --git a/driver-core/src/main/java/com/datastax/driver/core/MaterializedViewMetadata.java b/driver-core/src/main/java/com/datastax/driver/core/MaterializedViewMetadata.java
index 3709a55..3514557 100644
--- a/driver-core/src/main/java/com/datastax/driver/core/MaterializedViewMetadata.java
+++ b/driver-core/src/main/java/com/datastax/driver/core/MaterializedViewMetadata.java
@@ -60,7 +60,7 @@
String name = row.getString("view_name");
String tableName = row.getString("base_table_name");
- TableMetadata baseTable = keyspace.getTable(tableName);
+ TableMetadata baseTable = keyspace.tables.get(tableName);
if(baseTable == null) {
logger.trace(String.format("Cannot find base table %s for materialized view %s.%s: "
+ "Cluster.getMetadata().getKeyspace(\"%s\").getView(\"%s\") will return null",
diff --git a/driver-core/src/test/java/com/datastax/driver/core/MaterializedViewMetadataTest.java b/driver-core/src/test/java/com/datastax/driver/core/MaterializedViewMetadataTest.java
index 13aa5d2..1076825 100644
--- a/driver-core/src/test/java/com/datastax/driver/core/MaterializedViewMetadataTest.java
+++ b/driver-core/src/test/java/com/datastax/driver/core/MaterializedViewMetadataTest.java
@@ -94,16 +94,16 @@
public void should_create_view_metadata_with_quoted_identifiers() {
// given
String createTable = String.format(
- "CREATE TABLE %s.t1 ("
+ "CREATE TABLE %s.\"T1\" ("
+ "\"theKey\" int, "
+ "\"the;Clustering\" int, "
+ "\"the Value\" int, "
+ "PRIMARY KEY (\"theKey\", \"the;Clustering\"))",
keyspace);
String createMV = String.format(
- "CREATE MATERIALIZED VIEW %s.mv1 AS "
+ "CREATE MATERIALIZED VIEW %s.\"Mv1\" AS "
+ "SELECT \"theKey\", \"the;Clustering\", \"the Value\" "
- + "FROM %s.t1 "
+ + "FROM %s.\"T1\" "
+ "WHERE \"theKey\" IS NOT NULL AND \"the;Clustering\" IS NOT NULL AND \"the Value\" IS NOT NULL "
+ "PRIMARY KEY (\"theKey\", \"the;Clustering\")",
keyspace, keyspace);
@@ -111,13 +111,13 @@
session.execute(createTable);
session.execute(createMV);
// then
- TableMetadata table = cluster.getMetadata().getKeyspace(keyspace).getTable("t1");
- MaterializedViewMetadata mv = cluster.getMetadata().getKeyspace(keyspace).getMaterializedView("mv1");
- assertThat(table).isNotNull().hasName("t1").hasMaterializedView(mv).hasNumberOfColumns(3);
+ TableMetadata table = cluster.getMetadata().getKeyspace(keyspace).getTable("\"T1\"");
+ MaterializedViewMetadata mv = cluster.getMetadata().getKeyspace(keyspace).getMaterializedView("\"Mv1\"");
+ assertThat(table).isNotNull().hasName("T1").hasMaterializedView(mv).hasNumberOfColumns(3);
assertThat(table.getColumns().get(0)).isNotNull().hasName("theKey").isPartitionKey().hasType(cint());
assertThat(table.getColumns().get(1)).isNotNull().hasName("the;Clustering").isClusteringColumn().hasType(cint());
assertThat(table.getColumns().get(2)).isNotNull().hasName("the Value").isRegularColumn().hasType(cint());
- assertThat(mv).isNotNull().hasName("mv1").hasBaseTable(table).hasNumberOfColumns(3);
+ assertThat(mv).isNotNull().hasName("Mv1").hasBaseTable(table).hasNumberOfColumns(3);
assertThat(mv.getColumns().get(0)).isNotNull().hasName("theKey").isPartitionKey().hasType(cint());
assertThat(mv.getColumns().get(1)).isNotNull().hasName("the;Clustering").isClusteringColumn().hasType(cint());
assertThat(mv.getColumns().get(2)).isNotNull().hasName("the Value").isRegularColumn().hasType(cint());
diff --git a/driver-core/src/test/java/com/datastax/driver/core/TableMetadataAssert.java b/driver-core/src/test/java/com/datastax/driver/core/TableMetadataAssert.java
index a4c259a..0dacbdb 100644
--- a/driver-core/src/test/java/com/datastax/driver/core/TableMetadataAssert.java
+++ b/driver-core/src/test/java/com/datastax/driver/core/TableMetadataAssert.java
@@ -77,7 +77,7 @@
}
public TableMetadataAssert hasMaterializedView(MaterializedViewMetadata expected) {
- assertThat(actual.getView(expected.getName())).isNotNull().isEqualTo(expected);
+ assertThat(actual.getView(Metadata.quote(expected.getName()))).isNotNull().isEqualTo(expected);
return this;
}