View Javadoc

1   /***
2    * @version $Revision: 1.2 $
3    */
4   package uba.db.sql.interpreter;
5   
6   import java.util.Collections;
7   import java.util.Iterator;
8   import java.util.List;
9   
10  import uba.db.column.Column;
11  import uba.db.sql.language.ColumnName;
12  import uba.db.sql.language.QualifiedColumnName;
13  import uba.db.sql.language.VisitorBehavior;
14  import uba.db.table.Table;
15  
16  public class ColumnsToEvaluateVisitor extends VisitorBehavior {
17  	private SelectQueryPlan queryPlan;
18  
19  	public ColumnsToEvaluateVisitor(SelectQueryPlan plan) {
20  		queryPlan = plan;
21  	}
22  
23  	public void visitColumnName(ColumnName columnName) {
24  		queryPlan.addColumnToEvaluate(findColumnSpecificationIn(queryPlan
25  				.tables(), columnName));
26  	}
27  
28  	public void visitQualifiedColumnName(QualifiedColumnName qualifiedColumnName) {
29  		List tables = Collections.singletonList(queryPlan
30  				.tableNamed(qualifiedColumnName.tableName()));
31  		queryPlan.addColumnToEvaluate(findColumnSpecificationIn(tables,
32  				qualifiedColumnName.columnName()));
33  	}
34  
35  	public Column findColumnSpecificationIn(List tables, ColumnName columnName) {
36  		Iterator iterator = tables.iterator();
37  		Column column = null;
38  
39  		while (iterator.hasNext() && column == null) {
40  			Table table = (Table) iterator.next();
41  			column = table.columnNamed(columnName.nameAsString());
42  		}
43  
44  		return column;
45  	}
46  }