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