Commit 0dffe33c authored by Kentoku SHIBA's avatar Kentoku SHIBA

add a table parameter "filedsn" to Spider

parent e685809a
......@@ -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;
char *tmp_dsn, *tmp_filedsn;
DBUG_ENTER("spider_create_conn");
if (unlikely(!UTC))
......@@ -618,6 +618,8 @@ SPIDER_CONN *spider_create_conn(
(uint) (share->tgt_default_groups_lengths[link_idx] + 1),
&tmp_dsn,
(uint) (share->tgt_dsns_lengths[link_idx] + 1),
&tmp_filedsn,
(uint) (share->tgt_filedsns_lengths[link_idx] + 1),
&need_mon, (uint) (sizeof(int)),
NullS))
) {
......@@ -726,6 +728,15 @@ SPIDER_CONN *spider_create_conn(
share->tgt_dsns_lengths[link_idx]);
} else
conn->tgt_dsn = NULL;
conn->tgt_filedsn_length =
share->tgt_filedsns_lengths[link_idx];
if (conn->tgt_filedsn_length)
{
conn->tgt_filedsn = tmp_filedsn;
memcpy(conn->tgt_filedsn, share->tgt_filedsns[link_idx],
share->tgt_filedsns_lengths[link_idx]);
} else
conn->tgt_filedsn = 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];
......
......@@ -289,7 +289,8 @@ int spider_udf_direct_sql_create_conn_key(
+ 1 + 1
+ direct_sql->tgt_default_file_length + 1
+ direct_sql->tgt_default_group_length + 1
+ direct_sql->tgt_dsn_length;
+ direct_sql->tgt_dsn_length + 1
+ direct_sql->tgt_filedsn_length;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
} else {
direct_sql->conn_key_length
......@@ -403,6 +404,13 @@ int spider_udf_direct_sql_create_conn_key(
tmp_name = strmov(tmp_name + 1, direct_sql->tgt_dsn);
} else
tmp_name++;
if (direct_sql->tgt_filedsn)
{
DBUG_PRINT("info",("spider tgt_filedsn=%s",
direct_sql->tgt_filedsn));
tmp_name = strmov(tmp_name + 1, direct_sql->tgt_filedsn);
} else
tmp_name++;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
}
#endif
......@@ -422,7 +430,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;
char *tmp_dsn, *tmp_filedsn;
int *need_mon;
bool tables_on_different_db_are_joinable = TRUE;
DBUG_ENTER("spider_udf_direct_sql_create_conn");
......@@ -463,6 +471,8 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
(uint) (direct_sql->tgt_default_group_length + 1),
&tmp_dsn,
(uint) (direct_sql->tgt_dsn_length + 1),
&tmp_filedsn,
(uint) (direct_sql->tgt_filedsn_length + 1),
&need_mon, (uint) (sizeof(int)),
NullS))
) {
......@@ -587,6 +597,14 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
direct_sql->tgt_dsn_length);
} else
conn->tgt_dsn = NULL;
conn->tgt_filedsn_length = direct_sql->tgt_filedsn_length;
if (conn->tgt_filedsn_length)
{
conn->tgt_filedsn = tmp_filedsn;
memcpy(conn->tgt_filedsn, direct_sql->tgt_filedsn,
direct_sql->tgt_filedsn_length);
} else
conn->tgt_filedsn = NULL;
conn->tgt_ssl_vsc = direct_sql->tgt_ssl_vsc;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
} else {
......@@ -1258,6 +1276,7 @@ int spider_udf_parse_direct_sql_param(
SPIDER_PARAM_STR("dff", tgt_default_file);
SPIDER_PARAM_STR("dfg", tgt_default_group);
SPIDER_PARAM_STR("dsn", tgt_dsn);
SPIDER_PARAM_STR("fds", tgt_filedsn);
SPIDER_PARAM_LONGLONG("prt", priority, 0);
SPIDER_PARAM_INT("rto", net_read_timeout, 0);
SPIDER_PARAM_STR("sca", tgt_ssl_ca);
......@@ -1290,6 +1309,7 @@ int spider_udf_parse_direct_sql_param(
error_num = param_string_parse.print_param_error();
goto error;
case 7:
SPIDER_PARAM_STR("filedsn", tgt_filedsn);
SPIDER_PARAM_STR("wrapper", tgt_wrapper);
SPIDER_PARAM_STR("ssl_key", tgt_ssl_key);
error_num = param_string_parse.print_param_error();
......@@ -1685,6 +1705,10 @@ void spider_udf_free_direct_sql_alloc(
{
spider_free(spider_current_trx, direct_sql->tgt_dsn, MYF(0));
}
if (direct_sql->tgt_filedsn)
{
spider_free(spider_current_trx, direct_sql->tgt_filedsn, 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 21
#define SPIDER_TMP_SHARE_CHAR_PTR_COUNT 22
#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
......@@ -352,6 +352,7 @@ typedef struct st_spider_alter_table
char **tmp_tgt_default_files;
char **tmp_tgt_default_groups;
char **tmp_tgt_dsns;
char **tmp_tgt_filedsns;
char **tmp_static_link_ids;
long *tmp_tgt_ports;
long *tmp_tgt_ssl_vscs;
......@@ -374,6 +375,7 @@ typedef struct st_spider_alter_table
uint *tmp_tgt_default_files_lengths;
uint *tmp_tgt_default_groups_lengths;
uint *tmp_tgt_dsns_lengths;
uint *tmp_tgt_filedsns_lengths;
uint *tmp_static_link_ids_lengths;
uint tmp_server_names_charlen;
......@@ -392,6 +394,7 @@ typedef struct st_spider_alter_table
uint tmp_tgt_default_files_charlen;
uint tmp_tgt_default_groups_charlen;
uint tmp_tgt_dsns_charlen;
uint tmp_tgt_filedsns_charlen;
uint tmp_static_link_ids_charlen;
uint tmp_server_names_length;
......@@ -410,6 +413,7 @@ typedef struct st_spider_alter_table
uint tmp_tgt_default_files_length;
uint tmp_tgt_default_groups_length;
uint tmp_tgt_dsns_length;
uint tmp_tgt_filedsns_length;
uint tmp_static_link_ids_length;
uint tmp_tgt_ports_length;
uint tmp_tgt_ssl_vscs_length;
......@@ -495,6 +499,7 @@ typedef struct st_spider_conn
char *tgt_default_file;
char *tgt_default_group;
char *tgt_dsn;
char *tgt_filedsn;
long tgt_port;
long tgt_ssl_vsc;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
......@@ -516,6 +521,7 @@ typedef struct st_spider_conn
uint tgt_default_file_length;
uint tgt_default_group_length;
uint tgt_dsn_length;
uint tgt_filedsn_length;
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
uint hs_sock_length;
#endif
......@@ -1123,6 +1129,7 @@ typedef struct st_spider_share
char **tgt_default_files;
char **tgt_default_groups;
char **tgt_dsns;
char **tgt_filedsns;
char **static_link_ids;
char **tgt_pk_names;
char **tgt_sequence_names;
......@@ -1179,6 +1186,7 @@ typedef struct st_spider_share
uint *tgt_default_files_lengths;
uint *tgt_default_groups_lengths;
uint *tgt_dsns_lengths;
uint *tgt_filedsns_lengths;
uint *static_link_ids_lengths;
uint *tgt_pk_names_lengths;
uint *tgt_sequence_names_lengths;
......@@ -1210,6 +1218,7 @@ typedef struct st_spider_share
uint tgt_default_files_charlen;
uint tgt_default_groups_charlen;
uint tgt_dsns_charlen;
uint tgt_filedsns_charlen;
uint static_link_ids_charlen;
uint tgt_pk_names_charlen;
uint tgt_sequence_names_charlen;
......@@ -1237,6 +1246,7 @@ typedef struct st_spider_share
uint tgt_default_files_length;
uint tgt_default_groups_length;
uint tgt_dsns_length;
uint tgt_filedsns_length;
uint static_link_ids_length;
uint tgt_pk_names_length;
uint tgt_sequence_names_length;
......@@ -1373,6 +1383,7 @@ typedef struct st_spider_direct_sql
char *tgt_default_file;
char *tgt_default_group;
char *tgt_dsn;
char *tgt_filedsn;
char *conn_key;
long tgt_port;
long tgt_ssl_vsc;
......@@ -1392,6 +1403,7 @@ typedef struct st_spider_direct_sql
uint tgt_default_file_length;
uint tgt_default_group_length;
uint tgt_dsn_length;
uint tgt_filedsn_length;
uint conn_key_length;
uint dbton_id;
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
......
......@@ -52,6 +52,7 @@ static LEX_STRING spider_init_queries[] = {
" default_file text,"
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" key idx1 (data, format_id, gtrid_length, host)"
") engine=MyISAM default charset=utf8 collate=utf8_bin"
)},
......@@ -76,6 +77,7 @@ static LEX_STRING spider_init_queries[] = {
" default_file text,"
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" thread_id int default null,"
" status char(8) not null default '',"
" failed_time timestamp not null default current_timestamp,"
......@@ -105,6 +107,7 @@ static LEX_STRING spider_init_queries[] = {
" default_file text,"
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" tgt_db_name char(64) default null,"
" tgt_table_name char(64) default null,"
" link_status tinyint not null default 1,"
......@@ -137,6 +140,7 @@ static LEX_STRING spider_init_queries[] = {
" default_file text,"
" default_group char(64) default null,"
" dsn char(64) default null,"
" filedsn text default null,"
" primary key (db_name, table_name, link_id, sid)"
") engine=MyISAM default charset=utf8 collate=utf8_bin"
)},
......@@ -614,6 +618,18 @@ static LEX_STRING spider_init_queries[] = {
" call mysql.spider_fix_one_table('spider_xa_member', 'dsn',"
" 'alter table mysql.spider_xa_member"
" add column dsn char(64) default null after default_group');"
" call mysql.spider_fix_one_table('spider_link_mon_servers', 'filedsn',"
" 'alter table mysql.spider_link_mon_servers"
" add column filedsn text default null after dsn');"
" call mysql.spider_fix_one_table('spider_tables', 'filedsn',"
" 'alter table mysql.spider_tables"
" add column filedsn text default null after dsn');"
" call mysql.spider_fix_one_table('spider_xa_failed_log', 'filedsn',"
" 'alter table mysql.spider_xa_failed_log"
" add column filedsn text default null after dsn');"
" call mysql.spider_fix_one_table('spider_xa_member', 'filedsn',"
" 'alter table mysql.spider_xa_member"
" add column filedsn text default null after dsn');"
"end;"
)},
{C_STRING_WITH_LEN(
......
......@@ -64,9 +64,10 @@ extern Time_zone *spd_tz_system;
#define SPIDER_XA_MEMBER_DEFAULT_FILE_POS 16
#define SPIDER_XA_MEMBER_DEFAULT_GROUP_POS 17
#define SPIDER_XA_MEMBER_DSN_POS 18
#define SPIDER_XA_FAILED_LOG_THREAD_ID_POS 19
#define SPIDER_XA_FAILED_LOG_STATUS_POS 20
#define SPIDER_XA_FAILED_LOG_FAILED_TIME_POS 21
#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_TABLES_DB_NAME_POS 0
#define SPIDER_TABLES_TABLE_NAME_POS 1
......@@ -89,11 +90,12 @@ extern Time_zone *spd_tz_system;
#define SPIDER_TABLES_DEFAULT_FILE_POS 18
#define SPIDER_TABLES_DEFAULT_GROUP_POS 19
#define SPIDER_TABLES_DSN_POS 20
#define SPIDER_TABLES_TGT_DB_NAME_POS 21
#define SPIDER_TABLES_TGT_TABLE_NAME_POS 22
#define SPIDER_TABLES_LINK_STATUS_POS 23
#define SPIDER_TABLES_BLOCK_STATUS_POS 24
#define SPIDER_TABLES_STATIC_LINK_ID_POS 25
#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_LINK_MON_SERVERS_DB_NAME_POS 0
#define SPIDER_LINK_MON_SERVERS_TABLE_NAME_POS 1
......@@ -115,6 +117,7 @@ extern Time_zone *spd_tz_system;
#define SPIDER_LINK_MON_SERVERS_DEFAULT_FILE_POS 17
#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_FAILED_LOG_DB_NAME_POS 0
#define SPIDER_LINK_FAILED_LOG_TABLE_NAME_POS 1
......@@ -1106,6 +1109,17 @@ void spider_store_xa_member_info(
table->field[SPIDER_XA_MEMBER_DSN_POS]->set_null();
table->field[SPIDER_XA_MEMBER_DSN_POS]->reset();
}
if (conn->tgt_filedsn)
{
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->set_notnull();
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->store(
conn->tgt_filedsn,
(uint) conn->tgt_filedsn_length,
system_charset_info);
} else {
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->set_null();
table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->reset();
}
DBUG_VOID_RETURN;
}
......@@ -1420,6 +1434,17 @@ void spider_store_tables_connect_info(
table->field[SPIDER_TABLES_DSN_POS]->set_null();
table->field[SPIDER_TABLES_DSN_POS]->reset();
}
if (alter_table->tmp_tgt_filedsns[link_idx])
{
table->field[SPIDER_TABLES_FILEDSN_POS]->set_notnull();
table->field[SPIDER_TABLES_FILEDSN_POS]->store(
alter_table->tmp_tgt_filedsns[link_idx],
(uint) alter_table->tmp_tgt_filedsns_lengths[link_idx],
system_charset_info);
} else {
table->field[SPIDER_TABLES_FILEDSN_POS]->set_null();
table->field[SPIDER_TABLES_FILEDSN_POS]->reset();
}
if (alter_table->tmp_tgt_dbs[link_idx])
{
table->field[SPIDER_TABLES_TGT_DB_NAME_POS]->set_notnull();
......@@ -2405,6 +2430,17 @@ int spider_get_sys_server_info(
share->tgt_dsns_lengths[link_idx] = 0;
share->tgt_dsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_XA_MEMBER_FILEDSN_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_XA_MEMBER_FILEDSN_POS]))
) {
share->tgt_filedsns_lengths[link_idx] = strlen(ptr);
share->tgt_filedsns[link_idx] =
spider_create_string(ptr, share->tgt_filedsns_lengths[link_idx]);
} else {
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[link_idx] = NULL;
}
DBUG_RETURN(0);
}
......@@ -2663,6 +2699,17 @@ int spider_get_sys_tables_connect_info(
share->tgt_dsns_lengths[link_idx] = 0;
share->tgt_dsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_TABLES_FILEDSN_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_TABLES_FILEDSN_POS]))
) {
share->tgt_filedsns_lengths[link_idx] = strlen(ptr);
share->tgt_filedsns[link_idx] =
spider_create_string(ptr, share->tgt_filedsns_lengths[link_idx]);
} else {
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[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]))
......@@ -3259,6 +3306,17 @@ int spider_get_sys_link_mon_connect_info(
share->tgt_dsns_lengths[link_idx] = 0;
share->tgt_dsns[link_idx] = NULL;
}
if (
!table->field[SPIDER_LINK_MON_SERVERS_FILEDSN_POS]->is_null() &&
(ptr = get_field(mem_root, table->field[SPIDER_LINK_MON_SERVERS_FILEDSN_POS]))
) {
share->tgt_filedsns_lengths[link_idx] = strlen(ptr);
share->tgt_filedsns[link_idx] =
spider_create_string(ptr, share->tgt_filedsns_lengths[link_idx]);
} else {
share->tgt_filedsns_lengths[link_idx] = 0;
share->tgt_filedsns[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 19
#define SPIDER_SYS_XA_MEMBER_COL_CNT 20
#define SPIDER_SYS_XA_MEMBER_PK_COL_CNT 6
#define SPIDER_SYS_TABLES_COL_CNT 26
#define SPIDER_SYS_TABLES_COL_CNT 27
#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 20
#define SPIDER_SYS_LINK_MON_TABLE_COL_CNT 21
#define SPIDER_SYS_LINK_FAILED_TABLE_COL_CNT 4
#define SPIDER_SYS_XA_FAILED_TABLE_COL_CNT 22
#define SPIDER_SYS_XA_FAILED_TABLE_COL_CNT 23
#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
......
......@@ -810,6 +810,17 @@ int spider_free_share_alloc(
}
spider_free(spider_current_trx, share->tgt_dsns, MYF(0));
}
if (share->tgt_filedsns)
{
for (roop_count = 0; roop_count < (int) share->tgt_filedsns_length;
roop_count++)
{
if (share->tgt_filedsns[roop_count])
spider_free(spider_current_trx, share->tgt_filedsns[roop_count],
MYF(0));
}
spider_free(spider_current_trx, share->tgt_filedsns, MYF(0));
}
if (share->tgt_pk_names)
{
for (roop_count = 0; roop_count < (int) share->tgt_pk_names_length;
......@@ -1020,6 +1031,11 @@ void spider_free_tmp_share_alloc(
spider_free(spider_current_trx, share->tgt_dsns[0], MYF(0));
share->tgt_dsns[0] = NULL;
}
if (share->tgt_filedsns && share->tgt_filedsns[0])
{
spider_free(spider_current_trx, share->tgt_filedsns[0], MYF(0));
share->tgt_filedsns[0] = NULL;
}
if (share->tgt_pk_names && share->tgt_pk_names[0])
{
spider_free(spider_current_trx, share->tgt_pk_names[0], MYF(0));
......@@ -2332,6 +2348,7 @@ int spider_parse_connect_info(
#ifdef HA_CAN_FORCE_BULK_UPDATE
SPIDER_PARAM_INT_WITH_MAX("fbu", force_bulk_update, 0, 1);
#endif
SPIDER_PARAM_STR_LIST("fds", tgt_filedsns);
SPIDER_PARAM_LONGLONG("frd", first_read, 0);
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
SPIDER_PARAM_LONGLONG("hrf", hs_result_free_size, 0);
......@@ -2450,6 +2467,7 @@ int spider_parse_connect_info(
error_num = connect_string_parse.print_param_error();
goto error;
case 7:
SPIDER_PARAM_STR_LIST("filedsn", tgt_filedsns);
SPIDER_PARAM_STR_LIST("wrapper", tgt_wrappers);
SPIDER_PARAM_STR_LIST("ssl_key", tgt_ssl_keys);
SPIDER_PARAM_STR_LIST("pk_name", tgt_pk_names);
......@@ -2743,6 +2761,8 @@ int spider_parse_connect_info(
share->all_link_count = share->tgt_default_groups_length;
if (share->all_link_count < share->tgt_dsns_length)
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_pk_names_length)
share->all_link_count = share->tgt_pk_names_length;
if (share->all_link_count < share->tgt_sequence_names_length)
......@@ -2915,6 +2935,13 @@ int spider_parse_connect_info(
&share->tgt_dsns_charlen,
share->all_link_count)))
goto error;
if ((error_num = spider_increase_string_list(
&share->tgt_filedsns,
&share->tgt_filedsns_lengths,
&share->tgt_filedsns_length,
&share->tgt_filedsns_charlen,
share->all_link_count)))
goto error;
if ((error_num = spider_increase_string_list(
&share->tgt_pk_names,
&share->tgt_pk_names_lengths,
......@@ -3109,6 +3136,8 @@ int spider_parse_connect_info(
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_tgt_dsns,
(uint) (sizeof(char *) * share->all_link_count),
&share_alter->tmp_tgt_filedsns,
(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,
......@@ -3143,6 +3172,8 @@ int spider_parse_connect_info(
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_tgt_dsns_lengths,
(uint) (sizeof(uint *) * share->all_link_count),
&share_alter->tmp_tgt_filedsns_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,
......@@ -3192,6 +3223,8 @@ int spider_parse_connect_info(
sizeof(char *) * share->all_link_count);
memcpy(share_alter->tmp_tgt_dsns, share->tgt_dsns,
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_static_link_ids, share->static_link_ids,
sizeof(char *) * share->all_link_count);
......@@ -3250,6 +3283,9 @@ int spider_parse_connect_info(
memcpy(share_alter->tmp_tgt_dsns_lengths,
share->tgt_dsns_lengths,
sizeof(uint) * share->all_link_count);
memcpy(share_alter->tmp_tgt_filedsns_lengths,
share->tgt_filedsns_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);
......@@ -3273,6 +3309,8 @@ int spider_parse_connect_info(
share->tgt_default_groups_charlen;
share_alter->tmp_tgt_dsns_charlen =
share->tgt_dsns_charlen;
share_alter->tmp_tgt_filedsns_charlen =
share->tgt_filedsns_charlen;
share_alter->tmp_static_link_ids_charlen =
share->static_link_ids_charlen;
......@@ -3294,6 +3332,8 @@ int spider_parse_connect_info(
share->tgt_default_groups_length;
share_alter->tmp_tgt_dsns_length =
share->tgt_dsns_length;
share_alter->tmp_tgt_filedsns_length =
share->tgt_filedsns_length;
share_alter->tmp_static_link_ids_length =
share->static_link_ids_length;
share_alter->tmp_tgt_ports_length = share->tgt_ports_length;
......@@ -3524,7 +3564,19 @@ int spider_parse_connect_info(
{
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_dsns[roop_count], "default_group");
MYF(0), share->tgt_dsns[roop_count], "dsn");
goto error;
}
DBUG_PRINT("info",
("spider tgt_filedsns_lengths[%d] = %u", roop_count,
share->tgt_filedsns_lengths[roop_count]));
if (share->tgt_filedsns_lengths[roop_count] >
SPIDER_CONNECT_INFO_PATH_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_filedsns[roop_count], "filedsn");
goto error;
}
......@@ -4367,7 +4419,8 @@ int spider_create_conn_keys(
+ 1 + 1
+ share->tgt_default_files_lengths[roop_count] + 1
+ share->tgt_default_groups_lengths[roop_count] + 1
+ share->tgt_dsns_lengths[roop_count];
+ share->tgt_dsns_lengths[roop_count] + 1
+ share->tgt_filedsns_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]
......@@ -4551,6 +4604,13 @@ int spider_create_conn_keys(
tmp_name = strmov(tmp_name + 1, share->tgt_dsns[roop_count]);
} else
tmp_name++;
if (share->tgt_filedsns[roop_count])
{
DBUG_PRINT("info",("spider tgt_filedsns[%d]=%s", roop_count,
share->tgt_filedsns[roop_count]));
tmp_name = strmov(tmp_name + 1, share->tgt_filedsns[roop_count]);
} else
tmp_name++;
tmp_name++;
tmp_name++;
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
......@@ -8538,12 +8598,13 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_files = &tmp_connect_info[13];
tmp_share->tgt_default_groups = &tmp_connect_info[14];
tmp_share->tgt_dsns = &tmp_connect_info[15];
tmp_share->tgt_pk_names = &tmp_connect_info[16];
tmp_share->tgt_sequence_names = &tmp_connect_info[17];
tmp_share->static_link_ids = &tmp_connect_info[18];
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];
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
tmp_share->hs_read_socks = &tmp_connect_info[19];
tmp_share->hs_write_socks = &tmp_connect_info[20];
tmp_share->hs_read_socks = &tmp_connect_info[20];
tmp_share->hs_write_socks = &tmp_connect_info[21];
#endif
tmp_share->tgt_ports = &tmp_long[0];
tmp_share->tgt_ssl_vscs = &tmp_long[1];
......@@ -8593,12 +8654,13 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_files_lengths = &tmp_connect_info_length[13];
tmp_share->tgt_default_groups_lengths = &tmp_connect_info_length[14];
tmp_share->tgt_dsns_lengths = &tmp_connect_info_length[15];
tmp_share->tgt_pk_names_lengths = &tmp_connect_info_length[16];
tmp_share->tgt_sequence_names_lengths = &tmp_connect_info_length[17];
tmp_share->static_link_ids_lengths = &tmp_connect_info_length[18];
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];
#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
tmp_share->hs_read_socks_lengths = &tmp_connect_info_length[19];
tmp_share->hs_write_socks_lengths = &tmp_connect_info_length[20];
tmp_share->hs_read_socks_lengths = &tmp_connect_info_length[20];
tmp_share->hs_write_socks_lengths = &tmp_connect_info_length[21];
#endif
tmp_share->server_names_length = 1;
tmp_share->tgt_table_names_length = 1;
......@@ -8616,6 +8678,7 @@ void spider_set_tmp_share_pointer(
tmp_share->tgt_default_files_length = 1;
tmp_share->tgt_default_groups_length = 1;
tmp_share->tgt_dsns_length = 1;
tmp_share->tgt_filedsns_length = 1;
tmp_share->tgt_pk_names_length = 1;
tmp_share->tgt_sequence_names_length = 1;
tmp_share->static_link_ids_length = 1;
......
......@@ -506,6 +506,7 @@ int spider_create_trx_alter_table(
char **tmp_tgt_default_files;
char **tmp_tgt_default_groups;
char **tmp_tgt_dsns;
char **tmp_tgt_filedsns;
char **tmp_static_link_ids;
uint *tmp_server_names_lengths;
uint *tmp_tgt_table_names_lengths;
......@@ -523,6 +524,7 @@ int spider_create_trx_alter_table(
uint *tmp_tgt_default_files_lengths;
uint *tmp_tgt_default_groups_lengths;
uint *tmp_tgt_dsns_lengths;
uint *tmp_tgt_filedsns_lengths;
uint *tmp_static_link_ids_lengths;
long *tmp_tgt_ports;
long *tmp_tgt_ssl_vscs;
......@@ -544,6 +546,7 @@ int spider_create_trx_alter_table(
char *tmp_tgt_default_files_char;
char *tmp_tgt_default_groups_char;
char *tmp_tgt_dsns_char;
char *tmp_tgt_filedsns_char;
char *tmp_static_link_ids_char;
uint old_elements;
......@@ -571,6 +574,7 @@ int spider_create_trx_alter_table(
&tmp_tgt_default_files, (uint) (sizeof(char *) * share->all_link_count),
&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_static_link_ids, (uint) (sizeof(char *) * share->all_link_count),
&tmp_server_names_lengths, (uint) (sizeof(uint) * share->all_link_count),
......@@ -597,6 +601,7 @@ int spider_create_trx_alter_table(
&tmp_tgt_default_groups_lengths,
(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_static_link_ids_lengths,
(uint) (sizeof(uint) * share->all_link_count),
......@@ -638,6 +643,8 @@ int spider_create_trx_alter_table(
(share_alter->tmp_tgt_default_groups_charlen + 1)),
&tmp_tgt_dsns_char, (uint) (sizeof(char) *
(share_alter->tmp_tgt_dsns_charlen + 1)),
&tmp_tgt_filedsns_char, (uint) (sizeof(char) *
(share_alter->tmp_tgt_filedsns_charlen + 1)),
&tmp_static_link_ids_char, (uint) (sizeof(char) *
(share_alter->tmp_static_link_ids_charlen + 1)),
NullS))
......@@ -674,6 +681,7 @@ int spider_create_trx_alter_table(
alter_table->tmp_tgt_default_files = tmp_tgt_default_files;
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_static_link_ids = tmp_static_link_ids;
alter_table->tmp_tgt_ports = tmp_tgt_ports;
......@@ -698,6 +706,7 @@ int spider_create_trx_alter_table(
alter_table->tmp_tgt_default_files_lengths = tmp_tgt_default_files_lengths;
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_static_link_ids_lengths = tmp_static_link_ids_lengths;
for(roop_count = 0; roop_count < (int) share->all_link_count; roop_count++)
......@@ -804,6 +813,12 @@ int spider_create_trx_alter_table(
tmp_tgt_dsns_char +=
share_alter->tmp_tgt_dsns_lengths[roop_count] + 1;
tmp_tgt_filedsns[roop_count] = tmp_tgt_filedsns_char;
memcpy(tmp_tgt_filedsns_char, share_alter->tmp_tgt_filedsns[roop_count],
sizeof(char) * share_alter->tmp_tgt_filedsns_lengths[roop_count]);
tmp_tgt_filedsns_char +=
share_alter->tmp_tgt_filedsns_lengths[roop_count] + 1;
if (share_alter->tmp_static_link_ids[roop_count])
{
tmp_static_link_ids[roop_count] = tmp_static_link_ids_char;
......@@ -859,6 +874,8 @@ int spider_create_trx_alter_table(
sizeof(uint) * share->all_link_count);
memcpy(tmp_tgt_dsns_lengths, share_alter->tmp_tgt_dsns_lengths,
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_static_link_ids_lengths,
share_alter->tmp_static_link_ids_lengths,
sizeof(uint) * share->all_link_count);
......@@ -895,6 +912,8 @@ int spider_create_trx_alter_table(
share_alter->tmp_tgt_default_groups_length;
alter_table->tmp_tgt_dsns_length =
share_alter->tmp_tgt_dsns_length;
alter_table->tmp_tgt_filedsns_length =
share_alter->tmp_tgt_filedsns_length;
alter_table->tmp_static_link_ids_length =
share_alter->tmp_static_link_ids_length;
alter_table->tmp_tgt_ports_length =
......@@ -1108,6 +1127,16 @@ bool spider_cmp_trx_alter_table(
cmp2->tmp_tgt_dsns[roop_count])
)
) ||
(
cmp1->tmp_tgt_filedsns[roop_count] !=
cmp2->tmp_tgt_filedsns[roop_count] &&
(
!cmp1->tmp_tgt_filedsns[roop_count] ||
!cmp2->tmp_tgt_filedsns[roop_count] ||
strcmp(cmp1->tmp_tgt_filedsns[roop_count],
cmp2->tmp_tgt_filedsns[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