isc_rollback_retaining - Design Specification

High Level Design

High Level Algorithm

Functional Specification: isc_rollback_retaining

The surfacing of isc_rollback_retaining was very simple, in that the functionality was already present in the engine. This design specification outlines the work needed to surface the functionality via an InterBase API call.

Interfaces

ISC_STATUS ISC_EXPORT isc_rollback_retaining (ISC_STATUS ISC_FAR *, isc_tr_handle ISC_FAR *);

returns:

value of ISC_STATUS[1] :: 0 if no error
                          >0 if there is an error
*status_vector:
pointer to an array of ISC_STATUS
*isc_tr_handle:
pointer to a long value used to store the handle of the service structure on the server.

Note

This must be a valid transaction handle.

Detailed Design

New/Affected modules

JRD:

  • jrd_proto.h

    Add definition for jrd_rollback_retaining

  • ibase.h

    Add definition for isc_rollback_retaining

  • entry.h

    Add new entrypoint for rollback retaining

  • why.c

    Handle API call to isc_rollback_retaining

  • jrd.c

    Define local entrypoint for jrd_rollback_retaining

  • dfloat_stub.c

    Add isc_rollback_retaining

REMOTE:

  • protocol.h

    Add new remote op code op_rollback_retaining

  • interface.c

    Add remote interface call REM_rollback_retaining

  • protocol.c

    Add op code to xdr_protocol

  • server.c

    Handle new op code op_rollback_retaining

IPSERVER

  • ipc.h

    Add new IPC op code for op_rollback_retaining

  • ipapi_proto.h

    Add prototype for IPI_rollback_retaining

  • ipserver.c

    Handle new op code op_rollback_retaining

  • ipclient.c

    Send new op code op_rollback_retaining

BUILD / BUILD_WIN32

The following files export the entrypoints for the API

  • bind_gds.hp
  • bind_gds.generic
  • gds32.bind
  • jrd32.bind

Testing Considerations

This feature should be testing in the same way as with isc_commit_retaining with the expected result of a rollback being performed instead of a commit.