/** @see <a href="https://jira.spring.io/browse/DATACASS-7">DATACASS-7</a> */
  @Test
  public void considersMethodAsCollectionQuery() throws Exception {

    CassandraQueryMethod queryMethod = queryMethod(SampleRepository.class, "method");

    assertThat(queryMethod.isCollectionQuery()).isTrue();
  }
  /** @see <a href="https://jira.spring.io/browse/DATACASS-7">DATACASS-7</a> */
  @Test
  public void detectsCollectionFromRepoTypeIfReturnTypeNotAssignable() throws Exception {

    CassandraQueryMethod queryMethod = queryMethod(SampleRepository.class, "method");
    CassandraEntityMetadata<?> metadata = queryMethod.getEntityInformation();

    assertThat(metadata.getJavaType()).isAssignableFrom(Person.class);
    assertThat(metadata.getTableName().toCql()).isEqualTo("person");
  }
  private CassandraQueryExecution getExecutionToWrap(
      CassandraParameterAccessor accessor, Converter<Object, Object> resultProcessing) {

    if (queryMethod.isCollectionQuery()) {
      return new CollectionExecution(template);
    } else if (queryMethod.isResultSetQuery()) {
      return new ResultSetQuery(template);
    } else if (queryMethod.isStreamQuery()) {
      return new StreamExecution(template, resultProcessing);
    } else {
      return new SingleEntityExecution(template);
    }
  }
  /* (non-Javadoc)
   * @see org.springframework.data.repository.query.RepositoryQuery#execute(java.lang.Object[])
   */
  @Override
  public Object execute(Object[] parameters) {

    CassandraParameterAccessor parameterAccessor =
        new ConvertingParameterAccessor(
            template.getConverter(),
            new CassandraParametersParameterAccessor(queryMethod, parameters));

    ResultProcessor resultProcessor =
        queryMethod.getResultProcessor().withDynamicProjection(parameterAccessor);

    String query = createQuery(parameterAccessor);

    CassandraQueryExecution queryExecution =
        getExecution(
            query,
            parameterAccessor,
            new ResultProcessingConverter(
                resultProcessor, template.getConverter().getMappingContext(), instantiators));

    CassandraReturnedType returnedType =
        new CassandraReturnedType(
            resultProcessor.getReturnedType(), template.getConverter().getCustomConversions());

    Class<?> resultType =
        (returnedType.isProjecting()
            ? returnedType.getDomainType()
            : returnedType.getReturnedType());

    return queryExecution.execute(query, resultType);
  }