All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.cassandra.db.AbstractRangeCommand Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.cassandra.db;

import java.util.List;

import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.filter.*;
import org.apache.cassandra.db.index.SecondaryIndexSearcher;
import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.net.MessageOut;
import org.apache.cassandra.service.IReadCommand;
import org.apache.cassandra.thrift.IndexExpression;

public abstract class AbstractRangeCommand implements IReadCommand {
	public final String keyspace;
	public final String columnFamily;
	public final long timestamp;

	public final AbstractBounds keyRange;
	public final IDiskAtomFilter predicate;
	public final List rowFilter;

	public final SecondaryIndexSearcher searcher;

	public AbstractRangeCommand(String keyspace,
	                            String columnFamily,
	                            long timestamp,
	                            AbstractBounds keyRange,
	                            IDiskAtomFilter predicate,
	                            List rowFilter) {
		this.keyspace = keyspace;
		this.columnFamily = columnFamily;
		this.timestamp = timestamp;
		this.keyRange = keyRange;
		this.predicate = predicate;
		this.rowFilter = rowFilter;
		this.searcher = Keyspace.open(keyspace).getColumnFamilyStore(columnFamily).indexManager.searcher(rowFilter);
	}

	public boolean requiresFullScan() {
		return searcher == null ? false : searcher.requiresFullScan(this);
	}

	public List combine(List rows) {
		if (searcher != null)
			return searcher.combine(this, rows);
		else if (countCQL3Rows())
			return rows;
		else
			return trim(rows);
	}
	
	public List trim(List rows) {
		return rows.size() > limit() ? rows.subList(0, limit()) : rows;
	}

	public String getKeyspace() {
		return keyspace;
	}

	public abstract MessageOut createMessage();

	public abstract AbstractRangeCommand forSubRange(AbstractBounds range);

	public abstract AbstractRangeCommand withUpdatedLimit(int newLimit);

	public abstract int limit();

	public abstract boolean countCQL3Rows();

	public abstract List executeLocally();

	public long getTimeout() {
		return DatabaseDescriptor.getRangeRpcTimeout();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy