/**
 * 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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.lens.driver.es;

import com.google.common.collect.ImmutableList;
import lombok.Data;

@Data
public final class ESQuery {
  public enum QueryType {AGGR, TERM}
  /**
   * index on which the query will get executed
   */
  private final String index;
  /**
   * type on which the query will get executed
   */
  private final String type;
  /**
   * the query
   */
  private final String query;
  /**
   * aliases in the query (ordered)
   */
  private final ImmutableList<String> schema;
  /**
   * Columns/expressions in the query (ordered)
   */
  private final ImmutableList<String> columns;
  /**
   * Type of the query, aggregate or term;
   */
  private final QueryType queryType;
  /**
   * size of the query;
   */
  private final int limit;
}
