Package org.teiid.query.optimizer.xml

Source Code of org.teiid.query.optimizer.xml.TestNameInSourceResolverVisitor$NameValidator

* 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
* 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.xml;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.teiid.core.TeiidComponentException;
import org.teiid.query.mapping.xml.MappingAttribute;
import org.teiid.query.mapping.xml.MappingDocument;
import org.teiid.query.mapping.xml.MappingElement;
import org.teiid.query.mapping.xml.MappingSourceNode;
import org.teiid.query.mapping.xml.MappingVisitor;
import org.teiid.query.mapping.xml.Navigator;
import org.teiid.query.mapping.xml.ResultSetInfo;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.optimizer.xml.NameInSourceResolverVisitor;
import org.teiid.query.optimizer.xml.SourceNodeGenaratorVisitor;
import org.teiid.query.optimizer.xml.XMLPlannerEnvironment;
import org.teiid.query.processor.xml.TestXMLProcessor;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.visitor.GroupCollectorVisitor;
import org.teiid.query.unittest.FakeMetadataFacade;

import junit.framework.TestCase;

public class TestNameInSourceResolverVisitor extends TestCase {
    static HashMap infos = new HashMap();
    XMLPlannerEnvironment getEnv(String sql) throws Exception{
        FakeMetadataFacade metadata = TestXMLProcessor.exampleMetadataCached();
        Query query = (Query)TestXMLProcessor.helpGetCommand(sql, metadata);

        Collection groups = GroupCollectorVisitor.getGroups(query, true);
        GroupSymbol group = (GroupSymbol) groups.iterator().next();
        MappingDocument docOrig = (MappingDocument)metadata.getMappingNode(metadata.getGroupID(group.getName()));
        MappingDocument doc = (MappingDocument)docOrig.clone();

        XMLPlannerEnvironment env = new XMLPlannerEnvironment(metadata);
        env.mappingDoc = doc;
        setResultInfo("", new DummyCommand("", new String[] {"itemNum", "itemName", "itemQuantity", "itemStatus"})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
        setResultInfo("xmltest.suppliers", new DummyCommand("xmltest.suppliers", new String[] {"supplierNum", "supplierName", "supplierZipCode", "itemNum"})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
        setResultInfo("xmltest.orders", new DummyCommand("xmltest.orders", new String[] {"orderNum", "orderDate", "orderQty", "orderStatus"})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
        return env;
    private static void setResultInfo(String groupName, Command command) {
        ResultSetInfo rsInfo = new ResultSetInfo(groupName);
        infos.put(groupName, rsInfo);
    private static ResultSetInfo getResultInfo(String groupName) {
        return (ResultSetInfo)infos.get(groupName);
    public void testResolve() throws Exception {
        XMLPlannerEnvironment env = getEnv("SELECT * FROM xmltest.doc9"); //$NON-NLS-1$
        MappingDocument doc = env.mappingDoc;
        // we should expect to fail
        doc.acceptVisitor(new NameValidator(false));
        doc = SourceNodeGenaratorVisitor.extractSourceNodes(doc);
        doc.acceptVisitor(new Navigator(true, new SourceFixer()));
        NameInSourceResolverVisitor.resolveElements(doc, env);
        // now we pass
        doc.acceptVisitor(new NameValidator(true));       
    static class SourceFixer extends MappingVisitor{
        public void visit(MappingSourceNode sourceNode) {
            ResultSetInfo info = getResultInfo(sourceNode.getResultName());
            Map symbolMap = new HashMap();
            for (Iterator i = info.getCommand().getProjectedSymbols().iterator(); i.hasNext();) {
                ElementSymbol element = (ElementSymbol);
                symbolMap.put(element, element);
    static class NameValidator extends MappingVisitor{
        boolean shouldPass;
        public NameValidator(boolean pass) {
            this.shouldPass = pass;
        public void visit(MappingAttribute attribute) {
            if (attribute.getNameInSource() != null) {
                if (this.shouldPass) {
                else {

        public void visit(MappingElement element) {
            if (element.getNameInSource() != null) {
                if (this.shouldPass) {
                else {
    static class DummyCommand extends Command{
        List list = new ArrayList();

        DummyCommand(String groupName, String[] symbols){
            for (int i= 0; i < symbols.length; i++) {
                list.add(new ElementSymbol(groupName+"."+symbols[i])); //$NON-NLS-1$
        public List getProjectedSymbols() {
            return list;

        public boolean areResultsCachable() {
            return false;

        public Object clone() {
            return null;

        public int getType() {
            return 0;

        public void acceptVisitor(LanguageVisitor visitor) {

Related Classes of org.teiid.query.optimizer.xml.TestNameInSourceResolverVisitor$NameValidator

Copyright © 2018 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