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
package org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilderformatter;
2

    
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
import static org.gvsig.fmap.dal.DataManager.FUNCTION_SELECT;
9
import org.gvsig.fmap.dal.SQLBuilder;
10

    
11
/**
12
 *
13
 * @author jjdelcerro
14
 */
15
public class Select implements Formatter<Value> {
16
    
17
    private final SQLBuilder sqlbuilder;
18
    private final Formatter<Value> formatter;
19
    
20
    public Select(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
21
        this.sqlbuilder = sqlbuilder;
22
        this.formatter = formatter;
23
    }
24
    @Override
25
    public boolean canApply(ExpressionBuilder.Value value) {
26
        if (value instanceof ExpressionBuilder.Function) {
27
            return StringUtils.equalsIgnoreCase(FUNCTION_SELECT, ((Function) value).name());
28
        }
29
        return false;
30
    }
31

    
32
    @Override
33
    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
    }
66
    
67
}