Revision 44687
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2SpatialSQLBuilder.java | ||
---|---|---|
368 | 368 |
public class H2SpatialSelectBuilderBase extends SelectBuilderBase { |
369 | 369 |
|
370 | 370 |
@Override |
371 |
protected boolean isValid(StringBuilder message) { |
|
372 |
if( message == null ) { |
|
373 |
message = new StringBuilder(); |
|
374 |
} |
|
375 |
if( this.has_offset() && !this.has_order_by() ) { |
|
376 |
// Algunos gestores de BBDD requieren que se especifique un |
|
377 |
// orden para poder usar OFFSET. Como eso parece buena idea para |
|
378 |
// asegurar que siempre tengamos los mismo resultados, lo exijimos |
|
379 |
// siempre. |
|
380 |
message.append("Can't use OFFSET without an ORDER BY."); |
|
381 |
return false; |
|
382 |
} |
|
383 |
return true; |
|
384 |
} |
|
385 |
|
|
386 |
@Override |
|
387 | 371 |
public String toString(Formatter formatter) { |
388 | 372 |
StringBuilder builder = new StringBuilder(); |
389 | 373 |
if( !isValid(builder) ) { |
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 | ||
---|---|---|
179 | 179 |
// Probablemente deberiamos tener alguna otra forma de detectar que |
180 | 180 |
// estamos paginanado ya que asi no distinguimo si solo queremos |
181 | 181 |
// obtener los primeros elementos sin importarnos su orden. |
182 |
for(String attrName : primaryKeys ) { |
|
183 |
// Se precisa indicar un orden para usar OFFSET. |
|
184 |
select.order_by().column(sqlbuilder.as_identifier(attrName)).ascending(); |
|
182 |
if( primaryKeys.isEmpty() ) { |
|
183 |
// Muy probablemente si no tiene pk sea una vista, asi que |
|
184 |
// pasaremos de ordenar y esperemos que la vista este ya ordenada. |
|
185 |
select.disable_check_order_and_offset(); |
|
186 |
} else { |
|
187 |
for(String attrName : primaryKeys ) { |
|
188 |
// Se precisa indicar un orden para usar OFFSET. |
|
189 |
select.order_by().column(sqlbuilder.as_identifier(attrName)).ascending(); |
|
190 |
} |
|
185 | 191 |
} |
192 |
|
|
186 | 193 |
} |
187 | 194 |
if( limit > 0 ) { |
188 | 195 |
select.limit(limit); |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/SQLBuilder.java | ||
---|---|---|
238 | 238 |
public boolean has_limit(); |
239 | 239 |
|
240 | 240 |
public boolean has_offset(); |
241 |
|
|
242 |
public void disable_check_order_and_offset(); |
|
241 | 243 |
|
242 | 244 |
/** |
243 | 245 |
* Constructs the SQL statement. If the values associated with the SQL |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java | ||
---|---|---|
899 | 899 |
protected List<OrderByBuilder> order_by; |
900 | 900 |
protected boolean distinct; |
901 | 901 |
protected List<Variable> groupColumn; |
902 |
protected boolean check_order_and_offset = true; |
|
902 | 903 |
|
903 | 904 |
public SelectBuilderBase() { |
904 | 905 |
this.columns = new ArrayList<>(); |
... | ... | |
1093 | 1094 |
return !this.groupColumn.isEmpty(); |
1094 | 1095 |
} |
1095 | 1096 |
|
1097 |
@Override |
|
1098 |
public void disable_check_order_and_offset() { |
|
1099 |
this.check_order_and_offset = false; |
|
1100 |
} |
|
1101 |
|
|
1096 | 1102 |
protected boolean isValid(StringBuilder message) { |
1097 | 1103 |
if (message == null) { |
1098 | 1104 |
message = new StringBuilder(); |
1099 | 1105 |
} |
1100 |
if (this.has_offset() && !this.has_order_by()) { |
|
1101 |
// Algunos gestores de BBDD requieren que se especifique un |
|
1102 |
// orden para poder usar OFFSET. Como eso parece buena idea para |
|
1103 |
// asegurar que siempre tengamos los mismo resultados, lo exijimos |
|
1104 |
// siempre. |
|
1105 |
message.append("Can't use OFFSET without an ORDER BY."); |
|
1106 |
return false; |
|
1106 |
if( this.check_order_and_offset ) { |
|
1107 |
if (this.has_offset() && !this.has_order_by()) { |
|
1108 |
// Algunos gestores de BBDD requieren que se especifique un |
|
1109 |
// orden para poder usar OFFSET. Como eso parece buena idea para |
|
1110 |
// asegurar que siempre tengamos los mismo resultados, lo exijimos |
|
1111 |
// siempre. |
|
1112 |
message.append("Can't use OFFSET without an ORDER BY."); |
|
1113 |
return false; |
|
1114 |
} |
|
1107 | 1115 |
} |
1108 | 1116 |
return true; |
1109 | 1117 |
} |
Also available in: Unified diff