001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.IRelation;
004import gudusoft.gsqlparser.TAttributeNode;
005import gudusoft.gsqlparser.TBaseType;
006import gudusoft.gsqlparser.TLog;
007
008
009import java.util.ArrayList;
010
011public class TFromClause  extends TNodeWithAliasClause implements IRelation {
012
013
014
015    ArrayList<TAttributeNode> relationAttributes = new ArrayList<>();
016//    public ArrayList<TObjectName> getReferenceAttributes(){
017//        return null;
018//    }
019
020    @Override
021    public ArrayList<TAttributeNode> getAttributes(){
022       // if (!relationAttributes.isEmpty()) return relationAttributes;
023
024        for(TTable table:relations){
025            //relationAttributes.addAll(table.getAttributes());
026            TAttributeNode.addAllNodesToList(table.getAttributes(),relationAttributes);
027        }
028
029        return relationAttributes;
030    }
031
032    @Override
033    public String getRelationName(){
034        return null;
035    }
036
037    @Override
038    public int size(){
039        return relationAttributes.size();
040    }
041
042    public void collectAttributes(){
043        relationAttributes.clear();
044        for(TTable table:relations){
045            //relationAttributes.addAll(table.getAttributes());
046            TAttributeNode.addAllNodesToList(table.getAttributes(),relationAttributes);
047        }
048
049        TBaseType.log(String.format("Prepare attributes for from clause: %s",this.toString()), TLog.DEBUG,this.getStartToken());
050        for(TAttributeNode node:relationAttributes){
051            TBaseType.log(String.format("\tAttriubte: %s",node.getName()),TLog.DEBUG);
052        }
053    }
054
055
056
057
058    public TFromClause(ArrayList<TTable> relations){
059        this.relations = relations;
060    }
061
062    public ArrayList<TTable> getRelations() {
063        return relations;
064    }
065
066    private ArrayList<TTable> relations = new ArrayList<>();
067
068    public void accept(TParseTreeVisitor v)
069    {
070        v.preVisit(this);
071        v.postVisit(this);
072    }
073
074    /**
075     * Accept visitor to visit this class.
076     * @param v user defined visitor.
077     */
078    public void acceptChildren(TParseTreeVisitor v)
079    {
080        v.preVisit(this);
081        for(TTable table:relations){
082            table.acceptChildren(v);
083        }
084        v.postVisit(this);
085    }
086
087}