diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/DefaultCassandraRowValueProvider.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/DefaultCassandraRowValueProvider.java index 720195eb7..7389b91cc 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/DefaultCassandraRowValueProvider.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/DefaultCassandraRowValueProvider.java @@ -15,8 +15,6 @@ */ package org.springframework.data.cassandra.convert; -import java.nio.ByteBuffer; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.cassandra.mapping.CassandraPersistentProperty; @@ -33,6 +31,7 @@ import com.datastax.driver.core.Row; * * @author Alex Shvid * @author Matthew T. Adams + * @author David Webb */ public class DefaultCassandraRowValueProvider implements CassandraRowValueProvider { @@ -73,16 +72,44 @@ public class DefaultCassandraRowValueProvider implements CassandraRowValueProvid log.debug(columnType.getName().name()); - // TODO Might need to qualify all DataTypes as we encounter them. - if (columnType.equals(DataType.text())) { + // TODO DW Set, Map, List + + if (columnType.equals(DataType.text()) || columnType.equals(DataType.ascii()) + || columnType.equals(DataType.varchar())) { return (T) source.getString(columnName); } - if (columnType.equals(DataType.cint())) { + if (columnType.equals(DataType.cint()) || columnType.equals(DataType.varint())) { return (T) new Integer(source.getInt(columnName)); } + if (columnType.equals(DataType.cdouble())) { + return (T) new Double(source.getDouble(columnName)); + } + if (columnType.equals(DataType.bigint()) || columnType.equals(DataType.counter())) { + return (T) new Long(source.getLong(columnName)); + } + if (columnType.equals(DataType.cfloat())) { + return (T) new Float(source.getFloat(columnName)); + } + if (columnType.equals(DataType.decimal())) { + return (T) source.getDecimal(columnName); + } + if (columnType.equals(DataType.cboolean())) { + return (T) new Boolean(source.getBool(columnName)); + } + if (columnType.equals(DataType.timestamp())) { + return (T) source.getDate(columnName); + } + if (columnType.equals(DataType.blob())) { + return (T) source.getBytes(columnName); + } + if (columnType.equals(DataType.inet())) { + return (T) source.getInet(columnName); + } + if (columnType.equals(DataType.uuid()) || columnType.equals(DataType.timeuuid())) { + return (T) source.getUUID(columnName); + } - ByteBuffer bytes = source.getBytes(columnName); - return (T) columnType.deserialize(bytes); + return (T) source.getBytes(columnName); } public Row getRow() { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java index 78c694309..e1d24141d 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java @@ -181,6 +181,10 @@ public class DefaultCassandraPersistentEntityMetadataVerifier implements Cassand */ if (isTable) { + /* + * TODO Verify annotation values with CqlIndentifier + */ + /* * Ensure only one PK */ diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java index 95fcfd700..8074ba37b 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java @@ -15,6 +15,8 @@ */ package org.springframework.data.cassandra.test.integration.simpletons; +import java.util.Date; + import org.springframework.data.cassandra.mapping.PrimaryKey; import org.springframework.data.cassandra.mapping.Table; @@ -33,6 +35,8 @@ public class Book { private String title; private String author; private int pages; + private Date saleDate; + private boolean isInStock; /** * @return Returns the isbn. @@ -41,6 +45,34 @@ public class Book { return isbn; } + /** + * @return Returns the saleDate. + */ + public Date getSaleDate() { + return saleDate; + } + + /** + * @param saleDate The saleDate to set. + */ + public void setSaleDate(Date saleDate) { + this.saleDate = saleDate; + } + + /** + * @return Returns the isInStock. + */ + public boolean isInStock() { + return isInStock; + } + + /** + * @param isInStock The isInStock to set. + */ + public void setInStock(boolean isInStock) { + this.isInStock = isInStock; + } + /** * @param isbn The isbn to set. */ diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java index 047545bc8..6ad24eca7 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java @@ -16,38 +16,30 @@ package org.springframework.data.cassandra.test.integration.template; import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace; -import static org.springframework.cassandra.core.keyspace.DropTableSpecification.dropTable; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.UUID; -import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cassandra.core.ConsistencyLevel; import org.springframework.cassandra.core.QueryOptions; import org.springframework.cassandra.core.RetryPolicy; import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; import org.springframework.data.cassandra.config.SchemaAction; -import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.data.cassandra.test.integration.simpletons.Book; import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest; import org.springframework.data.cassandra.test.integration.support.TestConfig; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.datastax.driver.core.TableMetadata; import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; @@ -93,6 +85,8 @@ public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassa b1.setTitle("Spring Data Cassandra Guide"); b1.setAuthor("Cassandra Guru"); b1.setPages(521); + b1.setSaleDate(new Date()); + b1.setInStock(true); template.insert(b1); @@ -249,6 +243,8 @@ public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassa b.setTitle("Spring Data Cassandra Guide"); b.setAuthor("Cassandra Guru"); b.setPages(i * 10 + 5); + b.setInStock(true); + b.setSaleDate(new Date()); books.add(b); } @@ -643,12 +639,15 @@ public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassa Select select = QueryBuilder.select().all().from("book"); - List b = template.select(select.getQueryString(), Book.class); + List bookz = template.select(select.getQueryString(), Book.class); - log.info("Book Count -> " + b.size()); + log.info("Book Count -> " + bookz.size()); - Assert.assertEquals(b.size(), 20); + Assert.assertEquals(bookz.size(), 20); + for (Book b : bookz) { + Assert.assertTrue(b.isInStock()); + } } @Test