Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / expressionevaluator / impl / DefaultDALExpressionBuilder.java @ 44839

History | View | Annotate | Download (5.77 KB)

1
package org.gvsig.expressionevaluator.impl;
2

    
3
import java.util.UUID;
4
import org.gvsig.expressionevaluator.ExpressionBuilder;
5
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
6
import org.gvsig.expressionevaluator.ExpressionUtils;
7
import org.gvsig.expressionevaluator.Formatter;
8
import org.gvsig.expressionevaluator.impl.expressionbuilder.formatters.DALFormatter;
9
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
10
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_STORE;
11
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
12
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
13
import static org.gvsig.fmap.dal.DataManager.FUNCTION_ISSELECTED_CURRENT_ROW;
14
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
15
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
16
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
17

    
18
/**
19
 *
20
 * @author jjdelcerro
21
 */
22
public class DefaultDALExpressionBuilder implements DALExpressionBuilder {
23

    
24
  private class DefaultSelectBuilder implements SelectBuilder {
25
    
26
    private Value columns;
27
    private String tableName;
28
    private Value where;
29
    private Long limit;
30
    private final ExpressionBuilder.Function order;
31
    private final ExpressionBuilder.Function order_mode;
32
    
33
    public DefaultSelectBuilder() {
34
      this.columns = expression().tuple(); // ALL === empty tuple
35
      this.where = null;
36
      this.order = expression().tuple();
37
      this.order_mode = expression().tuple();
38
      this.limit = null;
39
    }
40

    
41
    @Override
42
    public SelectBuilder column(String name) {
43
      ((ExpressionBuilder.Function)columns).parameter(expression().column(name));
44
      return this;
45
    }
46

    
47
    @Override
48
    public SelectBuilder column_all() {
49
      this.columns = expression().tuple(); // ALL === empty tuple
50
      return this;
51
    }
52

    
53
    @Override
54
    public SelectBuilder from(String tableName) {
55
      this.tableName = tableName;
56
      return this;
57
    }
58

    
59
    @Override
60
    public SelectBuilder where(ExpressionBuilder.Value where) {
61
      this.where = where;
62
      return this;
63
    }
64

    
65
    @Override
66
    public SelectBuilder order(String columnName, boolean asc) {
67
      this.order.parameter(expression().variable(columnName));
68
      this.order_mode.parameter(expression().constant(asc));
69
      return this;
70
    }
71

    
72
    @Override
73
    public SelectBuilder limit(long limit) {
74
      this.limit = limit;
75
      return this;
76
    }
77

    
78
    @Override
79
    public ExpressionBuilder.Value toValue() {
80
      ExpressionBuilder.Function select = expression().function(FUNCTION_SELECT);
81
      
82
      select.parameter(columns);
83
      select.parameter(expression().variable(tableName));
84
      select.parameter(where);
85
      select.parameter(order);
86
      select.parameter(order_mode);
87
      select.parameter(expression().constant(limit));
88
      
89
      return select;
90
    }
91

    
92
    @Override
93
    public String toString() {
94
      return this.toString(formatter());
95
    }
96
    
97
    @Override
98
    public String toString(Formatter<Value> formatter) {
99
      return this.toValue().toString(formatter);
100
    }
101
    
102
  }
103
  
104
  
105
  private class DefaultSelectCountBuilder implements SelectCountBuilder {
106
    
107
    private String tableName;
108
    private Value where;
109
    
110
    public DefaultSelectCountBuilder() {
111
    }
112

    
113
    @Override
114
    public SelectCountBuilder table(String tableName) {
115
      this.tableName = tableName;
116
      return this;
117
    }
118

    
119
    @Override
120
    public SelectCountBuilder where(ExpressionBuilder.Value where) {
121
      this.where = where;
122
      return this;
123
    }
124

    
125
    @Override
126
    public ExpressionBuilder.Value toValue() {
127
      ExpressionBuilder.Function select = expression().function(FUNCTION_SELECT_COUNT);
128
      
129
      select.parameter(expression().variable(tableName));
130
      if( where != null ) {
131
        select.parameter(where);
132
      }
133
      return select;
134
    }
135

    
136
    @Override
137
    public String toString() {
138
      return this.toValue().toString();
139
    }
140
    
141
  }
142

    
143
  private ExpressionBuilder expressionBuilder;
144
  
145
  @Override
146
  public ExpressionBuilder expression() {
147
    if( this.expressionBuilder == null ) {
148
      this.expressionBuilder = ExpressionUtils.createExpressionBuilder();
149
    }
150
    return this.expressionBuilder;
151
  }
152
  
153
  @Override
154
  public Formatter<Value> formatter() {
155
    return this.formatter(null);
156
  }
157
  
158
  @Override
159
  public Formatter<Value> formatter(Formatter<Value> formatter) {
160
    return new DALFormatter(formatter);
161
  }
162
  
163
  @Override
164
  public SelectBuilder select() {
165
    return new DefaultSelectBuilder();
166
  }
167

    
168
  @Override
169
  public SelectCountBuilder select_count() {
170
    return new DefaultSelectCountBuilder();
171
  }
172

    
173
  @Override
174
  public ExpressionBuilder.Function exists(Value list) {
175
    return exists(list, null);
176
  }
177

    
178
  @Override
179
  public ExpressionBuilder.Function exists(Value list, String exists_id) {
180
      if( exists_id==null ) {
181
        exists_id = "EXISTS"+UUID.randomUUID().toString().replaceAll("-", "");
182
      }
183
      ExpressionBuilder.Function exists = expression().function(
184
              FUNCTION_EXISTS,
185
              list, 
186
              expression().constant(exists_id)
187
      );
188
      return exists;
189
  }
190

    
191
  @Override
192
  public ExpressionBuilder.Function foreing_value(String attrlocal, String attrforeing) {
193
    ExpressionBuilder.Function foreing_value = expression().function(
194
          FUNCTION_FOREING_VALUE,
195
          expression().constant(attrlocal+"."+attrforeing)
196
    );
197
    return foreing_value;
198
  }
199
  
200
  @Override
201
  public ExpressionBuilder.Function current_row() {
202
    return expression().function(FUNCTION_CURRENT_ROW);
203
  }
204
  
205
  @Override
206
  public ExpressionBuilder.Function current_table() {
207
    return expression().function(FUNCTION_CURRENT_STORE);
208
  }
209
  
210
  @Override
211
  public ExpressionBuilder.Function isselected_current_row() {
212
    return expression().function(FUNCTION_ISSELECTED_CURRENT_ROW);
213
  }
214
  
215
}