Java Code Examples for org.apache.cassandra.config.CFMetaData#isCounter()
The following examples show how to use
org.apache.cassandra.config.CFMetaData#isCounter() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: CreateIndexStatement.java From stratio-cassandra with Apache License 2.0 | 4 votes |
public void validate(ClientState state) throws RequestValidationException { CFMetaData cfm = ThriftValidation.validateColumnFamily(keyspace(), columnFamily()); if (cfm.isCounter()) throw new InvalidRequestException("Secondary indexes are not supported on counter tables"); IndexTarget target = rawTarget.prepare(cfm); ColumnDefinition cd = cfm.getColumnDefinition(target.column); if (cd == null) throw new InvalidRequestException("No column definition found for column " + target.column); boolean isMap = cd.type instanceof MapType; boolean isFrozenCollection = cd.type.isCollection() && !cd.type.isMultiCell(); if (target.isCollectionKeys) { if (!isMap) throw new InvalidRequestException("Cannot create index on keys of column " + target + " with non-map type"); if (!cd.type.isMultiCell()) throw new InvalidRequestException("Cannot create index on keys of frozen<map> column " + target); } else if (target.isFullCollection) { if (!isFrozenCollection) throw new InvalidRequestException("full() indexes can only be created on frozen collections"); } else if (isFrozenCollection) { throw new InvalidRequestException("Frozen collections currently only support full-collection indexes. " + "For example, 'CREATE INDEX ON <table>(full(<columnName>))'."); } if (cd.getIndexType() != null) { boolean previousIsKeys = cd.hasIndexOption(SecondaryIndex.INDEX_KEYS_OPTION_NAME); if (isMap && target.isCollectionKeys != previousIsKeys) { String msg = "Cannot create index on %s %s, an index on %s %s already exists and indexing " + "a map on both keys and values at the same time is not currently supported"; throw new InvalidRequestException(String.format(msg, target.column, target.isCollectionKeys ? "keys" : "values", target.column, previousIsKeys ? "keys" : "values")); } if (ifNotExists) return; else throw new InvalidRequestException("Index already exists"); } properties.validate(cfm); // TODO: we could lift that limitation if ((cfm.comparator.isDense() || !cfm.comparator.isCompound()) && cd.kind != ColumnDefinition.Kind.REGULAR) throw new InvalidRequestException("Secondary indexes are not supported on PRIMARY KEY columns in COMPACT STORAGE tables"); // It would be possible to support 2ndary index on static columns (but not without modifications of at least ExtendedFilter and // CompositesIndex) and maybe we should, but that means a query like: // SELECT * FROM foo WHERE static_column = 'bar' // would pull the full partition every time the static column of partition is 'bar', which sounds like offering a // fair potential for foot-shooting, so I prefer leaving that to a follow up ticket once we have identified cases where // such indexing is actually useful. if (cd.isStatic()) throw new InvalidRequestException("Secondary indexes are not allowed on static columns"); if (cd.kind == ColumnDefinition.Kind.PARTITION_KEY && cd.isOnAllComponents()) throw new InvalidRequestException(String.format("Cannot create secondary index on partition key column %s", target.column)); }
Example 2
Source File: CassandraServer.java From stratio-cassandra with Apache License 2.0 | 4 votes |
private List<IMutation> createMutationList(ConsistencyLevel consistency_level, Map<ByteBuffer,Map<String,List<Mutation>>> mutation_map, boolean allowCounterMutations) throws RequestValidationException { List<IMutation> mutations = new ArrayList<>(); ThriftClientState cState = state(); String keyspace = cState.getKeyspace(); for (Map.Entry<ByteBuffer, Map<String, List<Mutation>>> mutationEntry: mutation_map.entrySet()) { ByteBuffer key = mutationEntry.getKey(); // We need to separate mutation for standard cf and counter cf (that will be encapsulated in a // CounterMutation) because it doesn't follow the same code path org.apache.cassandra.db.Mutation standardMutation = null; org.apache.cassandra.db.Mutation counterMutation = null; Map<String, List<Mutation>> columnFamilyToMutations = mutationEntry.getValue(); for (Map.Entry<String, List<Mutation>> columnFamilyMutations : columnFamilyToMutations.entrySet()) { String cfName = columnFamilyMutations.getKey(); cState.hasColumnFamilyAccess(keyspace, cfName, Permission.MODIFY); CFMetaData metadata = ThriftValidation.validateColumnFamily(keyspace, cfName); ThriftValidation.validateKey(metadata, key); org.apache.cassandra.db.Mutation mutation; if (metadata.isCounter()) { ThriftConversion.fromThrift(consistency_level).validateCounterForWrite(metadata); counterMutation = counterMutation == null ? new org.apache.cassandra.db.Mutation(keyspace, key) : counterMutation; mutation = counterMutation; } else { standardMutation = standardMutation == null ? new org.apache.cassandra.db.Mutation(keyspace, key) : standardMutation; mutation = standardMutation; } for (Mutation m : columnFamilyMutations.getValue()) { ThriftValidation.validateMutation(metadata, m); if (m.deletion != null) { deleteColumnOrSuperColumn(mutation, metadata, m.deletion); } if (m.column_or_supercolumn != null) { addColumnOrSuperColumn(mutation, metadata, m.column_or_supercolumn); } } } if (standardMutation != null && !standardMutation.isEmpty()) mutations.add(standardMutation); if (counterMutation != null && !counterMutation.isEmpty()) { if (allowCounterMutations) mutations.add(new CounterMutation(counterMutation, ThriftConversion.fromThrift(consistency_level))); else throw new org.apache.cassandra.exceptions.InvalidRequestException("Counter mutations are not allowed in atomic batches"); } } return mutations; }