svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.db / org.gvsig.fmap.dal.db.jdbc / src / main / java / org / gvsig / fmap / dal / store / jdbc2 / spi / expressionbuilderformatter / Select.java @ 44748
History | View | Annotate | Download (2.31 KB)
1 | 44748 | jjdelcerro | package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter; |
---|---|---|---|
2 | 44198 | jjdelcerro | |
3 | import org.apache.commons.lang3.StringUtils; |
||
4 | import org.gvsig.expressionevaluator.ExpressionBuilder; |
||
5 | import org.gvsig.expressionevaluator.ExpressionBuilder.Function; |
||
6 | import org.gvsig.expressionevaluator.ExpressionBuilder.Value; |
||
7 | import org.gvsig.expressionevaluator.Formatter; |
||
8 | 44748 | jjdelcerro | import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT; |
9 | 44198 | jjdelcerro | import org.gvsig.fmap.dal.SQLBuilder; |
10 | |||
11 | /**
|
||
12 | *
|
||
13 | * @author jjdelcerro
|
||
14 | */
|
||
15 | 44748 | jjdelcerro | public class Select implements Formatter<Value> { |
16 | 44198 | jjdelcerro | |
17 | private final SQLBuilder sqlbuilder; |
||
18 | private final Formatter<Value> formatter; |
||
19 | |||
20 | 44748 | jjdelcerro | public Select(SQLBuilder sqlbuilder, Formatter<Value> formatter) { |
21 | 44198 | jjdelcerro | this.sqlbuilder = sqlbuilder;
|
22 | this.formatter = formatter;
|
||
23 | } |
||
24 | @Override
|
||
25 | public boolean canApply(ExpressionBuilder.Value value) { |
||
26 | if (value instanceof ExpressionBuilder.Function) { |
||
27 | 44748 | jjdelcerro | return StringUtils.equalsIgnoreCase(FUNCTION_SELECT, ((Function) value).name());
|
28 | 44198 | jjdelcerro | } |
29 | return false; |
||
30 | } |
||
31 | |||
32 | @Override
|
||
33 | 44748 | jjdelcerro | public String format(Value function0) { |
34 | Function function = (Function) function0; |
||
35 | String tableName = function.getParameter("TABLE").toString(); |
||
36 | Value where = function.getParameter("WHERE");
|
||
37 | Value order = function.getParameter("ORDER");
|
||
38 | Value limit = function.getParameter("LIMIT");
|
||
39 | Value order_mode = function.getParameter("ORDER_MODE");
|
||
40 | |||
41 | StringBuilder builder = new StringBuilder(); |
||
42 | builder.append("(SELECT * FROM ");
|
||
43 | builder.append(tableName); |
||
44 | if( where!=null ) { |
||
45 | builder.append(" WHERE ");
|
||
46 | builder.append(where.toString(formatter)); |
||
47 | } |
||
48 | for( int n=0 ; function.containsParameter("ORDER", n); n++) { |
||
49 | if( n>0 ) { |
||
50 | builder.append(", ");
|
||
51 | } |
||
52 | builder.append(function.getParameter("ORDER",n).toString(formatter));
|
||
53 | if( StringUtils.equalsIgnoreCase(function.getParameter("ORDER_MODE",n).toString(),"true") ) { |
||
54 | builder.append(" ASC ");
|
||
55 | } else {
|
||
56 | builder.append(" DESC ");
|
||
57 | } |
||
58 | } |
||
59 | if( limit!=null ) { |
||
60 | builder.append(" LIMIT ");
|
||
61 | builder.append(limit.toString(formatter)); |
||
62 | } |
||
63 | builder.append(")");
|
||
64 | return builder.toString();
|
||
65 | 44198 | jjdelcerro | } |
66 | |||
67 | } |