33
33
* ENHANCEMENTS, OR MODIFICATIONS.
34
34
*
35
35
* 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 $
37
37
*
38
38
**********************************************************************/
39
39
@@ -295,7 +295,7 @@ plperl_build_tuple_result(HV *perlhash, AttInMetadata *attinmeta)
295
295
(errcode (ERRCODE_UNDEFINED_COLUMN ),
296
296
errmsg ("Perl hash contains nonexistent column \"%s\"" ,
297
297
key )));
298
- if (SvTYPE (val ) != SVt_NULL )
298
+ if (SvOK ( val ) && SvTYPE (val ) != SVt_NULL )
299
299
values [attn - 1 ] = SvPV (val , PL_na );
300
300
}
301
301
hv_iterinit (perlhash );
@@ -446,7 +446,7 @@ plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
446
446
ereport (ERROR ,
447
447
(errcode (ERRCODE_UNDEFINED_COLUMN ),
448
448
errmsg ("$_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 )
450
450
ereport (ERROR ,
451
451
(errcode (ERRCODE_DATATYPE_MISMATCH ),
452
452
errmsg ("$_TD->{new} is not a hash reference" )));
@@ -467,7 +467,7 @@ plperl_modify_tuple(HV *hvTD, TriggerData *tdata, HeapTuple otup)
467
467
(errcode (ERRCODE_UNDEFINED_COLUMN ),
468
468
errmsg ("Perl hash contains nonexistent column \"%s\"" ,
469
469
key )));
470
- if (SvTYPE (val ) != SVt_NULL )
470
+ if (SvOK ( val ) && SvTYPE (val ) != SVt_NULL )
471
471
{
472
472
Oid typinput ;
473
473
Oid typioparam ;
@@ -873,7 +873,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
873
873
TupleDesc tupdesc ;
874
874
AttInMetadata * attinmeta ;
875
875
876
- if (SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVAV )
876
+ if (! SvOK ( perlret ) || SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVAV )
877
877
ereport (ERROR ,
878
878
(errcode (ERRCODE_DATATYPE_MISMATCH ),
879
879
errmsg ("set-returning Perl function must return reference to array" )));
@@ -911,7 +911,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
911
911
svp = av_fetch (ret_av , funcctx -> call_cntr , FALSE);
912
912
Assert (svp != NULL );
913
913
914
- if (SvTYPE (* svp ) != SVt_RV || SvTYPE (SvRV (* svp )) != SVt_PVHV )
914
+ if (! SvOK ( * svp ) || SvTYPE (* svp ) != SVt_RV || SvTYPE (SvRV (* svp )) != SVt_PVHV )
915
915
ereport (ERROR ,
916
916
(errcode (ERRCODE_DATATYPE_MISMATCH ),
917
917
errmsg ("elements of Perl result array must be reference to hash" )));
@@ -933,7 +933,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
933
933
AV * ret_av ;
934
934
FuncCallContext * funcctx ;
935
935
936
- if (SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVAV )
936
+ if (! SvOK ( perlret ) || SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVAV )
937
937
ereport (ERROR ,
938
938
(errcode (ERRCODE_DATATYPE_MISMATCH ),
939
939
errmsg ("set-returning Perl function must return reference to array" )));
@@ -957,7 +957,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
957
957
svp = av_fetch (ret_av , funcctx -> call_cntr , FALSE);
958
958
Assert (svp != NULL );
959
959
960
- if (SvTYPE (* svp ) != SVt_NULL )
960
+ if (SvOK ( * svp ) && SvTYPE (* svp ) != SVt_NULL )
961
961
{
962
962
char * val = SvPV (* svp , PL_na );
963
963
@@ -988,7 +988,7 @@ plperl_func_handler(PG_FUNCTION_ARGS)
988
988
AttInMetadata * attinmeta ;
989
989
HeapTuple tup ;
990
990
991
- if (SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVHV )
991
+ if (! SvOK ( perlret ) || SvTYPE (perlret ) != SVt_RV || SvTYPE (SvRV (perlret )) != SVt_PVHV )
992
992
ereport (ERROR ,
993
993
(errcode (ERRCODE_DATATYPE_MISMATCH ),
994
994
errmsg ("composite-returning Perl function must return reference to hash" )));
0 commit comments