package org.apache.hadoop.hive.cassandra.input;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.cassandra.hadoop.ColumnFamilyRecordReader;
import org.apache.hadoop.hive.serde2.lazy.LazyMap;
import org.apache.hadoop.hive.serde2.lazy.LazyObject;
import org.apache.hadoop.hive.serde2.lazy.LazyPrimitive;
import org.apache.hadoop.hive.serde2.lazy.objectinspector.LazyMapObjectInspector;
public class LazyCassandraCellMap extends LazyMap{
private ColumnFamilyRecordReader rowResult;
private String cassandraColumnFamily;
protected LazyCassandraCellMap(LazyMapObjectInspector oi) {
super(oi);
}
public void init(ColumnFamilyRecordReader rr, String columnFamily) {
rowResult = rr;
cassandraColumnFamily = columnFamily;
setParsed(false);
}
private void parse() {
if (cachedMap == null) {
cachedMap = new LinkedHashMap<Object, Object>();
} else {
cachedMap.clear();
}
}
/**
* Get the value in the map for the given key.
*
* @param key
* @return
*/
@Override
public Object getMapValueElement(Object key) {
if (!getParsed()) {
parse();
}
for (Map.Entry<Object, Object> entry : cachedMap.entrySet()) {
LazyPrimitive<?, ?> lazyKeyI = (LazyPrimitive<?, ?>) entry.getKey();
// getWritableObject() will convert LazyPrimitive to actual primitive
// writable objects.
Object keyI = lazyKeyI.getWritableObject();
if (keyI != null) {
if (keyI.equals(key)) {
// Got a match, return the value
LazyObject v = (LazyObject) entry.getValue();
return v == null ? v : v.getObject();
}
}
}
return null;
}
@Override
public Map<Object, Object> getMap() {
if (!getParsed()) {
parse();
}
return cachedMap;
}
@Override
public int getMapSize() {
if (!getParsed()) {
parse();
}
return cachedMap.size();
}
}