3333 * ENHANCEMENTS, OR MODIFICATIONS.
3434 *
3535 * IDENTIFICATION
36- * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.65 2004/11/29 20:11:05 tgl Exp $
36+ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.66 2005/01/11 06:08:45 tgl Exp $
3737 *
3838 **********************************************************************/
3939
@@ -295,7 +295,7 @@ plperl_build_tuple_result(HV *perlhash, AttInMetadata *attinmeta)
295295(errcode (ERRCODE_UNDEFINED_COLUMN ),
296296errmsg ("Perl hash contains nonexistent column \"%s\"" ,
297297key )));
298- if (SvTYPE (val )!= SVt_NULL )
298+ if (SvOK ( val ) && SvTYPE (val )!= SVt_NULL )
299299values [attn - 1 ]= SvPV (val ,PL_na );
300300}
301301hv_iterinit (perlhash );
@@ -446,7 +446,7 @@ plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
446446ereport (ERROR ,
447447(errcode (ERRCODE_UNDEFINED_COLUMN ),
448448errmsg ("$_TD->{new} does not exist" )));
449- if (SvTYPE (* svp )!= SVt_RV || SvTYPE (SvRV (* svp ))!= SVt_PVHV )
449+ if (! SvOK ( * svp ) || SvTYPE (* svp )!= SVt_RV || SvTYPE (SvRV (* svp ))!= SVt_PVHV )
450450ereport (ERROR ,
451451(errcode (ERRCODE_DATATYPE_MISMATCH ),
452452errmsg ("$_TD->{new} is not a hash reference" )));
@@ -467,7 +467,7 @@ plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
467467(errcode (ERRCODE_UNDEFINED_COLUMN ),
468468errmsg ("Perl hash contains nonexistent column \"%s\"" ,
469469key )));
470- if (SvTYPE (val )!= SVt_NULL )
470+ if (SvOK ( val ) && SvTYPE (val )!= SVt_NULL )
471471{
472472Oid typinput ;
473473Oid typioparam ;
@@ -873,7 +873,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
873873TupleDesc tupdesc ;
874874AttInMetadata * attinmeta ;
875875
876- if (SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVAV )
876+ if (! SvOK ( perlret ) || SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVAV )
877877ereport (ERROR ,
878878(errcode (ERRCODE_DATATYPE_MISMATCH ),
879879errmsg ("set-returning Perl function must return reference to array" )));
@@ -911,7 +911,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
911911svp = av_fetch (ret_av ,funcctx -> call_cntr , FALSE);
912912Assert (svp != NULL );
913913
914- if (SvTYPE (* svp )!= SVt_RV || SvTYPE (SvRV (* svp ))!= SVt_PVHV )
914+ if (! SvOK ( * svp ) || SvTYPE (* svp )!= SVt_RV || SvTYPE (SvRV (* svp ))!= SVt_PVHV )
915915ereport (ERROR ,
916916(errcode (ERRCODE_DATATYPE_MISMATCH ),
917917errmsg ("elements of Perl result array must be reference to hash" )));
@@ -933,7 +933,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
933933AV * ret_av ;
934934FuncCallContext * funcctx ;
935935
936- if (SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVAV )
936+ if (! SvOK ( perlret ) || SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVAV )
937937ereport (ERROR ,
938938(errcode (ERRCODE_DATATYPE_MISMATCH ),
939939errmsg ("set-returning Perl function must return reference to array" )));
@@ -957,7 +957,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
957957svp = av_fetch (ret_av ,funcctx -> call_cntr , FALSE);
958958Assert (svp != NULL );
959959
960- if (SvTYPE (* svp )!= SVt_NULL )
960+ if (SvOK ( * svp ) && SvTYPE (* svp )!= SVt_NULL )
961961{
962962char * val = SvPV (* svp ,PL_na );
963963
@@ -988,7 +988,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
988988AttInMetadata * attinmeta ;
989989HeapTuple tup ;
990990
991- if (SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVHV )
991+ if (! SvOK ( perlret ) || SvTYPE (perlret )!= SVt_RV || SvTYPE (SvRV (perlret ))!= SVt_PVHV )
992992ereport (ERROR ,
993993(errcode (ERRCODE_DATATYPE_MISMATCH ),
994994errmsg ("composite-returning Perl function must return reference to hash" )));