Batches
Statement batches were introduced in protocol 16 (Firebird 4.0).
Statement batches were introduced in protocol 16 (Firebird 4.0).
Int32
— p_operation
Operation code (op_batch_create
— 99
)
Int32
— p_batch_statement
Statement handle
Buffer
— p_batch_blr
BLR format of batch messages
UInt32
— p_batch_msglen
Message length
Buffer
— p_batch_pb
Batch parameters buffer
If ptype_lazy
or higher, flushing and response processing can be deferred.
Int32
— p_operation
Operation code (op_batch_msg
— 100
)
Int32
— p_batch_statement
Statement handle
UInt32
— p_batch_messages
Number of messages
Buffer
— p_batch_data
Batched values (formatted message repeats 'Number of messages' times)
Int32
— p_operation
Operation code (op_batch_exec
— 101
)
Int32
— p_batch_statement
Statement handle
Int32
— p_batch_transaction
Transaction handle
Success response:
Int32
— p_operation
Operation code
If operation equals op_batch_cs
— 103`:
Batch completion state
Int32
— p_batch_statement
Statement handle
UInt32
— p_batch_reccount
Total records count
UInt32
— p_batch_updates
Number of update counters (records updated per each message)
UInt32
— p_batch_vectors
Number of per-message error blocks (message number in batch and status vector of an error processing it)
UInt32
— p_batch_errors
Number of simplified per-message error blocks (message number in batch without status vector)
Byte[]
Update counters (records updated per each message), array of Int32
, length is equal to p_batch_updates
Length is p_batch_updates * 4
bytes long.
Byte[]
Detailed info about errors in batch (for each error server sends number of message (Int32
) and status vector in standard way (exactly like in op_response).Number of such pairs is equal to p_batch_vectors
.
Length can only be determined by correctly parsing the <Int32><statusvector>
pairs.
Byte[]
Simplified error blocks (for each error server sends number of message (Int32
) w/o status vector).Used when too many errors took place.Number of elements is equal to p_batch_errors
.
Length is p_batch_errors * 4
bytes.
Failure response: [wireprotocol-responses-generic]
Int32
— p_operation
Operation code (op_batch_rls
— 102
)
Int32
— p_batch_statement
Statement handle
Int32
— p_operation
Operation code (op_batch_cancel
— 109
)
Int32
— p_batch_statement
Statement handle
Introduced in protocol 17 (Firebird 4.0.1).
Used to force the server to acknowledge previously sent lazy intermediate operations (e.g. op_batch_msg
, op_batch_regblob
, op_batch_blob_stream
and possibly others).
Int32
— p_operation
Operation code (op_batch_sync
— 110
)
Int32
— p_operation
Operation code (op_batch_set_bpb
— 106
)
Int32
— p_batch_statement
Statement handle
Buffer
— p_batch_blob_bpb
Default BLOB parameter buffer
Int32
— p_operation
Operation code (op_batch_regblob
— 104
)
Int32
— p_batch_statement
Statement handle
Int64
— p_batch_exist_id
Existing BLOB ID
Int64
— p_batch_blob_id
Batch temporary BLOB ID
Caution
|
This description needs further verification and possibly correction.For example, it seems to mix up Buffer and Byte[].We’re also not able to match some fields to the implementation.For example, the repeated "Record length" seems to be absent, or may actually refer to the |
Int32
— p_operation
Operation code (op_batch_blob_stream
)
Int32
— p_batch_statement
Statement handle
Buffer[]
— p_batch_blob_data
BLOB stream
This stream is a sequence of blob records.Each blob records contains:
UInt32
Record length
The following three fields are called BLOB header
Int64
Batch temporary BLOB ID
UInt32
BLOB size
UInt32
BLOB parameters buffer size
Buffer
BLOB parameters buffer
Buffer
BLOB data (length - BLOB size bytes) (what does this mean?)
BLOB headers and records in a stream need not match, i.e. one record may contain many BLOBs and BLOB may stretch from one record to next.
Uses the [wireprotocol-requests-info] message with:
p_operation
|
|
p_info_object
|
Statement handle |
p_info_items
|
Values of |
Attach to a service.Use message [wireprotocol-connect-attach] with op_service_attach
— 82
.
p_atch_file
:Current Firebird versions only support one service: service_mgr
.Since Firebird 3.0, this can also be an empty string (empty buffer) with the same meaning.
Send [wireprotocol-connect-detach] with op_service_detach
— 83
, followed by [wireprotocol-connect-disconnect].
Although the message looks similar to [wireprotocol-requests-info], it has different semantics.
Int32
— p_operation
Operation code (op_service_start
— 85
)
Int32
— p_info_object
Unused, always use 0
Int32
— p_info_incarnation
Incarnation of object (0
)
TODO: Usage and meaning?
Buffer
— p_info_items
Service parameter buffer
Although the message looks similar to [wireprotocol-requests-info], it has different semantics.
Int32
— p_operation
Operation code (op_service_info
— 84
)
Int32
— p_info_object
Unused, always use 0
Int32
— p_info_incarnation
Incarnation of object (0
)
TODO: Usage and meaning?
Buffer
— p_info_items
Service parameter buffer
Buffer
— p_info_recv_items
Requested information items
Int32
— p_info_buffer_length
Requested information items buffer length
[wireprotocol-responses-generic] — on success, p_resp_data
contains the requested information.