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 @ 44750

History | View | Annotate | Download (5.38 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 static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_ROW;
8
import static org.gvsig.fmap.dal.DataManager.FUNCTION_CURRENT_STORE;
9
import static org.gvsig.fmap.dal.DataManager.FUNCTION_EXISTS;
10
import static org.gvsig.fmap.dal.DataManager.FUNCTION_FOREING_VALUE;
11
import static org.gvsig.fmap.dal.DataManager.FUNCTION_ISSELECTED_CURRENT_ROW;
12
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
13
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT_COUNT;
14
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
15

    
16
/**
17
 *
18
 * @author jjdelcerro
19
 */
20
public class DefaultDALExpressionBuilder implements DALExpressionBuilder {
21

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

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

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

    
51
    @Override
52
    public SelectBuilder table(String tableName) {
53
      this.tableName = tableName;
54
      return this;
55
    }
56

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

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

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

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

    
90
    @Override
91
    public String toString() {
92
      return this.toValue().toString();
93
    }
94
    
95
  }
96
  
97
  private class DefaultSelectCountBuilder implements SelectCountBuilder {
98
    
99
    private String tableName;
100
    private Value where;
101
    
102
    public DefaultSelectCountBuilder() {
103
    }
104

    
105
    @Override
106
    public SelectCountBuilder table(String tableName) {
107
      this.tableName = tableName;
108
      return this;
109
    }
110

    
111
    @Override
112
    public SelectCountBuilder where(ExpressionBuilder.Value where) {
113
      this.where = where;
114
      return this;
115
    }
116

    
117
    @Override
118
    public ExpressionBuilder.Value toValue() {
119
      ExpressionBuilder.Function select = expression().function(FUNCTION_SELECT_COUNT);
120
      
121
      select.parameter(expression().variable(tableName));
122
      if( where != null ) {
123
        select.parameter(where);
124
      }
125
      return select;
126
    }
127

    
128
    @Override
129
    public String toString() {
130
      return this.toValue().toString();
131
    }
132
    
133
  }
134

    
135
  private ExpressionBuilder expressionBuilder;
136
  
137
  @Override
138
  public ExpressionBuilder expression() {
139
    if( this.expressionBuilder == null ) {
140
      this.expressionBuilder = ExpressionUtils.createExpressionBuilder();
141
    }
142
    return this.expressionBuilder;
143
  }
144
  
145
  @Override
146
  public SelectBuilder select() {
147
    return new DefaultSelectBuilder();
148
  }
149

    
150
  @Override
151
  public SelectCountBuilder select_count() {
152
    return new DefaultSelectCountBuilder();
153
  }
154

    
155
  @Override
156
  public ExpressionBuilder.Function exists(Value list) {
157
    return exists(list, null);
158
  }
159

    
160
  @Override
161
  public ExpressionBuilder.Function exists(Value list, String exists_id) {
162
      if( exists_id==null ) {
163
        exists_id = "EXISTS"+UUID.randomUUID().toString().replaceAll("-", "");
164
      }
165
      ExpressionBuilder.Function exists = expression().function(
166
              FUNCTION_EXISTS,
167
              list, 
168
              expression().constant(exists_id)
169
      );
170
      return exists;
171
  }
172

    
173
  @Override
174
  public ExpressionBuilder.Function foreing_value(String attrlocal, String attrforeing) {
175
    ExpressionBuilder.Function foreing_value = expression().function(
176
          FUNCTION_FOREING_VALUE,
177
          expression().tuple(
178
                  expression().constant(attrlocal),
179
                  expression().constant(attrforeing)
180
          )
181
    );
182
    return foreing_value;
183
  }
184
  
185
  @Override
186
  public ExpressionBuilder.Function current_row() {
187
    return expression().function(FUNCTION_CURRENT_ROW);
188
  }
189
  
190
  @Override
191
  public ExpressionBuilder.Function current_table() {
192
    return expression().function(FUNCTION_CURRENT_STORE);
193
  }
194
  
195
  @Override
196
  public ExpressionBuilder.Function isselected_current_row() {
197
    return expression().function(FUNCTION_ISSELECTED_CURRENT_ROW);
198
  }
199
  
200
}