Statistics
| Revision:

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
}