@ -8,7 +8,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / optimizer / util / clauses . c , v 1.201 .2 .4 2007 / 05 / 01 18 : 54 : 09 tgl Exp $
* $ PostgreSQL : pgsql / src / backend / optimizer / util / clauses . c , v 1.201 .2 .5 2007 / 10 / 11 21 : 28 : 12 tgl Exp $
*
*
* HISTORY
* HISTORY
* AUTHOR DATE MAJOR EVENT
* AUTHOR DATE MAJOR EVENT
@ -2662,9 +2662,20 @@ evaluate_expr(Expr *expr, Oid result_type)
/* Get back to outer memory context */
/* Get back to outer memory context */
MemoryContextSwitchTo ( oldcontext ) ;
MemoryContextSwitchTo ( oldcontext ) ;
/* Must copy result out of sub-context used by expression eval */
/*
* Must copy result out of sub - context used by expression eval .
*
* Also , if it ' s varlena , forcibly detoast it . This protects us against
* storing TOAST pointers into plans that might outlive the referenced
* data .
*/
if ( ! const_is_null )
if ( ! const_is_null )
{
if ( resultTypLen = = - 1 )
const_val = PointerGetDatum ( PG_DETOAST_DATUM_COPY ( const_val ) ) ;
else
const_val = datumCopy ( const_val , resultTypByVal , resultTypLen ) ;
const_val = datumCopy ( const_val , resultTypByVal , resultTypLen ) ;
}
/* Release all the junk we just created */
/* Release all the junk we just created */
FreeExecutorState ( estate ) ;
FreeExecutorState ( estate ) ;