Revision 44198 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/operations/CalculateEnvelopeOfColumnOperation.java

View differences:

CalculateEnvelopeOfColumnOperation.java
6 6
import java.sql.Statement;
7 7
import org.apache.commons.lang3.StringUtils;
8 8
import org.cresques.cts.IProjection;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
9 11
import org.gvsig.fmap.dal.exception.DataException;
10 12
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
11 13
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
12 14
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
13 15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
14 16
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
17
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
15 18
import org.gvsig.fmap.geom.Geometry;
16 19
import org.gvsig.fmap.geom.primitive.Envelope;
17 20

  
......
70 73
        // https://alastaira.wordpress.com/2011/07/26/determining-the-geographic-extent-of-spatial-features-in-a-sql-server-table/
71 74
        //
72 75
        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
76
        ExpressionBuilder expbuilder = sqlbuilder.expression();
77
        
73 78
        sqlbuilder.select().column().value(
74
            sqlbuilder.getAsGeometry(
75
                sqlbuilder.ST_ExtentAggregate(
76
                        sqlbuilder.column(columnName)
79
            expbuilder.as_geometry(
80
                expbuilder.ST_ExtentAggregate(
81
                        expbuilder.column(columnName)
77 82
                )
78 83
            )
79 84
        );
......
87 92
        if (StringUtils.isEmpty(baseFilter)) {
88 93
            if (limit != null) {
89 94
                sqlbuilder.select().where().set(
90
                        sqlbuilder.ST_Intersects(
91
                                sqlbuilder.ST_Envelope(
92
                                        sqlbuilder.column(columnName)
95
                        expbuilder.ST_Intersects(
96
                                expbuilder.ST_Envelope(
97
                                        expbuilder.column(columnName)
93 98
                                ),
94
                                sqlbuilder.ST_Envelope(
95
                                        sqlbuilder.geometry(limit.getGeometry(), crs)
99
                                expbuilder.ST_Envelope(
100
                                        expbuilder.geometry(limit.getGeometry(), crs)
96 101
                                )
97 102
                        )
98 103
                );
99 104
            }
100 105
        } else {
101
            sqlbuilder.select().where().set( sqlbuilder.custom(baseFilter) );
106
            sqlbuilder.select().where().set( expbuilder.custom(baseFilter) );
102 107
            if (limit != null) {
103 108
                sqlbuilder.select().where().and(
104
                        sqlbuilder.ST_Intersects(
105
                            sqlbuilder.ST_Envelope(
106
                                    sqlbuilder.column(columnName)
109
                        expbuilder.ST_Intersects(
110
                            expbuilder.ST_Envelope(
111
                                    expbuilder.column(columnName)
107 112
                            ),
108
                            sqlbuilder.ST_Envelope(
109
                                    sqlbuilder.geometry(limit.getGeometry(), crs)
113
                            expbuilder.ST_Envelope(
114
                                    expbuilder.geometry(limit.getGeometry(), crs)
110 115
                            )
111 116
                        )
112 117
                );
113 118
            }
114 119
        }
115

  
120
        sqlbuilder.setProperties(
121
                Variable.class, 
122
                PROP_TABLE, table
123
        );
116 124
        String sql = sqlbuilder.select().toString();
117 125

  
118 126
        Statement st = null;

Also available in: Unified diff