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}