[
https://issues.apache.org/jira/browse/CALCITE-5069?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17514937#comment-17514937
]
Julian Hyde commented on CALCITE-5069:
--------------------------------------
I think we should re-open this case. The current formula can be improved, and
though the suggested replacement formula had bugs, we can work through those.
We can bound the result, to make sure that:
* rowCount(a exceptAll b) >= 0,
* rowCount(a exceptAll b) >= rowCount(a except b),
* rowCount(a exceptAll b) <= rowCount(a),
* et cetera.
Also, come with some more bounds if we know {{a}} and/or {{b}} are unique. And
justify the constant {{2}} in the suggested formula.
> Method of minus's getRowCount has not consider 'except all'
> -----------------------------------------------------------
>
> Key: CALCITE-5069
> URL: https://issues.apache.org/jira/browse/CALCITE-5069
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Reporter: Xurenhe
> Assignee: Xurenhe
> Priority: Major
>
> Current code of *RelMdRowCount* has not consider 'except all', it should be
> double.
> It's similar to
> [CALCITE-3287|https://issues.apache.org/jira/browse/CALCITE-3287] and
> [CALCITE-3988|https://issues.apache.org/jira/browse/CALCITE-3988]
> CODE: *RelMdRowCount#getRowCount(Minus, RelMetadataQuery)*
>
> {code:java}
> // now
> public @Nullable Double getRowCount(Minus rel, RelMetadataQuery mq) {
> Double rowCount = null;
> for (RelNode input : rel.getInputs()) {
> Double partialRowCount = mq.getRowCount(input);
> if (rowCount == null
> || partialRowCount != null && partialRowCount < rowCount) {
> rowCount = partialRowCount;
> }
> }
> return rowCount;
> }
> // right
> public @Nullable Double getRowCount(Minus rel, RelMetadataQuery mq) {
> Double rowCount = null;
> for (RelNode input : rel.getInputs()) {
> Double partialRowCount = mq.getRowCount(input);
> if (rowCount == null
> || partialRowCount != null && partialRowCount < rowCount) {
> rowCount = partialRowCount;
> }
> }
> if (rowCount == null || !rel.all) {
> return rowCount;
> } else {
> return rowCount * 2;
> }
> }{code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)