Search in sources :

Example 1 with CfDef

use of org.apache.cassandra.db.migration.avro.CfDef in project eiger by wlloyd.

the class DropIndexStatement method generateMutation.

public UpdateColumnFamily generateMutation(String keyspace) throws InvalidRequestException, ConfigurationException, IOException {
    CfDef cfDef = null;
    KSMetaData ksm = Schema.instance.getTableDefinition(keyspace);
    for (CFMetaData cfm : ksm.cfMetaData().values()) {
        cfDef = getUpdatedCFDef(cfm.toAvro());
        if (cfDef != null)
            break;
    }
    if (cfDef == null)
        throw new InvalidRequestException("Index '" + index + "' could not be found in any of the ColumnFamilies of keyspace '" + keyspace + "'");
    return new UpdateColumnFamily(cfDef);
}
Also used : UpdateColumnFamily(org.apache.cassandra.db.migration.UpdateColumnFamily) InvalidRequestException(org.apache.cassandra.thrift.InvalidRequestException) CfDef(org.apache.cassandra.db.migration.avro.CfDef)

Example 2 with CfDef

use of org.apache.cassandra.db.migration.avro.CfDef in project eiger by wlloyd.

the class AlterTableStatement method getCfDef.

public CfDef getCfDef(String keyspace) throws ConfigurationException, InvalidRequestException {
    CFMetaData meta = Schema.instance.getCFMetaData(keyspace, columnFamily);
    CfDef cfDef = meta.toAvro();
    ByteBuffer columnName = this.oType == OperationType.OPTS ? null : meta.comparator.fromString(this.columnName);
    switch(oType) {
        case ADD:
            if (cfDef.key_alias != null && cfDef.key_alias.equals(columnName))
                throw new InvalidRequestException("Invalid column name: " + this.columnName + ", because it equals to key_alias.");
            cfDef.column_metadata.add(new ColumnDefinition(columnName, TypeParser.parse(validator), null, null, null).toAvro());
            break;
        case ALTER:
            ColumnDefinition column = meta.getColumnDefinition(columnName);
            if (column == null)
                throw new InvalidRequestException(String.format("Column '%s' was not found in CF '%s'", this.columnName, columnFamily));
            column.setValidator(TypeParser.parse(validator));
            cfDef.column_metadata.add(column.toAvro());
            break;
        case DROP:
            ColumnDef toDelete = null;
            for (ColumnDef columnDef : cfDef.column_metadata) {
                if (columnDef.name.equals(columnName)) {
                    toDelete = columnDef;
                }
            }
            if (toDelete == null)
                throw new InvalidRequestException(String.format("Column '%s' was not found in CF '%s'", this.columnName, columnFamily));
            // it is impossible to use ColumnDefinition.deflate() in remove() method
            // it will throw java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.util.Utf8
            // some where deep inside of Avro
            cfDef.column_metadata.remove(toDelete);
            break;
        case OPTS:
            if (cfProps == null)
                throw new InvalidRequestException(String.format("ALTER COLUMNFAMILY WITH invoked, but no parameters found"));
            cfProps.validate();
            applyPropertiesToCfDef(cfDef, cfProps);
            break;
    }
    return cfDef;
}
Also used : ColumnDef(org.apache.cassandra.db.migration.avro.ColumnDef) InvalidRequestException(org.apache.cassandra.thrift.InvalidRequestException) CfDef(org.apache.cassandra.db.migration.avro.CfDef) ByteBuffer(java.nio.ByteBuffer)

Aggregations

CfDef (org.apache.cassandra.db.migration.avro.CfDef)2 InvalidRequestException (org.apache.cassandra.thrift.InvalidRequestException)2 ByteBuffer (java.nio.ByteBuffer)1 UpdateColumnFamily (org.apache.cassandra.db.migration.UpdateColumnFamily)1 ColumnDef (org.apache.cassandra.db.migration.avro.ColumnDef)1