You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2024/11/04 09:12:00 UTC

[jira] [Updated] (FLINK-36654) Decimal divide Integer reports Null pointer exception

     [ https://issues.apache.org/jira/browse/FLINK-36654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

ASF GitHub Bot updated FLINK-36654:
-----------------------------------
    Labels: pull-request-available  (was: )

> Decimal divide Integer reports Null pointer exception
> -----------------------------------------------------
>
>                 Key: FLINK-36654
>                 URL: https://issues.apache.org/jira/browse/FLINK-36654
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Planner
>    Affects Versions: 2.0-preview
>            Reporter: Shuai Xu
>            Priority: Major
>              Labels: pull-request-available
>
> paste the test code in SqlExpressionTest.
>  
> {code:java}
> // code placeholder
> // Decimal(2,1) / Integer => Decimal(13,12)
> testSqlApi("1.0/400", "0.002500000000")
> // Decimal(2,1) / BigInteger => Decimal(22,21)
> testSqlApi("1.0/100000000000", "0.000000000010000000000")
> // Decimal(2,1) / TinyInt => Decimal(7,6)
> testSqlApi("1.0/cast(100 as TINYINT)", "0.010000")
> // Decimal(2,1) / SmallInt => Decimal(8,7)
> testSqlApi("1.0/cast(10000 as SMALLINT)", "0.0001000") {code}
> and get exception 
>  
>  
> {code:java}
> org.apache.flink.table.planner.expressions.SqlExpressionTest,testDivide
> java.lang.AssertionError: Error when executing the expression. Expression code:
>             // Using option 'table.exec.legacy-cast-behaviour':'false'      // Timezone: org.apache.flink.table.api.TableConfig@61150d94                public class TestFunction$20          extends org.apache.flink.api.common.functions.RichMapFunction {
>                 org.apache.flink.table.data.DecimalData decimal$0 = org.apache.flink.table.data.DecimalDataUtils.castFrom(        "1.0",        2,        1);                        org.apache.flink.table.data.DecimalData decimal$5 = org.apache.flink.table.data.DecimalDataUtils.castFrom(        "1.0",        2,        1);                        org.apache.flink.table.data.DecimalData decimal$10 = org.apache.flink.table.data.DecimalDataUtils.castFrom(        "1.0",        2,        1);                        org.apache.flink.table.data.DecimalData decimal$15 = org.apache.flink.table.data.DecimalDataUtils.castFrom(        "1.0",        2,        1);                org.apache.flink.table.data.binary.BinaryRowData out = new org.apache.flink.table.data.binary.BinaryRowData(4);        org.apache.flink.table.data.writer.BinaryRowWriter outWriter = new org.apache.flink.table.data.writer.BinaryRowWriter(out);
>         public TestFunction$20(Object[] references) throws Exception {                  }
>         
>         @Override        public void open(org.apache.flink.api.common.functions.OpenContext openContext) throws Exception {                  }
>         @Override        public Object map(Object _in1) throws Exception {          org.apache.flink.table.data.RowData in1 = (org.apache.flink.table.data.RowData) _in1;                    boolean isNull$1;          org.apache.flink.table.data.DecimalData result$2;          boolean isNull$3;          org.apache.flink.table.data.binary.BinaryStringData result$4;          boolean isNull$6;          org.apache.flink.table.data.DecimalData result$7;          boolean isNull$8;          org.apache.flink.table.data.binary.BinaryStringData result$9;          boolean isNull$11;          org.apache.flink.table.data.DecimalData result$12;          boolean isNull$13;          org.apache.flink.table.data.binary.BinaryStringData result$14;          boolean isNull$16;          org.apache.flink.table.data.DecimalData result$17;          boolean isNull$18;          org.apache.flink.table.data.binary.BinaryStringData result$19;                                                  outWriter.reset();                                                  isNull$1 = false || false;          result$2 = null;          if (!isNull$1) {                                result$2 = org.apache.flink.table.data.DecimalDataUtils.divide(((org.apache.flink.table.data.DecimalData) decimal$0), org.apache.flink.table.data.DecimalDataUtils.castFrom(((long)(((int) 400))), 13, 12), 13, 12);                      isNull$1 = (result$2 == null);          }                     // --- Cast section generated by org.apache.flink.table.planner.functions.casting.CharVarCharTrimPadCastRule           isNull$3 = isNull$1;          if (!isNull$3) {          result$4 = org.apache.flink.table.data.binary.BinaryStringData.fromString("" + result$2);          isNull$3 = result$4 == null;          } else {          result$4 = org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;          }                     // --- End cast section                                   if (isNull$3) {            outWriter.setNullAt(0);          } else {            outWriter.writeString(0, result$4);          }                                                                       isNull$6 = false || false;          result$7 = null;          if (!isNull$6) {                                result$7 = org.apache.flink.table.data.DecimalDataUtils.divide(((org.apache.flink.table.data.DecimalData) decimal$5), org.apache.flink.table.data.DecimalDataUtils.castFrom(((long)(((long) 100000000000L))), 22, 21), 22, 21);                      isNull$6 = (result$7 == null);          }                     // --- Cast section generated by org.apache.flink.table.planner.functions.casting.CharVarCharTrimPadCastRule           isNull$8 = isNull$6;          if (!isNull$8) {          result$9 = org.apache.flink.table.data.binary.BinaryStringData.fromString("" + result$7);          isNull$8 = result$9 == null;          } else {          result$9 = org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;          }                     // --- End cast section                                   if (isNull$8) {            outWriter.setNullAt(1);          } else {            outWriter.writeString(1, result$9);          }                                                                       isNull$11 = false || false;          result$12 = null;          if (!isNull$11) {                                result$12 = org.apache.flink.table.data.DecimalDataUtils.divide(((org.apache.flink.table.data.DecimalData) decimal$10), org.apache.flink.table.data.DecimalDataUtils.castFrom(((long)(((byte) ((byte)100)))), 7, 6), 7, 6);                      isNull$11 = (result$12 == null);          }                     // --- Cast section generated by org.apache.flink.table.planner.functions.casting.CharVarCharTrimPadCastRule           isNull$13 = isNull$11;          if (!isNull$13) {          result$14 = org.apache.flink.table.data.binary.BinaryStringData.fromString("" + result$12);          isNull$13 = result$14 == null;          } else {          result$14 = org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;          }                     // --- End cast section                                   if (isNull$13) {            outWriter.setNullAt(2);          } else {            outWriter.writeString(2, result$14);          }                                                                       isNull$16 = false || false;          result$17 = null;          if (!isNull$16) {                                result$17 = org.apache.flink.table.data.DecimalDataUtils.divide(((org.apache.flink.table.data.DecimalData) decimal$15), org.apache.flink.table.data.DecimalDataUtils.castFrom(((long)(((short) ((short)10000)))), 8, 7), 8, 7);                      isNull$16 = (result$17 == null);          }                     // --- Cast section generated by org.apache.flink.table.planner.functions.casting.CharVarCharTrimPadCastRule           isNull$18 = isNull$16;          if (!isNull$18) {          result$19 = org.apache.flink.table.data.binary.BinaryStringData.fromString("" + result$17);          isNull$18 = result$19 == null;          } else {          result$19 = org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;          }                     // --- End cast section                                   if (isNull$18) {            outWriter.setNullAt(3);          } else {            outWriter.writeString(3, result$19);          }                               outWriter.complete();                            return out;                          }
>         @Override        public void close() throws Exception {                  }
>               }    
> 	at org.apache.flink.table.planner.expressions.utils.ExpressionTestBase.evaluateFunctionResult(ExpressionTestBase.scala:285)	at org.apache.flink.table.planner.expressions.utils.ExpressionTestBase.evaluateGivenExprs(ExpressionTestBase.scala:346)	at org.apache.flink.table.planner.expressions.utils.ExpressionTestBase.evaluateExprs(ExpressionTestBase.scala:141)	at java.base/java.lang.reflect.Method.invoke(Method.java:566)	at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)Caused by: java.lang.NullPointerException	at org.apache.flink.table.data.DecimalDataUtils.divide(DecimalDataUtils.java:146)	at TestFunction$20.mapImpl_split2(Unknown Source)	at TestFunction$20.mapImpl(Unknown Source)	at TestFunction$20.map(Unknown Source)	at org.apache.flink.table.planner.expressions.utils.ExpressionTestBase.evaluateFunctionResult(ExpressionTestBase.scala:260)	... 9 more
> Process finished with exit code 255
>  {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)