Thanks, Jinfeng. I added the extra test; everything passes now and 
https://issues.apache.org/jira/browse/CALCITE-1208 
<https://issues.apache.org/jira/browse/CALCITE-1208> is ready for review.

> On Jul 26, 2016, at 3:59 PM, Jinfeng Ni <[email protected]> wrote:
> 
> @Julian,
> 
> The new test added to test checkAmbiguousUnresolvedStar() looks good
> to me. I forgot to add such testing, when working on Calcite-1150,
> though Drill has unit test for such case.
> 
> One more test we may consider adding.  When resolve column reference,
> regular field has higher priority than dynamic star columns. (I'm not
> completely sure if we should allow such case, or block it, since this
> column reference may be resolved to the regular field, or a field
> expanded later on from * )
> 
> @Test public void testDynamicStar2() throws Exception {
>  final String sql = "select newid\n"
>      + "from (select *, NATION.N_NATION + 100 as newid  from
> \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>  sql(sql).type("RecordType(ANY NEWID) NOT NULL");
> }
> 
> Thanks again for adding those test.
> 
> 
> 
> On Tue, Jul 26, 2016 at 1:40 AM, Julian Hyde <[email protected]> wrote:
>> Jinfeng,
>> 
>> Here’s a patch that attempts to test checkAmbiguousUnresolvedStar. Let me 
>> know whether I’ve missed any coverage.
>> 
>> Julian
>> 
>> 
>> diff --git 
>> a/core/src/test/java/org/apache/calcite/test/MockCatalogReader.java 
>> b/core/src/test/java/org/apache/calcite/test/MockCatalogReader.java
>> index e56dd96..2c791cf 100644
>> --- a/core/src/test/java/org/apache/calcite/test/MockCatalogReader.java
>> +++ b/core/src/test/java/org/apache/calcite/test/MockCatalogReader.java
>> @@ -233,6 +233,20 @@ public MockCatalogReader init() {
>>     contactAddressTable.addColumn("MAILING_ADDRESS", addressType);
>>     registerTable(contactAddressTable);
>> 
>> +    // Register "DYNAMIC" schema.
>> +    MockSchema dynamicSchema = new MockSchema("DYNAMIC");
>> +    registerSchema(dynamicSchema);
>> +
>> +    MockTable nationTable =
>> +        new MockDynamicTable(this, dynamicSchema.getCatalogName(),
>> +            dynamicSchema.getName(), "NATION", false, 100);
>> +    registerTable(nationTable);
>> +
>> +    MockTable customerTable =
>> +        new MockDynamicTable(this, dynamicSchema.getCatalogName(),
>> +            dynamicSchema.getName(), "CUSTOMER", false, 100);
>> +    registerTable(customerTable);
>> +
>>     // Register "CUSTOMER" schema.
>>     MockSchema customerSchema = new MockSchema("CUSTOMER");
>>     registerSchema(customerSchema);
>> diff --git 
>> a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java 
>> b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
>> index 57f71d1..c095453 100644
>> --- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
>> +++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
>> @@ -7777,6 +7777,37 @@ public void _testValuesWithAggFuncs() {
>>     //   12345678901234567890123456789012345678901234567890123456789012345
>>     //        check("SELECT count(0) FROM emp GROUP BY ()");
>>   }
>> +
>> +
>> +  /** Test case for
>> +   * <a 
>> href="https://issues.apache.org/jira/browse/CALCITE-1150";>[CALCITE-1150]
>> +   * Dynamic Table / Dynamic Star support</a>. */
>> +  @Test public void testDynamicStar() throws Exception {
>> +    final String sql = "select n.n_nation\n"
>> +        + "from (select * from \"DYNAMIC\".NATION) as n,\n"
>> +        + " (select * from \"DYNAMIC\".CUSTOMER)";
>> +    sql(sql).type("RecordType(ANY N_NATION) NOT NULL");
>> +  }
>> +
>> +  @Test public void testAmbiguousDynamicStar() throws Exception {
>> +    final String sql = "select ^n_nation^\n"
>> +        + "from (select * from \"DYNAMIC\".NATION),\n"
>> +        + " (select * from \"DYNAMIC\".CUSTOMER)";
>> +    sql(sql).fails("Column 'N_NATION' is ambiguous");
>> +  }
>> +
>> +  @Test public void testAmbiguousDynamicStar2() throws Exception {
>> +    final String sql = "select ^n_nation^\n"
>> +        + "from (select * from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER)";
>> +    sql(sql).fails("Column 'N_NATION' is ambiguous");
>> +  }
>> +
>> +  @Test public void testAmbiguousDynamicStar3() throws Exception {
>> +    final String sql = "select ^nc.n_nation^\n"
>> +        + "from (select * from \"DYNAMIC\".NATION, \"DYNAMIC\".CUSTOMER) as 
>> nc";
>> +    sql(sql).fails("Column 'N_NATION' is ambiguous");
>> +  }
>> +
>> }
>> 
>> // End SqlValidatorTest.java
>> 
>> 
>> 
>>> On Jul 26, 2016, at 1:05 AM, Julian Hyde <[email protected]> wrote:
>>> 
>>> Jinfeng,
>>> 
>>> In https://issues.apache.org/jira/browse/CALCITE-1150 you added dynamic 
>>> record types, and the method checkAmbiguousUnresolvedStar is supposed to 
>>> throw “Column ‘X’ is ambiguous” if more than one field has a dynamic star.
>>> 
>>> As part of https://issues.apache.org/jira/browse/CALCITE-1208 I am 
>>> revisiting that code and doing some major refactoring.
>>> 
>>> Did you add any tests where checkAmbiguousUnresolvedStar throws that 
>>> particular error? I can’t find any; in fact, if I remove all calls to that 
>>> method, the test suite still passes.
>>> 
>>> Can you suggest some tests for that functionality? I want to make sure I’m 
>>> not breaking what you did.
>>> 
>>> Julian
>>> 
>>> 
>>> 
>> 

Reply via email to