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 */
|
/* currently not supported by MariaDB Server */
|
||||||
SESSION_TRACK_GTIDS,
|
SESSION_TRACK_GTIDS,
|
||||||
SESSION_TRACK_TRANSACTION_CHARACTERISTICS,
|
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 !! */
|
to last element of enum !! */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SESSION_TRACK_BEGIN 0
|
#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)
|
#define SESSION_TRACK_TYPES (SESSION_TRACK_END + 1)
|
||||||
|
|
||||||
enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
|
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;
|
size_t plen;
|
||||||
char *data;
|
char *data;
|
||||||
si_type= (enum enum_session_state_type)net_field_length(&pos);
|
si_type= (enum enum_session_state_type)net_field_length(&pos);
|
||||||
|
|
||||||
switch(si_type) {
|
switch(si_type) {
|
||||||
case SESSION_TRACK_SCHEMA:
|
case SESSION_TRACK_SCHEMA:
|
||||||
case SESSION_TRACK_STATE_CHANGE:
|
case SESSION_TRACK_STATE_CHANGE:
|
||||||
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
|
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
|
||||||
case SESSION_TRACK_SYSTEM_VARIABLES:
|
case SESSION_TRACK_SYSTEM_VARIABLES:
|
||||||
|
case SESSION_TRACK_TRANSACTION_STATE:
|
||||||
if (si_type != SESSION_TRACK_STATE_CHANGE)
|
if (si_type != SESSION_TRACK_STATE_CHANGE)
|
||||||
net_field_length(&pos); /* ignore total length, item length will follow next */
|
net_field_length(&pos); /* ignore total length, item length will follow next */
|
||||||
plen= net_field_length(&pos);
|
plen= net_field_length(&pos);
|
||||||
|
@@ -932,8 +932,6 @@ static int test_sess_track_db(MYSQL *mysql)
|
|||||||
const char *data;
|
const char *data;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
diag("session tracking not fully supported yet in 10.2");
|
|
||||||
return SKIP;
|
|
||||||
|
|
||||||
if (!(mysql->server_capabilities & CLIENT_SESSION_TRACKING))
|
if (!(mysql->server_capabilities & CLIENT_SESSION_TRACKING))
|
||||||
{
|
{
|
||||||
@@ -993,6 +991,38 @@ static int test_sess_track_db(MYSQL *mysql)
|
|||||||
return OK;
|
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)))
|
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[] = {
|
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_default_auth", test_default_auth, TEST_CONNECTION_NONE, 0, NULL, NULL},
|
||||||
{"test_conc443", test_conc443, 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},
|
{"test_conc366", test_conc366, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
|
||||||
|
Reference in New Issue
Block a user