Statistics
| Revision:

root / trunk / libraries / libGDBMS / src / main / java / com / hardcode / gdbms / engine / instruction / Field.java @ 10627

History | View | Annotate | Download (3.39 KB)

1
package com.hardcode.gdbms.engine.instruction;
2

    
3
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
4
import com.hardcode.gdbms.engine.data.DataSource;
5
import com.hardcode.gdbms.engine.values.Value;
6

    
7

    
8
/**
9
 * Clase que representa un campo en un DataSource. La clase por s? sola no
10
 * identifica al campo, ya que la tabla a la que pertenece el campo viene
11
 * definida por un ?ndice entero. Esto se debe a que para definir un campo es
12
 * necesario tambi?n un array de tablas sobre las que se aplica dicho ?ndice.
13
 *
14
 * @author Fernando Gonz?lez Cort?s
15
 */
16
public class Field extends AbstractExpression implements Expression {
17
        private DataSource[] tables;
18
        private int dataSourceIndex;
19
        private int fieldId;
20
        private DataSource dataSource;
21

    
22
        /**
23
         * Indice de la tabla donde se encuentra el campo al que este objeto hace
24
         * referencia
25
         *
26
         * @return
27
         */
28
        public int getDataSourceIndex() {
29
                return dataSourceIndex;
30
        }
31

    
32
        /**
33
         * Identificador del campo al que este objeto hace referencia
34
         *
35
         * @return
36
         */
37
        public int getFieldId() {
38
                return fieldId;
39
        }
40

    
41
        /**
42
         * Establece el ?ndice dentr de un array de tablas del campo al que este
43
         * objeto hace referencia
44
         *
45
         * @param source
46
         */
47
        public void setDataSourceIndex(int source) {
48
                dataSourceIndex = source;
49
        }
50

    
51
        /**
52
         * Establece el identificador al que este objeto hace referencia
53
         *
54
         * @param i
55
         */
56
        public void setFieldId(int i) {
57
                fieldId = i;
58
        }
59

    
60
        /**
61
         * Obtiene la colecci?n de tablas sobre las que los ?ndices dataSourceIndex
62
         * y fieldId son v?lidos
63
         *
64
         * @return
65
         */
66
        public DataSource[] getTables() {
67
                return tables;
68
        }
69

    
70
        /**
71
         * Establece la colecci?n de tablas sobre las que se definen los ?ndices
72
         * dataSourceIndex y fieldId
73
         *
74
         * @param sources
75
         */
76
        public void setTables(DataSource[] sources) {
77
                tables = sources;
78
        }
79

    
80
        /**
81
         * Devuelve el ?ndice que ocupa el campo en la colecci?n de los campos de
82
         * todas las tablas del array tables.
83
         *
84
         * @return ?ndice absoluto del campo
85
         * @throws ReadDriverException TODO
86
         */
87
        public int getAbsoluteIndex() throws ReadDriverException {
88
                int acum = 0;
89

    
90
                for (int table = 0; table < dataSourceIndex; table++) {
91
                        acum += tables[table].getFieldCount();
92
                }
93

    
94
                acum += fieldId;
95

    
96
                return acum;
97
        }
98

    
99
        /**
100
         * @see com.hardcode.gdbms.engine.instruction.Expression#evaluate(long)
101
         */
102
        public Value evaluate(long row) throws EvaluationException {
103
                try {
104
            return dataSource.getFieldValue(row, getAbsoluteIndex());
105
        } catch (ReadDriverException e) {
106
            throw new EvaluationException();
107
        }
108
        }
109

    
110
        /**
111
         * Obtiene la fuente de datos sobre la que obtiene su valor este campo en
112
         * su m?todo evaluate
113
         *
114
         * @return
115
         */
116
        public DataSource getDataSource() {
117
                return dataSource;
118
        }
119

    
120
        /**
121
         * Establece la fuente de datos sobre la que obtiene su valor este campo en
122
         * su m?todo evaluate
123
         *
124
         * @param source
125
         */
126
        public void setDataSource(DataSource source) {
127
                dataSource = source;
128
        }
129

    
130
        /**
131
         * @see com.hardcode.gdbms.engine.instruction.Expression#getFieldName()
132
         */
133
        public String getFieldName() {
134
                return null;
135
        }
136

    
137
        /**
138
         * @see com.hardcode.gdbms.engine.instruction.Expression#isLiteral()
139
         */
140
        public boolean isLiteral() {
141
                return false;
142
        }
143

    
144
        /**
145
         * @see com.hardcode.gdbms.engine.instruction.Expression#simplify()
146
         */
147
        public void simplify() {
148
        }
149

    
150
        /**
151
         * @see com.hardcode.gdbms.engine.instruction.Expression#calculateLiteralCondition()
152
         */
153
        public void calculateLiteralCondition() {
154
        }
155
}