Revision 43706
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 | ||
---|---|---|
99 | 99 |
for(FeatureAttributeDescriptor attr : storeType.getPrimaryKey() ) { |
100 | 100 |
primaryKeys.add(attr.getName()); |
101 | 101 |
} |
102 |
if( offset>0 || (offset==0 && limit>0) ) { |
|
103 |
// No tengo claro que (offset==0 && limit>0) sea lo mas correcto, |
|
104 |
// Pero cuando se va a paginar y se pide la primera pagina offset es |
|
105 |
// 0 y limit>0, y si no ordenamos ya esa primera pagina los resultados |
|
106 |
// que se obtienen no son correctos, ya que la primera pagina se saca |
|
107 |
// sin ordenar y el resto ordenadas. |
|
108 |
// Probablemente deberiamos tener alguna otra forma de detectar que |
|
109 |
// estamos paginanado ya que asi no distinguimo si solo queremos |
|
110 |
// obtener los primeros elementos sin importarnos su orden. |
|
111 |
for(String attrName : primaryKeys ) { |
|
112 |
// Se precisa indicar un orden para usar OFFSET. |
|
113 |
sqlbuilder.select().order_by().column(sqlbuilder.identifier(attrName)).ascending(); |
|
114 |
} |
|
115 |
} |
|
102 |
List<String> forcedColumns = new ArrayList<>(primaryKeys); |
|
103 |
|
|
116 | 104 |
String[] constantsAttributeNames = null; |
117 | 105 |
if(query !=null && query.hasConstantsAttributeNames() ) { |
118 | 106 |
constantsAttributeNames = query.getConstantsAttributeNames(); |
... | ... | |
122 | 110 |
continue; |
123 | 111 |
} |
124 | 112 |
if( attr.isPrimaryKey() ) { |
125 |
primaryKeys.remove(attr.getName());
|
|
113 |
forcedColumns.remove(attr.getName());
|
|
126 | 114 |
} |
127 | 115 |
if( attr.getType() == DataTypes.GEOMETRY ) { |
128 | 116 |
if( tolerance<=0 || !sqlbuilder.getConfig().has_functionality(Config.ST_Simplify)) { |
... | ... | |
141 | 129 |
columns.add(attr); |
142 | 130 |
} |
143 | 131 |
} |
144 |
for(String attrName : primaryKeys ) {
|
|
132 |
for(String attrName : forcedColumns ) {
|
|
145 | 133 |
sqlbuilder.select().column().name(attrName); |
146 | 134 |
columns.add(setType.getAttributeDescriptor(attrName)); |
147 | 135 |
} |
... | ... | |
183 | 171 |
if( !StringUtils.isEmpty(baseOrder) ) { |
184 | 172 |
sqlbuilder.select().order_by().custom(baseOrder); |
185 | 173 |
} |
186 |
|
|
174 |
if( offset>0 || (offset==0 && limit>0) ) { |
|
175 |
// No tengo claro que (offset==0 && limit>0) sea lo mas correcto, |
|
176 |
// Pero cuando se va a paginar y se pide la primera pagina offset es |
|
177 |
// 0 y limit>0, y si no ordenamos ya esa primera pagina los resultados |
|
178 |
// que se obtienen no son correctos, ya que la primera pagina se saca |
|
179 |
// sin ordenar y el resto ordenadas. |
|
180 |
// Probablemente deberiamos tener alguna otra forma de detectar que |
|
181 |
// estamos paginanado ya que asi no distinguimo si solo queremos |
|
182 |
// obtener los primeros elementos sin importarnos su orden. |
|
183 |
for(String attrName : primaryKeys ) { |
|
184 |
// Se precisa indicar un orden para usar OFFSET. |
|
185 |
sqlbuilder.select().order_by().column(sqlbuilder.identifier(attrName)).ascending(); |
|
186 |
} |
|
187 |
} |
|
187 | 188 |
if( limit > 0 ) { |
188 | 189 |
sqlbuilder.select().limit(limit); |
189 | 190 |
} else { |
Also available in: Unified diff