View Javadoc

1   package uba.db.sql.interpreter;
2   
3   import java.util.ArrayList;
4   import java.util.Iterator;
5   import java.util.List;
6   
7   import uba.db.ar.IntegerAttribute;
8   import uba.db.ar.StringAttribute;
9   import uba.db.ar.Tupla;
10  import uba.db.ar.TuplaDef;
11  import uba.db.ar.TupleProvider;
12  import uba.db.column.CharColumnSpecification;
13  import uba.db.column.Column;
14  import uba.db.column.IntegerColumnSpecification;
15  import uba.db.table.Row;
16  import uba.db.table.Table;
17  import uba.db.table.io.TableReader;
18  
19  public class TableToTupleProviderAdapter implements TupleProvider {
20  	private Table table;
21  
22  	private TableReader reader;
23  
24  	private TuplaDef tupleDefinition;
25  
26  	public TableToTupleProviderAdapter(Table table) {
27  		this.table = table;
28  		tupleDefinition = createTupleDefinition();
29  		reset();
30  	}
31  
32  	private TuplaDef createTupleDefinition() {
33  		List attributeDefs = new ArrayList();
34  		Iterator iter = table.columns().iterator();
35  		while (iter.hasNext()) {
36  			Column column = (Column) iter.next();
37  			// FIXME esto esta mal!! hay que separar el type en un typeObject
38  			if (column.dataTypeDisplayString().equals(
39  					IntegerColumnSpecification.DATATYPE_DISPLAY_STRING)) {
40  				attributeDefs.add(new IntegerAttribute(column.name()));
41  			} else if (column.dataTypeDisplayString().equals(
42  					CharColumnSpecification.DATATYPE_DISPLAY_STRING)) {
43  				attributeDefs.add(new StringAttribute(column.name()));
44  			}
45  		}
46  
47  		return new TuplaDef(attributeDefs);
48  	}
49  
50  	public void reset() {
51  		reader = table.reader();
52  	}
53  
54  	public boolean hasNext() {
55  		return reader.hasMoreRows();
56  	}
57  
58  	public Tupla next() {
59  		Row row = reader.fetchRow();
60  		Tupla tuple = new Tupla(tupleDefinition());
61  		Iterator iterator = row.valueIterator();
62  
63  		for (int i = 1; iterator.hasNext(); i++) {
64  			tuple.set(i, iterator.next());
65  		}
66  
67  		return tuple;
68  	}
69  
70  	public TuplaDef tupleDefinition() {
71  		return tupleDefinition;
72  	}
73  
74  	public String toString() {
75  		return table.name();
76  	}
77  }