From abc5e53e8e51d32184669e155955313a07907880 Mon Sep 17 00:00:00 2001 From: zznate Date: Wed, 17 Sep 2014 02:01:07 -0500 Subject: [PATCH] Added support for withTimestamp via CqlPreparedStatement --- .../astyanax/cql/CqlPreparedStatement.java | 8 +++++++ .../query/AbstractPreparedCqlQuery.java | 15 ++++++------ .../astyanax/query/PreparedCqlQuery.java | 8 +++++++ .../direct/DirectCqlPreparedStatement.java | 11 +++++++-- .../cql/reads/DirectCqlQueryImpl.java | 14 ++++++++++- .../astyanax/cql/test/DirectCqlTests.java | 24 ++++++++++++++----- 6 files changed, 63 insertions(+), 17 deletions(-) diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/cql/CqlPreparedStatement.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/cql/CqlPreparedStatement.java index 1660546f0..b1c312310 100644 --- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/cql/CqlPreparedStatement.java +++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/cql/CqlPreparedStatement.java @@ -1,6 +1,7 @@ package com.netflix.astyanax.cql; import java.nio.ByteBuffer; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -85,4 +86,11 @@ public interface CqlPreparedStatement extends Execution { * @return */ CqlPreparedStatement withUUIDValue(UUID value); + + /** + * Set the next parameter value to this Long as a timestamp + * @param value + * @return + */ + CqlPreparedStatement withTimestamp(Date value); } diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/AbstractPreparedCqlQuery.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/AbstractPreparedCqlQuery.java index 6112f7e7f..25a735d05 100644 --- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/AbstractPreparedCqlQuery.java +++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/AbstractPreparedCqlQuery.java @@ -1,19 +1,13 @@ package com.netflix.astyanax.query; import java.nio.ByteBuffer; +import java.util.Date; import java.util.List; import java.util.UUID; import com.google.common.collect.Lists; import com.netflix.astyanax.Serializer; -import com.netflix.astyanax.serializers.BooleanSerializer; -import com.netflix.astyanax.serializers.DoubleSerializer; -import com.netflix.astyanax.serializers.FloatSerializer; -import com.netflix.astyanax.serializers.IntegerSerializer; -import com.netflix.astyanax.serializers.LongSerializer; -import com.netflix.astyanax.serializers.ShortSerializer; -import com.netflix.astyanax.serializers.StringSerializer; -import com.netflix.astyanax.serializers.UUIDSerializer; +import com.netflix.astyanax.serializers.*; public abstract class AbstractPreparedCqlQuery implements PreparedCqlQuery { private List values = Lists.newArrayList(); @@ -79,4 +73,9 @@ public PreparedCqlQuery withUUIDValue(UUID value) { return withByteBufferValue(value, UUIDSerializer.get()); } + @Override + public PreparedCqlQuery withTimestamp(Date value) { + return withByteBufferValue(value, DateSerializer.get()); + } + } diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/PreparedCqlQuery.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/PreparedCqlQuery.java index fa61a2487..95b3c3f41 100644 --- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/PreparedCqlQuery.java +++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/query/PreparedCqlQuery.java @@ -1,6 +1,7 @@ package com.netflix.astyanax.query; import java.nio.ByteBuffer; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -85,4 +86,11 @@ public interface PreparedCqlQuery extends Execution> { * @param value */ PreparedCqlQuery withUUIDValue(UUID value); + + /** + * Set the next parameter value to this Date + * @param value + * @return + */ + PreparedCqlQuery withTimestamp(Date value); } diff --git a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/direct/DirectCqlPreparedStatement.java b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/direct/DirectCqlPreparedStatement.java index fd8d7320e..2d630aad5 100644 --- a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/direct/DirectCqlPreparedStatement.java +++ b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/direct/DirectCqlPreparedStatement.java @@ -2,6 +2,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -127,8 +128,14 @@ public CqlPreparedStatement withUUIDValue(UUID value) { bindValues.add(value); return this; } - - public PreparedStatement getInnerPreparedStatement() { + + @Override + public CqlPreparedStatement withTimestamp(Date value) { + bindValues.add(value); + return this; + } + + public PreparedStatement getInnerPreparedStatement() { return pStmt; } } diff --git a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/DirectCqlQueryImpl.java b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/DirectCqlQueryImpl.java index 3bd4c2776..c1f38e8ff 100644 --- a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/DirectCqlQueryImpl.java +++ b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/DirectCqlQueryImpl.java @@ -2,6 +2,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -124,7 +125,12 @@ public PreparedCqlQuery withUUIDValue(UUID value) { return new InternalBoundStatement(pStatement).withUUIDValue(value); } - @Override + @Override + public PreparedCqlQuery withTimestamp(Date value) { + return new InternalBoundStatement(pStatement).withTimestamp(value); + } + + @Override public OperationResult> execute() throws ConnectionException { throw new NotImplementedException(); } @@ -221,6 +227,12 @@ public PreparedCqlQuery withUUIDValue(UUID value) { bindList.add(value); return this; } + + @Override + public PreparedCqlQuery withTimestamp(Date value) { + bindList.add(value); + return this; + } } diff --git a/astyanax-test/src/main/java/com/netflix/astyanax/cql/test/DirectCqlTests.java b/astyanax-test/src/main/java/com/netflix/astyanax/cql/test/DirectCqlTests.java index f7f4ec0f4..613c16ec0 100644 --- a/astyanax-test/src/main/java/com/netflix/astyanax/cql/test/DirectCqlTests.java +++ b/astyanax-test/src/main/java/com/netflix/astyanax/cql/test/DirectCqlTests.java @@ -1,5 +1,6 @@ package com.netflix.astyanax.cql.test; +import com.netflix.astyanax.serializers.DateSerializer; import junit.framework.Assert; import org.junit.AfterClass; @@ -15,13 +16,16 @@ import com.netflix.astyanax.serializers.IntegerSerializer; import com.netflix.astyanax.serializers.StringSerializer; +import java.util.Date; + public class DirectCqlTests extends KeyspaceTests { public static ColumnFamily CF_DIRECT = ColumnFamily .newColumnFamily( "cfdirect", IntegerSerializer.get(), - StringSerializer.get()); + StringSerializer.get(), + DateSerializer.get()); public static ColumnFamily CF_EMPTY_TABLE = ColumnFamily .newColumnFamily( @@ -31,12 +35,14 @@ public class DirectCqlTests extends KeyspaceTests { StringSerializer.get()); + + @BeforeClass public static void init() throws Exception { initContext(); - + keyspace.prepareCqlStatement().withCql("CREATE KEYSPACE astyanaxunittests with REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1};").execute(); keyspace.prepareQuery(CF_DIRECT) - .withCql("CREATE TABLE astyanaxunittests.cfdirect ( key int, column1 text, value bigint, PRIMARY KEY (key) )") + .withCql("CREATE TABLE astyanaxunittests.cfdirect ( key int, column1 text, value bigint, column2 timestamp,PRIMARY KEY (key) )") .execute(); keyspace.prepareQuery(CF_EMPTY_TABLE) .withCql("CREATE TABLE astyanaxunittests.empty_table ( key text, column1 text, value text, PRIMARY KEY (key) )") @@ -51,6 +57,9 @@ public static void tearDown() throws Exception { keyspace.prepareQuery(CF_EMPTY_TABLE) .withCql("DROP TABLE astyanaxunittests.empty_table") .execute(); + keyspace.prepareCqlStatement() + .withCql("DROP KEYSPACE astyanaxunittests") + .execute(); } @Test @@ -59,11 +68,11 @@ public void testCql() throws Exception { // INSERT VALUES CqlQuery cqlQuery = keyspace .prepareQuery(CF_DIRECT) - .withCql("INSERT INTO astyanaxunittests.cfdirect (key, column1, value) VALUES (?,?,?)"); + .withCql("INSERT INTO astyanaxunittests.cfdirect (key, column1, value, column2) VALUES (?,?,?,?)"); for (int i=0; i<10; i++) { PreparedCqlQuery pStatement = cqlQuery.asPreparedStatement(); - pStatement.withIntegerValue(i).withStringValue(""+i).withLongValue(Long.valueOf(""+i)).execute(); + pStatement.withIntegerValue(i).withStringValue(""+i).withLongValue(Long.valueOf(""+i)).withTimestamp(new Date()).execute(); } // TEST REGULAR CQL @@ -79,7 +88,7 @@ public void testCql() throws Exception { Row row = result.getResult().getRows().getRow(i); Assert.assertTrue(i == row.getKey()); - Assert.assertEquals(3, row.getColumns().size()); + Assert.assertEquals(4, row.getColumns().size()); Integer key = row.getColumns().getIntegerValue("key", null); Assert.assertTrue(Integer.valueOf(""+i) == key); @@ -89,6 +98,9 @@ public void testCql() throws Exception { Long value = row.getColumns().getLongValue("value", null); Assert.assertTrue(Long.valueOf(""+i) == value); + + Date column2 = row.getColumns().getDateValue("column2", null); + Assert.assertNotNull(column2); } // TEST CQL COUNT