Skip to content

Instantly share code, notes, and snippets.

@kontact-chan
Last active September 1, 2015 08:34
Show Gist options
  • Save kontact-chan/7032ced375bedb9b81b3 to your computer and use it in GitHub Desktop.
Save kontact-chan/7032ced375bedb9b81b3 to your computer and use it in GitHub Desktop.
Netflix astyanax-cql support for collections set
diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/Column.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/Column.java
index 057e556..49b08e7 100644
--- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/Column.java
+++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/Column.java
@@ -17,6 +17,7 @@ package com.netflix.astyanax.model;
import java.nio.ByteBuffer;
import java.util.Date;
+import java.util.Set;
import java.util.UUID;
import com.netflix.astyanax.Serializer;
@@ -64,6 +65,8 @@ public interface Column<C> {
* @throws NetflixCassandraException
*/
<V> V getValue(Serializer<V> valSer);
+
+ <V> Set<V> getCollectionSet(Class<V> typeClass);
/**
* Return value as a string
diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/ColumnList.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/ColumnList.java
index a50a8a8..7a0d4fe 100644
--- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/ColumnList.java
+++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/model/ColumnList.java
@@ -18,6 +18,7 @@ package com.netflix.astyanax.model;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.Date;
+import java.util.Set;
import java.util.UUID;
import com.netflix.astyanax.Serializer;
@@ -51,6 +52,8 @@ public interface ColumnList<C> extends Iterable<Column<C>> {
* @return
*/
String getStringValue(C columnName, String defaultValue);
+
+ <V> Set<V> getSetValue(C columnName, Set<V> defaultValue, Class<V> typeClass);
/**
* Get a string that was stored as a compressed blob
diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumn.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumn.java
index 986166e..6379054 100644
--- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumn.java
+++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumn.java
@@ -16,6 +16,7 @@
package com.netflix.astyanax.shallows;
import java.nio.ByteBuffer;
+import java.util.Set;
import com.netflix.astyanax.Serializer;
import com.netflix.astyanax.model.AbstractColumnImpl;
@@ -61,4 +62,10 @@ public class EmptyColumn<C> extends AbstractColumnImpl<C> {
public boolean hasValue() {
return false;
}
+
+ @Override
+ public <V> Set<V> getCollectionSet(Class<V> typeClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumnList.java b/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumnList.java
index 2aff332..2a084c0 100644
--- a/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumnList.java
+++ b/astyanax-cassandra/src/main/java/com/netflix/astyanax/shallows/EmptyColumnList.java
@@ -18,6 +18,7 @@ package com.netflix.astyanax.shallows;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
import com.netflix.astyanax.Serializer;
import com.netflix.astyanax.model.AbstractColumnList;
@@ -70,4 +71,13 @@ public class EmptyColumnList<C> extends AbstractColumnList<C> {
public Collection<C> getColumnNames() {
return new HashSet<C>();
}
+
+ @Override
+ public <V> Set<V> getSetValue(C columnName, Set<V> defaultValue,
+ Class<V> typeClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
}
diff --git a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnImpl.java b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnImpl.java
index 8123b44..6fbd70a 100644
--- a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnImpl.java
+++ b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnImpl.java
@@ -2,6 +2,7 @@ package com.netflix.astyanax.cql.reads.model;
import java.nio.ByteBuffer;
import java.util.Date;
+import java.util.Set;
import java.util.UUID;
import com.datastax.driver.core.ColumnDefinitions.Definition;
@@ -87,6 +88,7 @@ public class CqlColumnImpl<C> implements Column<C> {
return valSer.fromByteBuffer(row.getBytes(index));
}
+
@Override
public String getStringValue() {
return (isBlob) ? StringSerializer.get().fromByteBuffer(row.getBytes(index)) : row.getString(index);
@@ -197,4 +199,9 @@ public class CqlColumnImpl<C> implements Column<C> {
return cType;
}
+
+ @Override
+ public <V> Set<V> getCollectionSet(Class<V> typeClass) {
+ return row.getSet(index, typeClass);
+ }
}
diff --git a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnListImpl.java b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnListImpl.java
index 4b71c11..fae336f 100644
--- a/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnListImpl.java
+++ b/astyanax-cql/src/main/java/com/netflix/astyanax/cql/reads/model/CqlColumnListImpl.java
@@ -7,6 +7,7 @@ import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Set;
import java.util.UUID;
import com.datastax.driver.core.ColumnDefinitions;
@@ -249,4 +250,16 @@ public class CqlColumnListImpl<C> implements ColumnList<C> {
public boolean isSuperColumn() {
throw new UnsupportedOperationException("Operaiton not supported");
}
+
+ @Override
+ public <V> Set<V> getSetValue(C columnName, Set<V> defaultValue, Class<V> typeClass) {
+ Column<C> column = map.get(columnName);
+ if (column == null) {
+ return defaultValue;
+ } else {
+ return column.getCollectionSet(typeClass);
+ }
+ }
+
+
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment