[ 
https://issues.apache.org/jira/browse/CALCITE-5895?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17752205#comment-17752205
 ] 

Julian Hyde commented on CALCITE-5895:
--------------------------------------

I agree this is a bug, and we should fix it. The parser correctly changes 'emp 
TABLESAMPLE(100)' to 'emp'. But it should not convert 'emp TABLESAMPLE(0)' to 
'emp', as it currently does.

I think implementation 2 would be better and easier. You would not need to 
write a planner rule, and it seems clear to me where the logic should go:
 * Move the {{if (fRate > 0.0f && fRate < 1.0f)}} logic from {{Parser.jj}} to 
{{{}SqlToRelConverter.convertFrom{}}}.
 * In {{{}SqlToRelConverter{}}}, you should use {{RelBuilder.empty()}} to 
create an empty relation of the right type.
 * For extra credit, move the {{if (rate.compareTo(BigDecimal.ZERO) < 0 || 
rate.compareTo(ONE_HUNDRED) > 0)}} logic from {{Parser.jj}} to 
{{{}SqlValidatorImpl.validateQuery{}}}. The parser shouldn't be doing very much 
validation. (And add a negative test to {{{}SqlValidatorTest{}}}.) 

I really wish that we had an implementation of {{TABLESAMPLE}} in enumerable 
mode. Then we could add a {{tablesample.iq}} test that actually executed 
queries.

> The result of table sample rate 0  is incorrect result and should return the 
> empty result
> -----------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5895
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5895
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: LakeShen
>            Assignee: LakeShen
>            Priority: Major
>             Fix For: 1.36.0
>
>         Attachments: image-2023-08-05-22-45-02-513.png
>
>
> For The sql:
> {code:java}
> select * from emp tablesample bernoulli(0) where empno > 5
> {code}
> The plan is :
> {code:java}
> LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], 
> SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
>   LogicalFilter(condition=[>($0, 5)])
>     LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> {code}
> I think the correct result of above SQL is empty.
> But its result is the following SQL result:
> {code:java}
> select * from emp where empno > 5
> {code}
> It's an incorrect result



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

Reply via email to