Skip to content

Commit

Permalink
fix: Add issue where a dereference column/expression couldn't be used…
Browse files Browse the repository at this point in the history
… in indices
  • Loading branch information
kuseman committed Jan 30, 2025
1 parent 7baeab3 commit fc6e19c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,11 @@ private static AnalyzeItem getQualifiedItem(IExpression expression)
column = ce.getAlias()
.getAlias();
}
else if (expression instanceof DereferenceExpression de)
{
column = de.getQualifiedColumn()
.toDotDelimited();
}

return new AnalyzeItem(expression, tableSources, column);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,38 @@ public class PredicateAnalyzerTest extends APhysicalPlanTest
private TableSourceReference tableB = new TableSourceReference(1, TableSourceReference.Type.TABLE, "", QualifiedName.of("tableB"), "b");
private TableSourceReference tableC = new TableSourceReference(2, TableSourceReference.Type.TABLE, "", QualifiedName.of("tableC"), "c");

@Test
public void test_dereference_expressions_and_columnname_gets_set()
{
AnalyzeResult actual;
AnalyzeResult expected;
Pair<List<AnalyzePair>, AnalyzeResult> actualPairs;
AnalyzePair actualPair;

IExpression de = DereferenceExpression.create(cre("col1", tableA), QualifiedName.of("nested", "value"), null);

actual = PredicateAnalyzer.analyze(eq(de, ocre("col2", tableB)));
expected = result(pair(IPredicate.Type.COMPARISION, IComparisonExpression.Type.EQUAL, de, asSet(tableA), "col1.nested.value", ocre("col2", tableB), emptySet(), "col2"));

assertEquals(expected, actual);
assertEquals(eq(de, ocre("col2", tableB)), actual.getPredicate());
actualPairs = actual.extractPushdownPairs(tableA);
assertEquals(expected.getPairs(), actualPairs.getLeft());
assertEquals(AnalyzeResult.EMPTY, actualPairs.getValue());

actualPair = actualPairs.getLeft()
.get(0);

assertEquals("a.col1.nested.value = b.col2", actualPair.getSqlRepresentation());
assertEquals(IPredicate.Type.COMPARISION, actualPair.getType());
assertEquals(IComparisonExpression.Type.EQUAL, actualPair.getComparisonType());
assertEquals("col1.nested.value", actualPair.getColumn(tableA));
assertNull(actualPair.getColumn(tableB));

assertTrue(actualPair.isEqui(tableA));
assertFalse(actualPair.isEqui(tableB));
}

@Test
public void test_outerreference_column_expressions()
{
Expand Down

0 comments on commit fc6e19c

Please sign in to comment.