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 =

Reply via email to