Package org.teiid.query.sql.visitor

Examples of org.teiid.query.sql.visitor.ExpressionMappingVisitor


    if (command == null) {
      return;
    }
    final SymbolMap map = container.getCommand().getCorrelatedReferences();
    if (map != null) {
      ExpressionMappingVisitor visitor = new RuleMergeCriteria.ReferenceReplacementVisitor(map);
      DeepPostOrderNavigator.doVisit(command, visitor);
    }
    command.setProcessorPlan(container.getCommand().getProcessorPlan());
    boolean removeLimit = false;
    if (container instanceof ExistsCriteria) {
View Full Code Here


        return !QueryRewriter.isNull(simplifiedExpression);
    }

    private static LanguageObject replaceWithNullValues(final Collection<GroupSymbol> innerGroups,
                                                        LanguageObject obj) {
        ExpressionMappingVisitor emv = new ExpressionMappingVisitor(null) {
           
            public Expression replaceExpression(Expression element) {
                if (!(element instanceof ElementSymbol)) {
                    return element;
                }
               
                ElementSymbol symbol = (ElementSymbol)element;
               
                if (innerGroups.contains(symbol.getGroupSymbol())) {
                    return new Constant(null, symbol.getType());
                }
               
                return element;
            }
        };
       
        if (obj instanceof ElementSymbol) {
            return emv.replaceExpression((ElementSymbol)obj);
        }
        obj = (LanguageObject)obj.clone();
        PreOrderNavigator.doVisit(obj, emv);
        return obj;
    }
View Full Code Here

        }
      }
    }
    if (remapColumns) {
      //convert to the actual table symbols (this is typically handled by the languagebridgefactory
      ExpressionMappingVisitor emv = new ExpressionMappingVisitor(null) {
        @Override
        public Expression replaceExpression(Expression element) {
          if (element instanceof ElementSymbol) {
            ElementSymbol es = (ElementSymbol)element;
            es.getGroupSymbol().setName(tableName);
View Full Code Here

            elementSymbol.setShortName(name);
          }
            elements.add(elementSymbol);
        }
        if (positional) {
          ExpressionMappingVisitor emv = new ExpressionMappingVisitor(null) {
            @Override
            public Expression replaceExpression(Expression element) {
              if (!(element instanceof Reference)) {
                return element;
              }
              Reference ref = (Reference)element;
              if (!ref.isPositional()) {
                return ref;
              }
              return elements.get(ref.getIndex()).clone();
            }
          };
          DeepPostOrderNavigator.doVisit(currentCommand, emv);
        } else {
            TempMetadataStore rootExternalStore = new TempMetadataStore();
           
            GroupContext externalGroups = new GroupContext();
           
            ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.INPUT, rootExternalStore, externalGroups, elements);
            ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.INPUTS, rootExternalStore, externalGroups, elements);
            QueryResolver.setChildMetadata(currentCommand, rootExternalStore.getData(), externalGroups);
        }
    }
    TempMetadataStore result = resolveCommand(currentCommand, metadata, false);
    if (replaceBindings && symbolMap != null && !symbolMap.isEmpty()) {
      ExpressionMappingVisitor emv = new ExpressionMappingVisitor(symbolMap);
      DeepPostOrderNavigator.doVisit(currentCommand, emv);
    }
    return result;
  }
View Full Code Here

   
    private void rewriteExpressions(LanguageObject obj) throws TeiidComponentException, TeiidProcessingException{
        if (obj == null) {
            return;
        }
        ExpressionMappingVisitor visitor = new ExpressionMappingVisitor(null) {
            /**
             * @see org.teiid.query.sql.visitor.ExpressionMappingVisitor#replaceExpression(org.teiid.query.sql.symbol.Expression)
             */
            @Override
            public Expression replaceExpression(Expression element) {
View Full Code Here

      update.setGroup(mapping.getGroup().clone());
      for (SetClause clause : update.getChangeList().getClauses()) {
        clause.setSymbol(symbolMap.get(clause.getSymbol()));
      }
      //TODO: properly handle correlated references
      DeepPostOrderNavigator.doVisit(update, new ExpressionMappingVisitor(symbolMap, true));
      if (info.getViewDefinition().getCriteria() != null) {
        update.setCriteria(Criteria.combineCriteria(update.getCriteria(), (Criteria)info.getViewDefinition().getCriteria().clone()));
      }
      //resolve
      update.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(update.getGroup(), metadata, Command.TYPE_UPDATE));
      return rewriteUpdate(update);
    }
    Query query = (Query)info.getViewDefinition().clone();
    query.setOrderBy(null);
    SymbolMap expressionMapping = SymbolMap.createSymbolMap(update.getGroup(), query.getProjectedSymbols(), metadata);
   
    ArrayList<SingleElementSymbol> selectSymbols = mapChangeList(update, symbolMap);
    query.setSelect(new Select(selectSymbols));
    ExpressionMappingVisitor emv = new ExpressionMappingVisitor(expressionMapping.asMap(), true);
    PostOrderNavigator.doVisit(query.getSelect(), emv);
   
    Criteria crit = update.getCriteria();
    if (crit != null) {
      PostOrderNavigator.doVisit(crit, emv);
View Full Code Here

      QueryResolverException, TeiidProcessingException {
    UpdateMapping mapping = info.getDeleteTarget();
    if (info.isSimple()) {
      delete.setGroup(mapping.getGroup().clone());
      //TODO: properly handle correlated references
      DeepPostOrderNavigator.doVisit(delete, new ExpressionMappingVisitor(mapping.getUpdatableViewSymbols(), true));
      delete.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(delete.getGroup(), metadata, Command.TYPE_DELETE));
      if (info.getViewDefinition().getCriteria() != null) {
        delete.setCriteria(Criteria.combineCriteria(delete.getCriteria(), (Criteria)info.getViewDefinition().getCriteria().clone()));
      }
      return rewriteDelete(delete);
    }
   
    Query query = (Query)info.getViewDefinition().clone();
    query.setOrderBy(null);
    SymbolMap expressionMapping = SymbolMap.createSymbolMap(delete.getGroup(), query.getProjectedSymbols(), metadata);
   
    query.setSelect(new Select());
    ExpressionMappingVisitor emv = new ExpressionMappingVisitor(expressionMapping.asMap(), true);
   
    Criteria crit = delete.getCriteria();
    if (crit != null) {
      PostOrderNavigator.doVisit(crit, emv);
      query.setCriteria(Criteria.combineCriteria(query.getCriteria(), crit));
View Full Code Here

TOP

Related Classes of org.teiid.query.sql.visitor.ExpressionMappingVisitor

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.