svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / main / java / org / gvsig / expressionevaluator / impl / SQLSymbolTable.java @ 43809
History | View | Annotate | Download (13 KB)
1 |
|
---|---|
2 |
package org.gvsig.expressionevaluator.impl; |
3 |
|
4 |
import java.util.HashMap; |
5 |
import java.util.Iterator; |
6 |
import java.util.Map; |
7 |
import org.gvsig.expressionevaluator.Function; |
8 |
import org.gvsig.expressionevaluator.impl.function.operator.AddOperator; |
9 |
import org.gvsig.expressionevaluator.impl.function.operator.AndOperator; |
10 |
import org.gvsig.expressionevaluator.impl.function.operator.DivOperator; |
11 |
import org.gvsig.expressionevaluator.impl.function.operator.EqOperator; |
12 |
import org.gvsig.expressionevaluator.impl.function.operator.GeOperator; |
13 |
import org.gvsig.expressionevaluator.impl.function.operator.GtOperator; |
14 |
import org.gvsig.expressionevaluator.impl.function.operator.LeOperator; |
15 |
import org.gvsig.expressionevaluator.impl.function.operator.LtOperator; |
16 |
import org.gvsig.expressionevaluator.impl.function.operator.ModOperator; |
17 |
import org.gvsig.expressionevaluator.impl.function.operator.MulOperator; |
18 |
import org.gvsig.expressionevaluator.impl.function.operator.NeOperator; |
19 |
import org.gvsig.expressionevaluator.impl.function.operator.NotOperator; |
20 |
import org.gvsig.expressionevaluator.impl.function.operator.OrOperator; |
21 |
import org.gvsig.expressionevaluator.impl.function.operator.SubstOperator; |
22 |
import org.gvsig.expressionevaluator.impl.function.predicate.IlikeOperator; |
23 |
import org.gvsig.expressionevaluator.impl.function.predicate.LikeOperator; |
24 |
import org.gvsig.expressionevaluator.SymbolTable; |
25 |
import org.gvsig.expressionevaluator.impl.function.numeric.ACosFunction; |
26 |
import org.gvsig.expressionevaluator.impl.function.numeric.ASinFunction; |
27 |
import org.gvsig.expressionevaluator.impl.function.numeric.ATanFunction; |
28 |
import org.gvsig.expressionevaluator.impl.function.numeric.AbsFunction; |
29 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitAndFunction; |
30 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitOrFunction; |
31 |
import org.gvsig.expressionevaluator.impl.function.numeric.BitXorFunction; |
32 |
import org.gvsig.expressionevaluator.impl.function.numeric.CeilFunction; |
33 |
import org.gvsig.expressionevaluator.impl.function.numeric.CosFunction; |
34 |
import org.gvsig.expressionevaluator.impl.function.numeric.CoshFunction; |
35 |
import org.gvsig.expressionevaluator.impl.function.numeric.CotFunction; |
36 |
import org.gvsig.expressionevaluator.impl.function.numeric.DegreesFunction; |
37 |
import org.gvsig.expressionevaluator.impl.function.numeric.ExpFunction; |
38 |
import org.gvsig.expressionevaluator.impl.function.numeric.FloorFunction; |
39 |
import org.gvsig.expressionevaluator.impl.function.numeric.Log10Function; |
40 |
import org.gvsig.expressionevaluator.impl.function.numeric.LogFunction; |
41 |
import org.gvsig.expressionevaluator.impl.function.numeric.PiFunction; |
42 |
import org.gvsig.expressionevaluator.impl.function.numeric.PowFunction; |
43 |
import org.gvsig.expressionevaluator.impl.function.numeric.RadiansFunction; |
44 |
import org.gvsig.expressionevaluator.impl.function.numeric.RandFunction; |
45 |
import org.gvsig.expressionevaluator.impl.function.numeric.RoundFunction; |
46 |
import org.gvsig.expressionevaluator.impl.function.numeric.SignFunction; |
47 |
import org.gvsig.expressionevaluator.impl.function.numeric.SinFunction; |
48 |
import org.gvsig.expressionevaluator.impl.function.numeric.SinhFunction; |
49 |
import org.gvsig.expressionevaluator.impl.function.numeric.SqrtFunction; |
50 |
import org.gvsig.expressionevaluator.impl.function.numeric.TanFunction; |
51 |
import org.gvsig.expressionevaluator.impl.function.numeric.TanhFunction; |
52 |
import org.gvsig.expressionevaluator.impl.function.numeric.ZeroFunction; |
53 |
import org.gvsig.expressionevaluator.impl.function.spatial.STAreaFunction; |
54 |
import org.gvsig.expressionevaluator.impl.function.spatial.STAsTextFunction; |
55 |
import org.gvsig.expressionevaluator.impl.function.spatial.STBufferFunction; |
56 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCentroidFunction; |
57 |
import org.gvsig.expressionevaluator.impl.function.spatial.STContainsFunction; |
58 |
import org.gvsig.expressionevaluator.impl.function.spatial.STConvexHullFunction; |
59 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCoveredByFunction; |
60 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCoversFunction; |
61 |
import org.gvsig.expressionevaluator.impl.function.spatial.STCrossesFunction; |
62 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDifferenceFunction; |
63 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDimensionFunction; |
64 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDisjointFunction; |
65 |
import org.gvsig.expressionevaluator.impl.function.spatial.STDistanceFunction; |
66 |
import org.gvsig.expressionevaluator.impl.function.spatial.STEndPointFunction; |
67 |
import org.gvsig.expressionevaluator.impl.function.spatial.STEnvelopeFunction; |
68 |
import org.gvsig.expressionevaluator.impl.function.spatial.STGeomFromTextFunction; |
69 |
import org.gvsig.expressionevaluator.impl.function.spatial.STGeometryNFunction; |
70 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectionFunction; |
71 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIntersectsFunction; |
72 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIsSimpleFunction; |
73 |
import org.gvsig.expressionevaluator.impl.function.spatial.STIsValidFunction; |
74 |
import org.gvsig.expressionevaluator.impl.function.spatial.STNumGeometriesFunction; |
75 |
import org.gvsig.expressionevaluator.impl.function.spatial.STNumPointsFunction; |
76 |
import org.gvsig.expressionevaluator.impl.function.spatial.STOverlapsFunction; |
77 |
import org.gvsig.expressionevaluator.impl.function.spatial.STPointNFunction; |
78 |
import org.gvsig.expressionevaluator.impl.function.spatial.STStartPointFunction; |
79 |
import org.gvsig.expressionevaluator.impl.function.spatial.STTouchesFunction; |
80 |
import org.gvsig.expressionevaluator.impl.function.spatial.STUnionFunction; |
81 |
import org.gvsig.expressionevaluator.impl.function.spatial.STWithinFunction; |
82 |
import org.gvsig.expressionevaluator.impl.function.spatial.STXFunction; |
83 |
import org.gvsig.expressionevaluator.impl.function.spatial.STYFunction; |
84 |
import org.gvsig.expressionevaluator.impl.function.spatial.STZFunction; |
85 |
import org.gvsig.expressionevaluator.impl.function.string.AsciiFunction; |
86 |
import org.gvsig.expressionevaluator.impl.function.string.CharFunction; |
87 |
import org.gvsig.expressionevaluator.impl.function.string.ConcatFunction; |
88 |
import org.gvsig.expressionevaluator.impl.function.string.InstrFunction; |
89 |
import org.gvsig.expressionevaluator.impl.function.string.LTrimFunction; |
90 |
import org.gvsig.expressionevaluator.impl.function.string.LeftFunction; |
91 |
import org.gvsig.expressionevaluator.impl.function.string.LengthFunction; |
92 |
import org.gvsig.expressionevaluator.impl.function.string.LocateFunction; |
93 |
import org.gvsig.expressionevaluator.impl.function.string.LowerFunction; |
94 |
import org.gvsig.expressionevaluator.impl.function.string.LpadFunction; |
95 |
import org.gvsig.expressionevaluator.impl.function.string.PositionFunction; |
96 |
import org.gvsig.expressionevaluator.impl.function.string.RTrimFunction; |
97 |
import org.gvsig.expressionevaluator.impl.function.string.RepeatFunction; |
98 |
import org.gvsig.expressionevaluator.impl.function.string.ReplaceFunction; |
99 |
import org.gvsig.expressionevaluator.impl.function.string.RightFunction; |
100 |
import org.gvsig.expressionevaluator.impl.function.string.RpadFunction; |
101 |
import org.gvsig.expressionevaluator.impl.function.string.SpaceFunction; |
102 |
import org.gvsig.expressionevaluator.impl.function.string.SubstringFunction; |
103 |
import org.gvsig.expressionevaluator.impl.function.string.TrimFunction; |
104 |
import org.gvsig.expressionevaluator.impl.function.string.UpperFunction; |
105 |
|
106 |
|
107 |
public class SQLSymbolTable implements SymbolTable { |
108 |
|
109 |
private final Map<String,Function> functions; |
110 |
|
111 |
private static SQLSymbolTable instance = null; |
112 |
|
113 |
public static SQLSymbolTable getInstance() { |
114 |
if( instance == null ) { |
115 |
instance = new SQLSymbolTable();
|
116 |
} |
117 |
return instance;
|
118 |
} |
119 |
|
120 |
private SQLSymbolTable() {
|
121 |
this.functions = new HashMap<>(); |
122 |
|
123 |
addFunction(new AndOperator());
|
124 |
addFunction(new AddOperator());
|
125 |
addFunction(new DivOperator());
|
126 |
addFunction(new EqOperator());
|
127 |
addFunction(new GeOperator());
|
128 |
addFunction(new GtOperator());
|
129 |
addFunction(new LeOperator());
|
130 |
addFunction(new LtOperator());
|
131 |
addFunction(new ModOperator());
|
132 |
addFunction(new NeOperator());
|
133 |
addFunction(new ModOperator());
|
134 |
addFunction(new MulOperator());
|
135 |
addFunction(new NeOperator());
|
136 |
addFunction(new NotOperator());
|
137 |
addFunction(new OrOperator());
|
138 |
addFunction(new SubstOperator());
|
139 |
|
140 |
addFunction(new IlikeOperator());
|
141 |
addFunction(new LikeOperator());
|
142 |
|
143 |
addFunction(new ACosFunction());
|
144 |
addFunction(new ASinFunction());
|
145 |
addFunction(new ATanFunction());
|
146 |
addFunction(new AbsFunction());
|
147 |
addFunction(new BitAndFunction());
|
148 |
addFunction(new BitOrFunction());
|
149 |
addFunction(new BitXorFunction());
|
150 |
addFunction(new CeilFunction());
|
151 |
addFunction(new CosFunction());
|
152 |
addFunction(new CoshFunction());
|
153 |
addFunction(new CotFunction());
|
154 |
addFunction(new DegreesFunction());
|
155 |
addFunction(new ExpFunction());
|
156 |
addFunction(new FloorFunction());
|
157 |
addFunction(new Log10Function());
|
158 |
addFunction(new LogFunction());
|
159 |
addFunction(new PiFunction());
|
160 |
addFunction(new PowFunction());
|
161 |
addFunction(new RadiansFunction());
|
162 |
addFunction(new RandFunction());
|
163 |
addFunction(new RoundFunction());
|
164 |
addFunction(new SignFunction());
|
165 |
addFunction(new SinFunction());
|
166 |
addFunction(new SinhFunction());
|
167 |
addFunction(new SqrtFunction());
|
168 |
addFunction(new TanFunction());
|
169 |
addFunction(new TanhFunction());
|
170 |
addFunction(new ZeroFunction());
|
171 |
addFunction(new LogFunction());
|
172 |
|
173 |
addFunction(new AsciiFunction());
|
174 |
addFunction(new CharFunction());
|
175 |
addFunction(new ConcatFunction());
|
176 |
addFunction(new InstrFunction());
|
177 |
addFunction(new LTrimFunction());
|
178 |
addFunction(new LeftFunction());
|
179 |
addFunction(new LengthFunction());
|
180 |
addFunction(new LocateFunction());
|
181 |
addFunction(new LowerFunction());
|
182 |
addFunction(new LpadFunction());
|
183 |
addFunction(new PositionFunction());
|
184 |
addFunction(new RTrimFunction());
|
185 |
addFunction(new RepeatFunction());
|
186 |
addFunction(new ReplaceFunction());
|
187 |
addFunction(new RightFunction());
|
188 |
addFunction(new RpadFunction());
|
189 |
addFunction(new SpaceFunction());
|
190 |
addFunction(new SubstringFunction());
|
191 |
addFunction(new TrimFunction());
|
192 |
addFunction(new UpperFunction());
|
193 |
|
194 |
addFunction(new STAreaFunction());
|
195 |
addFunction(new STAsTextFunction());
|
196 |
addFunction(new STBufferFunction());
|
197 |
addFunction(new STCentroidFunction());
|
198 |
addFunction(new STContainsFunction());
|
199 |
addFunction(new STConvexHullFunction());
|
200 |
addFunction(new STCoveredByFunction());
|
201 |
addFunction(new STCoversFunction());
|
202 |
addFunction(new STCrossesFunction());
|
203 |
addFunction(new STDifferenceFunction());
|
204 |
addFunction(new STDimensionFunction());
|
205 |
addFunction(new STDisjointFunction());
|
206 |
addFunction(new STDistanceFunction());
|
207 |
addFunction(new STEndPointFunction());
|
208 |
addFunction(new STEnvelopeFunction());
|
209 |
addFunction(new STGeomFromTextFunction());
|
210 |
addFunction(new STGeometryNFunction());
|
211 |
addFunction(new STIntersectionFunction());
|
212 |
addFunction(new STIntersectsFunction());
|
213 |
addFunction(new STIsSimpleFunction());
|
214 |
addFunction(new STIsValidFunction());
|
215 |
addFunction(new STNumGeometriesFunction());
|
216 |
addFunction(new STNumPointsFunction());
|
217 |
addFunction(new STOverlapsFunction());
|
218 |
addFunction(new STPointNFunction());
|
219 |
addFunction(new STStartPointFunction());
|
220 |
addFunction(new STTouchesFunction());
|
221 |
addFunction(new STUnionFunction());
|
222 |
addFunction(new STWithinFunction());
|
223 |
addFunction(new STXFunction());
|
224 |
addFunction(new STYFunction());
|
225 |
addFunction(new STZFunction());
|
226 |
} |
227 |
|
228 |
@Override
|
229 |
@SuppressWarnings("CloneDoesntCallSuperClone") |
230 |
public SymbolTable clone() throws CloneNotSupportedException { |
231 |
// SQLSymbolTable is singleton and immutable, so we just return
|
232 |
// the same instance.
|
233 |
return this; |
234 |
} |
235 |
|
236 |
private void addFunction(Function function) { |
237 |
this.functions.put(function.name().toLowerCase(), function);
|
238 |
} |
239 |
|
240 |
@Override
|
241 |
public Function function(String name) { |
242 |
return this.functions.get(name.toLowerCase()); |
243 |
} |
244 |
|
245 |
@Override
|
246 |
public boolean exists(String name) { |
247 |
return false; |
248 |
} |
249 |
|
250 |
@Override
|
251 |
public Object value(String name) { |
252 |
return null; |
253 |
} |
254 |
|
255 |
@Override
|
256 |
public Iterator<String> itervars() { |
257 |
return new Iterator<String>() { |
258 |
@Override
|
259 |
public boolean hasNext() { |
260 |
return false; |
261 |
} |
262 |
|
263 |
@Override
|
264 |
public String next() { |
265 |
return null; |
266 |
} |
267 |
}; |
268 |
} |
269 |
|
270 |
@Override
|
271 |
public Iterator<Function> iterfuncs() { |
272 |
return this.functions.values().iterator(); |
273 |
} |
274 |
|
275 |
@Override
|
276 |
public Iterator<Function> iterator() { |
277 |
return iterfuncs();
|
278 |
} |
279 |
|
280 |
} |