gvSIG bugs #5512

A la base de datos se envían los update antes que los insert

Added by Francisco Puga over 3 years ago. Updated 6 months ago.

Status:Outdated% Done:

0%

Priority:NormalSpent time:-
Assignee:-
Category:Database
Target version:-
Severity:Minor Add-on version:
gvSIG version:2.5.1 Add-on build:
gvSIG build:3046 Add-on resolve version:
Operative System: Add-on resolve build:
Keywords: Proyecto:
Has patch: Hito:
Add-on name:Unknown

Description

Cuando se van a enviar los cambios a la base de datos después de operaciones de "insert", "update", "delete" sobre el FeatureStore he visto

https://redmine.gvsig.net/redmine/projects/gvsig-desktop/repository/annotate/tags/org.gvsig.desktop-2.0.304/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/PerformChangesOperation.java#L106

que los cambios no se hacen en el orden en que lo hace el usuario (programador) si no que se agrupan por tipo de cambio. Y los update se hacen antes que los insert.

Esto creo que es bug, porque si se ha echo un "insert" de la feature y luego un "update" a la base de datos se enviará un "UPDATE" cuando en realidad esa fila todavía no ha sido insertada y por tanto se producirá un error.

No lo he probado, pero no se si habrá problemas también si por ejemplo el programador hace un insert y luego un delete. Si he probado que a nivel usuario cuando se trabaja con la tabla funciona correctamente.

No estoy nada seguro, pero igual tendría sentido enviar los cambios a la base de datos en el orden en que se hacen en el FeatureStore y no agrupados por tipo de cambios. Salve quizás cambios de FeatureType.

History

#1 Updated by Francisco Puga over 3 years ago

Este ticket está relacionado con un e-mail que envie a la lista de correo "Evitar insert + update sobre la bd"

Si en cierto momento creo e inserto una feature en el feature store con

featureStore.insert(feat)

y más adelante recupero esa feture tipo

feat.getEditable()
feat.set(...)
featureStore.update(feat)

a la bd se manda un INSERT y luego un UPDATE. Esto es problemático en algunos casos. Cuál sería la forma correcta de gestionar esto? En lugar del featureStore.update puedo modificar directamente la Feature haciendo primero un feature.isInserted?

También relacionado con este ticket: #4370

He comprobado que aplicando el cambio propuesto en #4370


Index: src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java ===================================================================
--- src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java (revision 43073)
+++ src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/FastOrderedIterator.java (working copy)
@ -88,7 +88,6 @
} protected DefaultFeature createFeature(FeatureProvider fData) {
- fData.setNew(false);
this.myFeature.setData(fData);
return this.myFeature;
}

ya no se produce el error y un `update` tras un `insert/createNewFeature` ya no lanza un INSERT y un UPDATE contra la base de datos si no un único INSERT.

#2 Updated by Álvaro Anguix over 3 years ago

  • Category set to Database

#3 Updated by Álvaro Anguix 6 months ago

  • Status changed from New to Outdated

Also available in: Atom PDF