/*
* Licensed to Crate under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership. Crate 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.
*
* However, if you have executed another commercial license agreement
* with Crate these terms will supersede the license and you may use the
* software solely pursuant to the terms of the relevant commercial
* agreement.
*/
/**
* Package with data structures for the execution engine / data processing.
*
* The main components are:
*
* - {@link io.crate.data.BatchIterator} which provides access to data
* - {@link io.crate.data.BatchConsumer} consumes data from a BatchIterator
*
* BatchIterators come in different forms:
*
* - "Source" BatchIterators: These expose data from either in-memory, disk or network
* (Examples are LuceneBatchIterator, {@link io.crate.data.RowsBatchIterator} (Iterable backed))
*
* - "Projecting" BatchIterators: These wrap another BatchIterator and transform their data.
* There are multiple sub-types:
*
* - "Synchronous/Forwarding": transformation is mostly done on a row per row basis.
* Examples include Filtering-, Limiting-, SkippingBatchIterator.
*
* - "Collecting": BatchIterators which need to consume all of the source BatchIterator
* in order to produce a new result.
* Examples include aggregation, sorting, grouping. See {@link io.crate.data.CollectingBatchIterator}
*
* - Batch/Bulk collecting with async operations:
* Similar to the {@link io.crate.data.CollectingBatchIterator}, but instead of consuming the whole source
* in one pass, these consume it in batches - after each batch it invokes an async operation, after which
* it will continue with the consumption.
* Examples include the fetch-operation.
* See {@link io.crate.data.AsyncOperationBatchIterator}
*
*
*/
package io.crate.data;