/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.query.sql;
import java.util.Collection;
import org.teiid.designer.query.sql.lang.ILanguageObject;
import org.teiid.designer.query.sql.symbol.IElementSymbol;
/**
*
*/
public interface IElementCollectorVisitor<LO extends ILanguageObject, ES extends IElementSymbol> {
/**
* Helper to quickly get the elements from obj in a collection. The
* removeDuplicates flag affects whether duplicate elements will be
* filtered out.
*
* @param obj Language object
* @return Collection of {@link IElementSymbol}
*/
Collection<? super ES> findElements(LO obj);
/**
* Helper to quickly get the elements from obj in a collection. The
* removeDuplicates flag affects whether duplicate elements will be
* filtered out.
*
* @param obj Language object
* @param useDeepIteration indicates whether or not to iterate into nested
* subqueries of the query
*
* @return Collection of {@link IElementSymbol}
*/
Collection<? super ES> findElements(LO obj, boolean useDeepIteration);
/**
* Helper to quickly get the elements from obj in a collection. The
* removeDuplicates flag affects whether duplicate elements will be
* filtered out.
*
* @param obj Language object
* @param useDeepIteration indicates whether or not to iterate into nested
* subqueries of the query
* @param aggsOnly
*
* @return Collection of {@link IElementSymbol}
*/
Collection<? super ES> findElements(LO obj, boolean useDeepIteration, boolean aggsOnly);
}