Package org.teiid.query.sql.util

Examples of org.teiid.query.sql.util.SymbolMap


                        }
                    }
                   
                    PlanNode sourceNode = NodeEditor.findParent(parentNode, NodeConstants.Types.SOURCE);
                    if (sourceNode != null && NodeEditor.findNodePreOrder(sourceNode, NodeConstants.Types.PROJECT) == firstProject) {
                        SymbolMap symbolMap = (SymbolMap)sourceNode.getProperty(NodeConstants.Info.SYMBOL_MAP);
                        symbolMap = SymbolMap.createSymbolMap(symbolMap.getKeys(), newProjectSymbols);
                        sourceNode.setProperty(NodeConstants.Info.SYMBOL_MAP, symbolMap);
                    }                                       
                }
               
                NodeEditor.removeChildNode(parentNode, nullNode);
View Full Code Here


        FrameUtil.convertFrame(sourceNode, group, new HashSet<GroupSymbol>(Arrays.asList(newGroup)), replacementSymbols, metadata);

        // correct the lower symbol map
        if (childProjects != null) {
            SymbolMap symbolMap = (SymbolMap)sourceNode.getProperty(NodeConstants.Info.SYMBOL_MAP);

            SymbolMap replacementMap = new SymbolMap();
            for (Map.Entry<ElementSymbol, Expression> entry : symbolMap.asMap().entrySet()) {
                replacementMap.addMapping((ElementSymbol)replacementSymbols.get(entry.getKey()), entry.getValue());
            }
            sourceNode.setProperty(NodeConstants.Info.SYMBOL_MAP, replacementMap);
        }

    }
View Full Code Here

    private static void estimateSourceNodeCost(PlanNode node, QueryMetadataInterface metadata)
        throws QueryMetadataException, TeiidComponentException {
       
        float cost = UNKNOWN_VALUE;
        if(node.getChildCount() > 0) {
          SymbolMap references = (SymbolMap)node.getProperty(NodeConstants.Info.CORRELATED_REFERENCES);
          //only cost non-correlated TODO: a better estimate for correlated
          if (references == null) {
              PlanNode child = node.getFirstChild();
              cost = child.getCardinality();
              SymbolMap symbolMap = (SymbolMap)node.getProperty(NodeConstants.Info.SYMBOL_MAP);
              if (symbolMap != null) {
                ColStats colStats = (ColStats) child.getProperty(Info.EST_COL_STATS);
                if (colStats != null) {
                  List<? extends Expression> outputCols = getOutputCols(node, metadata);
                  ColStats newColStats = new ColStats();
                  for (Expression expr : outputCols) {
                    if (!(expr instanceof ElementSymbol)) {
                      continue;
                    }
                    ElementSymbol es = (ElementSymbol)expr;
                    Expression ex = symbolMap.getMappedExpression(es);
              newColStats.put(es, colStats.get(ex));
            }
                node.setProperty(Info.EST_COL_STATS, newColStats);
                } else {
                  colStats = createColStats(node, metadata, cost);
View Full Code Here

    plannedResult.query = (Query)plannedResult.query.clone();
    plannedResult.query.setLimit(null);

    List<GroupSymbol> rightGroups = plannedResult.query.getFrom().getGroups();
    Set<SingleElementSymbol> requiredExpressions = new LinkedHashSet<SingleElementSymbol>();
    final SymbolMap refs = plannedResult.query.getCorrelatedReferences();
    boolean addGroupBy = false;
    if (refs != null) {
      boolean hasAggregates = plannedResult.query.hasAggregates();
      Criteria where = plannedResult.query.getCriteria();
      if (plannedResult.query.getGroupBy() == null) {
View Full Code Here

                ArrayList<Reference> correlatedReferences = new ArrayList<Reference>();
                CorrelatedReferenceCollectorVisitor.collectReferences(subCommand, localGroupSymbols, correlatedReferences);
                ProcessorPlan procPlan = QueryOptimizer.optimizePlan(subCommand, metadata, idGenerator, capFinder, analysisRecord, context);
                container.getCommand().setProcessorPlan(procPlan);
                if (!correlatedReferences.isEmpty()) {
                  SymbolMap map = new SymbolMap();
                  for (Reference reference : correlatedReferences) {
              map.addMapping(reference.getExpression(), reference.getExpression());
            }
                  container.getCommand().setCorrelatedReferences(map);
                }
            }
            node.addGroups(GroupsUsedByElementsVisitor.getGroups(node.getCorrelatedReferenceElements()));
View Full Code Here

    CorrelatedReferenceCollectorVisitor.collectReferences(lo, rootJoin.getGroups(), correlatedReferences);
   
    if (correlatedReferences.isEmpty()) {
      return null;
    }
      SymbolMap map = new SymbolMap();
      for (Reference reference : correlatedReferences) {
      map.addMapping(reference.getExpression(), reference.getExpression());
    }
      node.setProperty(NodeConstants.Info.CORRELATED_REFERENCES, map);
      return map;
  }
View Full Code Here

    if (merge) {
      mergeTempMetadata(nestedCommand, parentCommand);
        PlanNode childRoot = generatePlan(nestedCommand);
        node.addFirstChild(childRoot);
      List<SingleElementSymbol> projectCols = nestedCommand.getProjectedSymbols();
      SymbolMap map = SymbolMap.createSymbolMap(group, projectCols, metadata);
      node.setProperty(NodeConstants.Info.SYMBOL_MAP, map);
    } else {
      QueryMetadataInterface actualMetadata = metadata;
      if (actualMetadata instanceof TempMetadataAdapter) {
        actualMetadata = ((TempMetadataAdapter)metadata).getMetadata();
View Full Code Here

      sourceNode.addFirstChild(projectNode);
      GroupSymbol four = getGroup(4);
      sourceNode.addGroup(four);
      ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$
      e2.setGroupSymbol(four);
      SymbolMap sm = SymbolMap.createSymbolMap(Arrays.asList(e2), Arrays.asList(e1));
      sourceNode.setProperty(Info.SYMBOL_MAP, sm);
      PlanNode projectNode1 = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
      projectNode1.addFirstChild(sourceNode);
      projectNode1.addGroup(four);
      projectNode1.setProperty(Info.PROJECT_COLS, Arrays.asList(e2));
     
      //removing source node 3 completely
      SymbolMap replacement = SymbolMap.createSymbolMap(Arrays.asList(e1), Arrays.asList(new Constant(null)));
      FrameUtil.convertFrame(NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SOURCE), getGroup(3), null, replacement.asMap(), null);
      assertEquals(2, joinNode.getGroups().size()); //even though this is a cross join it should still retain its groups
      assertEquals(0, NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SELECT).getGroups().size());
      assertEquals(1, projectNode1.getGroups().size());
      assertEquals(0, projectNode.getGroups().size());
    }
View Full Code Here

      sourceNode.addFirstChild(projectNode);
      GroupSymbol four = getGroup(4);
      sourceNode.addGroup(four);
      ElementSymbol e2 = new ElementSymbol("e2"); //$NON-NLS-1$
      e2.setGroupSymbol(four);
      SymbolMap sm = SymbolMap.createSymbolMap(Arrays.asList(e2), Arrays.asList(e1));
      sourceNode.setProperty(Info.SYMBOL_MAP, sm);
      PlanNode projectNode1 = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
      projectNode1.addFirstChild(sourceNode);
      projectNode1.addGroup(four);
      projectNode1.setProperty(Info.PROJECT_COLS, Arrays.asList(e2));
     
      //replace source 3 with groups 5, 6
      SymbolMap replacement = SymbolMap.createSymbolMap(Arrays.asList(e1), Arrays.asList(new Constant(null)));
      FrameUtil.convertFrame(NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SOURCE), getGroup(3), new HashSet<GroupSymbol>(Arrays.asList(getGroup(5), getGroup(6))), replacement.asMap(), null);
      assertEquals(4, joinNode.getGroups().size()); //even though this is a cross join it should still retain its groups
      assertEquals(0, NodeEditor.findNodePreOrder(joinNode, NodeConstants.Types.SELECT).getGroups().size());
      assertEquals(1, projectNode1.getGroups().size());
      assertEquals(0, projectNode.getGroups().size());
    }
View Full Code Here

                    jnode.setJoinExpressions(leftExpressions, rightExpressions);
                    joinCrits = (List) node.getProperty(NodeConstants.Info.NON_EQUI_JOIN_CRITERIA);
                } else if (stype == JoinStrategyType.NESTED_TABLE) {
                  NestedTableJoinStrategy ntjStrategy = new NestedTableJoinStrategy();
                  jnode.setJoinStrategy(ntjStrategy);
                  SymbolMap references = (SymbolMap)FrameUtil.findJoinSourceNode(node.getFirstChild()).getProperty(NodeConstants.Info.CORRELATED_REFERENCES);
                ntjStrategy.setLeftMap(references);
                  references = (SymbolMap)FrameUtil.findJoinSourceNode(node.getLastChild()).getProperty(NodeConstants.Info.CORRELATED_REFERENCES);
                ntjStrategy.setRightMap(references);
                } else {
                    NestedLoopJoinStrategy nljStrategy = new NestedLoopJoinStrategy();
                    jnode.setJoinStrategy(nljStrategy);
                }
                Criteria joinCrit = Criteria.combineCriteria(joinCrits);
                jnode.setJoinCriteria(joinCrit);
                              
                processNode = jnode;
               
                jnode.setDependentValueSource(depValueSource);
               
        break;

      case NodeConstants.Types.ACCESS:
                ProcessorPlan plan = (ProcessorPlan) node.getProperty(NodeConstants.Info.PROCESSOR_PLAN);
                if(plan != null) {
                   
                    PlanExecutionNode peNode = null;
                   
                    Criteria crit = (Criteria)node.getProperty(NodeConstants.Info.PROCEDURE_CRITERIA);
                   
                    if (crit != null) {
                        List references = (List)node.getProperty(NodeConstants.Info.PROCEDURE_INPUTS);
                        List defaults = (List)node.getProperty(NodeConstants.Info.PROCEDURE_DEFAULTS);
                       
                        peNode = new DependentProcedureExecutionNode(getID(), crit, references, defaults);                       
                    } else {
                        peNode = new PlanExecutionNode(getID());
                    }
                   
                    peNode.setProcessorPlan(plan);
                    processNode = peNode;

                } else {
                    AccessNode aNode = null;
                    Command command = (Command) node.getProperty(NodeConstants.Info.ATOMIC_REQUEST);
                    Object modelID = node.getProperty(NodeConstants.Info.MODEL_ID);
                   
                    if(node.hasBooleanProperty(NodeConstants.Info.IS_DEPENDENT_SET)) {
                        if (command instanceof StoredProcedure) {
                            List references = (List)node.getProperty(NodeConstants.Info.PROCEDURE_INPUTS);
                            List defaults = (List)node.getProperty(NodeConstants.Info.PROCEDURE_DEFAULTS);
                            Criteria crit = (Criteria)node.getProperty(NodeConstants.Info.PROCEDURE_CRITERIA);
                           
                            DependentProcedureAccessNode depAccessNode = new DependentProcedureAccessNode(getID(), crit, references, defaults);
                            processNode = depAccessNode;
                            aNode = depAccessNode;
                        } else {
                            //create dependent access node
                            DependentAccessNode depAccessNode = new DependentAccessNode(getID());
                           
                            if(modelID != null){
                                depAccessNode.setMaxSetSize(CapabilitiesUtil.getMaxInCriteriaSize(modelID, metadata, capFinder));
                                depAccessNode.setMaxPredicates(CapabilitiesUtil.getMaxDependentPredicates(modelID, metadata, capFinder));  
                            }
                            processNode = depAccessNode;
                            aNode = depAccessNode;
                        }
                        aNode.setShouldEvaluateExpressions(true);
                    } else {
                       
                        // create access node
                        aNode = new AccessNode(getID());
                        processNode = aNode;
                                               
                        //-- special handling for temp tables. currently they cannot perform projection
                        try {
                            if (command instanceof Query) {
                                processNode = correctProjectionInternalTables(node, aNode);
                            }
                        } catch (QueryMetadataException err) {
                            throw new TeiidComponentException(err);
                        }
                        aNode.setShouldEvaluateExpressions(EvaluatableVisitor.needsProcessingEvaluation(command));
                    }
                   
                    if (command instanceof QueryCommand) {
                      try {
                          command = (Command)command.clone();
                          boolean aliasGroups = modelID != null && CapabilitiesUtil.supportsGroupAliases(modelID, metadata, capFinder);
                          boolean aliasColumns = modelID != null && CapabilitiesUtil.supports(Capability.QUERY_SELECT_EXPRESSION, modelID, metadata, capFinder);
                          command.acceptVisitor(new AliasGenerator(aliasGroups, !aliasColumns));
                      } catch (QueryMetadataException err) {
                          throw new TeiidComponentException(err);
                      }
                    }
                    aNode.setCommand(command);
                    aNode.setModelName(getRoutingName(node));
                }
                break;

      case NodeConstants.Types.SELECT:

        Criteria crit = (Criteria) node.getProperty(NodeConstants.Info.SELECT_CRITERIA);

        SelectNode selnode = new SelectNode(getID());
        selnode.setCriteria(crit);
        processNode = selnode;
               
        break;

      case NodeConstants.Types.SORT:
      case NodeConstants.Types.DUP_REMOVE:
                SortNode sortNode = new SortNode(getID());
                OrderBy orderBy = (OrderBy) node.getProperty(NodeConstants.Info.SORT_ORDER);
        if (orderBy != null) {
          sortNode.setSortElements(orderBy.getOrderByItems());
        }
        if (node.getType() == NodeConstants.Types.DUP_REMOVE) {
          sortNode.setMode(Mode.DUP_REMOVE);
        } else if (node.hasBooleanProperty(NodeConstants.Info.IS_DUP_REMOVAL)) {
          sortNode.setMode(Mode.DUP_REMOVE_SORT);
        }

        processNode = sortNode;
        break;
      case NodeConstants.Types.GROUP:
        GroupingNode gnode = new GroupingNode(getID());
        gnode.setGroupingElements( (List) node.getProperty(NodeConstants.Info.GROUP_COLS) );
        gnode.setRemoveDuplicates(node.hasBooleanProperty(NodeConstants.Info.IS_DUP_REMOVAL));
        processNode = gnode;
        break;

      case NodeConstants.Types.SOURCE:
          SymbolMap symbolMap = (SymbolMap) node.getProperty(NodeConstants.Info.SYMBOL_MAP);
        if(symbolMap != null) {
          PlanNode child = node.getLastChild();

                    if (node.getParent().getType() != NodeConstants.Types.PROJECT || node.getParent().getProperty(NodeConstants.Info.INTO_GROUP) == null) {
                      if (child.getType() == NodeConstants.Types.PROJECT) {
View Full Code Here

TOP

Related Classes of org.teiid.query.sql.util.SymbolMap

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.