@Override public void getConstraintsAndEquivClasses(Collection<FunctionalDependency> fds, Map<LogicalVariable, EquivalenceClass> equivClasses) { FunctionIdentifier funId = getFunctionIdentifier(); if (funId.equals(AlgebricksBuiltinFunctions.AND)) { for (Mutable<ILogicalExpression> a : arguments) { a.getValue().getConstraintsAndEquivClasses(fds, equivClasses); } } else if (funId.equals(AlgebricksBuiltinFunctions.EQ)) { ILogicalExpression opLeft = arguments.get(0).getValue(); ILogicalExpression opRight = arguments.get(1).getValue(); if (opLeft.getExpressionTag() == LogicalExpressionTag.CONSTANT && opRight.getExpressionTag() == LogicalExpressionTag.VARIABLE) { ConstantExpression op1 = (ConstantExpression) opLeft; VariableReferenceExpression op2 = (VariableReferenceExpression) opRight; getFDsAndEquivClassesForEqWithConstant(op1, op2, fds, equivClasses); } else if (opLeft.getExpressionTag() == LogicalExpressionTag.VARIABLE && opRight.getExpressionTag() == LogicalExpressionTag.VARIABLE) { VariableReferenceExpression op1 = (VariableReferenceExpression) opLeft; VariableReferenceExpression op2 = (VariableReferenceExpression) opRight; getFDsAndEquivClassesForColumnEq(op1, op2, fds, equivClasses); } } }