This is an automated email from the ASF dual-hosted git repository.
mihaibudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new 3f0b7fbe31 [CALCITE-7877] EnumerableDefaults.asOrderedQueryable throws
NullPointerException for any Enumerable that is not already an OrderedQueryable
3f0b7fbe31 is described below
commit 3f0b7fbe31d5341de7c28dd55023d4b2cb1e27ce
Author: linzch3 <[email protected]>
AuthorDate: Wed Nov 4 16:18:10 2026 +0000
[CALCITE-7877] EnumerableDefaults.asOrderedQueryable throws
NullPointerException for any Enumerable that is not already an OrderedQueryable
Generated-by: AI-assisted
---
.../apache/calcite/linq4j/EnumerableDefaults.java | 2 +-
.../org/apache/calcite/linq4j/test/Linq4jTest.java | 31 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git
a/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java
b/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java
index a611d0d3ad..f3d01a08a8 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java
@@ -4540,7 +4540,7 @@ public static <T> OrderedQueryable<T> asOrderedQueryable(
return source instanceof OrderedQueryable
? ((OrderedQueryable<T>) source)
: new EnumerableOrderedQueryable<>(
- source, (Class) Object.class, requireNonNull(null, "null"), null);
+ source, (Class) Object.class, Linq4j.DEFAULT_PROVIDER, null);
}
/** Default implementation of {@link ExtendedEnumerable#into(Collection)}. */
diff --git
a/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
b/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
index cd894f964b..021d1c74e6 100644
--- a/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
+++ b/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
@@ -24,6 +24,7 @@
import org.apache.calcite.linq4j.Grouping;
import org.apache.calcite.linq4j.Linq4j;
import org.apache.calcite.linq4j.Lookup;
+import org.apache.calcite.linq4j.OrderedQueryable;
import org.apache.calcite.linq4j.Queryable;
import org.apache.calcite.linq4j.QueryableDefaults;
import org.apache.calcite.linq4j.function.EqualityComparer;
@@ -36,6 +37,7 @@
import org.apache.calcite.linq4j.function.Predicate2;
import org.apache.calcite.linq4j.tree.ConstantExpression;
import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.calcite.linq4j.tree.FunctionExpression;
import org.apache.calcite.linq4j.tree.ParameterExpression;
import com.example.Linq4jExample;
@@ -1157,6 +1159,35 @@ private <T> List<T> contentsOf(Enumerator<T> enumerator)
{
assertFalse(productAbcXy.moveNext());
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-7877">[CALCITE-7877]
+ * EnumerableDefaults.asOrderedQueryable throws NullPointerException for any
+ * Enumerable that is not already an OrderedQueryable</a>. */
+ @Test void testAsOrderedQueryable() {
+ final OrderedQueryable<Integer> queryable =
+ EnumerableDefaults.asOrderedQueryable(
+ Linq4j.asEnumerable(Arrays.asList(1, 2)));
+ assertThat(queryable.toList(), is(Arrays.asList(1, 2)));
+ assertThat(queryable.getProvider(), sameInstance(Linq4j.DEFAULT_PROVIDER));
+
+ // Queryable.orderBy and orderByDescending on a plain Enumerable go
+ // through asOrderedQueryable
+ final Queryable<Employee> queryableEmps =
+ Linq4j.asEnumerable(emps).asQueryable();
+ final FunctionExpression<Function1<Employee, String>> name =
+ Expressions.lambda(e -> e.name);
+ assertThat(
+ queryableEmps.orderBy(name).select(e -> e.name).toList(),
+ is(Arrays.asList("Bill", "Eric", "Fred", "Janet")));
+ assertThat(
+ queryableEmps.orderByDescending(name).select(e -> e.name).toList(),
+ is(Arrays.asList("Janet", "Fred", "Eric", "Bill")));
+ assertThat(
+ queryableEmps.orderBy(name, Comparator.reverseOrder())
+ .select(e -> e.name).toList(),
+ is(Arrays.asList("Janet", "Fred", "Eric", "Bill")));
+ }
+
@Test void testAsQueryable() {
// "count" is an Enumerable method.
final int n =