[ https://issues.apache.org/jira/browse/CALCITE-6245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17815071#comment-17815071 ]
Benchao Li commented on CALCITE-6245: ------------------------------------- [~hackergin] I've added you to the calcite contributor role group, now you should be able to assign issues. > Permute operands of SqlCall when validating and Converting to Rel > ----------------------------------------------------------------- > > Key: CALCITE-6245 > URL: https://issues.apache.org/jira/browse/CALCITE-6245 > Project: Calcite > Issue Type: Bug > Reporter: Feng Jin > Assignee: Feng Jin > Priority: Major > > Currently, when using named parameters, there may be some issues due to the > incorrect expansion of named parameters during validation. Specifically, > several unit tests can be added to reproduce this. > add a test case > org.apache.calcite.test.UdfTest#testScalarFunctionWithParameter > {code:java} > @Test void testScalarFunctionWithParameter() { > final String sql = "select \"adhoc\".my_det_plus(X => \"deptno\", Y => > 100) as p\n" > + "from \"adhoc\".EMPLOYEES"; > final AtomicInteger c = > Smalls.MyDeterministicPlusFunction.INSTANCE_COUNT.get(); > final int before = c.get(); > withUdf().query(sql).returnsUnordered("P=110", > "P=120", > "P=110", > "P=110"); > final int after = c.get(); > assertThat(after, is(before + 1)); > } > {code} > And we will get the following error: > {code:java} > java.sql.SQLException: Error while executing SQL "select > "adhoc".my_det_plus(x => "deptno", y => 100) as p > from "adhoc".EMPLOYEES": At line 1, column 28: Column 'X' not found in any > table > at org.apache.calcite.avatica.Helper.createException(Helper.java:56) > at org.apache.calcite.avatica.Helper.createException(Helper.java:41) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:164) > at > org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:228) > at > org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:543) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.lambda$returns$1(CalciteAssert.java:1455) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.withConnection(CalciteAssert.java:1394) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1453) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1443) > at > org.apache.calcite.test.CalciteAssert$AssertQuery.returnsUnordered(CalciteAssert.java:1465) > at > org.apache.calcite.test.UdfTest.testScalarFunctionWithParameter(UdfTest.java:227) > {code} > another test case: > org.apache.calcite.test.UdfTest#testAggFunctionWithParameter > {code:java} > @Test void testAggFunctionWithParameter() { > final String empDept = JdbcTest.EmpDeptTableFactory.class.getName(); > final String sum = Smalls.MyStaticSumFunction.class.getName(); > final String sum2 = Smalls.MySumFunction.class.getName(); > final CalciteAssert.AssertThat with = CalciteAssert.model("{\n" > + " version: '1.0',\n" > + " schemas: [\n" > + " {\n" > + " name: 'adhoc',\n" > + " tables: [\n" > + " {\n" > + " name: 'EMPLOYEES',\n" > + " type: 'custom',\n" > + " factory: '" + empDept + "',\n" > + " operand: {'foo': true, 'bar': 345}\n" > + " }\n" > + " ],\n" > + " functions: [\n" > + " {\n" > + " name: 'MY_SUM',\n" > + " className: '" + sum + "'\n" > + " },\n" > + " {\n" > + " name: 'MY_SUM2',\n" > + " className: '" + sum2 + "'\n" > + " }\n" > + " ]\n" > + " }\n" > + " ]\n" > + "}") > .withDefaultSchema("adhoc") > .with("caseSensitive", false); > with.withDefaultSchema(null) > .query( > "select \"adhoc\".my_sum(arg1 => \"deptno\") as p from > \"adhoc\".EMPLOYEES\n") > .returns("P=50\n"); > } > {code} > And we will get the following error: > {code:java} > // Some comments here > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 23 to line 1, column 26: Column 'ARG1' not found in any table > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:423) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:505) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:945) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:930) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:5470) > at > org.apache.calcite.sql.validate.DelegatingScope.fullyQualify(DelegatingScope.java:289) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.findTableColumnPair(SqlValidatorImpl.java:3929) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.isRolledUpColumn(SqlValidatorImpl.java:3972) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.checkRollUp(SqlValidatorImpl.java:3885) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.checkRollUp(SqlValidatorImpl.java:3880) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.checkRollUp(SqlValidatorImpl.java:3880) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.checkRollUp(SqlValidatorImpl.java:3899) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.checkRollUpInSelectList(SqlValidatorImpl.java:3801) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3789) > at > org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:61) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)