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
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 }