org.apache.calcite.linq4j.ExtendedQueryable 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.calcite.linq4j;
import org.apache.calcite.linq4j.function.BigDecimalFunction1;
import org.apache.calcite.linq4j.function.DoubleFunction1;
import org.apache.calcite.linq4j.function.EqualityComparer;
import org.apache.calcite.linq4j.function.FloatFunction1;
import org.apache.calcite.linq4j.function.Function1;
import org.apache.calcite.linq4j.function.Function2;
import org.apache.calcite.linq4j.function.IntegerFunction1;
import org.apache.calcite.linq4j.function.LongFunction1;
import org.apache.calcite.linq4j.function.NullableBigDecimalFunction1;
import org.apache.calcite.linq4j.function.NullableDoubleFunction1;
import org.apache.calcite.linq4j.function.NullableFloatFunction1;
import org.apache.calcite.linq4j.function.NullableIntegerFunction1;
import org.apache.calcite.linq4j.function.NullableLongFunction1;
import org.apache.calcite.linq4j.function.Predicate1;
import org.apache.calcite.linq4j.function.Predicate2;
import org.apache.calcite.linq4j.tree.FunctionExpression;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.framework.qual.Covariant;
import java.math.BigDecimal;
import java.util.Comparator;
/**
* Extension methods in Queryable.
*
* @param Element type
*/
@Covariant(0)
interface ExtendedQueryable extends ExtendedEnumerable {
/**
* Applies an accumulator function over a sequence.
*/
@Nullable TSource aggregate(
FunctionExpression> selector);
/**
* Applies an accumulator function over a
* sequence. The specified seed value is used as the initial
* accumulator value.
*/
TAccumulate aggregate(TAccumulate seed,
FunctionExpression>
selector);
/**
* Applies an accumulator function over a
* sequence. The specified seed value is used as the initial
* accumulator value, and the specified function is used to select
* the result value.
*/
TResult aggregate(TAccumulate seed,
FunctionExpression> func,
FunctionExpression> selector);
/**
* Determines whether all the elements of a sequence
* satisfy a condition.
*/
boolean all(FunctionExpression> predicate);
/**
* Determines whether any element of a sequence
* satisfies a condition.
*/
boolean any(FunctionExpression> predicate);
/**
* Computes the average of a sequence of Decimal
* values that is obtained by invoking a projection function on
* each element of the input sequence.
*/
BigDecimal averageBigDecimal(
FunctionExpression> selector);
/**
* Computes the average of a sequence of nullable
* Decimal values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
BigDecimal averageNullableBigDecimal(
FunctionExpression> selector);
/**
* Computes the average of a sequence of Double
* values that is obtained by invoking a projection function on
* each element of the input sequence.
*/
double averageDouble(FunctionExpression> selector);
/**
* Computes the average of a sequence of nullable
* Double values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
Double averageNullableDouble(
FunctionExpression> selector);
/**
* Computes the average of a sequence of int values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
int averageInteger(FunctionExpression> selector);
/**
* Computes the average of a sequence of nullable
* int values that is obtained by invoking a projection function
* on each element of the input sequence.
*/
Integer averageNullableInteger(
FunctionExpression> selector);
/**
* Computes the average of a sequence of Float
* values that is obtained by invoking a projection function on
* each element of the input sequence.
*/
float averageFloat(FunctionExpression> selector);
/**
* Computes the average of a sequence of nullable
* Float values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
Float averageNullableFloat(
FunctionExpression> selector);
/**
* Computes the average of a sequence of long values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
long averageLong(FunctionExpression> selector);
/**
* Computes the average of a sequence of nullable
* long values that is obtained by invoking a projection function
* on each element of the input sequence.
*/
Long averageNullableLong(
FunctionExpression> selector);
/**
* Concatenates two sequences.
*/
@Override Queryable concat(Enumerable source2);
/**
* Returns the number of elements in the specified
* sequence that satisfies a condition.
*/
int count(FunctionExpression> predicate);
/**
* Returns the elements of the specified sequence or
* the type parameter's default value in a singleton collection if
* the sequence is empty.
*/
@Override Queryable<@Nullable TSource> defaultIfEmpty();
/**
* Returns distinct elements from a sequence by using
* the default equality comparer to compare values.
*/
@Override Queryable distinct();
/**
* Returns distinct elements from a sequence by using
* a specified EqualityComparer<TSource> to compare values.
*/
@Override Queryable distinct(EqualityComparer comparer);
/**
* Produces the set difference of two sequences by
* using the default equality comparer to compare values,
* eliminate duplicates. (Defined by Enumerable.)
*/
@Override Queryable except(Enumerable enumerable);
/**
* Produces the set difference of two sequences by
* using the default equality comparer to compare values,
* using {@code all} to indicate whether to eliminate duplicates.
* (Defined by Enumerable.)
*/
@Override Queryable except(Enumerable enumerable, boolean all);
/**
* Produces the set difference of two sequences by
* using the specified {@code EqualityComparer} to compare
* values, eliminate duplicates.
*/
@Override Queryable except(Enumerable enumerable,
EqualityComparer comparer);
/**
* Produces the set difference of two sequences by
* using the specified {@code EqualityComparer} to compare
* values, using {@code all} to indicate whether to eliminate duplicates.
*/
@Override Queryable except(Enumerable enumerable,
EqualityComparer comparer, boolean all);
/**
* Returns the first element of a sequence that
* satisfies a specified condition.
*/
TSource first(FunctionExpression> predicate);
/**
* Returns the first element of a sequence that
* satisfies a specified condition or a default value if no such
* element is found.
*/
@Nullable TSource firstOrDefault(FunctionExpression> predicate);
/**
* Groups the elements of a sequence according to a
* specified key selector function.
*/
Queryable> groupBy(
FunctionExpression> keySelector);
/**
* Groups the elements of a sequence according to a
* specified key selector function and compares the keys by using
* a specified comparer.
*/
Queryable> groupBy(
FunctionExpression> keySelector,
EqualityComparer comparer);
/**
* Groups the elements of a sequence according to a
* specified key selector function and projects the elements for
* each group by using a specified function.
*/
Queryable> groupBy(
FunctionExpression> keySelector,
FunctionExpression> elementSelector);
/**
* Groups the elements of a sequence and projects the
* elements for each group by using a specified function. Key
* values are compared by using a specified comparer.
*/
Queryable> groupBy(
FunctionExpression> keySelector,
FunctionExpression> elementSelector,
EqualityComparer comparer);
/**
* Groups the elements of a sequence according to a
* specified key selector function and creates a result value from
* each group and its key.
*
* NOTE: Renamed from {@code groupBy} to distinguish from
* {@link #groupBy(org.apache.calcite.linq4j.tree.FunctionExpression, org.apache.calcite.linq4j.tree.FunctionExpression)},
* which has the same erasure.
*/
Queryable groupByK(
FunctionExpression> keySelector,
FunctionExpression, TResult>> resultSelector);
/**
* Groups the elements of a sequence according to a
* specified key selector function and creates a result value from
* each group and its key. Keys are compared by using a specified
* comparer.
*/
Queryable groupByK(
FunctionExpression> keySelector,
FunctionExpression, TResult>> resultSelector,
EqualityComparer comparer);
/**
* Groups the elements of a sequence according to a
* specified key selector function and creates a result value from
* each group and its key. The elements of each group are
* projected by using a specified function.
*/
Queryable groupBy(
FunctionExpression> keySelector,
FunctionExpression> elementSelector,
FunctionExpression, TResult>>
resultSelector);
/**
* Groups the elements of a sequence according to a
* specified key selector function and creates a result value from
* each group and its key. Keys are compared by using a specified
* comparer and the elements of each group are projected by using
* a specified function.
*/
Queryable groupBy(
FunctionExpression> keySelector,
FunctionExpression> elementSelector,
FunctionExpression, TResult>>
resultSelector,
EqualityComparer comparer);
/**
* Correlates the elements of two sequences based on
* key equality and groups the results. The default equality
* comparer is used to compare keys.
*/
Queryable groupJoin(Enumerable inner,
FunctionExpression> outerKeySelector,
FunctionExpression> innerKeySelector,
FunctionExpression, TResult>>
resultSelector);
/**
* Correlates the elements of two sequences based on
* key equality and groups the results. A specified
* {@code EqualityComparer} is used to compare keys.
*/
Queryable groupJoin(Enumerable inner,
FunctionExpression> outerKeySelector,
FunctionExpression> innerKeySelector,
FunctionExpression, TResult>>
resultSelector,
EqualityComparer comparer);
/**
* Produces the set intersection of two sequences by
* using the default equality comparer to compare values,
* eliminate duplicates.(Defined by Queryable.)
*/
@Override Queryable intersect(Enumerable enumerable);
/**
* Produces the set intersection of two sequences by
* using the default equality comparer to compare values,
* using {@code all} to indicate whether to eliminate duplicates.
* (Defined by Queryable.)
*/
@Override Queryable intersect(Enumerable enumerable, boolean all);
/**
* Produces the set intersection of two sequences by
* using the specified {@code EqualityComparer} to compare
* values, eliminate duplicates.
*/
@Override Queryable intersect(Enumerable enumerable,
EqualityComparer comparer);
/**
* Produces the set intersection of two sequences by
* using the specified {@code EqualityComparer} to compare
* values, using {@code all} to indicate whether to eliminate duplicates.
*/
@Override Queryable intersect(Enumerable enumerable,
EqualityComparer comparer, boolean all);
/**
* Correlates the elements of two sequences based on
* matching keys. The default equality comparer is used to compare
* keys.
*/
Queryable join(Enumerable inner,
FunctionExpression> outerKeySelector,
FunctionExpression> innerKeySelector,
FunctionExpression> resultSelector);
/**
* Correlates the elements of two sequences based on
* matching keys. A specified {@code EqualityComparer} is used to
* compare keys.
*/
Queryable join(Enumerable inner,
FunctionExpression> outerKeySelector,
FunctionExpression> innerKeySelector,
FunctionExpression> resultSelector,
EqualityComparer comparer);
/**
* Returns the last element of a sequence that
* satisfies a specified condition.
*/
TSource last(FunctionExpression> predicate);
/**
* Returns the last element of a sequence that
* satisfies a condition or a default value if no such element is
* found.
*/
@Nullable TSource lastOrDefault(FunctionExpression> predicate);
/**
* Returns an long that represents the number of
* elements in a sequence that satisfy a condition.
*/
long longCount(FunctionExpression> predicate);
/**
* Invokes a projection function on each element of a
* generic {@code IQueryable} and returns the maximum resulting
* value.
*/
> @Nullable TResult max(
FunctionExpression> selector);
/**
* Invokes a projection function on each element of a
* generic {@code IQueryable} and returns the minimum resulting
* value.
*/
> @Nullable TResult min(
FunctionExpression> selector);
/**
* Filters the elements of an IQueryable based on a
* specified type.
*
* The OfType method generates a
* {@link org.apache.calcite.linq4j.tree.MethodCallExpression} that represents
* calling OfType itself as a constructed generic method. It then passes the
* MethodCallExpression to the CreateQuery(Expression) method of the
* {@link QueryProvider} represented by the Provider property of the source
* parameter.
*
*
The query behavior that occurs as a result of executing an expression
* tree that represents calling OfType depends on the implementation of the
* type of the source parameter. The expected behavior is that it filters
* out any elements in source that are not of type TResult.
*
*
NOTE: clazz parameter not present in C# LINQ; necessary because of
* Java type erasure.
*/
@Override Queryable ofType(Class clazz);
@Override Queryable cast(Class clazz);
/**
* Sorts the elements of a sequence in ascending
* order according to a key.
*/
OrderedQueryable orderBy(
FunctionExpression> keySelector);
/**
* Sorts the elements of a sequence in ascending
* order by using a specified comparer.
*/
OrderedQueryable orderBy(
FunctionExpression> keySelector,
Comparator comparator);
/**
* Sorts the elements of a sequence in descending
* order according to a key.
*/
OrderedQueryable orderByDescending(
FunctionExpression> keySelector);
/**
* Sorts the elements of a sequence in descending
* order by using a specified comparer.
*/
OrderedQueryable orderByDescending(
FunctionExpression> keySelector,
Comparator comparator);
/**
* Inverts the order of the elements in a sequence.
*/
@Override Queryable reverse();
/**
* Projects each element of a sequence into a new form.
*/
Queryable select(
FunctionExpression> selector);
/**
* Projects each element of a sequence into a new
* form by incorporating the element's index.
*
* NOTE: Renamed from {@code select} because had same erasure as
* {@link #select(org.apache.calcite.linq4j.tree.FunctionExpression)}.
*/
Queryable selectN(
FunctionExpression> selector);
/**
* Projects each element of a sequence to an
* {@code Enumerable} and combines the resulting sequences into one
* sequence.
*/
Queryable selectMany(
FunctionExpression>> selector);
/**
* Projects each element of a sequence to an
* {@code Enumerable} and combines the resulting sequences into one
* sequence. The index of each source element is used in the
* projected form of that element.
*
* NOTE: Renamed from {@code selectMany} because had same erasure as
* {@link #selectMany(org.apache.calcite.linq4j.tree.FunctionExpression)}.
*/
Queryable selectManyN(
FunctionExpression>>
selector);
/**
* Projects each element of a sequence to an
* {@code Enumerable} that incorporates the index of the source
* element that produced it. A result selector function is invoked
* on each element of each intermediate sequence, and the
* resulting values are combined into a single, one-dimensional
* sequence and returned.
*/
Queryable selectMany(
FunctionExpression>>
collectionSelector,
FunctionExpression>
resultSelector);
/**
* Projects each element of a sequence to an
* {@code Enumerable} and invokes a result selector function on each
* element therein. The resulting values from each intermediate
* sequence are combined into a single, one-dimensional sequence
* and returned.
*
* NOTE: Renamed from {@code selectMany} because had same erasure as
* {@link #selectMany(org.apache.calcite.linq4j.tree.FunctionExpression, org.apache.calcite.linq4j.tree.FunctionExpression)}
*/
Queryable selectManyN(
FunctionExpression>>
collectionSelector,
FunctionExpression>
resultSelector);
/**
* Returns the only element of a sequence that
* satisfies a specified condition, and throws an exception if
* more than one such element exists.
*/
TSource single(FunctionExpression> predicate);
/**
* Returns the only element of a sequence, or a
* default value if the sequence is empty; this method throws an
* exception if there is more than one element in the
* sequence.
*/
@Override @Nullable TSource singleOrDefault();
/**
* Returns the only element of a sequence that
* satisfies a specified condition or a default value if no such
* element exists; this method throws an exception if more than
* one element satisfies the condition.
*/
@Nullable TSource singleOrDefault(FunctionExpression> predicate);
/**
* Bypasses a specified number of elements in a
* sequence and then returns the remaining elements.
*/
@Override Queryable skip(int count);
/**
* Bypasses elements in a sequence as long as a
* specified condition is true and then returns the remaining
* elements.
*/
Queryable skipWhile(
FunctionExpression> predicate);
/**
* Bypasses elements in a sequence as long as a
* specified condition is true and then returns the remaining
* elements. The element's index is used in the logic of the
* predicate function.
*/
Queryable skipWhileN(
FunctionExpression> predicate);
/**
* Computes the sum of the sequence of Decimal values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
BigDecimal sumBigDecimal(
FunctionExpression> selector);
/**
* Computes the sum of the sequence of nullable
* Decimal values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
BigDecimal sumNullableBigDecimal(
FunctionExpression> selector);
/**
* Computes the sum of the sequence of Double values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
double sumDouble(FunctionExpression> selector);
/**
* Computes the sum of the sequence of nullable
* Double values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
Double sumNullableDouble(
FunctionExpression> selector);
/**
* Computes the sum of the sequence of int values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
int sumInteger(FunctionExpression> selector);
/**
* Computes the sum of the sequence of nullable int
* values that is obtained by invoking a projection function on
* each element of the input sequence.
*/
Integer sumNullableInteger(
FunctionExpression> selector);
/**
* Computes the sum of the sequence of long values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
long sumLong(FunctionExpression> selector);
/**
* Computes the sum of the sequence of nullable long
* values that is obtained by invoking a projection function on
* each element of the input sequence.
*/
Long sumNullableLong(
FunctionExpression> selector);
/**
* Computes the sum of the sequence of Float values
* that is obtained by invoking a projection function on each
* element of the input sequence.
*/
float sumFloat(FunctionExpression> selector);
/**
* Computes the sum of the sequence of nullable
* Float values that is obtained by invoking a projection
* function on each element of the input sequence.
*/
Float sumNullableFloat(
FunctionExpression> selector);
/**
* Returns a specified number of contiguous elements
* from the start of a sequence.
*/
@Override Queryable take(int count);
/**
* Returns elements from a sequence as long as a
* specified condition is true.
*/
Queryable takeWhile(
FunctionExpression> predicate);
/**
* Returns elements from a sequence as long as a
* specified condition is true. The element's index is used in the
* logic of the predicate function.
*/
Queryable takeWhileN(
FunctionExpression> predicate);
/**
* Produces the set union of two sequences by using
* the default equality comparer.
*/
@Override Queryable union(Enumerable source1);
/**
* Produces the set union of two sequences by using a
* specified {@code EqualityComparer}.
*/
@Override Queryable union(Enumerable source1,
EqualityComparer comparer);
/**
* Filters a sequence of values based on a
* predicate.
*/
Queryable where(
FunctionExpression extends Predicate1> predicate);
/**
* Filters a sequence of values based on a
* predicate. Each element's index is used in the logic of the
* predicate function.
*/
Queryable whereN(
FunctionExpression extends Predicate2> predicate);
/**
* Merges two sequences by using the specified
* predicate function.
*/
Queryable zip(Enumerable source1,
FunctionExpression> resultSelector);
}