Example usage for org.apache.cassandra.db.marshal CollectionType valueComparator

List of usage examples for org.apache.cassandra.db.marshal CollectionType valueComparator

Introduction

In this page you can find the example usage for org.apache.cassandra.db.marshal CollectionType valueComparator.

Prototype

public abstract AbstractType<?> valueComparator();

Source Link

Usage

From source file:com.stratio.cassandra.index.RegularCellsMapper.java

License:Apache License

@SuppressWarnings("rawtypes")
public Columns columns(Row row) {
    ColumnFamily columnFamily = row.cf;/*from w  w  w  . j  av  a  2 s.  c  om*/
    Columns columns = new Columns();

    // Get row's columns iterator skipping clustering column
    Iterator<Cell> cellIterator = columnFamily.iterator();
    cellIterator.next();

    // Stuff for grouping collection columns (sets, lists and maps)
    String name;
    CollectionType collectionType;

    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();
        CellName cellName = cell.name();
        ColumnDefinition columnDefinition = metadata.getColumnDefinition(cellName);
        if (columnDefinition == null) {
            continue;
        }

        AbstractType<?> valueType = columnDefinition.type;

        ByteBuffer cellValue = cell.value();

        name = cellName.cql3ColumnName(metadata).toString();

        if (valueType.isCollection()) {
            collectionType = (CollectionType<?>) valueType;
            switch (collectionType.kind) {
            case SET: {
                AbstractType<?> type = collectionType.nameComparator();
                ByteBuffer value = cellName.collectionElement();
                columns.add(new Column(name, value, type));
                break;
            }
            case LIST: {
                AbstractType<?> type = collectionType.valueComparator();
                columns.add(new Column(name, cellValue, type));
                break;
            }
            case MAP: {
                AbstractType<?> type = collectionType.valueComparator();
                ByteBuffer keyValue = cellName.collectionElement();
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSufix = keyType.compose(keyValue).toString();
                columns.add(new Column(name, nameSufix, cellValue, type));
                break;
            }
            }
        } else {
            columns.add(new Column(name, cellValue, valueType));
        }
    }

    return columns;
}

From source file:com.stratio.cassandra.lucene.column.ColumnsMapper.java

License:Apache License

private void addColumns(Columns columns, Cell cell) {
    if (cell != null) {
        ColumnDefinition columnDefinition = cell.column();
        String name = columnDefinition.name.toString();
        AbstractType<?> type = cell.column().type;
        ByteBuffer value = cell.value();
        ColumnBuilder builder = Column.builder(name);
        if (type.isCollection() && !type.isFrozenCollection()) {
            CollectionType<?> collectionType = (CollectionType<?>) type;
            switch (collectionType.kind) {
            case SET: {
                type = collectionType.nameComparator();
                value = cell.path().get(0);
                addColumns(columns, builder, type, value);
                break;
            }//from   w w  w.  ja  v a 2  s.com
            case LIST: {
                type = collectionType.valueComparator();
                addColumns(columns, builder, type, value);
                break;
            }
            case MAP: {
                type = collectionType.valueComparator();
                ByteBuffer keyValue = cell.path().get(0);
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSuffix = keyType.compose(keyValue).toString();
                addColumns(columns, builder.withMapName(nameSuffix), type, value);
                break;
            }
            default: {
                throw new IndexException("Unknown collection type %s", collectionType.kind);
            }
            }
        } else {
            addColumns(columns, Column.builder(name), type, value);
        }
    }
}

From source file:com.stratio.cassandra.lucene.column.ColumnsMapper.java

License:Apache License

private void addColumns(Columns columns, ColumnBuilder builder, AbstractType type, ByteBuffer value) {
    if (type.isCollection()) {
        value = ByteBufferUtil.clone(value);
        CollectionType<?> collectionType = (CollectionType<?>) type;
        switch (collectionType.kind) {
        case SET: {
            AbstractType<?> nameType = collectionType.nameComparator();
            int colSize = CollectionSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer itemValue = CollectionSerializer.readValue(value, Server.CURRENT_VERSION);
                addColumns(columns, builder, nameType, itemValue);
            }/*from ww  w  . j  a  va2s  .  c  om*/
            break;
        }
        case LIST: {
            AbstractType<?> valueType = collectionType.valueComparator();
            int colSize = CollectionSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer itemValue = CollectionSerializer.readValue(value, Server.CURRENT_VERSION);
                addColumns(columns, builder, valueType, itemValue);
            }
            break;
        }
        case MAP: {
            AbstractType<?> keyType = collectionType.nameComparator();
            AbstractType<?> valueType = collectionType.valueComparator();
            int colSize = MapSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer mapKey = MapSerializer.readValue(value, Server.CURRENT_VERSION);
                ByteBuffer mapValue = MapSerializer.readValue(value, Server.CURRENT_VERSION);
                String itemName = keyType.compose(mapKey).toString();
                collectionType.nameComparator();
                addColumns(columns, builder.withMapName(itemName), valueType, mapValue);
            }
            break;
        }
        default: {
            throw new IndexException("Unknown collection type %s", collectionType.kind);
        }
        }
    } else if (type instanceof UserType) {
        UserType userType = (UserType) type;
        ByteBuffer[] values = userType.split(value);
        for (int i = 0; i < userType.fieldNames().size(); i++) {
            String itemName = userType.fieldNameAsString(i);
            AbstractType<?> itemType = userType.fieldType(i);
            // This only occurs in UDT not fully composed
            if (values[i] != null) {
                addColumns(columns, builder.withUDTName(itemName), itemType, values[i]);
            }
        }
    } else if (type instanceof TupleType) {
        TupleType tupleType = (TupleType) type;
        ByteBuffer[] values = tupleType.split(value);
        for (Integer i = 0; i < tupleType.size(); i++) {
            String itemName = i.toString();
            AbstractType<?> itemType = tupleType.type(i);
            addColumns(columns, builder.withUDTName(itemName), itemType, values[i]);
        }
    } else {
        if (value != null) {
            columns.add(builder.buildWithDecomposed(value, type));
        }
    }
}

From source file:com.stratio.cassandra.lucene.service.RegularCellsMapper.java

License:Apache License

/**
 * Returns the columns contained in the regular cells specified {@link Row}. Note that not all the contained columns
 * are returned, but only the regular cell ones.
 *
 * @param row A {@link Row}./*from   w  w  w  . java 2s.c o  m*/
 * @return The columns contained in the regular cells specified {@link Row}.
 */
@SuppressWarnings("rawtypes")
public Columns columns(Row row) {

    ColumnFamily columnFamily = row.cf;
    Columns columns = new Columns();

    // Stuff for grouping collection columns (sets, lists and maps)
    String name;
    CollectionType collectionType;

    for (Cell cell : columnFamily) {
        CellName cellName = cell.name();
        ColumnDefinition columnDefinition = metadata.getColumnDefinition(cellName);
        if (columnDefinition == null) {
            continue;
        }

        AbstractType<?> valueType = columnDefinition.type;

        ByteBuffer cellValue = cell.value();

        name = cellName.cql3ColumnName(metadata).toString();

        if (valueType.isCollection()) {
            collectionType = (CollectionType<?>) valueType;
            switch (collectionType.kind) {
            case SET: {
                AbstractType<?> type = collectionType.nameComparator();
                ByteBuffer value = cellName.collectionElement();
                columns.add(Column.fromDecomposed(name, value, type, true));
                break;
            }
            case LIST: {
                AbstractType<?> type = collectionType.valueComparator();
                columns.add(Column.fromDecomposed(name, cellValue, type, true));
                break;
            }
            case MAP: {
                AbstractType<?> type = collectionType.valueComparator();
                ByteBuffer keyValue = cellName.collectionElement();
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSufix = keyType.compose(keyValue).toString();
                columns.add(Column.fromDecomposed(name, nameSufix, cellValue, type, true));
                break;
            }
            }
        } else {
            columns.add(Column.fromDecomposed(name, cellValue, valueType, false));
        }
    }

    return columns;
}

From source file:com.tuplejump.stargate.cassandra.RowIndexSupport.java

License:Apache License

protected List<Field> collectionFields(CollectionType validator, String colName, Column column) {
    CompositeType baseComparator = (CompositeType) table.getComparator();
    ByteBuffer[] components = baseComparator.split(column.name());
    List<Field> fields = new ArrayList<>();
    FieldType[] fieldTypesArr = options.collectionFieldTypes.get(colName);
    FieldType docValueType = options.collectionFieldDocValueTypes.get(colName);
    AbstractType keyType = validator.nameComparator();
    AbstractType valueType = validator.valueComparator();
    if (validator instanceof MapType) {
        ByteBuffer keyBuf = components[components.length - 1];
        if (fieldTypesArr != null) {
            fields.add(Fields.field(colName + "._key", keyType, keyBuf, fieldTypesArr[0]));
            fields.add(Fields.field(colName + "._value", valueType, column.value(), fieldTypesArr[1]));
            fields.add(Fields.field((colName + "." + keyType.getString(keyBuf)).toLowerCase(), valueType,
                    column.value(), fieldTypesArr[1]));
        }/* w w  w.j a  v a2 s  .  c  o m*/
        if (docValueType != null)
            fields.add(Fields.field((colName + "." + keyType.getString(keyBuf)).toLowerCase(), valueType,
                    column.value(), docValueType));
    } else if (validator instanceof SetType) {
        if (fieldTypesArr != null)
            fields.add(Fields.field(colName, keyType, components[components.length - 1], fieldTypesArr[0]));
        if (docValueType != null)
            fields.add(Fields.field(colName, keyType, components[components.length - 1], docValueType));
    } else if (validator instanceof ListType) {
        if (fieldTypesArr != null)
            fields.add(Fields.field(colName, valueType, column.value(), fieldTypesArr[0]));
        if (docValueType != null)
            fields.add(Fields.field(colName, valueType, column.value(), docValueType));
    } else
        throw new UnsupportedOperationException("Unsupported collection type " + validator);

    return fields;
}

From source file:com.tuplejump.stargate.cassandra.TableMapper.java

License:Apache License

public void load(Map<String, Integer> positions, Tuple tuple, Row row) {
    ColumnFamily cf = row.cf;//from   w w w  .  ja  va2 s .  c o m
    ByteBuffer rowKey = row.key.getKey();

    Collection<Cell> cols = cf.getSortedColumns();
    boolean keyColumnsAdded = false;
    for (Cell column : cols) {
        if (!keyColumnsAdded) {
            addKeyColumns(positions, tuple, rowKey);
            keyColumnsAdded = true;
        }
        String actualColumnName = column.name().cql3ColumnName(table.metadata).toString();
        ByteBuffer colValue = column.value();
        AbstractType<?> valueValidator = table.metadata.getValueValidator(column.name());
        if (valueValidator.isCollection()) {
            CollectionType validator = (CollectionType) valueValidator;
            AbstractType keyType = validator.nameComparator();
            AbstractType valueType = validator.valueComparator();
            ByteBuffer keyBuf = column.name().collectionElement();
            if (valueValidator instanceof MapType) {
                actualColumnName = actualColumnName + "." + keyType.compose(keyBuf);
                valueValidator = valueType;
            } else if (valueValidator instanceof SetType) {
                colValue = keyBuf;
                valueValidator = keyType;
            } else {
                valueValidator = valueType;
            }
        }
        for (String field : positions.keySet()) {
            if (actualColumnName.equalsIgnoreCase(field)) {
                tuple.getTuple()[positions.get(field)] = valueValidator.compose(colValue);
            }
        }
    }
}

From source file:com.tuplejump.stargate.Fields.java

License:Apache License

public static ByteBuffer defaultValue(AbstractType type, boolean min) {
    CQL3Type cqlType = type.asCQL3Type();
    if (cqlType == CQL3Type.Native.INT || cqlType == CQL3Type.Native.VARINT) {
        return ByteBufferUtil.bytes(min ? Integer.MIN_VALUE : Integer.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.BIGINT) {
        return ByteBufferUtil.bytes(min ? Long.MIN_VALUE : Long.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.DECIMAL || cqlType == CQL3Type.Native.DOUBLE) {
        return ByteBufferUtil.bytes(min ? Double.MIN_VALUE : Double.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.FLOAT) {
        return ByteBufferUtil.bytes(min ? Float.MIN_VALUE : Float.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.TEXT || cqlType == CQL3Type.Native.VARCHAR) {
        return ByteBufferUtil.bytes("");
    } else if (cqlType == CQL3Type.Native.UUID) {
        return ByteBufferUtil.bytes(UUID.randomUUID());
    } else if (cqlType == CQL3Type.Native.TIMEUUID) {
        return ByteBufferUtil.bytes(UUIDGen.getTimeUUID(0));
    } else if (cqlType == CQL3Type.Native.TIMESTAMP) {
        return ByteBufferUtil.bytes(0l);
    } else if (cqlType == CQL3Type.Native.BOOLEAN) {
        return BooleanType.instance.decompose(min ? false : true);
    } else if (type.isCollection()) {
        CollectionType collectionType = (CollectionType) type;
        List<Pair<ByteBuffer, Column>> collection = new ArrayList<>();
        ByteBuffer dummyColumn = defaultValue(collectionType.nameComparator());
        collection.add(Pair.create(dummyColumn,
                new Column(dummyColumn, defaultValue(collectionType.valueComparator(), min))));
        return collectionType.serialize(collection);
    } else {/* w w w . j a v a  2 s .  c o  m*/
        return ByteBufferUtil.EMPTY_BYTE_BUFFER;
    }
}