1 /***
2 * @version $Revision: 1.4 $
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 ColumnsToProjectVisitor extends VisitorBehavior {
17 private SelectQueryPlan queryPlan;
18
19 public ColumnsToProjectVisitor(SelectQueryPlan plan) {
20 queryPlan = plan;
21 }
22
23 public void visitColumnName(ColumnName columnName) {
24 queryPlan.addColumnToProject(findColumnSpecificationIn(queryPlan.tables(),
25 columnName));
26 }
27
28 public void visitQualifiedColumnName(QualifiedColumnName qualifiedColumnName) {
29 List tables = Collections.singletonList(queryPlan.tableNamed(qualifiedColumnName
30 .tableName()));
31 queryPlan.addColumnToProject(findColumnSpecificationIn(tables,
32 qualifiedColumnName
33 .columnName()));
34 }
35
36 public Column findColumnSpecificationIn(List tables,
37 ColumnName columnName) {
38 Iterator iterator = tables.iterator();
39 Column column = null;
40
41 while (iterator.hasNext() && column == null) {
42 Table table = (Table) iterator.next();
43 column = table.columnNamed(columnName.nameAsString());
44 }
45
46 return column;
47 }
48 }