All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.xpack.esql.optimizer.rules.PruneLiteralsInOrderBy Maven / Gradle / Ivy

There is a newer version: 8.16.1
Show newest version
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0; you may not use this file except in compliance with the Elastic License
 * 2.0.
 */

package org.elasticsearch.xpack.esql.optimizer.rules;

import org.elasticsearch.xpack.esql.core.expression.Order;
import org.elasticsearch.xpack.esql.core.optimizer.OptimizerRules;
import org.elasticsearch.xpack.esql.core.plan.logical.LogicalPlan;
import org.elasticsearch.xpack.esql.core.plan.logical.OrderBy;

import java.util.ArrayList;
import java.util.List;

public final class PruneLiteralsInOrderBy extends OptimizerRules.OptimizerRule {

    @Override
    protected LogicalPlan rule(OrderBy ob) {
        List prunedOrders = new ArrayList<>();

        for (Order o : ob.order()) {
            if (o.child().foldable()) {
                prunedOrders.add(o);
            }
        }

        // everything was eliminated, the order isn't needed anymore
        if (prunedOrders.size() == ob.order().size()) {
            return ob.child();
        }
        if (prunedOrders.size() > 0) {
            List newOrders = new ArrayList<>(ob.order());
            newOrders.removeAll(prunedOrders);
            return new OrderBy(ob.source(), ob.child(), newOrders);
        }

        return ob;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy