Skip to content

Commit

Permalink
adding in complex array type element access on case when
Browse files Browse the repository at this point in the history
  • Loading branch information
Rong Rong committed Oct 23, 2017
1 parent b2b9463 commit a5f2aff
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
Expand Up @@ -212,6 +212,10 @@ class ScalarOperatorsTest extends ScalarOperatorsTestBase {
@Test
def testOtherExpressions(): Unit = {

// array type test
testSqlApi("CASE WHEN f18 IS NOT NULL THEN f18[0] ELSE NULL END", "1")
testSqlApi("CASE WHEN f19 IS NOT NULL THEN f19[0] ELSE NULL END", "(1, a)")

This comment has been minimized.

Copy link
@walterddr

walterddr Oct 23, 2017

Owner

Causes:


java.lang.RuntimeException: while converting CASE WHEN `testTable`.`f19` IS NOT NULL THEN `testTable`.`f19`[0] ELSE NULL END

	at org.apache.calcite.sql2rel.ReflectiveConvertletTable$1.convertCall(ReflectiveConvertletTable.java:90)
	at org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)
	at org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4536)
	at org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:3904)
	at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:137)
	at org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4438)
	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3744)
	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662)
	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:619)
	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3054)
	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:555)
	at org.apache.flink.table.calcite.FlinkPlannerImpl.rel(FlinkPlannerImpl.scala:104)
	at org.apache.flink.table.expressions.utils.ExpressionTestBase.addSqlTestExpr(ExpressionTestBase.scala:186)
	at org.apache.flink.table.expressions.utils.ExpressionTestBase.testSqlApi(ExpressionTestBase.scala:282)
	at org.apache.flink.table.expressions.ScalarOperatorsTest.testOtherExpressions(ScalarOperatorsTest.scala:217)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.calcite.sql2rel.ReflectiveConvertletTable$1.convertCall(ReflectiveConvertletTable.java:87)
	... 38 more
Caused by: java.lang.IllegalArgumentException
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
	at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:210)
	at org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:875)
	at org.apache.calcite.rex.RexBuilder.makeCast(RexBuilder.java:542)
	at org.apache.calcite.rex.RexBuilder.makeCast(RexBuilder.java:478)
	at org.apache.calcite.rex.RexBuilder.ensureType(RexBuilder.java:1025)
	at org.apache.calcite.sql2rel.StandardConvertletTable.convertCase(StandardConvertletTable.java:435)
	... 43 more

// nested field null type
testSqlApi("CASE WHEN f13.f1 IS NULL THEN 'a' ELSE 'b' END", "a")
testSqlApi("CASE WHEN f13.f1 IS NOT NULL THEN 'a' ELSE 'b' END", "b")
Expand Down
Expand Up @@ -21,15 +21,15 @@ package org.apache.flink.table.expressions.utils
import java.sql.Date

import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.api.java.typeutils.RowTypeInfo
import org.apache.flink.api.java.typeutils.{ObjectArrayTypeInfo, RowTypeInfo}
import org.apache.flink.table.api.Types
import org.apache.flink.table.functions.ScalarFunction
import org.apache.flink.types.Row

class ScalarOperatorsTestBase extends ExpressionTestBase {

def testData: Row = {
val testData = new Row(18)
val testData = new Row(20)
testData.setField(0, 1: Byte)
testData.setField(1, 1: Short)
testData.setField(2, 1)
Expand All @@ -48,6 +48,8 @@ class ScalarOperatorsTestBase extends ExpressionTestBase {
testData.setField(15, Date.valueOf("1996-11-10"))
testData.setField(16, BigDecimal("0.00000000").bigDecimal)
testData.setField(17, BigDecimal("10.0").bigDecimal)
testData.setField(18, Array[Int](1,2))
testData.setField(19, Array[(Int, String)]((1,"a"), (2, "b")))
testData
}

Expand All @@ -70,7 +72,9 @@ class ScalarOperatorsTestBase extends ExpressionTestBase {
Types.STRING,
Types.SQL_DATE,
Types.DECIMAL,
Types.DECIMAL
Types.DECIMAL,
Types.OBJECT_ARRAY(Types.INT),
ObjectArrayTypeInfo.getInfoFor(Types.ROW(Types.INT, Types.STRING))
).asInstanceOf[TypeInformation[Any]]
}

Expand Down

0 comments on commit a5f2aff

Please sign in to comment.