Repository navigation
Conversation
|
CI doesn't like your changes |
32526d0 to
60bf738
Compare
|
CI is happy now. 😄 |
| } | ||
|
|
||
| /** | ||
| * Copies input dependencies into a join, optionally filtering dependencies |
There was a problem hiding this comment.
I don't understand this javadoc. Can you please say what each parameter is and what the function actually computes? There's no "join" to be seen of here.
|
|
||
| /** | ||
| * Returns whether a dependency's determinant contains a non-nullable input | ||
| * field. Such a determinant cannot collide with the all-NULL determinant of |
There was a problem hiding this comment.
why does this comment mention a LEFT JOIN? There is no left join here. Please make the comment describe this function does.
| * @param fdSet Functional dependency set | ||
| * @param offset Index offset | ||
| * @return Shifted functional dependency set | ||
| * Adds functional dependencies implied by a join condition. |
There was a problem hiding this comment.
where does it add the dependencies?
| * Extracts functional dependencies from equality and AND conditions. | ||
| * Handles col1 = col2, col1 IS NOT DISTINCT FROM col2, and AND conditions. | ||
| * Adds bidirectional dependencies for input-reference equalities in a | ||
| * condition. Callers are responsible for ensuring that every output row |
There was a problem hiding this comment.
every output row of what?
|
Updated all Javadocs raised in review. The helper methods now document their general behavior, parameters, return value where applicable, where inferred dependencies are recorded, and the relational-output requirement for equality-derived dependencies. |
| @Test void testKeepsDerivedGroupKeyForNestedDouble() { | ||
| // Determinism alone is insufficient for approximate values, including | ||
| // nested occurrences. Keep the derived key unless grouping equality is | ||
| // known to be congruent with the expression for ARRAY<DOUBLE>. |
There was a problem hiding this comment.
I cannot read this comment. What is "congruent with the expression"?
503afd4 to
1348183
Compare
|
When this is ready please re-request a review |
|
I guess this is ready for review again @mihaibudiu. All posted comments are addressed. |
mihaibudiu
left a comment
There was a problem hiding this comment.
Can you add some quidem tests that produced wrong results without this fix?
These are the easiest to read by humans, especially if you cross-validate them using another database (e.g., postgres).
| * Returns whether a type or any type nested within its fields, collection | ||
| * component, map key, or map value matches a predicate. | ||
| */ | ||
| public static boolean containsType(RelDataType type, |
There was a problem hiding this comment.
containsMatchingType is a better name
| assertThat(mq.determines(relNode, sumSal, count), is(Boolean.FALSE)); | ||
| } | ||
|
|
||
| @Test void testFunctionalDependencyRollupAggregate() { |
There was a problem hiding this comment.
Is this a test case for this issue? Then it needs JavaDoc with a specific format. There are lots of examples to follow.
| assertThat(mq.determines(relNode, empNo, dname), is(Boolean.FALSE)); | ||
| } | ||
|
|
||
| @Test void testFunctionalDependencyOuterJoinEqualityDirection() { |
There was a problem hiding this comment.
Missing JavaDoc on test.
| } | ||
|
|
||
| @Test void testKeepsFdFromNullGeneratingInputOfLeftJoin() { | ||
| // This FD comes from the right input rather than from the join condition. |
There was a problem hiding this comment.
Which FD? Maybe you can explain what FDs are inferred.
| } | ||
|
|
||
| @Test void testKeepsGroupKeyFromPreservedSideOfLeftJoin() { | ||
| // The null-generating right key cannot determine the preserved left key: |
There was a problem hiding this comment.
For a reader it's not obvious at all how this test relates to this comment.
You need longer explanations on these tests.
|
|
||
| @Test void testMapsFdForNonContiguousAggregateGroupSet() { | ||
| // AggregateProjectMergeRule changes the input group set to {1, 2, 3}, | ||
| // whose keys occupy output positions {0, 1, 2}. Map the input FD 1 -> 2 |
There was a problem hiding this comment.
Is this comment valid before or after the fix? If it's before the fix, the comment is already wrong.
| .check(); | ||
| } | ||
|
|
||
| @Test void testKeepsGroupKeyFromPreservedSideOfLeftJoin() { |
|
Addressed all test related comments. I tested new QuidemTest results on Postgres 18.6. If you want me to verify on any other db engines, please let me know, I can do that as well. |
|
@xiedeyantu you wrote most of this code, can you please check the core changes to RelMdFunctionalDependency? |



Jira Link
CALCITE-7757
Changes Proposed
RelMdFunctionalDependency can currently expose unsound or incorrectly indexed dependencies, allowing AggregateRemoveDuplicateKeysRule to remove grouping keys that are still required.
This change:
A basic valid duplicate-key removal remains supported:
For this inner join, either equivalent equality key may be removed. The new safeguards prevent that reasoning from being applied where null generation, ordinal mapping, or non-reflexive type semantics make it unsound.
Testing
The focused test run completed 49 tests with 0 failures.