OK_Packet
Contents
OK_Packet
OK_Packet is sent by the server to the client and indicates a successful completion of a command sent by the client before.
Direction
Server to client.
Fields
- int<1> 0x00 : OK_Packet header or (0xFE if CLIENT_DEPRECATE_EOF is set)
- int<lenenc> affected rows
- int<lenenc> last insert id
- int<2> server status
- int<2> warning count
- if packet has more data
- string<lenenc> info
- if (status flags & SERVER_SESSION_STATE_CHANGED) and session_tracking_supported (see CLIENT_SESSION_TRACK)
The length-encoded string that contains the human-readable information is not always included in the packet. Check the length of the packet to detect if there is data after the warning count.
Server status flag
Values of server status flag
SERVER_STATUS_IN_TRANS | 1 | A transaction is currently active |
SERVER_STATUS_AUTOCOMMIT | 2 | Autocommit mode is set |
SERVER_MORE_RESULTS_EXISTS | 8 | more results exists (more packet follow) |
SERVER_QUERY_NO_GOOD_INDEX_USED | 16 | |
SERVER_QUERY_NO_INDEX_USED | 32 | |
SERVER_STATUS_CURSOR_EXISTS | 64 | when using COM_STMT_FETCH, indicate that current cursor still has result |
SERVER_STATUS_LAST_ROW_SENT | 128 | when using COM_STMT_FETCH, indicate that current cursor has finished to send results |
SERVER_STATUS_DB_DROPPED | 1<<8 | database has been dropped |
SERVER_STATUS_NO_BACKSLASH_ESCAPES | 1<<9 | current escape mode is "no backslash escape" |
SERVER_STATUS_METADATA_CHANGED | 1<<10 | A DDL change did have an impact on an existing PREPARE (an automatic reprepare has been executed) |
SERVER_QUERY_WAS_SLOW | 1<<11 | |
SERVER_PS_OUT_PARAMS | 1<<12 | this resultset contain stored procedure output parameter |
SERVER_STATUS_IN_TRANS_READONLY | 1<<13 | current transaction is a read-only transaction |
SERVER_SESSION_STATE_CHANGED | 1<<14 | session state change. see Session change type for more information |
Session state info
- while packet has remaining data
- int<1> session change type
- if (session-change-type != SESSION_TRACK_STATE_CHANGE)
- int<lenenc> total length
- string<lenenc> session data's change
Session change type
0 | SESSION_TRACK_SYSTEM_VARIABLES |
1 | SESSION_TRACK_SCHEMA |
2 | SESSION_TRACK_STATE_CHANGE |
3 | SESSION_TRACK_GTIDS |
4 | SESSION_TRACK_TRANSACTION_CHARACTERISTICS |
5 | SESSION_TRACK_TRANSACTION_STATE |
session data's change
Each type of data has his own kind of format :
SESSION_TRACK_SCHEMA
- string<lenenc> new current schema
SESSION_TRACK_SYSTEM_VARIABLES
while there is remaining data :
- string<lenenc> variable data
for each variable data :
- string<lenenc> variable name
- string<lenenc> variable value
Possible tracked variables list is tracked by session_track_system_variables
special variable value description:
- redirect_url: format is `mariadb/mysql:[<user>[:<password>]@]<host>[:<port>]/[<db>[?<opt1>=<value1>[&<opt2>=<value2>]]]`. Possible options:
- `ttl` : cache timeout in ms to remember redirection, in order to reconnect directly to new host. 0=no caching
SESSION_TRACK_STATE_CHANGE
indicates if session state changes occured. The value is represented as "1".
- string<lenenc> "1" if session state tracking was enabled
SESSION_TRACK_GTIDS
This tracker is not implemented by MariaDB.
SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- string<lenenc> Transaction characteristics
The transaction characteristics is the set of SQL statements that reproduces the type and state of the current transaction. It can consist of the following SQL statements:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY; START TRANSACTION WITH CONSISTENT SNAPSHOT, READ WRITE; SET TRANSACTION READ ONLY; SET TRANSACTION READ WRITE; XA START <XA specification>;
SESSION_TRACK_TRANSACTION_STATE
- string<lenenc> Transaction state string
The transaction state string is always 8 characters long. The characters, in order, are:
- No transaction:
_
Explicit transaction:T
Implicit transaction:I
- Transaction read safe:
_
Transaction read unsafe:r
- Unknown transaction type:
_
Read-only transaction:R
- Transaction write safe:
_
Transaction write unsafe:w
- Unknown transaction type:
_
Read-write transaction:W
- Transaction statement safe:
_
Transaction statement unsafe:s
- Transaction does not have resultsets:
_
Transaction with resultsets:S
- No locked tables:
_
Tables have been locked:L
Notes
- Session tracking is supported from MariaDB 10.2. To determine if session tracking is enabled, check if the CLIENT_SESSION_TRACK flag is set in server_capabilities.