[ 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)