Revision 44750 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

View differences:

Select.java
2 2

  
3 3
import org.apache.commons.lang3.StringUtils;
4 4
import org.gvsig.expressionevaluator.ExpressionBuilder;
5
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TUPLE;
5 6
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
6 7
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
7 8
import org.gvsig.expressionevaluator.Formatter;
......
12 13
 *
13 14
 * @author jjdelcerro
14 15
 */
16
@SuppressWarnings("UseSpecificCatch")
15 17
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;
18

  
19
  private final SQLBuilder sqlbuilder;
20
  private final Formatter<Value> formatter;
21

  
22
  public Select(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
23
    this.sqlbuilder = sqlbuilder;
24
    this.formatter = formatter;
25
  }
26

  
27
  @Override
28
  public boolean canApply(ExpressionBuilder.Value value) {
29
    if (value instanceof ExpressionBuilder.Function) {
30
      return StringUtils.equalsIgnoreCase(FUNCTION_SELECT, ((Function) value).name());
23 31
    }
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
    }
32
    return false;
33
  }
31 34

  
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 ) {
35
  private static final int COLUMNS = 0;
36
  private static final int TABLE = 1;
37
  private static final int WHERE = 2;
38
  private static final int ORDER = 3;
39
  private static final int ORDER_MODE = 4;
40
  private static final int LIMIT = 5;
41

  
42
  @Override
43
  public String format(Value function0) {
44
    Function function = (Function) function0;
45
    String tableName = (String) function.parameters().get(TABLE).toString();
46
    Value where = function.parameters().get(WHERE);
47
    Value order = function.parameters().get(ORDER);
48
    Value limit = function.parameters().get(LIMIT);
49
    Value order_mode = function.parameters().get(ORDER_MODE);
50

  
51
    StringBuilder builder = new StringBuilder();
52
    builder.append("(SELECT ");
53

  
54
    try {
55
      Function columns = (Function) function.parameters().get(COLUMNS);
56
      if (!StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function) columns).name(), FUNCTION_TUPLE)) {
57
        throw new IllegalArgumentException();
58
      }
59
      if( columns.parameters().isEmpty() ) {
60
            builder.append("* ");
61
      } else {
62
        boolean needcomma = false;
63
        for (Value parameter : columns.parameters()) {
64
          if(needcomma) {
50 65
            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 66
          } else {
56
            builder.append(" DESC ");
67
            needcomma = true;
57 68
          }
69
          builder.append(parameter.toString(formatter));
58 70
        }
59
        if( limit!=null ) {
60
          builder.append(" LIMIT ");
61
          builder.append(limit.toString(formatter));
62
        }
63
        builder.append(")");
64
        return builder.toString();
71
      }
72
    } catch (Exception ex) {
73
      throw new IllegalArgumentException("Invalid columns, need a tuple function as columns.");
65 74
    }
66
    
75

  
76
    builder.append(" FROM ");
77
    builder.append(tableName);
78
    if (where != null) {
79
      builder.append(" WHERE ");
80
      builder.append(where.toString(formatter));
81
    }
82
//        for( int n=0 ; function.containsParameter("ORDER", n); n++) {
83
//          if( n>0 ) {
84
//            builder.append(", ");
85
//          }
86
//          builder.append(function.getParameter("ORDER",n).toString(formatter));
87
//          if( StringUtils.equalsIgnoreCase(function.getParameter("ORDER_MODE",n).toString(),"true") ) {
88
//            builder.append(" ASC ");
89
//          } else {
90
//            builder.append(" DESC ");
91
//          }
92
//        }
93
    if (limit != null) {
94
      builder.append(" LIMIT ");
95
      builder.append(limit.toString(formatter));
96
    }
97
    builder.append(")");
98
    return builder.toString();
99
  }
100

  
67 101
}

Also available in: Unified diff