Alvaro Herrera escribió:

> Hasta antes de 8.3, sólo se hacía inlining de funciones muy simples
> (creo que ni siquiera podían tener cláusulas FROM).  En 8.3 se introdujo
> tecnología un poquito mejor, pero de todas formas la cantidad de
> funciones que se pueden mezclar es muy pequeña.

Me equivoqué ... en CVS HEAD (8.4devel) sigue siendo sólo posible hacer
inlining the funciones que son del tipo "SELECT expresión" y nada más.

/*
 * inline_function: try to expand a function call inline
 *
 * If the function is a sufficiently simple SQL-language function
 * (just "SELECT expression"), then we can inline it and avoid the rather
 * high per-call overhead of SQL functions.  Furthermore, this can expose
 * opportunities for constant-folding within the function expression.
 *
 * We have to beware of some special cases however.  A directly or
 * indirectly recursive function would cause us to recurse forever,
 * so we keep track of which functions we are already expanding and
 * do not re-expand them.  Also, if a parameter is used more than once
 * in the SQL-function body, we require it not to contain any volatile
 * functions (volatiles might deliver inconsistent answers) nor to be
 * unreasonably expensive to evaluate.  The expensiveness check not only
 * prevents us from doing multiple evaluations of an expensive parameter
 * at runtime, but is a safety value to limit growth of an expression due
 * to repeated inlining.
 *
 * We must also beware of changing the volatility or strictness status of
 * functions by inlining them.
 *
 * Returns a simplified expression if successful, or NULL if cannot
 * simplify the function.
 */


-- 
Alvaro Herrera                          Developer, http://www.PostgreSQL.org/
"Puedes vivir solo una vez, pero si lo haces bien, una vez es suficiente"
--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo

Responder a