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 }