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/ResultSetForSetProviderOperation.java
ResultSetForSetProviderOperation.java | ||
---|---|---|
5 | 5 |
import java.util.List; |
6 | 6 |
import org.apache.commons.lang3.ArrayUtils; |
7 | 7 |
import org.apache.commons.lang3.StringUtils; |
8 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Config; |
|
8 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable; |
|
9 | 10 |
import org.gvsig.fmap.dal.exception.DataException; |
10 | 11 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
11 | 12 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
... | ... | |
16 | 17 |
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference; |
17 | 18 |
import org.gvsig.fmap.dal.store.jdbc2.ResulSetControler.ResultSetEntry; |
18 | 19 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
20 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE; |
|
21 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE; |
|
19 | 22 |
import org.gvsig.fmap.geom.DataTypes; |
20 | 23 |
import org.gvsig.tools.evaluator.Evaluator; |
21 | 24 |
|
... | ... | |
82 | 85 |
|
83 | 86 |
double tolerance = -1 ; //query.getScale(); |
84 | 87 |
JDBCSQLBuilderBase sqlbuilder = createSQLBuilder(); |
88 |
ExpressionBuilder expbuilder = sqlbuilder.expression(); |
|
85 | 89 |
|
86 | 90 |
List<String> primaryKeys = new ArrayList<>(); |
87 | 91 |
for(FeatureAttributeDescriptor attr : storeType.getPrimaryKey() ) { |
... | ... | |
101 | 105 |
forcedColumns.remove(attr.getName()); |
102 | 106 |
} |
103 | 107 |
if( attr.getType() == DataTypes.GEOMETRY ) { |
104 |
if( tolerance<=0 || !sqlbuilder.getConfig().has_functionality(Config.ST_Simplify)) { |
|
105 |
sqlbuilder.select().column().name(attr.getName()).as_geometry(); |
|
106 |
} else { |
|
107 |
sqlbuilder.select().column().value( |
|
108 |
sqlbuilder.ST_Simplify( |
|
109 |
sqlbuilder.column(attr.getName()), |
|
110 |
sqlbuilder.constant(tolerance) |
|
111 |
) |
|
112 |
).as_geometry(); |
|
113 |
} |
|
108 |
sqlbuilder.select().column().name(attr.getName()).as_geometry(); |
|
109 |
// if( tolerance<=0 || !sqlbuilder.getConfig().has_functionality(Config.ST_Simplify)) { |
|
110 |
// sqlbuilder.select().column().name(attr.getName()).as_geometry(); |
|
111 |
// } else { |
|
112 |
// sqlbuilder.select().column().value( |
|
113 |
// sqlbuilder.ST_Simplify( |
|
114 |
// sqlbuilder.column(attr.getName()), |
|
115 |
// sqlbuilder.constant(tolerance) |
|
116 |
// ) |
|
117 |
// ).as_geometry(); |
|
118 |
// } |
|
114 | 119 |
columns.add(attr); |
115 | 120 |
} else { |
116 | 121 |
sqlbuilder.select().column().name(attr.getName()); |
... | ... | |
132 | 137 |
if( filter != null ) { |
133 | 138 |
String sqlfilter = filter.getSQL(); |
134 | 139 |
if( ! StringUtils.isEmpty(sqlfilter) ) { |
135 |
sqlbuilder.select().where().set( sqlbuilder.custom(sqlfilter) ); |
|
140 |
if( this.helper.supportFilter(this.storeType, filter) ) { |
|
141 |
sqlbuilder.select().where().set(expbuilder.toValue(sqlfilter)); |
|
142 |
} |
|
136 | 143 |
} |
137 | 144 |
} |
138 | 145 |
if( ! StringUtils.isEmpty(baseFilter) ) { |
139 |
sqlbuilder.select().where().and(sqlbuilder.custom(baseFilter));
|
|
146 |
sqlbuilder.select().where().and(expbuilder.toValue(baseFilter));
|
|
140 | 147 |
} |
141 | 148 |
|
142 | 149 |
FeatureQueryOrder order = query==null? null:query.getOrder(); |
... | ... | |
170 | 177 |
// obtener los primeros elementos sin importarnos su orden. |
171 | 178 |
for(String attrName : primaryKeys ) { |
172 | 179 |
// Se precisa indicar un orden para usar OFFSET. |
173 |
sqlbuilder.select().order_by().column(sqlbuilder.identifier(attrName)).ascending(); |
|
180 |
sqlbuilder.select().order_by().column(sqlbuilder.as_identifier(attrName)).ascending();
|
|
174 | 181 |
} |
175 | 182 |
} |
176 | 183 |
if( limit > 0 ) { |
... | ... | |
181 | 188 |
if( offset>0 ) { |
182 | 189 |
sqlbuilder.select().offset(offset); |
183 | 190 |
} |
184 |
|
|
191 |
sqlbuilder.setProperties( |
|
192 |
Variable.class, |
|
193 |
PROP_FEATURE_TYPE, this.storeType, |
|
194 |
PROP_TABLE, table |
|
195 |
); |
|
185 | 196 |
String sql = sqlbuilder.toString(); |
186 | 197 |
ResultSetEntry resultSetEntry = this.helper.getResulSetControler().create( |
187 | 198 |
sql, fetchSize, columns.toArray(new FeatureAttributeDescriptor[columns.size()]) |
Also available in: Unified diff