Re: Evaluar funciones en el evaluador

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: LDC - Carmen Brando <carmen(at)ldc(dot)usb(dot)ve>
Cc: Jaime Casanova <systemguards(at)gmail(dot)com>, "Prof(dot) Marlene Goncalves" <mgoncalves(at)ldc(dot)usb(dot)ve>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Evaluar funciones en el evaluador
Date: 2007-03-02 14:13:18
Message-ID: 20070302141318.GA4885@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

LDC - Carmen Brando escribió:
>
> Ciertamente no fui muy clara con la explicacion, el asunto es que
> que estamos implementando un operador relacional en postgres que se llama
> Top-k Skyline, este responde a consultas basadas en preferencias con las
> clausulas que definimos: SKYLINE OF, STOP AFTER y ORDER BY. Hicimos todos
> los pasos en el parser, rewriter, optimizador y evaluador. Ahora en el
> evaluador definimos NodeMiNodo.c y un archivo auxiliar
> tupleminodo.c (al estilo del nodo Sort de postgres), ahora en ese archivo
> queremos saber si podemos usar una funcion o conjunto de librerias de
> postgres que tome la funcion que pasamos en el order by (que esta disponible
> en el nodo del plan de nuestro nodo), la evalue en cada tupla y me de un
> valor como resultado.
> Por ejemplo, si tengo la tabla c(d1,d2) y la funcion es d1*d2, quiero
> evaluar para cada tupla esta funcion y tener el resultado de d1*d2..

Hola, no entiendo por que no pones simplemente esta d1*d2 en la lista de
resultados? O sea algo como

select d1*d2 from .... where foo skyline of bar ... order by d1*d2
?

El asunto es que el ejecutor (lo que tu llamas evaluador) se preocupa de
no evaluar (ExecEvalExpr, supongo) una funcion dos veces, de manera que
si encuentra en la lista de resultados un nodo que es identico a un nodo
que esta en otra parte (por ejemplo tu clausula order by), entonces
entiendo que va a usar el mismo resultado para ambas, sin evaluar dos
veces la funcion. Dependiendo de algunas condiciones claro; por ej. si
la funcion esta marcada volatile, hay algunas consideraciones que hacer,
puesto que la funcion puede tener efectos secundarios y "no deberia"
cambiarse la cantidad de veces que es invocada.

Pero como Uds. modificaron el ORDER BY, es posible que este
comportamiento no este funcionando como es debido ...

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-03-02 14:14:27 Re: Ayuda con rendimiento..
Previous Message Leonel Nunez 2007-03-02 14:08:57 Re: RECORRER CAMPO TEXT