Commit 5585c9f9 authored by Kentoku SHIBA's avatar Kentoku SHIBA

add a table parameter "driver" to Spider

parent 0dffe33c
......@@ -566,7 +566,7 @@ SPIDER_CONN *spider_create_conn(
char *tmp_name, *tmp_host, *tmp_username, *tmp_password, *tmp_socket;
char *tmp_wrapper, *tmp_db, *tmp_ssl_ca, *tmp_ssl_capath, *tmp_ssl_cert;
char *tmp_ssl_cipher, *tmp_ssl_key, *tmp_default_file, *tmp_default_group;
char *tmp_dsn, *tmp_filedsn;
char *tmp_dsn, *tmp_filedsn, *tmp_driver;
DBUG_ENTER("spider_create_conn");
if (unlikely(!UTC))
......@@ -620,6 +620,8 @@ SPIDER_CONN *spider_create_conn(
(uint) (share->tgt_dsns_lengths[link_idx] + 1),
&tmp_filedsn,
(uint) (share->tgt_filedsns_lengths[link_idx] + 1),
&tmp_driver,
(uint) (share->tgt_drivers_lengths[link_idx] + 1),
&need_mon, (uint) (sizeof(int)),
NullS))
) {
......@@ -737,6 +739,15 @@ SPIDER_CONN *spider_create_conn(
share->tgt_filedsns_lengths[link_idx]);
} else
conn->tgt_filedsn = NULL;
conn->tgt_driver_length =
share->tgt_drivers_lengths[link_idx];
if (conn->tgt_driver_length)
{
conn->tgt_driver = tmp_driver;
memcpy(conn->tgt_driver, share->tgt_drivers[link_idx],
share->tgt_drivers_lengths[link_idx]);
} else
conn->tgt_driver = NULL;
conn->tgt_port = share->tgt_ports[link_idx];
conn->tgt_ssl_vsc = share->tgt_ssl_vscs[link_idx];
conn->dbton_id = share->sql_dbton_ids[link_idx];
......
......@@ -290,7 +290,8 @@ int spider_udf_direct_sql_create_conn_key(
+ direct_sql->tgt_default_file_length + 1
+ direct_sql->tgt_default_group_length + 1
+ direct_sql->tgt_dsn_length + 1
+ direct_sql->tgt_filedsn_length;
+ direct_sql->tgt_filedsn_length + 1
+ direct_sql->tgt_driver_length;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
} else {
direct_sql->conn_key_length
......@@ -411,6 +412,13 @@ int spider_udf_direct_sql_create_conn_key(
tmp_name = strmov(tmp_name + 1, direct_sql->tgt_filedsn);
} else
tmp_name++;
if (direct_sql->tgt_driver)
{
DBUG_PRINT("info",("spider tgt_driver=%s",
direct_sql->tgt_driver));
tmp_name = strmov(tmp_name + 1, direct_sql->tgt_driver);
} else
tmp_name++;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
}
#endif
......@@ -430,7 +438,7 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
char *tmp_name, *tmp_host, *tmp_username, *tmp_password, *tmp_socket;
char *tmp_wrapper, *tmp_db, *tmp_ssl_ca, *tmp_ssl_capath, *tmp_ssl_cert;
char *tmp_ssl_cipher, *tmp_ssl_key, *tmp_default_file, *tmp_default_group;
char *tmp_dsn, *tmp_filedsn;
char *tmp_dsn, *tmp_filedsn, *tmp_driver;
int *need_mon;
bool tables_on_different_db_are_joinable = TRUE;
DBUG_ENTER("spider_udf_direct_sql_create_conn");
......@@ -473,6 +481,8 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
(uint) (direct_sql->tgt_dsn_length + 1),
&tmp_filedsn,
(uint) (direct_sql->tgt_filedsn_length + 1),
&tmp_driver,
(uint) (direct_sql->tgt_driver_length + 1),
&need_mon, (uint) (sizeof(int)),
NullS))
) {
......@@ -605,6 +615,14 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
direct_sql->tgt_filedsn_length);
} else
conn->tgt_filedsn = NULL;
conn->tgt_driver_length = direct_sql->tgt_driver_length;
if (conn->tgt_driver_length)
{
conn->tgt_driver = tmp_driver;
memcpy(conn->tgt_driver, direct_sql->tgt_driver,
direct_sql->tgt_driver_length);
} else
conn->tgt_driver = NULL;
conn->tgt_ssl_vsc = direct_sql->tgt_ssl_vsc;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
} else {
......@@ -1275,6 +1293,7 @@ int spider_udf_parse_direct_sql_param(
SPIDER_PARAM_INT("cto", connect_timeout, 0);
SPIDER_PARAM_STR("dff", tgt_default_file);
SPIDER_PARAM_STR("dfg", tgt_default_group);
SPIDER_PARAM_STR("drv", tgt_driver);
SPIDER_PARAM_STR("dsn", tgt_dsn);
SPIDER_PARAM_STR("fds", tgt_filedsn);
SPIDER_PARAM_LONGLONG("prt", priority, 0);
......@@ -1302,6 +1321,7 @@ int spider_udf_parse_direct_sql_param(
error_num = param_string_parse.print_param_error();
goto error;
case 6:
SPIDER_PARAM_STR("driver", tgt_driver);
SPIDER_PARAM_STR("server", server_name);
SPIDER_PARAM_STR("socket", tgt_socket);
SPIDER_PARAM_HINT_WITH_MAX("iop", iop, 3, direct_sql->table_count, 0, 2);
......@@ -1709,6 +1729,10 @@ void spider_udf_free_direct_sql_alloc(
{
spider_free(spider_current_trx, direct_sql->tgt_filedsn, MYF(0));
}
if (direct_sql->tgt_driver)
{
spider_free(spider_current_trx, direct_sql->tgt_driver, MYF(0));
}
if (direct_sql->conn_key)
{
spider_free(spider_current_trx, direct_sql->conn_key, MYF(0));
......
......@@ -256,7 +256,7 @@ const char SPIDER_empty_string = "";
#define SPIDER_LINK_MON_DRAW_FEW_MON 1
#define SPIDER_LINK_MON_DRAW 2
#define SPIDER_TMP_SHARE_CHAR_PTR_COUNT 22
#define SPIDER_TMP_SHARE_CHAR_PTR_COUNT 23
#define SPIDER_TMP_SHARE_UINT_COUNT SPIDER_TMP_SHARE_CHAR_PTR_COUNT
#define SPIDER_TMP_SHARE_LONG_COUNT 20
#define SPIDER_TMP_SHARE_LONGLONG_COUNT 3
......@@ -353,6 +353,7 @@ typedef struct st_spider_alter_table
char **tmp_tgt_default_groups;
char **tmp_tgt_dsns;
char **tmp_tgt_filedsns;
char **tmp_tgt_drivers;
char **tmp_static_link_ids;
long *tmp_tgt_ports;
long *tmp_tgt_ssl_vscs;
......@@ -376,6 +377,7 @@ typedef struct st_spider_alter_table
uint *tmp_tgt_default_groups_lengths;
uint *tmp_tgt_dsns_lengths;
uint *tmp_tgt_filedsns_lengths;
uint *tmp_tgt_drivers_lengths;
uint *tmp_static_link_ids_lengths;
uint tmp_server_names_charlen;
......@@ -395,6 +397,7 @@ typedef struct st_spider_alter_table
uint tmp_tgt_default_groups_charlen;
uint tmp_tgt_dsns_charlen;
uint tmp_tgt_filedsns_charlen;
uint tmp_tgt_drivers_charlen;
uint tmp_static_link_ids_charlen;
uint tmp_server_names_length;
......@@ -414,6 +417,7 @@ typedef struct st_spider_alter_table
uint tmp_tgt_default_groups_length;
uint tmp_tgt_dsns_length;
uint tmp_tgt_filedsns_length;
uint tmp_tgt_drivers_length;
uint tmp_static_link_ids_length;
uint tmp_tgt_ports_length;
uint tmp_tgt_ssl_vscs_length;
......@@ -500,6 +504,7 @@ typedef struct st_spider_conn
char *tgt_default_group;
char *tgt_dsn;
char *tgt_filedsn;
char *tgt_driver;
long tgt_port;
long tgt_ssl_vsc;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
......@@ -522,6 +527,7 @@ typedef struct st_spider_conn
uint tgt_default_group_length;
uint tgt_dsn_length;
uint tgt_filedsn_length;
uint tgt_driver_length;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
uint hs_sock_length;
#endif
......@@ -1130,6 +1136,7 @@ typedef struct st_spider_share
char **tgt_default_groups;
char **tgt_dsns;
char **tgt_filedsns;
char **tgt_drivers;
char **static_link_ids;
char **tgt_pk_names;
char **tgt_sequence_names;
......@@ -1187,6 +1194,7 @@ typedef struct st_spider_share
uint *tgt_default_groups_lengths;
uint *tgt_dsns_lengths;
uint *tgt_filedsns_lengths;
uint *tgt_drivers_lengths;
uint *static_link_ids_lengths;
uint *tgt_pk_names_lengths;
uint *tgt_sequence_names_lengths;
......@@ -1219,6 +1227,7 @@ typedef struct st_spider_share
uint tgt_default_groups_charlen;
uint tgt_dsns_charlen;
uint tgt_filedsns_charlen;
uint tgt_drivers_charlen;
uint static_link_ids_charlen;
uint tgt_pk_names_charlen;
uint tgt_sequence_names_charlen;
......@@ -1247,6 +1256,7 @@ typedef struct st_spider_share
uint tgt_default_groups_length;
uint tgt_dsns_length;
uint tgt_filedsns_length;
uint tgt_drivers_length;
uint static_link_ids_length;
uint tgt_pk_names_length;
uint tgt_sequence_names_length;
......@@ -1384,6 +1394,7 @@ typedef struct st_spider_direct_sql
char *tgt_default_group;
char *tgt_dsn;
char *tgt_filedsn;
char *tgt_driver;
char *conn_key;
long tgt_port;
long tgt_ssl_vsc;
......@@ -1404,6 +1415,7 @@ typedef struct st_spider_direct_sql
uint tgt_default_group_length;
uint tgt_dsn_length;
uint tgt_filedsn_length;
uint tgt_driver_length;
uint conn_key_length;
uint dbton_id;
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
......
......@@ -53,6 +53,7 @@ static LEX_STRING spider_init_queries[] = {
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" driver char(64) default null,"
" key idx1 (data, format_id, gtrid_length, host)"
") engine=MyISAM default charset=utf8 collate=utf8_bin"
)},
......@@ -78,6 +79,7 @@ static LEX_STRING spider_init_queries[] = {
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" driver char(64) default null,"
" thread_id int default null,"
" status char(8) not null default '',"
" failed_time timestamp not null default current_timestamp,"
......@@ -108,6 +110,7 @@ static LEX_STRING spider_init_queries[] = {
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" driver char(64) default null,"
" tgt_db_name char(64) default null,"
" tgt_table_name char(64) default null,"
" link_status tinyint not null default 1,"
......@@ -141,6 +144,7 @@ static LEX_STRING spider_init_queries[] = {
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" driver char(64) default null,"
" primary key (db_name, table_name, link_id, sid)"
") engine=MyISAM default charset=utf8 collate=utf8_bin"
)},
......@@ -630,6 +634,18 @@ static LEX_STRING spider_init_queries[] = {
" call mysql.spider_fix_one_table('spider_xa_member', 'filedsn',"
" 'alter table mysql.spider_xa_member"
" add column filedsn text default null after dsn');"
" call mysql.spider_fix_one_table('spider_link_mon_servers', 'driver',"
" 'alter table mysql.spider_link_mon_servers"
" add column driver char(64) default null after filedsn');"
" call mysql.spider_fix_one_table('spider_tables', 'driver',"
" 'alter table mysql.spider_tables"
" add column driver char(64) default null after filedsn');"
" call mysql.spider_fix_one_table('spider_xa_failed_log', 'driver',"
" 'alter table mysql.spider_xa_failed_log"
" add column driver char(64) default null after filedsn');"
" call mysql.spider_fix_one_table('spider_xa_member', 'driver',"
" 'alter table mysql.spider_xa_member"
" add column driver char(64) default null after filedsn');"
"end;"
)},
{C_STRING_WITH_LEN(
......
......@@ -65,9 +65,10 @@ extern Time_zone *spd_tz_system;
#define SPIDER_XA_MEMBER_DEFAULT_GROUP_POS 17
#define SPIDER_XA_MEMBER_DSN_POS 18
#define SPIDER_XA_MEMBER_FILEDSN_POS 19
#define SPIDER_XA_FAILED_LOG_THREAD_ID_POS 20
#define SPIDER_XA_FAILED_LOG_STATUS_POS 21
#define SPIDER_XA_FAILED_LOG_FAILED_TIME_POS 22
#define SPIDER_XA_MEMBER_DRIVER_POS 20
#define SPIDER_XA_FAILED_LOG_THREAD_ID_POS 21
#define SPIDER_XA_FAILED_LOG_STATUS_POS 22
#define SPIDER_XA_FAILED_LOG_FAILED_TIME_POS 23
#define SPIDER_TABLES_DB_NAME_POS 0
#define SPIDER_TABLES_TABLE_NAME_POS 1
......@@ -91,11 +92,12 @@ extern Time_zone *spd_tz_system;
#define SPIDER_TABLES_DEFAULT_GROUP_POS 19
#define SPIDER_TABLES_DSN_POS 20
#define SPIDER_TABLES_FILEDSN_POS 21
#define SPIDER_TABLES_TGT_DB_NAME_POS 22
#define SPIDER_TABLES_TGT_TABLE_NAME_POS 23
#define SPIDER_TABLES_LINK_STATUS_POS 24
#define SPIDER_TABLES_BLOCK_STATUS_POS 25
#define SPIDER_TABLES_STATIC_LINK_ID_POS 26
#define SPIDER_TABLES_DRIVER_POS 22
#define SPIDER_TABLES_TGT_DB_NAME_POS 23
#define SPIDER_TABLES_TGT_TABLE_NAME_POS 24
#define SPIDER_TABLES_LINK_STATUS_POS 25
#define SPIDER_TABLES_BLOCK_STATUS_POS 26
#define SPIDER_TABLES_STATIC_LINK_ID_POS 27
#define SPIDER_LINK_MON_SERVERS_DB_NAME_POS 0
#define SPIDER_LINK_MON_SERVERS_TABLE_NAME_POS 1
......@@ -118,6 +120,7 @@ extern Time_zone *spd_tz_system;
#define SPIDER_LINK_MON_SERVERS_DEFAULT_GROUP_POS 18
#define SPIDER_LINK_MON_SERVERS_DSN_POS 19
#define SPIDER_LINK_MON_SERVERS_FILEDSN_POS 20
#define SPIDER_LINK_MON_SERVERS_DRIVER_POS 21
#define SPIDER_LINK_FAILED_LOG_DB_NAME_POS 0
#define SPIDER_LINK_FAILED_LOG_TABLE_NAME_POS 1
......@@ -1120,6 +1123,17 @@ void spider_store_xa_member_info(
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->set_null();
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->reset();
}
if (conn->tgt_driver)
{
table->field[SPIDER_XA_MEMBER_DRIVER_POS]->set_notnull();
table->field[SPIDER_XA_MEMBER_DRIVER_POS]->store(
conn->tgt_driver,
(uint) conn->tgt_driver_length,
system_charset_info);
} else {
table->field[SPIDER_XA_MEMBER_DRIVER_POS]->set_null();
table->field[SPIDER_XA_MEMBER_DRIVER_POS]->reset();
}
DBUG_VOID_RETURN;
}
......@@ -1445,6 +1459,17 @@ void spider_store_tables_connect_info(
table->field[SPIDER_TABLES_FILEDSN_POS]->set_null();
table->field[SPIDER_TABLES_FILEDSN_POS]->reset();
}
if (alter_table->tmp_tgt_drivers[link_idx])
{
table->field[SPIDER_TABLES_DRIVER_POS]->set_notnull();
table->field[SPIDER_TABLES_DRIVER_POS]->store(
alter_table->tmp_tgt_drivers[link_idx],
(uint) alter_table->tmp_tgt_drivers_lengths[link_idx],
system_charset_info);
} else {
table->field[SPIDER_TABLES_DRIVER_POS]->set_null();
table->field[SPIDER_TABLES_DRIVER_POS]->reset();
}
if (alter_table->tmp_tgt_dbs[link_idx])
{
table->field[SPIDER_TABLES_TGT_DB_NAME_POS]->set_notnull();
......@@ -2441,6 +2466,17 @@ int spider_get_sys_server_info(
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_XA_MEMBER_DRIVER_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_XA_MEMBER_DRIVER_POS]))
) {
share->tgt_drivers_lengths[link_idx] = strlen(ptr);
share->tgt_drivers[link_idx] =
spider_create_string(ptr, share->tgt_drivers_lengths[link_idx]);
} else {
share->tgt_drivers_lengths[link_idx] = 0;
share->tgt_drivers[link_idx] = NULL;
}
DBUG_RETURN(0);
}
......@@ -2710,6 +2746,17 @@ int spider_get_sys_tables_connect_info(
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_TABLES_DRIVER_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_TABLES_DRIVER_POS]))
) {
share->tgt_drivers_lengths[link_idx] = strlen(ptr);
share->tgt_drivers[link_idx] =
spider_create_string(ptr, share->tgt_drivers_lengths[link_idx]);
} else {
share->tgt_drivers_lengths[link_idx] = 0;
share->tgt_drivers[link_idx] = NULL;
}
if (
!table->field[SPIDER_TABLES_TGT_DB_NAME_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_TABLES_TGT_DB_NAME_POS]))
......@@ -3317,6 +3364,17 @@ int spider_get_sys_link_mon_connect_info(
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_LINK_MON_SERVERS_DRIVER_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_LINK_MON_SERVERS_DRIVER_POS]))
) {
share->tgt_drivers_lengths[link_idx] = strlen(ptr);
share->tgt_drivers[link_idx] =
spider_create_string(ptr, share->tgt_drivers_lengths[link_idx]);
} else {
share->tgt_drivers_lengths[link_idx] = 0;
share->tgt_drivers[link_idx] = NULL;
}
DBUG_RETURN(error_num);
}
......
......@@ -51,15 +51,15 @@
#define SPIDER_SYS_XA_COL_CNT 5
#define SPIDER_SYS_XA_PK_COL_CNT 3
#define SPIDER_SYS_XA_IDX1_COL_CNT 1
#define SPIDER_SYS_XA_MEMBER_COL_CNT 20
#define SPIDER_SYS_XA_MEMBER_COL_CNT 21
#define SPIDER_SYS_XA_MEMBER_PK_COL_CNT 6
#define SPIDER_SYS_TABLES_COL_CNT 27
#define SPIDER_SYS_TABLES_COL_CNT 28
#define SPIDER_SYS_TABLES_PK_COL_CNT 3
#define SPIDER_SYS_TABLES_IDX1_COL_CNT 1
#define SPIDER_SYS_TABLES_UIDX1_COL_CNT 3
#define SPIDER_SYS_LINK_MON_TABLE_COL_CNT 21
#define SPIDER_SYS_LINK_MON_TABLE_COL_CNT 22
#define SPIDER_SYS_LINK_FAILED_TABLE_COL_CNT 4
#define SPIDER_SYS_XA_FAILED_TABLE_COL_CNT 23
#define SPIDER_SYS_XA_FAILED_TABLE_COL_CNT 24
#define SPIDER_SYS_POS_FOR_RECOVERY_TABLE_COL_CNT 7
#define SPIDER_SYS_TABLE_STS_COL_CNT 11
#define SPIDER_SYS_TABLE_STS_PK_COL_CNT 2
......
......@@ -821,6 +821,17 @@ int spider_free_share_alloc(
}
spider_free(spider_current_trx, share->tgt_filedsns, MYF(0));
}
if (share->tgt_drivers)
{
for (roop_count = 0; roop_count < (int) share->tgt_drivers_length;
roop_count++)
{
if (share->tgt_drivers[roop_count])
spider_free(spider_current_trx, share->tgt_drivers[roop_count],
MYF(0));
}
spider_free(spider_current_trx, share->tgt_drivers, MYF(0));
}
if (share->tgt_pk_names)
{
for (roop_count = 0; roop_count < (int) share->tgt_pk_names_length;
......@@ -1036,6 +1047,11 @@ void spider_free_tmp_share_alloc(
spider_free(spider_current_trx, share->tgt_filedsns[0], MYF(0));
share->tgt_filedsns[0] = NULL;
}
if (share->tgt_drivers && share->tgt_drivers[0])
{
spider_free(spider_current_trx, share->tgt_drivers[0], MYF(0));
share->tgt_drivers[0] = NULL;
}
if (share->tgt_pk_names && share->tgt_pk_names[0])
{
spider_free(spider_current_trx, share->tgt_pk_names[0], MYF(0));
......@@ -2339,6 +2355,7 @@ int spider_parse_connect_info(
SPIDER_PARAM_STR_LIST("dff", tgt_default_files);
SPIDER_PARAM_STR_LIST("dfg", tgt_default_groups);
SPIDER_PARAM_LONGLONG("dol", direct_order_limit, 0);
SPIDER_PARAM_STR_LIST("drv", tgt_drivers);
SPIDER_PARAM_STR_LIST("dsn", tgt_dsns);
SPIDER_PARAM_INT_WITH_MAX("erm", error_read_mode, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("ewm", error_write_mode, 0, 1);
......@@ -2457,6 +2474,7 @@ int spider_parse_connect_info(
error_num = connect_string_parse.print_param_error();
goto error;
case 6:
SPIDER_PARAM_STR_LIST("driver", tgt_drivers);
SPIDER_PARAM_STR_LIST("server", server_names);
SPIDER_PARAM_STR_LIST("socket", tgt_sockets);
SPIDER_PARAM_HINT("idx", key_hint, 3, (int) table_share->keys,
......@@ -2763,6 +2781,8 @@ int spider_parse_connect_info(
share->all_link_count = share->tgt_dsns_length;
if (share->all_link_count < share->tgt_filedsns_length)
share->all_link_count = share->tgt_filedsns_length;
if (share->all_link_count < share->tgt_drivers_length)
share->all_link_count = share->tgt_drivers_length;
if (share->all_link_count < share->tgt_pk_names_length)
share->all_link_count = share->tgt_pk_names_length;
if (share->all_link_count < share->tgt_sequence_names_length)
......@@ -2942,6 +2962,13 @@ int spider_parse_connect_info(
&share->tgt_filedsns_charlen,
share->all_link_count)))
goto error;
if ((error_num = spider_increase_string_list(
&share->tgt_drivers,
&share->tgt_drivers_lengths,
&share->tgt_drivers_length,
&share->tgt_drivers_charlen,
share->all_link_count)))
goto error;
if ((error_num = spider_increase_string_list(
&share->tgt_pk_names,
&share->tgt_pk_names_lengths,
......@@ -3138,6 +3165,8 @@ int spider_parse_connect_info(
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_tgt_filedsns,
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_tgt_drivers,
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_static_link_ids,
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_server_names_lengths,
......@@ -3174,6 +3203,8 @@ int spider_parse_connect_info(
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_tgt_filedsns_lengths,
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_tgt_drivers_lengths,
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_static_link_ids_lengths,
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_tgt_ports,
......@@ -3225,6 +3256,8 @@ int spider_parse_connect_info(
sizeof(char *) * share->all_link_count);
memcpy(share_alter->tmp_tgt_filedsns, share->tgt_filedsns,
sizeof(char *) * share->all_link_count);
memcpy(share_alter->tmp_tgt_drivers, share->tgt_drivers,
sizeof(char *) * share->all_link_count);
memcpy(share_alter->tmp_static_link_ids, share->static_link_ids,
sizeof(char *) * share->all_link_count);
......@@ -3286,6 +3319,9 @@ int spider_parse_connect_info(
memcpy(share_alter->tmp_tgt_filedsns_lengths,
share->tgt_filedsns_lengths,
sizeof(uint) * share->all_link_count);
memcpy(share_alter->tmp_tgt_drivers_lengths,
share->tgt_drivers_lengths,
sizeof(uint) * share->all_link_count);
memcpy(share_alter->tmp_static_link_ids_lengths,
share->static_link_ids_lengths,
sizeof(uint) * share->all_link_count);
......@@ -3311,6 +3347,8 @@ int spider_parse_connect_info(
share->tgt_dsns_charlen;
share_alter->tmp_tgt_filedsns_charlen =
share->tgt_filedsns_charlen;
share_alter->tmp_tgt_drivers_charlen =
share->tgt_drivers_charlen;
share_alter->tmp_static_link_ids_charlen =
share->static_link_ids_charlen;
......@@ -3334,6 +3372,8 @@ int spider_parse_connect_info(
share->tgt_dsns_length;
share_alter->tmp_tgt_filedsns_length =
share->tgt_filedsns_length;
share_alter->tmp_tgt_drivers_length =
share->tgt_drivers_length;
share_alter->tmp_static_link_ids_length =
share->static_link_ids_length;
share_alter->tmp_tgt_ports_length = share->tgt_ports_length;
......@@ -3580,6 +3620,18 @@ int spider_parse_connect_info(
goto error;
}
DBUG_PRINT("info",
("spider tgt_drivers_lengths[%d] = %u", roop_count,
share->tgt_drivers_lengths[roop_count]));
if (share->tgt_drivers_lengths[roop_count] >
SPIDER_CONNECT_INFO_MAX_LEN)
{
error_num = ER_SPIDER_INVALID_CONNECT_INFO_TOO_LONG_NUM;
my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_TOO_LONG_STR,
MYF(0), share->tgt_drivers[roop_count], "driver");
goto error;
}
DBUG_PRINT("info",
("spider tgt_pk_names_lengths[%d] = %u", roop_count,
share->tgt_pk_names_lengths[roop_count]));
......@@ -4420,7 +4472,8 @@ int spider_create_conn_keys(
+ share->tgt_default_files_lengths[roop_count] + 1
+ share->tgt_default_groups_lengths[roop_count] + 1
+ share->tgt_dsns_lengths[roop_count] + 1
+ share->tgt_filedsns_lengths[roop_count];
+ share->tgt_filedsns_lengths[roop_count] + 1
+ share->tgt_drivers_lengths[roop_count];
share->conn_keys_charlen += conn_keys_lengths[roop_count] + 2;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
hs_r_conn_keys_lengths[roop_count]
......@@ -4611,6 +4664,13 @@ int spider_create_conn_keys(
tmp_name = strmov(tmp_name + 1, share->tgt_filedsns[roop_count]);
} else
tmp_name++;
if (share->tgt_drivers[roop_count])
{
DBUG_PRINT("info",("spider tgt_drivers[%d]=%s", roop_count,
share->tgt_drivers[roop_count]));
tmp_name = strmov(tmp_name + 1, share->tgt_drivers[roop_count]);
} else
tmp_name++;
tmp_name++;
tmp_name++;
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
......@@ -8599,12 +8659,13 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_groups = &tmp_connect_info[14];
tmp_share->tgt_dsns = &tmp_connect_info[15];
tmp_share->tgt_filedsns = &tmp_connect_info[16];
tmp_share->tgt_pk_names = &tmp_connect_info[17];
tmp_share->tgt_sequence_names = &tmp_connect_info[18];
tmp_share->static_link_ids = &tmp_connect_info[19];
tmp_share->tgt_drivers = &tmp_connect_info[17];
tmp_share->tgt_pk_names = &tmp_connect_info[18];
tmp_share->tgt_sequence_names = &tmp_connect_info[19];
tmp_share->static_link_ids = &tmp_connect_info[20];
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
tmp_share->hs_read_socks = &tmp_connect_info[20];
tmp_share->hs_write_socks = &tmp_connect_info[21];
tmp_share->hs_read_socks = &tmp_connect_info[21];
tmp_share->hs_write_socks = &tmp_connect_info[22];
#endif
tmp_share->tgt_ports = &tmp_long[0];
tmp_share->tgt_ssl_vscs = &tmp_long[1];
......@@ -8655,12 +8716,13 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_groups_lengths = &tmp_connect_info_length[14];
tmp_share->tgt_dsns_lengths = &tmp_connect_info_length[15];
tmp_share->tgt_filedsns_lengths = &tmp_connect_info_length[16];
tmp_share->tgt_pk_names_lengths = &tmp_connect_info_length[17];
tmp_share->tgt_sequence_names_lengths = &tmp_connect_info_length[18];
tmp_share->static_link_ids_lengths = &tmp_connect_info_length[19];
tmp_share->tgt_drivers_lengths = &tmp_connect_info_length[17];
tmp_share->tgt_pk_names_lengths = &tmp_connect_info_length[18];
tmp_share->tgt_sequence_names_lengths = &tmp_connect_info_length[19];
tmp_share->static_link_ids_lengths = &tmp_connect_info_length[20];
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
tmp_share->hs_read_socks_lengths = &tmp_connect_info_length[20];
tmp_share->hs_write_socks_lengths = &tmp_connect_info_length[21];
tmp_share->hs_read_socks_lengths = &tmp_connect_info_length[21];
tmp_share->hs_write_socks_lengths = &tmp_connect_info_length[22];
#endif
tmp_share->server_names_length = 1;
tmp_share->tgt_table_names_length = 1;
......@@ -8679,6 +8741,7 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_groups_length = 1;
tmp_share->tgt_dsns_length = 1;
tmp_share->tgt_filedsns_length = 1;
tmp_share->tgt_drivers_length = 1;
tmp_share->tgt_pk_names_length = 1;
tmp_share->tgt_sequence_names_length = 1;
tmp_share->static_link_ids_length = 1;
......
......@@ -507,6 +507,7 @@ int spider_create_trx_alter_table(
char **tmp_tgt_default_groups;
char **tmp_tgt_dsns;
char **tmp_tgt_filedsns;
char **tmp_tgt_drivers;
char **tmp_static_link_ids;
uint *tmp_server_names_lengths;
uint *tmp_tgt_table_names_lengths;
......@@ -525,6 +526,7 @@ int spider_create_trx_alter_table(
uint *tmp_tgt_default_groups_lengths;
uint *tmp_tgt_dsns_lengths;
uint *tmp_tgt_filedsns_lengths;
uint *tmp_tgt_drivers_lengths;
uint *tmp_static_link_ids_lengths;
long *tmp_tgt_ports;
long *tmp_tgt_ssl_vscs;
......@@ -547,6 +549,7 @@ int spider_create_trx_alter_table(
char *tmp_tgt_default_groups_char;
char *tmp_tgt_dsns_char;
char *tmp_tgt_filedsns_char;
char *tmp_tgt_drivers_char;
char *tmp_static_link_ids_char;
uint old_elements;
......@@ -575,6 +578,7 @@ int spider_create_trx_alter_table(
&tmp_tgt_default_groups, (uint) (sizeof(char *) * share->all_link_count),
&tmp_tgt_dsns, (uint) (sizeof(char *) * share->all_link_count),
&tmp_tgt_filedsns, (uint) (sizeof(char *) * share->all_link_count),
&tmp_tgt_drivers, (uint) (sizeof(char *) * share->all_link_count),
&tmp_static_link_ids, (uint) (sizeof(char *) * share->all_link_count),
&tmp_server_names_lengths, (uint) (sizeof(uint) * share->all_link_count),
......@@ -602,6 +606,7 @@ int spider_create_trx_alter_table(
(uint) (sizeof(uint) * share->all_link_count),
&tmp_tgt_dsns_lengths, (uint) (sizeof(uint) * share->all_link_count),
&tmp_tgt_filedsns_lengths, (uint) (sizeof(uint) * share->all_link_count),
&tmp_tgt_drivers_lengths, (uint) (sizeof(uint) * share->all_link_count),
&tmp_static_link_ids_lengths,
(uint) (sizeof(uint) * share->all_link_count),
......@@ -645,6 +650,8 @@ int spider_create_trx_alter_table(
(share_alter->tmp_tgt_dsns_charlen + 1)),
&tmp_tgt_filedsns_char, (uint) (sizeof(char) *
(share_alter->tmp_tgt_filedsns_charlen + 1)),
&tmp_tgt_drivers_char, (uint) (sizeof(char) *
(share_alter->tmp_tgt_drivers_charlen + 1)),
&tmp_static_link_ids_char, (uint) (sizeof(char) *
(share_alter->tmp_static_link_ids_charlen + 1)),
NullS))
......@@ -682,6 +689,7 @@ int spider_create_trx_alter_table(
alter_table->tmp_tgt_default_groups = tmp_tgt_default_groups;
alter_table->tmp_tgt_dsns = tmp_tgt_dsns;
alter_table->tmp_tgt_filedsns = tmp_tgt_filedsns;
alter_table->tmp_tgt_drivers = tmp_tgt_drivers;
alter_table->tmp_static_link_ids = tmp_static_link_ids;
alter_table->tmp_tgt_ports = tmp_tgt_ports;
......@@ -707,6 +715,7 @@ int spider_create_trx_alter_table(
alter_table->tmp_tgt_default_groups_lengths = tmp_tgt_default_groups_lengths;
alter_table->tmp_tgt_dsns_lengths = tmp_tgt_dsns_lengths;
alter_table->tmp_tgt_filedsns_lengths = tmp_tgt_filedsns_lengths;
alter_table->tmp_tgt_drivers_lengths = tmp_tgt_drivers_lengths;
alter_table->tmp_static_link_ids_lengths = tmp_static_link_ids_lengths;
for(roop_count = 0; roop_count < (int) share->all_link_count; roop_count++)
......@@ -819,6 +828,12 @@ int spider_create_trx_alter_table(
tmp_tgt_filedsns_char +=
share_alter->tmp_tgt_filedsns_lengths[roop_count] + 1;
tmp_tgt_drivers[roop_count] = tmp_tgt_drivers_char;
memcpy(tmp_tgt_drivers_char, share_alter->tmp_tgt_drivers[roop_count],
sizeof(char) * share_alter->tmp_tgt_drivers_lengths[roop_count]);
tmp_tgt_drivers_char +=
share_alter->tmp_tgt_drivers_lengths[roop_count] + 1;
if (share_alter->tmp_static_link_ids[roop_count])
{
tmp_static_link_ids[roop_count] = tmp_static_link_ids_char;
......@@ -876,6 +891,8 @@ int spider_create_trx_alter_table(
sizeof(uint) * share->all_link_count);
memcpy(tmp_tgt_filedsns_lengths, share_alter->tmp_tgt_filedsns_lengths,
sizeof(uint) * share->all_link_count);
memcpy(tmp_tgt_drivers_lengths, share_alter->tmp_tgt_drivers_lengths,
sizeof(uint) * share->all_link_count);
memcpy(tmp_static_link_ids_lengths,
share_alter->tmp_static_link_ids_lengths,
sizeof(uint) * share->all_link_count);
......@@ -914,6 +931,8 @@ int spider_create_trx_alter_table(
share_alter->tmp_tgt_dsns_length;
alter_table->tmp_tgt_filedsns_length =
share_alter->tmp_tgt_filedsns_length;
alter_table->tmp_tgt_drivers_length =
share_alter->tmp_tgt_drivers_length;
alter_table->tmp_static_link_ids_length =
share_alter->tmp_static_link_ids_length;
alter_table->tmp_tgt_ports_length =
......@@ -1137,6 +1156,16 @@ bool spider_cmp_trx_alter_table(
cmp2->tmp_tgt_filedsns[roop_count])
)
) ||
(
cmp1->tmp_tgt_drivers[roop_count] !=
cmp2->tmp_tgt_drivers[roop_count] &&
(
!cmp1->tmp_tgt_drivers[roop_count] ||
!cmp2->tmp_tgt_drivers[roop_count] ||
strcmp(cmp1->tmp_tgt_drivers[roop_count],
cmp2->tmp_tgt_drivers[roop_count])
)
) ||
(
cmp1->tmp_static_link_ids[roop_count] !=
cmp2->tmp_static_link_ids[roop_count] &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment