You've already forked mariadb-connector-c
mirror of
https://github.com/mariadb-corporation/mariadb-connector-c.git
synced 2025-08-07 02:42:49 +03:00
CONC-496: Added support for SESSION_TRACK_TRANSACTION_STATE in ok packet
This commit is contained in:
@@ -310,12 +310,12 @@ enum enum_session_state_type
|
||||
/* currently not supported by MariaDB Server */
|
||||
SESSION_TRACK_GTIDS,
|
||||
SESSION_TRACK_TRANSACTION_CHARACTERISTICS,
|
||||
SESSION_TRACK_TRANSACTION_TYPE /* make sure that SESSION_TRACK_END always points
|
||||
SESSION_TRACK_TRANSACTION_STATE /* make sure that SESSION_TRACK_END always points
|
||||
to last element of enum !! */
|
||||
};
|
||||
|
||||
#define SESSION_TRACK_BEGIN 0
|
||||
#define SESSION_TRACK_END SESSION_TRACK_TRANSACTION_TYPE
|
||||
#define SESSION_TRACK_END SESSION_TRACK_TRANSACTION_STATE
|
||||
#define SESSION_TRACK_TYPES (SESSION_TRACK_END + 1)
|
||||
|
||||
enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
|
||||
|
@@ -2192,11 +2192,13 @@ int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length)
|
||||
size_t plen;
|
||||
char *data;
|
||||
si_type= (enum enum_session_state_type)net_field_length(&pos);
|
||||
|
||||
switch(si_type) {
|
||||
case SESSION_TRACK_SCHEMA:
|
||||
case SESSION_TRACK_STATE_CHANGE:
|
||||
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
|
||||
case SESSION_TRACK_SYSTEM_VARIABLES:
|
||||
case SESSION_TRACK_TRANSACTION_STATE:
|
||||
if (si_type != SESSION_TRACK_STATE_CHANGE)
|
||||
net_field_length(&pos); /* ignore total length, item length will follow next */
|
||||
plen= net_field_length(&pos);
|
||||
|
@@ -932,8 +932,6 @@ static int test_sess_track_db(MYSQL *mysql)
|
||||
const char *data;
|
||||
size_t len;
|
||||
|
||||
diag("session tracking not fully supported yet in 10.2");
|
||||
return SKIP;
|
||||
|
||||
if (!(mysql->server_capabilities & CLIENT_SESSION_TRACKING))
|
||||
{
|
||||
@@ -993,6 +991,38 @@ static int test_sess_track_db(MYSQL *mysql)
|
||||
return OK;
|
||||
}
|
||||
|
||||
static int test_conc496(MYSQL *mysql)
|
||||
{
|
||||
int rc;
|
||||
const char *data;
|
||||
size_t len;
|
||||
|
||||
rc= mysql_query(mysql, "set @@session.session_track_transaction_info=STATE");
|
||||
check_mysql_rc(rc, mysql);
|
||||
|
||||
rc= mysql_query(mysql, "BEGIN");
|
||||
check_mysql_rc(rc, mysql);
|
||||
if (!mysql_session_track_get_first(mysql, SESSION_TRACK_TRANSACTION_STATE, &data, &len))
|
||||
do {
|
||||
FAIL_IF(len != 8, "expected 8 bytes");
|
||||
FAIL_IF(data[0] != 'T', "expected transaction");
|
||||
} while (!mysql_session_track_get_next(mysql, SESSION_TRACK_TRANSACTION_STATE, &data, &len));
|
||||
|
||||
rc= mysql_query(mysql, "CREATE TEMPORARY TABLE t1(a int) ENGINE=InnoDB");
|
||||
check_mysql_rc(rc, mysql);
|
||||
rc= mysql_query(mysql, "COMMIT");
|
||||
|
||||
check_mysql_rc(rc, mysql);
|
||||
|
||||
if (!mysql_session_track_get_first(mysql, SESSION_TRACK_TRANSACTION_STATE, &data, &len))
|
||||
do {
|
||||
FAIL_IF(len != 8, "expected 8 bytes");
|
||||
FAIL_IF(data[0] != '_', "expected underscore");
|
||||
} while (!mysql_session_track_get_next(mysql, SESSION_TRACK_TRANSACTION_STATE, &data, &len));
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
static int test_unix_socket_close(MYSQL *unused __attribute__((unused)))
|
||||
{
|
||||
@@ -1784,6 +1814,7 @@ static int test_default_auth(MYSQL *my __attribute__((unused)))
|
||||
}
|
||||
|
||||
struct my_tests_st my_tests[] = {
|
||||
{"test_conc496", test_conc496, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
|
||||
{"test_default_auth", test_default_auth, TEST_CONNECTION_NONE, 0, NULL, NULL},
|
||||
{"test_conc443", test_conc443, TEST_CONNECTION_NONE, 0, NULL, NULL},
|
||||
{"test_conc366", test_conc366, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
|
||||
|
Reference in New Issue
Block a user