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
