blob: d6e97ebb3e9e42dbb005d140477ddc41b8b9ccd4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.calcite.plan;
/**
* The mode of trait derivation.
*/
public enum DeriveMode {
/**
* Uses the left most child's traits to decide what
* traits to require from the other children. This
* generally applies to most operators.
*/
LEFT_FIRST,
/**
* Uses the right most child's traits to decide what
* traits to require from the other children. Operators
* like index nested loop join may find this useful.
*/
RIGHT_FIRST,
/**
* Iterates over each child, uses current child's traits
* to decide what traits to require from the other
* children. It includes both LEFT_FIRST and RIGHT_FIRST.
* System that doesn't enable join commutativity should
* consider this option. Special customized operators
* like a Join who has 3 inputs may find this useful too.
*/
BOTH,
/**
* Leave it to you, you decide what you cook. This will
* allow planner to pass all the traits from all the
* children, the user decides how to make use of these
* traits and whether to derive new rel nodes.
*/
OMAKASE,
/**
* Trait derivation is prohibited.
*/
PROHIBITED
}