gvSIG feature requests #5094
[PG] Implementar la funcion FOREING_VALUE para que sea optima usando BBDD (H2/Pg)
Status: | Closed | % Done: | 0% | |
---|---|---|---|---|
Priority: | Normal | Spent time: | - | |
Assignee: | ||||
Category: | - | |||
Target version: | 2.5.0-2920 | |||
gvSIG version: | 2.5.0 | Add-on resolve version: | ||
Keywords: | Add-on resolve build: | |||
Has patch: | Proyecto: | |||
Add-on name: | Unknown | Hito: | ||
Add-on version: |
Associated revisions
refs #5094, modificaciones para que la funcion FOREING_VALUE se traslade a LEFT JOINs en tablas de BBDD.
History
#1
Updated by Joaquín del Cerro Murciano about 5 years ago
- Status changed from New to Fixed
He modificado la implementacion para hacer que las llamadas a la funcion FOREING_VALUE cuando se realicen contra tablas de una BBDD se traduzcan en añadir al SELECT el LEFT JOIN que toque.
Por ejemplo, cuando tenga sentencias como esta:
SELECT "ID", "NAME", "DESCRIPTION", "TYPE" FROM "dbo"."test1" WHERE (( (FOREING_VALUE('TYPE.DESCRIPTION')) LIKE ('A%') ) AND ( (FOREING_VALUE('PHONE_TYPE.DESCRIPTION')) = ('mobile') ))
Que la transforme en:
SELECT "ID", "NAME", "dbo"."test1"."DESCRIPTION", "TYPE", "dbo"."TYPES"."DESCRIPTION", "dbo"."PHONE_TYPES"."DESCRIPTION" FROM "dbo"."test1" LEFT JOIN "dbo"."TYPES" ON ( ("dbo"."test1"."TYPE") = ("dbo"."TYPES"."ID") ) LEFT JOIN "dbo"."PHONE_TYPES" ON ( ("dbo"."test1"."PHONE_TYPE") = ("dbo"."PHONE_TYPES"."ID") ) WHERE (( ("dbo"."TYPES"."DESCRIPTION") LIKE ('A%') ) AND ( ("dbo"."PHONE_TYPES"."DESCRIPTION") = ('mobile') ))
Ademas los valores de los parametros de la funcion FOREING_VALUE se almacenan en la Feature para ser usados en caso de que sea necesario.
Solo funciona cuando hay una union entre dos tablas, para mas de dos tablas no funcionaria. En ese caso se ejecutaria la funcion FOREING_VALUE sin ninguna optimizacion. Esto es casos como:
FOREING_VALUE('TYPE.SUBTYPE.DESCRIPTION')
En los que se enlazan tres tablas, no se tratarian de forma especial y no se generarian los LEFT JOINs.
#2
Updated by Álvaro Anguix almost 5 years ago
- Status changed from Fixed to Closed