Skip to content

Commit

Permalink
CONC-302: Added support for SESSION_TRACK_GTIDS (MySQL server)
Browse files Browse the repository at this point in the history
  • Loading branch information
9EOR9 committed Sep 12, 2020
1 parent 2c22f8e commit 29a3396
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
8 changes: 8 additions & 0 deletions libmariadb/mariadb_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -2199,8 +2199,16 @@ int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length)
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
case SESSION_TRACK_SYSTEM_VARIABLES:
case SESSION_TRACK_TRANSACTION_STATE:
case SESSION_TRACK_GTIDS:
if (si_type != SESSION_TRACK_STATE_CHANGE)
{
net_field_length(&pos); /* ignore total length, item length will follow next */
}
if (si_type == SESSION_TRACK_GTIDS)
{
/* skip encoding */
net_field_length(&pos);
}
plen= net_field_length(&pos);
if (pos + plen > end)
goto corrupted;
Expand Down
44 changes: 44 additions & 0 deletions unittest/libmariadb/connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ static int test_conc66(MYSQL *my)

SKIP_SKYSQL;

if (!is_mariadb)
return SKIP;

if (!(fp= fopen("./my-conc66-test.cnf", "w")))
return FAIL;

Expand Down Expand Up @@ -1823,7 +1826,48 @@ static int test_default_auth(MYSQL *my __attribute__((unused)))
return OK;
}

static int test_gtid(MYSQL *mysql)
{
int rc;
const char *data;
size_t len;

if (is_mariadb)
return SKIP;

rc= mysql_query(mysql, "SET @@session.session_track_state_change=1");
check_mysql_rc(rc, mysql);

rc= mysql_query(mysql, "SET @@session.session_track_gtids=OWN_GTID");
check_mysql_rc(rc, mysql);

rc= mysql_query(mysql, "BEGIN");
check_mysql_rc(rc, mysql);

rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
check_mysql_rc(rc, mysql);

if (!mysql_session_track_get_first(mysql, SESSION_TRACK_GTIDS, &data, &len))
do {
printf("# SESSION_TRACK_GTIDS: %*.*s\n", (int)len, (int)len, data);
} while (!mysql_session_track_get_next(mysql, SESSION_TRACK_GTIDS, &data, &len));

rc= mysql_query(mysql, "CREATE TABLE t1 (a int)");
check_mysql_rc(rc, mysql);

if (!mysql_session_track_get_first(mysql, SESSION_TRACK_GTIDS, &data, &len))
do {
printf("# SESSION_TRACK_GTIDS: %*.*s\n", (int)len, (int)len, data);
} while (!mysql_session_track_get_next(mysql, SESSION_TRACK_GTIDS, &data, &len));

rc= mysql_query(mysql, "COMMIT");
check_mysql_rc(rc, mysql);

return OK;
}

struct my_tests_st my_tests[] = {
{"test_gtid", test_gtid, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"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},
Expand Down

0 comments on commit 29a3396

Please sign in to comment.