/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.query.optimizer.relational.plantree; public final class NodeConstants { // Can't instantiate private NodeConstants() { } /** Types of nodes */ public static final class Types { private Types() {} static final int NO_TYPE = 0; public static final int ACCESS = 1<<0; public static final int DUP_REMOVE = 1<<1; public static final int JOIN = 1<<2; public static final int PROJECT = 1<<3; public static final int SELECT = 1<<4; public static final int SORT = 1<<5; public static final int SOURCE = 1<<6; public static final int GROUP = 1<<7; public static final int SET_OP = 1<<8; public static final int NULL = 1<<9; public static final int TUPLE_LIMIT = 1<<10; } /** * Convert a type code into a type string. * @param type Type code, as defined in NodeConstants.Types * @return String representation for code */ public static final String getNodeTypeString(int type) { switch(type) { case NodeConstants.Types.ACCESS: return "Access"; //$NON-NLS-1$ case NodeConstants.Types.DUP_REMOVE: return "DupRemoval"; //$NON-NLS-1$ case NodeConstants.Types.JOIN: return "Join"; //$NON-NLS-1$ case NodeConstants.Types.PROJECT: return "Project"; //$NON-NLS-1$ case NodeConstants.Types.SELECT: return "Select"; //$NON-NLS-1$ case NodeConstants.Types.SORT: return "Sort"; //$NON-NLS-1$ case NodeConstants.Types.SOURCE: return "Source"; //$NON-NLS-1$ case NodeConstants.Types.GROUP: return "Group"; //$NON-NLS-1$ case NodeConstants.Types.SET_OP: return "SetOperation"; //$NON-NLS-1$ case NodeConstants.Types.NULL: return "Null"; //$NON-NLS-1$ case NodeConstants.Types.TUPLE_LIMIT: return "TupleLimit"; //$NON-NLS-1$ default: return "Unknown: " + type; //$NON-NLS-1$ } } /** Property names for type-specific node properties */ public enum Info { ATOMIC_REQUEST, // Command MODEL_ID, // Object (model ID) PROCEDURE_CRITERIA, PROCEDURE_INPUTS, PROCEDURE_DEFAULTS, IS_MULTI_SOURCE, SOURCE_NAME, CONFORMED_SOURCES, //Set <model id> SUB_PLAN, SUB_PLANS, // Set operation properties SET_OPERATION, // SetQuery.Operation USE_ALL, // Boolean // Join node properties JOIN_CRITERIA, // List <CompareCriteria> JOIN_TYPE, // JoinType JOIN_STRATEGY, // JoinStrategyType LEFT_EXPRESSIONS, // List <SingleElementSymbol> RIGHT_EXPRESSIONS, // List <SingleElementSymbol> DEPENDENT_VALUE_SOURCE, // String NON_EQUI_JOIN_CRITERIA, // List <CompareCriteria> SORT_LEFT, // SortOption SORT_RIGHT, // SortOption IS_OPTIONAL, // Boolean IS_LEFT_DISTINCT, // Boolean IS_RIGHT_DISTINCT, // Boolean IS_SEMI_DEP, // Boolean PRESERVE, RIGHT_NESTED_REFERENCES, LEFT_NESTED_REFERENCES, // Project node properties PROJECT_COLS, // List <SingleElementSymbol> INTO_GROUP, // GroupSymbol HAS_WINDOW_FUNCTIONS, // Boolean CONSTRAINT, UPSERT, //Boolean // Select node properties SELECT_CRITERIA, // Criteria IS_HAVING, // Boolean //phantom nodes represent the previous position of criteria that has been pushed across a source, group, or union node. //phantom nodes are used by RuleCopyCriteria and removed by RuleCleanCriteria. IS_PHANTOM, // Boolean IS_TEMPORARY, // Boolean IS_COPIED, // Boolean - used in CopyCriteria to mark which selects have already been copied IS_PUSHED, // true if this node has already been pushed IS_DEPENDENT_SET, // Boolean - only used with dependent joins // Sort node properties SORT_ORDER, // OrderBy UNRELATED_SORT, // Boolean IS_DUP_REMOVAL, // Boolean // Source node properties SYMBOL_MAP, // SymbolMap PARTITION_INFO, // Map<ElementSymbol, List<Set<Constant>>> - it will only be consistent in the initial stages of planning VIRTUAL_COMMAND, // Command MAKE_DEP, // Option.Makedep PROCESSOR_PLAN, // ProcessorPlan for non-relational sub plan NESTED_COMMAND, // Command for nested processor plan TABLE_FUNCTION, // Table Function CORRELATED_REFERENCES, // SymbolMap MAKE_NOT_DEP, // Boolean INLINE_VIEW, // If the source node represents an inline view NO_UNNEST, MAKE_IND, SOURCE_HINT, CHECK_MAT_VIEW, // Group node properties GROUP_COLS, // List <Expression> ROLLUP, // Boolean // Special constant used in converting plan to process for all nodes OUTPUT_COLS, // List <SingleElementSymbol> // Plan Node Cost Estimate Constants EST_SET_SIZE, // Integer represents the estimated set size this node would produce for a sibling node as the independent node in a dependent join scenario EST_DEP_CARDINALITY, // Float value that represents the estimated cardinality (amount of rows) produced by this node as the dependent node in a dependent join scenario EST_DEP_JOIN_COST, // Float value that represents the estimated cost of a dependent join (the join strategy for this could be Nested Loop or Merge) EST_JOIN_COST, // Float value that represents the estimated cost of a merge join (the join strategy for this could be Nested Loop or Merge) EST_CARDINALITY, // Float represents the estimated cardinality (amount of rows) produced by this node EST_COL_STATS, EST_SELECTIVITY, // Float that represents the selectivity of a criteria node // Tuple limit and offset MAX_TUPLE_LIMIT, // Expression that evaluates to the max number of tuples generated OFFSET_TUPLE_COUNT, // Expression that evaluates to the tuple offset of the starting tuple IS_IMPLICIT_LIMIT, // Boolean if the limit is created by the rewriter as part of a subquery optimization IS_NON_STRICT, // Boolean if the unordered limit should not be enforced strictly // Common AP Information ACCESS_PATTERNS, // Collection <List <Object element ID> > ACCESS_PATTERN_USED, // List <Object element ID> REQUIRED_ACCESS_PATTERN_GROUPS, } }