You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Maryann Xue (JIRA)" <ji...@apache.org> on 2018/02/16 23:16:00 UTC

[jira] [Commented] (PHOENIX-4611) Not nullable column impact on join query plans

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

Maryann Xue commented on PHOENIX-4611:
--------------------------------------

I don't think that commit would do any actual harm at this point, but it's not accurate. If we had code-gen, it would have made the generated code a little inefficient by checking the nullability of a not nullable value.

I believe the assert fails because we re-order join keys based on the following code in JoinCompiler:
{code:java}
if (strategy != Strategy.SORT_MERGE) {
    Collections.sort(compiled, new Comparator<Pair<Expression, Expression>>() {
        @Override
        public int compare(Pair<Expression, Expression> o1, Pair<Expression, Expression> o2) {
            Expression e1 = o1.getFirst();
            Expression e2 = o2.getFirst();
            boolean isFixed1 = e1.getDataType().isFixedWidth();
            boolean isFixed2 = e2.getDataType().isFixedWidth();
            boolean isFixedNullable1 = e1.isNullable() &&isFixed1;
            boolean isFixedNullable2 = e2.isNullable() && isFixed2;
            if (isFixedNullable1 == isFixedNullable2) {
                if (isFixed1 == isFixed2) {
                    return 0;
                } else if (isFixed1) {
                    return -1;
                } else {
                    return 1;
                }
            } else if (isFixedNullable1) {
                return 1;
            } else {
                return -1;
            }
        }
    });
}
List<Expression> lConditions = Lists.<Expression> newArrayListWithExpectedSize(compiled.size());
List<Expression> rConditions = Lists.<Expression> newArrayListWithExpectedSize(compiled.size());{code}
The join keys in testBug2894() might have been swapped due to this re-ordering and thus a slightly different but still *correct* result-set was produced. I'll verify that and change the test reference. BTW, do we have any test facility that checks an unordered result-set? It'll be useful for such tests.

> Not nullable column impact on join query plans
> ----------------------------------------------
>
>                 Key: PHOENIX-4611
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4611
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Priority: Major
>
> With PHOENIX-2566, there's a subtle change in projected tables in that a column may end up being not nullable where as before it was nullable when the family name is not null. I've kept the old behavior with [this|https://git-wip-us.apache.org/repos/asf?p=phoenix.git;a=blobdiff;f=phoenix-core/src/main/java/org/apache/phoenix/compile/TupleProjectionCompiler.java;h=fccded2a896855a2a01d727b992f954a1d3fa8ab;hp=d0b900c1a9c21609b89065307433a0d37b12b72a;hb=82ba1417fdd69a0ac57cbcf2f2327d4aa371bcd9;hpb=e126dd1dda5aa80e8296d3b0c84736b22b658999] commit, but would you mind confirming what the right thing to do is, [~maryannxue]?
> Without this change, the explain plan changes in SortMergeJoinMoreIT.testBug2894() and the assert fails. Looks like the compiler ends up changing the row ordering.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)