Revision 43706

View differences:

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