Revision 213

View differences:

trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/operations/MSSQLServerFetchFeatureTypeOperation.java
6 6
import java.sql.Statement;
7 7
import java.util.List;
8 8
import org.cresques.cts.IProjection;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
9 10
import org.gvsig.fmap.dal.exception.DataException;
10 11
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
11 12
import org.gvsig.fmap.dal.feature.EditableFeatureType;
......
68 69
    private IProjection getProjectionOfColumn(String columnName) {
69 70
       
70 71
        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
72
        ExpressionBuilder expbuilder = sqlbuilder.expression();
73
        
71 74
        sqlbuilder.select().limit(1);
72 75
        sqlbuilder.select().column().value(
73
                sqlbuilder.ST_SRID(sqlbuilder.column(columnName))
76
                expbuilder.ST_SRID(expbuilder.column(columnName))
74 77
        );
75 78
        sqlbuilder.select().where().set(
76
                sqlbuilder.and(
77
                        sqlbuilder.notIsNull(sqlbuilder.column(columnName)),
78
                        sqlbuilder.notIsNull(sqlbuilder.ST_SRID(sqlbuilder.column(columnName)))
79
                expbuilder.and(
80
                        expbuilder.not_is_null(expbuilder.column(columnName)),
81
                        expbuilder.not_is_null(expbuilder.ST_SRID(expbuilder.column(columnName)))
79 82
                )
80 83
        );
81 84
        sqlbuilder.select().from().table()
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/MSSQLServerHelper.java
31 31
import java.util.List;
32 32
import org.apache.commons.dbcp.BasicDataSource;
33 33
import org.apache.commons.lang3.StringUtils;
34
import org.gvsig.expressionevaluator.ExpressionBuilder;
34 35
import org.gvsig.fmap.dal.DataParameters;
35 36
import org.gvsig.fmap.dal.DataTypes;
36 37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
......
314 315
            String columnName
315 316
        ) throws JDBCSQLException {
316 317
        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
318
        ExpressionBuilder expbuilder = sqlbuilder.expression();
319
        
317 320
        sqlbuilder.select().column().value(
318
            sqlbuilder.getAsGeometry(
319
                sqlbuilder.ST_ExtentAggregate(
320
                        sqlbuilder.column(columnName)
321
            expbuilder.as_geometry(
322
                expbuilder.ST_ExtentAggregate(
323
                        expbuilder.column(columnName)
321 324
                )
322 325
            )
323 326
        );
......
355 358
    }
356 359

  
357 360
    @Override
358
    public SQLBuilder.GeometrySupportType getGeometrySupportType() {
359
        return SQLBuilder.GeometrySupportType.WKB;
361
    public ExpressionBuilder.GeometrySupportType getGeometrySupportType() {
362
        return ExpressionBuilder.GeometrySupportType.WKB;
360 363
    }
361 364

  
362 365
    @Override
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_GeomFromWKB.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_GeomFromWKB implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_GeomFromWKB(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_GEOMFROMWKB, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String p2 = parameters.get(1).toString(formatter);
39
        String r = MessageFormat.format("geometry::STGeomFromWKB({0}, {1})", p1, p2);
40
        return r;
41
    }
42
    
43
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_GeomFromText.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_GeomFromText implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_GeomFromText(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_GEOMFROMTEXT, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String p2 = parameters.get(1).toString(formatter);
39
        String r = MessageFormat.format("geometry::STGeomFromText({0}, {1})", p1, p2);
40
        return r;
41
    }
42
    
43
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Crosses.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Crosses implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Crosses(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_CROSSES, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STCrosses({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Disjoint.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Disjoint implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Disjoint(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_DISJOINT, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).ST_Disjoint({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Intersects.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Intersects implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Intersects(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_INTERSECTS, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STIntersects({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/MSSQLParameter.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import org.cresques.cts.IProjection;
5
import org.gvsig.expressionevaluator.ExpressionBuilder;
6
import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
8
import org.gvsig.expressionevaluator.Formatter;
9
import org.gvsig.fmap.dal.SQLBuilder;
10
import org.gvsig.fmap.geom.Geometry;
11
import org.gvsig.fmap.geom.GeometryUtils;
12
import org.gvsig.mssqlserver.dal.MSSQLServerSQLBuilder;
13

  
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
class MSSQLParameter implements Formatter<Value> {
19

  
20
    private final Formatter<Value> formatter;
21
    private final MSSQLServerSQLBuilder builder;
22
    private final ExpressionBuilder expbuilder;
23

  
24
    public MSSQLParameter(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = (MSSQLServerSQLBuilder) builder;
26
        this.formatter = formatter;
27
        this.expbuilder = builder.expression();
28
    }
29

  
30
    @Override
31
    public boolean canApply(Value value) {
32
        return value instanceof Parameter;
33
    }
34

  
35
//    public Object value(Object value) {
36
//        try {
37
//            switch (this.type()) {
38
//                case Constant:
39
//                    if (value instanceof Geometry) {
40
//                        Geometry geometry = (Geometry) value;
41
//                        switch (this.expbuilder.geometry_support_type()) {
42
//                            case EWKB:
43
//                                return GeometryUtils.toEWKB(geometry);
44
//                            case WKB:
45
//                                return GeometryUtils.toWKB(geometry);
46
//                            case WKT:
47
//                            default:
48
//                                return GeometryUtils.toWKT(geometry);
49
//                        }
50
//                    } else if (value instanceof IProjection) {
51
//                        return this.expbuilder.srs_id((IProjection) value);
52
//                    }
53
//                    return value;
54
//                case Variable:
55
//                case Geometry:
56
//                default:
57
//                    return value;
58
//            }
59
//        } catch (Exception ex) {
60
//            throw new RuntimeException("Can't get value from parameter.", ex);
61
//        }
62
//    }
63
    
64
    private String getSRS(Parameter param) {
65
            if( param.srs()!=null ) {
66
                return param.srs().toString(formatter);
67
            }
68
            if( param instanceof Geometry ) {
69
                IProjection proj = ((Geometry)param).getProjection();
70
                Object s = this.expbuilder.srs_id(proj);
71
                if( s == null ) {
72
                    throw new IllegalArgumentException("A parameter of type Geometry with an invalid SRS.");
73
                }
74
                return s.toString();
75
            }
76
            throw new IllegalArgumentException("The parameter of type Geometry need a SRS.");
77
        }
78
    @Override
79
    public String format(Value function) {
80
        Parameter value = (Parameter) function;
81
        switch (value.type()) {
82
            case Constant:
83
                if (value instanceof Geometry) {
84
                    switch (this.expbuilder.geometry_support_type()) {
85
                        case EWKB:
86
                        case WKB:
87
                            return MessageFormat.format(
88
                                    this.builder.FORMAT_ST_GEOMFROMWKB,
89
                                    "?",
90
                                    this.getSRS(value)
91
                            );
92
                        case WKT:
93
                        default:
94
                            return MessageFormat.format(
95
                                    this.builder.FORMAT_ST_GEOMFROMTEXT,
96
                                    "?",
97
                                    this.getSRS(value)
98
                            );
99
                    }
100
                }
101
            case Variable:
102
            default:
103
                return "?";
104
            case Geometry:
105
                switch (this.expbuilder.geometry_support_type()) {
106
                    case EWKB:
107
                    case WKB:
108
                        return MessageFormat.format(
109
                                this.builder.FORMAT_ST_GEOMFROMWKB,
110
                                "?",
111
                                this.getSRS(value)
112
                        );
113
                    case WKT:
114
                    default:
115
                        return MessageFormat.format(
116
                                this.builder.FORMAT_ST_GEOMFROMTEXT,
117
                                "?",
118
                                this.getSRS(value)
119
                        );
120
                }
121
        }
122
    }
123
}
124

  
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Equals.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Equals implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Equals(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_EQUALS, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STEquals({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Overlaps.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Overlaps implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Overlaps(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_OVERLAPS, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STOverlaps({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/MSSQLVariable.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import org.apache.commons.lang3.StringUtils;
4
import org.gvsig.expressionevaluator.ExpressionBuilder;
5
import static org.gvsig.expressionevaluator.ExpressionBuilder.EMPTY_FORMATTER;
6
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
8
import org.gvsig.expressionevaluator.Formatter;
9
import org.gvsig.fmap.dal.SQLBuilder;
10

  
11
/**
12
 *
13
 * @author jjdelcerro
14
 */
15
class MSSQLVariable implements Formatter<Value> {
16

  
17
    private final Formatter<Value> formatter;
18
    private final SQLBuilder builder;
19
    private final ExpressionBuilder expbuilder;
20
    
21
    public MSSQLVariable(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
        this.expbuilder = builder.expression();
25
    }
26
    
27
    @Override
28
    public boolean canApply(Value value) {
29
        return value instanceof Variable;
30
    }
31

  
32
    @Override
33
    public String format(Value function) {
34
        String name = ((Variable) function).name();
35

  
36
        if (StringUtils.isEmpty(name)) {
37
            return this.expbuilder.toString(EMPTY_FORMATTER);
38
        }
39

  
40
        return this.builder.as_identifier(name);
41

  
42
    }
43
}
44

  
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_UnionAggregate.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
class ST_UnionAggregate implements Formatter<Value> {
18

  
19
    private final Formatter<Value> formatter;
20
    private final SQLBuilder builder;
21
    
22
    public ST_UnionAggregate(SQLBuilder builder, Formatter<Value> formatter) {
23
        this.builder = builder;
24
        this.formatter = formatter;
25
    }
26
    
27
    @Override
28
    public boolean canApply(Value value) {
29
        if (value instanceof Function) {
30
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_UNIONAGGREGATE, ((Function) value).name());
31
        }
32
        return false;
33
    }
34

  
35
    @Override
36
    public String format(Value function) {
37
        List<Value> parameters = ((Function) function).parameters();
38
        String p1 = parameters.get(0).toString(formatter);
39
        String r = MessageFormat.format("geometry::UnionAggregate({0})", p1);
40
        return r;
41
    }
42
    
43
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_SRID.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_SRID implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_SRID(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_SRID, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("(({0}).STSrid)", p1);
39
        return r;
40
    }
41
    
42
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Within.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Within implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Within(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_WITHIN, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STWithin({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/MSSQLConstant.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import java.util.Objects;
6
import org.apache.commons.lang3.StringUtils;
7
import org.cresques.cts.IProjection;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
10
import static org.gvsig.expressionevaluator.ExpressionBuilder.EMPTY_FORMATTER;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
12
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
13
import org.gvsig.expressionevaluator.Formatter;
14
import org.gvsig.fmap.dal.SQLBuilder;
15
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryUtils;
18

  
19
/**
20
 *
21
 * @author jjdelcerro
22
 */
23
class MSSQLConstant implements Formatter<Value> {
24

  
25
    private final Formatter<Value> formatter;
26
    private final SQLBuilder builder;
27
    private final ExpressionBuilder expbuilder;
28
    
29
    public MSSQLConstant(SQLBuilder builder, Formatter<Value> formatter) {
30
        this.builder = builder;
31
        this.formatter = formatter;
32
        this.expbuilder = builder.expression();
33
    }
34
    
35
    @Override
36
    public boolean canApply(Value value) {
37
        return value instanceof Constant;
38
    }
39

  
40
    @Override
41
    public String format(Value function) {
42
          Object value = ((Constant) function).value();
43

  
44
            if( value==null ) {
45
                return "NULL";
46
            }
47
            if( value instanceof byte[] ) {
48
                return this.expbuilder.bytearray_0x((byte[]) value);
49
            }
50
            if (value instanceof String) {
51
                return this.builder.as_string((String) value);
52
            }
53
            if( value instanceof Geometry ) {
54
                Geometry geometry = (Geometry) value;
55
                switch (this.builder.geometry_support_type()) {
56
                    case EWKB:
57
                    case WKB:
58
                        String p1 = this.expbuilder.bytearray_0x(GeometryUtils.toWKB(geometry));
59
                        String p2 = String.valueOf(this.expbuilder.srs_id(geometry.getProjection()));
60
                        String r = MessageFormat.format("geometry::STGeomFromWKB({0}, {1})", p1, p2);
61
                        return r;
62
                    case WKT:
63
                    default:
64
                        String p3 = this.expbuilder.bytearray_0x(GeometryUtils.toWKB(geometry));
65
                        String p4 = String.valueOf(this.expbuilder.srs_id(geometry.getProjection()));
66
                        String r1 = MessageFormat.format("geometry::STGeomFromText({0}, {1})", p3, p4);
67
                        return r1;
68
                }
69
            }
70
            if( value instanceof IProjection ) {
71
                return Objects.toString(this.expbuilder.srs_id((IProjection)(value)));
72
            }
73
            if (value instanceof Boolean) {
74
                // TODO correct values
75
                if (((Boolean) value)) {
76
                    return "(1=1)";
77
                } else {
78
                    return "(1<>1)";
79
                }
80
            }
81
            return Objects.toString(value, "");
82
        }
83
    }
84

  
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/MSSQLServerFormatter.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
7

  
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author osc
15
 */
16
public class MSSQLServerFormatter implements Formatter<ExpressionBuilder.Value> {
17

  
18
    private final SQLBuilder builder;
19
    private final Formatter<ExpressionBuilder.Value>[] formatters;
20

  
21
    public MSSQLServerFormatter(SQLBuilder builder) {
22

  
23
        this.builder = builder;
24
        this.formatters = new Formatter[]{
25
              new ST_AsBinary(this.builder, this),
26
              new ST_AsText(this.builder, this),
27
              new ST_Contains(this.builder, this),
28
              new ST_Crosses(this.builder, this),
29
              new ST_Disjoint(this.builder, this),
30
              new ST_Envelope(this.builder, this),
31
              new ST_Equals(this.builder, this),
32
              new ST_ExtentAggregate(this.builder, this),
33
              new ST_GeomFromText(this.builder, this),
34
              new ST_GeomFromWKB(this.builder, this),
35
              new ST_Intersects(this.builder, this),
36
              new ST_IsClosed(this.builder, this),
37
              new ST_Overlaps(this.builder, this),
38
              new ST_SRID(this.builder, this),
39
              new ST_Touches(this.builder, this),
40
              new ST_UnionAggregate(this.builder, this),
41
              new ST_Within(this.builder, this),
42
              new MSSQLConstant(this.builder, this),
43
              new MSSQLVariable(this.builder, this),
44
              new MSSQLParameter(this.builder, this)
45
              
46
//            new ILike(this.builder, this),
47
//            new IsNull(this.builder, this),
48
//            new IsNotNull(this.builder, this)
49
//            new ST_AsEWKB(this.builder, this),
50
//            new ST_ExtentAggregate(this.builder, this),
51
//            new ST_GeomFromEWKB(this.builder, this),
52
//            new ST_Intersects(this.builder, this),
53
//            new ST_UnionAggregate(this.builder, this)
54
        };
55
    }
56

  
57
    @Override
58
    public boolean canApply(ExpressionBuilder.Value value) {
59
        for (Formatter<ExpressionBuilder.Value> formatter : formatters) {
60
            if (formatter.canApply(value)) {
61
                return true;
62
            }
63
        }
64
        return false;
65
    }
66

  
67
    @Override
68
    public String format(ExpressionBuilder.Value value) {
69
        for (Formatter<ExpressionBuilder.Value> formatter : formatters) {
70
            if (formatter.canApply(value)) {
71
                return formatter.format(value);
72
            }
73
        }
74
        return value.toString(this);
75
    }
76
    
77
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_IsClosed.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_IsClosed implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_IsClosed(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_ISCLOSED, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("(({0}).STIsClosed()=1)", p1);
39
        return r;
40
    }
41
    
42
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_AsBinary.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_AsBinary implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_AsBinary(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_ASBINARY, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("({0}).STAsBinary()", p1);
39
        return r;
40
    }
41
    
42
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_AsText.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_AsText implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ST_AsText(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_ASTEXT, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("({0}).STAsText()", p1);
39
        return r;
40
    }
41
    
42
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Touches.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Touches implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Touches(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_TOUCHES, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STTouches({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Envelope.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ST_Envelope implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20

  
21
    public ST_Envelope(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25

  
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_ENVELOPE, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("(({0}).STEnvelope())", p1);
39
        return r;
40
    }
41

  
42
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_Contains.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6

  
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
12
import org.gvsig.expressionevaluator.Formatter;
13
import org.gvsig.fmap.dal.SQLBuilder;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
class ST_Contains implements Formatter<Value> {
20

  
21
    private final Formatter<Value> formatter;
22
    private final SQLBuilder builder;
23

  
24
    public ST_Contains(SQLBuilder builder, Formatter<Value> formatter) {
25
        this.builder = builder;
26
        this.formatter = formatter;
27
    }
28

  
29
    @Override
30
    public boolean canApply(Value value) {
31
        if (value instanceof Function) {
32
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_CONTAINS, ((Function) value).name());
33
        }
34
        return false;
35
    }
36

  
37
    @Override
38
    public String format(Value function) {
39
        List<Value> parameters = ((Function) function).parameters();
40
        String p1 = parameters.get(0).toString(formatter);
41
        String p2 = parameters.get(1).toString(formatter);
42
        String r = MessageFormat.format("(({0}).STContains({1})=1)", p1, p2);
43
        return r;
44
    }
45

  
46
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/expressionbuilderformatter/ST_ExtentAggregate.java
1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_ST_ASEWKB;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
class ST_ExtentAggregate implements Formatter<Value> {
18

  
19
    private final Formatter<Value> formatter;
20
    private final SQLBuilder builder;
21
    
22
    public ST_ExtentAggregate(SQLBuilder builder, Formatter<Value> formatter) {
23
        this.builder = builder;
24
        this.formatter = formatter;
25
    }
26
    
27
    @Override
28
    public boolean canApply(Value value) {
29
        if (value instanceof Function) {
30
            return StringUtils.equalsIgnoreCase(ExpressionBuilder.FUNCTION_ST_EXTENTAGGREGATE, ((Function) value).name());
31
        }
32
        return false;
33
    }
34

  
35
    @Override
36
    public String format(Value function) {
37
        List<Value> parameters = ((Function) function).parameters();
38
        String p1 = parameters.get(0).toString(formatter);
39
        String r = MessageFormat.format("geometry::EnvelopeAggregate({0})", p1);
40
        return r;
41
    }
42
    
43
}
trunk/org.gvsig.mssqlserver/org.gvsig.mssqlserver.provider/src/main/java/org/gvsig/mssqlserver/dal/MSSQLServerSQLBuilder.java
3 3
import java.text.MessageFormat;
4 4
import java.util.ArrayList;
5 5
import java.util.List;
6
import org.apache.commons.lang3.StringUtils;
6 7
import org.cresques.cts.IProjection;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.Formatter;
7 10
import org.gvsig.fmap.dal.DataTypes;
8 11
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
9 12
import org.gvsig.fmap.geom.Geometry;
10 13
import org.gvsig.fmap.geom.primitive.Envelope;
14
import org.gvsig.mssqlserver.dal.expressionbuilderformatter.MSSQLServerFormatter;
11 15

  
12 16
public class MSSQLServerSQLBuilder extends JDBCSQLBuilderBase {
13

  
14
    public interface MSSQLServerSQLConfig extends SQLConfig {
15
        public static final String ST_GeomFromTextEx = "ST_GeomFromTextEx";
16
        public static final String ST_GeomFromWKBEx = "ST_GeomFromWKBEx";
17
        public static final String ST_GeomFromEWKBEx = "ST_GeomFromEWKBEx";
18
        public static final String ST_ExtentAggregateEx = "ST_ExtentAggregateEx";
19
        public static final String ST_UnionAggregateEx = "ST_UnionAggregateEx";
20
    }
17
    
18
    protected Formatter formatter = null;
19
    public static final String FORMAT_ST_GEOMFROMEWKB= "geometry::STGeomFromWKB({0}, {1})";
20
    public static final String FORMAT_ST_GEOMFROMWKB= "geometry::STGeomFromWKB({0}, {1})";
21
    public static final String FORMAT_ST_GEOMFROMTEXT= "geometry::STGeomFromText({0}, {1})";
22
    
23
//    public interface MSSQLServerSQLConfig extends SQLConfig {
24
//        public static final String ST_GeomFromTextEx = "ST_GeomFromTextEx";
25
//        public static final String ST_GeomFromWKBEx = "ST_GeomFromWKBEx";
26
//        public static final String ST_GeomFromEWKBEx = "ST_GeomFromEWKBEx";
27
//        public static final String ST_ExtentAggregateEx = "ST_ExtentAggregateEx";
28
//        public static final String ST_UnionAggregateEx = "ST_UnionAggregateEx";
29
//    }
21 30
 
22 31
    public MSSQLServerSQLBuilder(MSSQLServerHelper helper) {
23 32
        super(helper);
24 33
        
25
        config.set(SQLConfig.default_schema, "dbo");
26
        config.set(SQLConfig.allowAutomaticValues, true);
27
        config.set(SQLConfig.geometry_type_support, helper.getGeometrySupportType());
28
        config.set(SQLConfig.has_spatial_functions, helper.hasSpatialFunctions());
34
        this.defaultSchema = "dbo";
35
        this.allowAutomaticValues = true;
36
        this.geometrySupportType = this.helper.getGeometrySupportType();
37
        this.hasSpatialFunctions = this.helper.hasSpatialFunctions();
29 38

  
30
        config.remove_functionality(SQLConfig.DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table);
31
        config.remove_functionality(SQLConfig.DELETE_GEOMETRY_COLUMN_FROM_TABLE_table);
39
        STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table = null;
40
        STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_table = null;
32 41
 
33
        config.set(SQLConfig.UPDATE_TABLE_STATISTICS_table,"UPDATE STATISTICS {0}");
42
        this.STMT_UPDATE_TABLE_STATISTICS_table ="UPDATE STATISTICS {0}";
34 43

  
35
        config.set(SQLConfig.type_geometry, "GEOMETRY");
44
        this.type_geometry = "GEOMETRY";
45
        this.constant_true = "1=1"; // TODO ?
46
        this.constant_false = "1<>1"; // TODO ?
47
    
48
        this.type_boolean = "BIT";
49
        this.type_double = "FLOAT"; //float con 53 bits de mantisa = float(54)
50
        this.type_numeric_p = "NUMERIC({0})";
51
        this.type_numeric_ps = "NUMERIC({0},{1})";
52
        this.type_bigdecimal = "NUMERIC({0},{1})";
53
        this.type_float = "REAL"; //float con 24 bits de mantisa = float(24)
54
        this.type_int = "INT";
55
        this.type_long = "BIGINT";        
56
        this.type_byte = "TINYINT";
36 57
        
37
        config.set(SQLConfig.type_boolean, "BIT");
38
        config.set(SQLConfig.type_double, "FLOAT"); //float con 53 bits de mantisa, float(54)
39
        config.set(SQLConfig.type_numeric_p, "NUMERIC({0})");
40
        config.set(SQLConfig.type_numeric_ps, "NUMERIC({0},{1})");
41
        config.set(SQLConfig.type_bigdecimal, "NUMERIC({0},{1})");
42
        config.set(SQLConfig.type_float, "REAL"); //float con 24 bits de mantisa, float(24)
43
        config.set(SQLConfig.type_int, "INT");
44
        config.set(SQLConfig.type_long, "BIGINT");        
45
        config.set(SQLConfig.type_byte, "TINYINT");
46
        
47
        config.set(SQLConfig.type_date, "DATE");
48
        config.set(SQLConfig.type_time, "TIME");
58
        this.type_date = "DATE";
59
        this.type_time = "TIME";
49 60

  
50
        config.set(SQLConfig.type_char, "CHAR(1)");
51
        config.set(SQLConfig.type_string, "TEXT");
52
        config.set(SQLConfig.type_string_p, "VARCHAR({0})");
61
        this.type_char = "CHAR(1)";
62
        this.type_string = "TEXT";
63
        this.type_string_p = "VARCHAR({0})";
53 64

  
54
        config.set(SQLConfig.type_version, "VARCHAR(30)");
55
        config.set(SQLConfig.type_URI, "TEXT");
56
        config.set(SQLConfig.type_URL, "TEXT");
57
        config.set(SQLConfig.type_FILE, "TEXT");
58
        config.set(SQLConfig.type_FOLDER, "TEXT");
65
        this.type_version = "VARCHAR(30)";
66
        this.type_URI = "TEXT";
67
        this.type_URL = "TEXT";
68
        this.type_FILE = "TEXT";
69
        this.type_FOLDER = "TEXT";
59 70
        
60
        config.set(SQLConfig.type_bytearray, "VARBINARY");
71
        this.type_bytearray = "VARBINARY";
61 72
        
62
        config.set(SQLConfig.type_timestamp, "TIMESTAMP");
73
        this.type_timestamp = "TIMESTAMP";
63 74

  
64
        config.set(SQLConfig.ST_SRID, "(({0}).STSrid)");
65
        config.set(SQLConfig.ST_AsText, "({0}).STAsText()");
66
        config.set(SQLConfig.ST_AsBinary, "({0}).STAsBinary()");
67
        config.set(SQLConfig.ST_AsEWKB, "({0}).STAsBinary()");
68
        config.set(SQLConfig.ST_ExtentAggregate, "geometry::EnvelopeAggregate({0})");
69
        config.set(SQLConfig.ST_UnionAggregate, "geometry::UnionAggregate({0})");
70
        config.set(SQLConfig.ST_Contains, "(({0}).STContains({1})=1)");
71
        config.set(SQLConfig.ST_Crosses, "(({0}).STCrosses({1})=1)");
72
        config.set(SQLConfig.ST_Disjoint, "(({0}).STDisjoint({1})=1)");
73
        config.set(SQLConfig.ST_Equals, "(({0}).STEquals({1})=1)");
74
        config.set(SQLConfig.ST_IsClosed, "(({0}).STIsClosed()=1)");
75
        config.set(SQLConfig.ST_Overlaps, "(({0}).STOverlaps({1})=1)");
76
        config.set(SQLConfig.ST_Touches, "(({0}).STTouches({1})=1)");
77
        config.set(SQLConfig.ST_Within, "(({0}).STWithin ({1})=1)");
78
        config.set(SQLConfig.ST_Envelope, "({0}).STEnvelope()");
79
        config.set(SQLConfig.ST_Intersects, "(({0}).STIntersects({1})=1)");
80
        config.set(SQLConfig.ST_GeomFromText, "geometry::STGeomFromText({0}, {1})");
81
        config.set(SQLConfig.ST_GeomFromWKB, "geometry::STGeomFromWKB({0}, {1})");
82
        config.set(SQLConfig.ST_GeomFromEWKB, "geometry::STGeomFromWKB({0}, {1})");
83
        config.set(SQLConfig.ST_Simplify, "({0}).Reduce({1})");
84
        config.set(SQLConfig.lcase, "LOWER({0})");
85
        config.set(SQLConfig.ucase, "UPPER({0})");
86
        config.set(SQLConfig.operator_ILIKE, "LOWER({0}) LIKE LOWER({1})");
87
        config.set(SQLConfig.notIsNull,"( ({0}) IS NOT NULL )" );
75
//       DID this.ST_SRID, "(({0}).STSrid)");
76
//       DID this.ST_AsText, "({0}).STAsText()");
77
//       DID this.ST_AsBinary, "({0}).STAsBinary()");
78
//        this.ST_AsEWKB, "({0}).STAsBinary()");
79
//       DID this.ST_ExtentAggregate, "geometry::EnvelopeAggregate({0})");
80
//       DID this.ST_UnionAggregate, "geometry::UnionAggregate({0})");
81
//       DID this.ST_Contains, "(({0}).STContains({1})=1)");
82
//       DID this.ST_Crosses, "(({0}).STCrosses({1})=1)");
83
//       DID this.ST_Disjoint, "(({0}).STDisjoint({1})=1)");
84
//       DID this.ST_Equals, "(({0}).STEquals({1})=1)");
85
//       DID this.ST_IsClosed, "(({0}).STIsClosed()=1)");
86
//       DID this.ST_Overlaps, "(({0}).STOverlaps({1})=1)");
87
//       DID this.ST_Touches, "(({0}).STTouches({1})=1)");
88
//       DID this.ST_Within, "(({0}).STWithin ({1})=1)");
89
//       DID this.ST_Envelope, "({0}).STEnvelope()");
90
//       DID this.ST_Intersects, "(({0}).STIntersects({1})=1)");
91
//       DID this.ST_GeomFromText, "geometry::STGeomFromText({0}, {1})");
92
//       DID this.ST_GeomFromWKB, "geometry::STGeomFromWKB({0}, {1})");
93
//       DID this.ST_GeomFromEWKB, "geometry::STGeomFromWKB({0}, {1})");
94
//        this.ST_Simplify, "({0}).Reduce({1})");
95
//        this.lcase, "LOWER({0})");
96
//        this.ucase, "UPPER({0})");
97
//        this.operator_ILIKE, "LOWER({0}) LIKE LOWER({1})");
98
//        this.notIsNull,"( ({0}) IS NOT NULL )" );
99
//
100
//        config.set(MSSQLServerSQLConfig.ST_ExtentAggregateEx, "{1}::EnvelopeAggregate({0})");
101
//        config.set(MSSQLServerSQLConfig.ST_UnionAggregateEx, "{1}::UnionAggregate({0})");
102
//        config.set(MSSQLServerSQLConfig.ST_GeomFromTextEx, "{2}::STGeomFromText({0}, {1})");
103
//        config.set(MSSQLServerSQLConfig.ST_GeomFromWKBEx, "{2}::STGeomFromWKB({0}, {1})");
104
//        config.set(MSSQLServerSQLConfig.ST_GeomFromEWKBEx, "{2}::STGeomFromWKB({0}, {1})");
88 105

  
89
        config.set(MSSQLServerSQLConfig.ST_ExtentAggregateEx, "{1}::EnvelopeAggregate({0})");
90
        config.set(MSSQLServerSQLConfig.ST_UnionAggregateEx, "{1}::UnionAggregate({0})");
91
        config.set(MSSQLServerSQLConfig.ST_GeomFromTextEx, "{2}::STGeomFromText({0}, {1})");
92
        config.set(MSSQLServerSQLConfig.ST_GeomFromWKBEx, "{2}::STGeomFromWKB({0}, {1})");
93
        config.set(MSSQLServerSQLConfig.ST_GeomFromEWKBEx, "{2}::STGeomFromWKB({0}, {1})");
94

  
95 106
    }
96 107

  
97 108
    @Override
98
    public MSSQLServerSQLConfig getConfig() {
99
        return (MSSQLServerSQLConfig) super.config;
100
    }
101

  
102
    @Override
103 109
    public MSSQLServerHelper getHelper() {
104 110
        return (MSSQLServerHelper) helper;
105 111
    }
112
    
113
    @Override
114
    protected Formatter formatter() {
115
        if( this.formatter==null ) {
116
            this.formatter = new MSSQLServerFormatter(this);
117
        }
118
        return this.formatter;
119
    }
120
    
121
    protected class MSSQLServerDropTableBuilder extends DropTableBuilderBase {
106 122

  
123
        @Override
124
           public List<String> toStrings(Formatter formatter) {
125
            List<String> sqls = new ArrayList<>();
126

  
127
            sqls.add(
128
                    MessageFormat.format(
129
                            STMT_DROP_TABLE_table,
130
                            this.table.toString(formatter)
131
                    )
132
            );
133
            return sqls;
134
        }
135
    }
136
    
107 137
    public class MSSQLServerCreateIndexBuilder extends CreateIndexBuilderBase {
108 138

  
109 139
        private Envelope boundingBox;
......
139 169
            StringBuilder builder = new StringBuilder();
140 170
            if( this.isSpatial ) {
141 171
                builder.append("CREATE SPATIAL INDEX ");
142
                builder.append(identifier(this.indexName));
172
                builder.append(as_identifier(this.indexName));
143 173
                builder.append(" ON ");
144 174
                builder.append(this.table.toString());
145 175
                builder.append(" ( ");
......
177 207
//                if( this.ifNotExist ) {
178 208
//                    builder.append("IF NOT EXISTS ");
179 209
//                }
180
                builder.append(identifier(this.indexName));
210
                builder.append(as_identifier(this.indexName));
181 211
                builder.append(" ON ");
182 212
                builder.append(this.table.toString());
183 213
                builder.append(" ( ");
......
199 229
        
200 230
    }
201 231
    
202
    public class MSSQLServerParameter extends ParameterBase {
232
//    public class MSSQLServerParameter extends ParameterBase {
233
//
234
//        public MSSQLServerParameter() {
235
//            super();
236
//        }
237
//
238
//        @Override
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff