/* * * 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.cql; import java.util.ArrayList; import java.util.List; /** * Select expressions are analogous to the projection in a SQL query. They * determine which columns will appear in the result set. SelectExpression * instances encapsulate a parsed expression from a <code>SELECT</code> * statement. * * See: doc/cql/CQL.html#SpecifyingColumns */ public class SelectExpression { public static final int MAX_COLUMNS_DEFAULT = 10000; private int numColumns = MAX_COLUMNS_DEFAULT; private boolean reverseColumns = false; private final boolean wildcard; private Term start, finish; private List<Term> columns; /** * Create a new SelectExpression for a range (slice) of columns. * * @param start the starting column name * @param finish the finishing column name * @param count the number of columns to limit the results to * @param reverse true to reverse column order */ public SelectExpression(Term start, Term finish, int count, boolean reverse, boolean wildcard) { this.start = start; this.finish = finish; numColumns = count; reverseColumns = reverse; this.wildcard = wildcard; } /** * Create a new SelectExpression for a list of columns. * * @param first the first (possibly only) column name to select on. * @param count the number of columns to limit the results on * @param reverse true to reverse column order */ public SelectExpression(Term first, int count, boolean reverse) { wildcard = false; columns = new ArrayList<Term>(); columns.add(first); numColumns = count; reverseColumns = reverse; } /** * Add an additional column name to a SelectExpression. * * @param addTerm */ public void and(Term addTerm) { assert !isColumnRange(); // Not possible when invoked by parser columns.add(addTerm); } public boolean isColumnRange() { return (start != null); } public boolean isColumnList() { return !isColumnRange(); } public int getColumnsLimit() { return numColumns; } public boolean isColumnsReversed() { return reverseColumns; } public void setColumnsReversed(boolean reversed) { reverseColumns = reversed; } public void setColumnsLimit(int limit) { numColumns = limit; } public Term getStart() { return start; } public Term getFinish() { return finish; } public List<Term> getColumns() { return columns; } public boolean isWildcard() { return wildcard; } }