diff --git a/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java b/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java
index c3b275fdc..342a6e8e2 100644
--- a/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java
+++ b/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java
@@ -99,6 +99,7 @@ import com.datastax.driver.core.querybuilder.Update;
public class CqlTemplate extends CassandraAccessor implements CqlOperations {
protected static final Executor RUN_RUNNABLE_EXECUTOR = new Executor() {
+
@Override
@SuppressWarnings("all")
public void execute(Runnable command) {
@@ -856,48 +857,50 @@ public class CqlTemplate extends CassandraAccessor implements CqlOperations {
/**
* Attempts to translate the {@link Exception} into a Spring Data {@link Exception}.
- * @param ex the Exception
- * @return the translated {@link RuntimeException}
+ *
+ * @param e the {@link Exception} to translate.
+ * @return the translated {@link RuntimeException}.
+ * @see Consistent exception hierarchy
*/
@SuppressWarnings("all")
- protected RuntimeException translateExceptionIfPossible(Exception ex) {
- return translateExceptionIfPossible(ex, getExceptionTranslator());
+ protected RuntimeException translateExceptionIfPossible(Exception e) {
+ return translateExceptionIfPossible(e, getExceptionTranslator());
}
/**
* Tries to convert the given {@link RuntimeException} into a {@link DataAccessException} but returns the original
* exception if the conversation failed. Thus allows safe re-throwing of the return value.
*
- * @param ex the exception to translate
+ * @param e the exception to translate
* @param exceptionTranslator the {@link PersistenceExceptionTranslator} to be used for translation
* @return
*/
@SuppressWarnings("all")
- protected static RuntimeException translateExceptionIfPossible(Exception ex, PersistenceExceptionTranslator exceptionTranslator) {
-
- Assert.notNull(ex, "Exception must not be null");
- Assert.notNull(exceptionTranslator, "PersistenceExceptionTranslator must not be null");
-
- if (ex instanceof RuntimeException) {
- return potentiallyConvertRuntimeException((RuntimeException) ex, exceptionTranslator);
- }
-
- return new CassandraUncategorizedDataAccessException("Caught Uncategorized Exception", ex);
- }
-
- /**
- * Tries to convert the given {@link RuntimeException} into a {@link DataAccessException} but returns the original
- * exception if the conversation failed. Thus allows safe re-throwing of the return value.
- *
- * @param ex the exception to translate
- * @param exceptionTranslator the {@link PersistenceExceptionTranslator} to be used for translation
- * @return
- */
- private static RuntimeException potentiallyConvertRuntimeException(RuntimeException ex,
+ protected static RuntimeException translateExceptionIfPossible(Exception e,
PersistenceExceptionTranslator exceptionTranslator) {
- RuntimeException resolved = exceptionTranslator.translateExceptionIfPossible(ex);
- return resolved == null ? ex : resolved;
+ Assert.notNull(e, "Exception must not be null");
+ Assert.notNull(exceptionTranslator, "PersistenceExceptionTranslator must not be null");
+
+ return (e instanceof RuntimeException) ? potentiallyConvertRuntimeException((RuntimeException) e, exceptionTranslator)
+ : new CassandraUncategorizedDataAccessException("Caught Uncategorized Exception", e);
+ }
+
+ /**
+ * Tries to convert the given {@link RuntimeException} into a {@link DataAccessException} but returns the original
+ * exception if the conversation failed. Thus allows safe re-throwing of the return value.
+ *
+ * @param e the exception to translate
+ * @param exceptionTranslator the {@link PersistenceExceptionTranslator} to be used for translation
+ * @return
+ */
+ @SuppressWarnings("all")
+ private static RuntimeException potentiallyConvertRuntimeException(RuntimeException e,
+ PersistenceExceptionTranslator exceptionTranslator) {
+
+ RuntimeException resolved = exceptionTranslator.translateExceptionIfPossible(e);
+
+ return (resolved != null ? resolved : e);
}
@Override
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java
index ea43ca596..7211b2d51 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java
@@ -56,12 +56,12 @@ public interface CassandraOperations extends CqlOperations {
* Executes the given select {@code query} on the entity table of the specified {@code type} backed by a Cassandra
* {@link com.datastax.driver.core.ResultSet}.
*
- * Returns a {@link java.util.Iterator} that wraps the a Cassandra {@link com.datastax.driver.core.ResultSet}.
- *
- * @param element return type
- * @param query must not be empty and not {@literal null}.
- * @param type must not be {@literal null}.
- * @return
+ * Returns a {@link java.util.Iterator} that wraps the Cassandra {@link com.datastax.driver.core.ResultSet}.
+ *
+ * @param element return type.
+ * @param query query to execute. Must not be empty or {@literal null}.
+ * @param type Class type of the elements in the {@link Iterator} stream. Must not be {@literal null}.
+ * @return an {@link Iterator} (stream) over the elements in the query result set.
* @since 1.5
*/
Iterator stream(String query, Class type);
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java
index 7440a4d88..06a58959a 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java
@@ -602,15 +602,22 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation
@Override
public ResultSet doInSession(Session s) throws DataAccessException {
- return s.execute(query);
+ return s.execute(logCql(query));
}
});
- if (resultSet == null) {
- return Collections.emptyList().iterator();
- }
+ return (resultSet != null ? toIterator(resultSet, type) : Collections.emptyIterator());
+ }
- return new ResultSetIteratorAdapter(resultSet.iterator(), getExceptionTranslator(), new CassandraConverterRowCallback(cassandraConverter, type));
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.cassandra.core.CassandraTemplate.ResultSetIteratorAdapter
+ */
+ @SuppressWarnings("unchecked")
+ private Iterator toIterator(ResultSet resultSet, Class type) {
+
+ return new ResultSetIteratorAdapter(resultSet.iterator(), getExceptionTranslator(),
+ new CassandraConverterRowCallback(cassandraConverter, type));
}
protected List select(final Select query, CassandraConverterRowCallback readRowCallback) {
@@ -1109,7 +1116,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation
throw new IllegalArgumentException(
String.format("Expected type String or Select; got type [%s] with value [%s]", query.getClass(), query));
}
-
+
private static class ResultSetIteratorAdapter implements Iterator{
private final Iterator iterator;
@@ -1117,7 +1124,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation
private final CassandraConverterRowCallback rowCallback;
public ResultSetIteratorAdapter(Iterator iterator, PersistenceExceptionTranslator exceptionTranslator, CassandraConverterRowCallback rowCallback) {
-
+
this.iterator = iterator;
this.exceptionTranslator = exceptionTranslator;
this.rowCallback = rowCallback;
@@ -1125,7 +1132,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation
@Override
public boolean hasNext() {
-
+
try {
return iterator.hasNext();
} catch (Exception e) {
@@ -1135,7 +1142,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation
@Override
public T next() {
-
+
try {
return rowCallback.doWith(iterator.next());
} catch (Exception e) {
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractCassandraQuery.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractCassandraQuery.java
index ccb89c6e6..57d769eb2 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractCassandraQuery.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractCassandraQuery.java
@@ -104,14 +104,15 @@ public abstract class AbstractCassandraQuery implements RepositoryQuery {
return new ResultProcessingExecution(getExecutionToWrap(accessor, resultProcessing), resultProcessing);
}
- private CassandraQueryExecution getExecutionToWrap(CassandraParameterAccessor accessor, Converter