You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Kirill Kim (Jira)" <ji...@apache.org> on 2023/04/09 08:48:00 UTC
[jira] [Comment Edited] (CALCITE-5632) Query with ORDER BY and null values NullPointer exception
[ https://issues.apache.org/jira/browse/CALCITE-5632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17709955#comment-17709955 ]
Kirill Kim edited comment on CALCITE-5632 at 4/9/23 8:47 AM:
-------------------------------------------------------------
i have this code in debug with option -Dcalcite.debug=true
/* 1 */ public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) {
/* 2 */ java.util.List accumulatorAdders = new java.util.LinkedList();
/* 3 */ org.apache.calcite.adapter.enumerable.AggregateLambdaFactory lambdaFactory = new org.apache.calcite.adapter.enumerable.BasicAggregateLambdaFactory(
/* 4 */ new org.apache.calcite.linq4j.function.Function0() {
/* 5 */ public Object apply() {
/* 6 */ return org.apache.calcite.runtime.Unit.INSTANCE;
/* 7 */ }
/* 8 */ }
/* 9 */ ,
/* 10 */ accumulatorAdders);
/* 11 */ final org.apache.calcite.linq4j.Enumerable _inputEnumerable = org.apache.calcite.schema.Schemas.enumerable((org.apache.calcite.schema.ScannableTable) root.getRootSchema().getSubSchema("INFOSET").getTable("SUBEKT"), root).groupBy(new org.apache.calcite.linq4j.function.Function1() {
/* 12 */ public java.util.List apply(Object[] a0) {
/* 13 */ return org.apache.calcite.runtime.FlatLists.of(a0[3] == null ? (String) null : a0[3].toString(), a0[11] == null ? (String) null : a0[11].toString());
/* 14 */ }
/* 15 */ public Object apply(Object a0) {
/* 16 */ return apply(
/* 17 */ (Object[]) a0);
/* 18 */ }
/* 19 */ }
/* 20 */ , lambdaFactory.accumulatorInitializer(), lambdaFactory.accumulatorAdder(), lambdaFactory.resultSelector(new org.apache.calcite.linq4j.function.Function2() {
/* 21 */ public Object[] apply(org.apache.calcite.runtime.FlatLists.ComparableList key, org.apache.calcite.runtime.Unit acc) {
/* 22 */ return new Object[] {
/* 23 */ key.get(0) == null ? (String) null : key.get(0).toString(),
/* 24 */ key.get(1) == null ? (String) null : key.get(1).toString()};
/* 25 */ }
/* 26 */ public Object[] apply(Object key, Object acc) {
/* 27 */ return apply(
/* 28 */ (org.apache.calcite.runtime.FlatLists.ComparableList) key,
/* 29 */ (org.apache.calcite.runtime.Unit) acc);
/* 30 */ }
/* 31 */ }
/* 32 */ ));
/* 33 */ final org.apache.calcite.linq4j.AbstractEnumerable child = new org.apache.calcite.linq4j.AbstractEnumerable(){
/* 34 */ public org.apache.calcite.linq4j.Enumerator enumerator() {
/* 35 */ return new org.apache.calcite.linq4j.Enumerator(){
/* 36 */ public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable.enumerator();
/* 37 */ public void reset() {
/* 38 */ inputEnumerator.reset();
/* 39 */ }
/* 40 */
/* 41 */ public boolean moveNext() {
/* 42 */ return inputEnumerator.moveNext();
/* 43 */ }
/* 44 */
/* 45 */ public void close() {
/* 46 */ inputEnumerator.close();
/* 47 */ }
/* 48 */
/* 49 */ public Object current() {
/* 50 */ final Object[] current = (Object[]) inputEnumerator.current();
/* 51 */ final Object input_value = current[1];
/* 52 */ final Object input_value0 = current[0];
/* 53 */ return new Object[] {
/* 54 */ input_value,
/* 55 */ input_value0};
/* 56 */ }
/* 57 */
/* 58 */ };
/* 59 */ }
/* 60 */
/* 61 */ };
/* 62 */ final java.util.Comparator comparator = new java.util.Comparator(){
/* 63 */ public int compare(Object[] v0, Object[] v1) {
/* 64 */ int c;
/* 65 */ c = org.apache.calcite.runtime.Utilities.compare(v0[0] == null ? (String) null : v0[0].toString(), v1[0] == null ? (String) null : v1[0].toString());
/* 66 */ if (c != 0) {
/* 67 */ return c;
/* 68 */ }
/* 69 */ c = org.apache.calcite.runtime.Utilities.compare(v0[1] == null ? (String) null : v0[1].toString(), v1[1] == null ? (String) null : v1[1].toString());
/* 70 */ if (c != 0) {
/* 71 */ return c;
/* 72 */ }
/* 73 */ return 0;
/* 74 */ }
/* 75 */
/* 76 */ public int compare(Object o0, Object o1) {
/* 77 */ return this.compare((Object[]) o0, (Object[]) o1);
/* 78 */ }
/* 79 */
/* 80 */ };
/* 81 */ return child.orderBy(org.apache.calcite.linq4j.function.Functions.identitySelector(), comparator);
/* 82 */ }
/* 83 */
/* 84 */
/* 85 */ public Class getElementType() {
/* 86 */ return java.lang.Object[].class;
/* 87 */ }
/* 88 */
/* 89 */
was (Author: JIRAUSER299720):
i have this code in debug with option -Dcalcite.debug=true
> Query with ORDER BY and null values NullPointer exception
> ---------------------------------------------------------
>
> Key: CALCITE-5632
> URL: https://issues.apache.org/jira/browse/CALCITE-5632
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.34.0
> Reporter: Kirill Kim
> Priority: Major
>
> I try to perform query over over some table data in Java using Calcite. I try to execute query:
> {code:java}
> select distinct tbl.col1 , tbl.col2 from infoset.SUBEKT tbl order by col1 asc nulls last , col2 asc nulls last{code}
> And the following exception occurs
> {code:java}
> java.lang.NullPointerException at org.apache.calcite.runtime.Utilities.compare(Utilities.java:202)
> at Baz$2.compare(ANONYMOUS.java:15)
> at Baz$2.compare(ANONYMOUS.java:27)
> at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:376)
> at java.util.TreeMap.getEntry(TreeMap.java:345)
> at java.util.TreeMap.get(TreeMap.java:278)
> at org.apache.calcite.linq4j.EnumerableDefaults.toLookup_(EnumerableDefaults.java:3608)
> at org.apache.calcite.linq4j.EnumerableDefaults$14.enumerator(EnumerableDefaults.java:2660)
> at org.apache.calcite.linq4j.AbstractEnumerable.iterator(AbstractEnumerable.java:33)
> at org.apache.calcite.avatica.MetaImpl.createCursor(MetaImpl.java:90)
> at org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:186)
> at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64)
> at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43)
> at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:669)
> at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:636)
> at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:677)
> at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:157)
> at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228)
> at ru.spi2.modules.infosetquery.InfosetQueryPlugin.executeQuery(InfosetQueryPlugin.java:101) {code}
> The error occurs because col1 has some rows with null values. If I order only by col1 or col2, all works well.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)