diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java index 4f100c808..3549dd7c0 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java @@ -35,6 +35,7 @@ import com.datastax.oss.driver.api.core.cql.SimpleStatement; * {@code cql} text. Statement options (idempotency, timeouts) apply from the statement that was initially prepared. * * @author Mark Paluch + * @author Aldo Bongio * @since 2.0 */ public class MapPreparedStatementCache implements PreparedStatementCache { @@ -85,7 +86,7 @@ public class MapPreparedStatementCache implements PreparedStatementCache { public PreparedStatement getPreparedStatement(CqlSession session, SimpleStatement statement, Supplier preparer) { - CacheKey cacheKey = new CacheKey(session, statement.toString()); + CacheKey cacheKey = new CacheKey(session, statement.getQuery()); return getCache().computeIfAbsent(cacheKey, key -> preparer.get()); } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreatorUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreatorUnitTests.java index 4ce5cf887..04b79c6f0 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreatorUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreatorUnitTests.java @@ -37,6 +37,7 @@ import com.datastax.oss.driver.api.querybuilder.update.Assignment; * Unit tests for {@link CachedPreparedStatementCreator}. * * @author Mark Paluch + * @author Aldo Bongio */ @RunWith(MockitoJUnitRunner.class) public class CachedPreparedStatementCreatorUnitTests { @@ -179,4 +180,17 @@ public class CachedPreparedStatementCreatorUnitTests { verify(session).prepare(firstStatement); verify(session).prepare(secondStatement); } + + @Test // DATACASS-814 + void shouldUseCqlTextInCacheKey() { + + String cql = "SELECT foo FROM users;"; + + MapPreparedStatementCache cache = MapPreparedStatementCache.create(); + CachedPreparedStatementCreator creator = CachedPreparedStatementCreator.of(cache, cql); + creator.createPreparedStatement(session); + + MapPreparedStatementCache.CacheKey cacheKey = cache.getCache().keySet().iterator().next(); + assertThat(cacheKey.cql).isSameAs(cql); + } }