diff --git a/src/burp/backup.epp b/src/burp/backup.epp index 732a8f48a17..095292d76b4 100644 --- a/src/burp/backup.epp +++ b/src/burp/backup.epp @@ -2887,7 +2887,10 @@ void write_functions() BURP_verbose (147, temp); // msg 147 writing function %.*s put_source_blob (att_function_description2, att_function_description, X.RDB$DESCRIPTION); - put_int32 (att_function_return_arg, X.RDB$RETURN_ARGUMENT); + + if (!X.RDB$RETURN_ARGUMENT.NULL) + put_int32 (att_function_return_arg, X.RDB$RETURN_ARGUMENT); + put_int32 (att_function_type, X.RDB$FUNCTION_TYPE); PUT_TEXT (att_function_query_name, X.RDB$QUERY_NAME); @@ -2941,7 +2944,10 @@ void write_functions() put_source_blob (att_function_description2, att_function_description, X.RDB$DESCRIPTION); PUT_TEXT (att_function_module_name, X.RDB$MODULE_NAME); PUT_TEXT (att_function_entrypoint, X.RDB$ENTRYPOINT); - put_int32 (att_function_return_arg, X.RDB$RETURN_ARGUMENT); + + if (!X.RDB$RETURN_ARGUMENT.NULL) + put_int32 (att_function_return_arg, X.RDB$RETURN_ARGUMENT); + put_int32 (att_function_type, X.RDB$FUNCTION_TYPE); PUT_TEXT (att_function_query_name, X.RDB$QUERY_NAME); put(tdgbl, att_end); @@ -3003,7 +3009,9 @@ void write_function_args(const GDS_NAME package, GDS_NAME funcptr) BURP_verbose (141, temp); // msg 141 writing argument for function %s - put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + if (!X.RDB$ARGUMENT_POSITION.NULL) + put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + put_int32 (att_functionarg_passing_mechanism, X.RDB$MECHANISM); put_int32 (att_functionarg_field_type, X.RDB$FIELD_TYPE); put_int32 (att_functionarg_field_scale, X.RDB$FIELD_SCALE); @@ -3054,7 +3062,10 @@ void write_function_args(const GDS_NAME package, GDS_NAME funcptr) MISC_terminate (X.RDB$FUNCTION_NAME, temp, l, sizeof(temp)); BURP_verbose (141, temp); // msg 141 writing argument for function %s - put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + + if (!X.RDB$ARGUMENT_POSITION.NULL) + put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + put_int32 (att_functionarg_passing_mechanism, X.RDB$MECHANISM); put_int32 (att_functionarg_field_type, X.RDB$FIELD_TYPE); put_int32 (att_functionarg_field_scale, X.RDB$FIELD_SCALE); @@ -3082,7 +3093,10 @@ void write_function_args(const GDS_NAME package, GDS_NAME funcptr) MISC_terminate (X.RDB$FUNCTION_NAME, temp, l, sizeof(temp)); BURP_verbose (141, temp); // msg 141 writing argument for function %s - put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + + if (!X.RDB$ARGUMENT_POSITION.NULL) + put_int32 (att_functionarg_position, X.RDB$ARGUMENT_POSITION); + put_int32 (att_functionarg_passing_mechanism, X.RDB$MECHANISM); put_int32 (att_functionarg_field_type, X.RDB$FIELD_TYPE); put_int32 (att_functionarg_field_scale, X.RDB$FIELD_SCALE); diff --git a/src/burp/restore.epp b/src/burp/restore.epp index b427536b0eb..72d0997397c 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -4985,6 +4985,7 @@ bool get_function(BurpGlobals* tdgbl) X.RDB$OWNER_NAME.NULL = TRUE; X.RDB$MODULE_NAME.NULL = TRUE; X.RDB$ENTRYPOINT.NULL = TRUE; + X.RDB$RETURN_ARGUMENT.NULL = TRUE; X.RDB$SYSTEM_FLAG.NULL = FALSE; X.RDB$SYSTEM_FLAG = 0; @@ -5041,6 +5042,7 @@ bool get_function(BurpGlobals* tdgbl) break; case att_function_return_arg: + X.RDB$RETURN_ARGUMENT.NULL = FALSE; X.RDB$RETURN_ARGUMENT = (USHORT) get_int32(tdgbl); break; @@ -5200,6 +5202,7 @@ bool get_function(BurpGlobals* tdgbl) STORE (TRANSACTION_HANDLE local_trans REQUEST_HANDLE tdgbl->handles_get_function_req_handle1) X IN RDB$FUNCTIONS + X.RDB$RETURN_ARGUMENT.NULL = TRUE; X.RDB$SYSTEM_FLAG = 0; X.RDB$SYSTEM_FLAG.NULL = FALSE; X.RDB$DESCRIPTION.NULL = TRUE; @@ -5235,6 +5238,7 @@ bool get_function(BurpGlobals* tdgbl) break; case att_function_return_arg: + X.RDB$RETURN_ARGUMENT.NULL = FALSE; X.RDB$RETURN_ARGUMENT = (USHORT) get_int32(tdgbl); break; @@ -5452,6 +5456,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) STORE (TRANSACTION_HANDLE local_trans REQUEST_HANDLE tdgbl->handles_get_function_arg_req_handle1) X IN RDB$FUNCTION_ARGUMENTS + X.RDB$ARGUMENT_POSITION.NULL = TRUE; X.RDB$FIELD_SUB_TYPE.NULL = TRUE; X.RDB$CHARACTER_SET_ID.NULL = TRUE; X.RDB$FIELD_PRECISION.NULL = TRUE; @@ -5495,6 +5500,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) break; case att_functionarg_position: + X.RDB$ARGUMENT_POSITION.NULL = FALSE; X.RDB$ARGUMENT_POSITION = (USHORT) get_int32(tdgbl); break; @@ -5662,6 +5668,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) STORE (TRANSACTION_HANDLE local_trans REQUEST_HANDLE tdgbl->handles_get_function_arg_req_handle1) X IN RDB$FUNCTION_ARGUMENTS + X.RDB$ARGUMENT_POSITION.NULL = TRUE; X.RDB$FIELD_SUB_TYPE.NULL = TRUE; X.RDB$CHARACTER_SET_ID.NULL = TRUE; X.RDB$FIELD_PRECISION.NULL = TRUE; @@ -5679,6 +5686,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) break; case att_functionarg_position: + X.RDB$ARGUMENT_POSITION.NULL = FALSE; X.RDB$ARGUMENT_POSITION = (USHORT) get_int32(tdgbl); break; @@ -5776,6 +5784,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) STORE (TRANSACTION_HANDLE local_trans REQUEST_HANDLE tdgbl->handles_get_function_arg_req_handle1) X IN RDB$FUNCTION_ARGUMENTS + X.RDB$ARGUMENT_POSITION.NULL = TRUE; X.RDB$FIELD_SUB_TYPE.NULL = TRUE; X.RDB$CHARACTER_SET_ID.NULL = TRUE; @@ -5792,6 +5801,7 @@ void get_function_arg(BurpGlobals* tdgbl, bool skip_arguments) break; case att_functionarg_position: + X.RDB$ARGUMENT_POSITION.NULL = FALSE; X.RDB$ARGUMENT_POSITION = (USHORT) get_int32(tdgbl); break;