if (node instanceof ComparisonCondition) {
ComparisonCondition comparisonCondition = (ComparisonCondition) node;
return comparisonToRange(comparisonCondition);
}
else if (node instanceof LogicalFunctionCondition) {
LogicalFunctionCondition condition = (LogicalFunctionCondition) node;
if (condition.getOperands().size() != 2)
return null;
ColumnRanges leftRange = rangeAtNode(condition.getLeft());
ColumnRanges rightRange = rangeAtNode(condition.getRight());
if (leftRange != null && rightRange != null) {
List<RangeSegment> combinedSegments = combineBool(leftRange, rightRange, condition.getFunction());
if (combinedSegments != null) {
return new ColumnRanges(leftRange.getColumnExpression(), condition, combinedSegments);
}
}
}
else if (node instanceof FunctionCondition) {
FunctionCondition condition = (FunctionCondition) node;
if ("isNull".equals(condition.getFunction())) {
if (condition.getOperands().size() == 1) {
ExpressionNode operand = condition.getOperands().get(0);
if (operand instanceof ColumnExpression) {
ColumnExpression operandColumn = (ColumnExpression) operand;
return new ColumnRanges(operandColumn, condition,
Collections.singletonList(RangeSegment.onlyNull(operandColumn)));
}