@@ -743,52 +743,25 @@ static JSValue pljs_find_function(JSContext *ctx, JSValueConst this_val,
743
743
const char * signature = JS_ToCString (ctx , argv [0 ]);
744
744
JSValue func = JS_UNDEFINED ;
745
745
746
- // Stack-allocate FunctionCallInfoBaseData with
747
- // space for 2 arguments:
748
- LOCAL_FCINFO (fake_fcinfo , 2 );
749
-
750
- FmgrInfo flinfo ;
751
-
752
- char perm [16 ];
753
- strcpy (perm , "EXECUTE" );
754
- text * arg = (text * )palloc (8 + VARHDRSZ );
755
- memcpy (VARDATA (arg ), perm , 8 );
756
- SET_VARSIZE (arg , 8 + VARHDRSZ );
757
- Oid funcoid ;
758
-
759
746
PG_TRY ();
760
747
{
761
- if (strchr (signature , '(' ) == NULL ) {
762
- funcoid = DatumGetObjectId (
763
- DirectFunctionCall1 (regprocin , CStringGetDatum (signature )));
764
- } else {
765
- funcoid = DatumGetObjectId (
766
- DirectFunctionCall1 (regprocedurein , CStringGetDatum (signature )));
767
- }
768
-
769
- MemSet (& flinfo , 0 , sizeof (flinfo ));
770
- fake_fcinfo -> flinfo = & flinfo ;
771
- flinfo .fn_oid = InvalidOid ;
772
- flinfo .fn_mcxt = CurrentMemoryContext ;
773
- fake_fcinfo -> nargs = 2 ;
774
- fake_fcinfo -> args [0 ].value = ObjectIdGetDatum (funcoid );
775
- fake_fcinfo -> args [1 ].value = PointerGetDatum (arg );
748
+ Oid funcoid ;
776
749
777
- Datum ret = has_function_privilege_id (fake_fcinfo );
778
-
779
- if (ret == 0 ) {
780
- elog (WARNING , "failed to find or no permission for js function %s" ,
781
- signature );
750
+ if (!has_permission_to_execute (signature )) {
782
751
return func ;
783
752
} else {
784
- if (DatumGetBool (ret )) {
785
- func = pljs_find_js_function (funcoid );
786
-
787
- if (JS_IsUndefined (func )) {
788
- elog (ERROR , "javascript function is not found for \"%s\"" , signature );
789
- }
753
+ if (strchr (signature , '(' ) == NULL ) {
754
+ funcoid = DatumGetObjectId (
755
+ DirectFunctionCall1 (regprocin , CStringGetDatum (signature )));
790
756
} else {
791
- elog (WARNING , "no permission to execute js function %s" , signature );
757
+ funcoid = DatumGetObjectId (
758
+ DirectFunctionCall1 (regprocedurein , CStringGetDatum (signature )));
759
+ }
760
+
761
+ func = pljs_find_js_function (funcoid , ctx );
762
+
763
+ if (JS_IsUndefined (func )) {
764
+ elog (ERROR , "javascript function is not found for \"%s\"" , signature );
792
765
}
793
766
}
794
767
}
@@ -808,11 +781,6 @@ static JSValue pljs_find_function(JSContext *ctx, JSValueConst this_val,
808
781
809
782
static JSValue pljs_return_next (JSContext * ctx , JSValueConst this_val , int argc ,
810
783
JSValueConst * argv ) {
811
- const char * sql ;
812
- JSValue params = {0 };
813
- int nparams ;
814
- Oid * types = NULL ;
815
- SPIPlanPtr initial = NULL , saved = NULL ;
816
784
pljs_return_state * retstate = NULL ;
817
785
818
786
JSValue global_obj = JS_GetGlobalObject (ctx );
0 commit comments