@@ -413,6 +413,23 @@ int spider_udf_direct_sql_create_conn_key(
413413 DBUG_RETURN (0 );
414414}
415415
416+ static inline void spider_maybe_memcpy_string (
417+ char **dest,
418+ char *src,
419+ char *tmp,
420+ uint *dest_len,
421+ uint src_len)
422+ {
423+ *dest_len= src_len;
424+ if (src_len)
425+ {
426+ *dest= tmp;
427+ memcpy (*dest, src, src_len);
428+ } else
429+ *dest= NULL ;
430+ }
431+
432+
416433SPIDER_CONN *spider_udf_direct_sql_create_conn (
417434 const SPIDER_DIRECT_SQL *direct_sql,
418435 int *error_num
@@ -504,89 +521,43 @@ SPIDER_CONN *spider_udf_direct_sql_create_conn(
504521 {
505522#endif
506523 conn->tgt_port = direct_sql->tgt_port ;
507- conn->tgt_socket_length = direct_sql->tgt_socket_length ;
508- conn->tgt_socket = tmp_socket;
509- memcpy (conn->tgt_socket , direct_sql->tgt_socket ,
510- direct_sql->tgt_socket_length );
524+ spider_maybe_memcpy_string (
525+ &conn->tgt_socket , direct_sql->tgt_socket , tmp_socket,
526+ &conn->tgt_socket_length , direct_sql->tgt_socket_length );
511527 if (!tables_on_different_db_are_joinable)
512- {
513- conn->tgt_db_length = direct_sql->tgt_default_db_name_length ;
514- conn->tgt_db = tmp_db;
515- memcpy (conn->tgt_db , direct_sql->tgt_default_db_name ,
516- direct_sql->tgt_default_db_name_length );
517- }
518- conn->tgt_username_length = direct_sql->tgt_username_length ;
519- conn->tgt_username = tmp_username;
520- memcpy (conn->tgt_username , direct_sql->tgt_username ,
521- direct_sql->tgt_username_length );
522- conn->tgt_password_length = direct_sql->tgt_password_length ;
523- conn->tgt_password = tmp_password;
524- memcpy (conn->tgt_password , direct_sql->tgt_password ,
525- direct_sql->tgt_password_length );
526- conn->tgt_ssl_ca_length = direct_sql->tgt_ssl_ca_length ;
527- if (conn->tgt_ssl_ca_length )
528- {
529- conn->tgt_ssl_ca = tmp_ssl_ca;
530- memcpy (conn->tgt_ssl_ca , direct_sql->tgt_ssl_ca ,
531- direct_sql->tgt_ssl_ca_length );
532- } else
533- conn->tgt_ssl_ca = NULL ;
534- conn->tgt_ssl_capath_length = direct_sql->tgt_ssl_capath_length ;
535- if (conn->tgt_ssl_capath_length )
536- {
537- conn->tgt_ssl_capath = tmp_ssl_capath;
538- memcpy (conn->tgt_ssl_capath , direct_sql->tgt_ssl_capath ,
539- direct_sql->tgt_ssl_capath_length );
540- } else
541- conn->tgt_ssl_capath = NULL ;
542- conn->tgt_ssl_cert_length = direct_sql->tgt_ssl_cert_length ;
543- if (conn->tgt_ssl_cert_length )
544- {
545- conn->tgt_ssl_cert = tmp_ssl_cert;
546- memcpy (conn->tgt_ssl_cert , direct_sql->tgt_ssl_cert ,
547- direct_sql->tgt_ssl_cert_length );
548- } else
549- conn->tgt_ssl_cert = NULL ;
550- conn->tgt_ssl_cipher_length = direct_sql->tgt_ssl_cipher_length ;
551- if (conn->tgt_ssl_cipher_length )
552- {
553- conn->tgt_ssl_cipher = tmp_ssl_cipher;
554- memcpy (conn->tgt_ssl_cipher , direct_sql->tgt_ssl_cipher ,
555- direct_sql->tgt_ssl_cipher_length );
556- } else
557- conn->tgt_ssl_cipher = NULL ;
558- conn->tgt_ssl_key_length = direct_sql->tgt_ssl_key_length ;
559- if (conn->tgt_ssl_key_length )
560- {
561- conn->tgt_ssl_key = tmp_ssl_key;
562- memcpy (conn->tgt_ssl_key , direct_sql->tgt_ssl_key ,
563- direct_sql->tgt_ssl_key_length );
564- } else
565- conn->tgt_ssl_key = NULL ;
566- conn->tgt_default_file_length = direct_sql->tgt_default_file_length ;
567- if (conn->tgt_default_file_length )
568- {
569- conn->tgt_default_file = tmp_default_file;
570- memcpy (conn->tgt_default_file , direct_sql->tgt_default_file ,
571- direct_sql->tgt_default_file_length );
572- } else
573- conn->tgt_default_file = NULL ;
574- conn->tgt_default_group_length = direct_sql->tgt_default_group_length ;
575- if (conn->tgt_default_group_length )
576- {
577- conn->tgt_default_group = tmp_default_group;
578- memcpy (conn->tgt_default_group , direct_sql->tgt_default_group ,
579- direct_sql->tgt_default_group_length );
580- } else
581- conn->tgt_default_group = NULL ;
582- conn->tgt_dsn_length = direct_sql->tgt_dsn_length ;
583- if (conn->tgt_dsn_length )
584- {
585- conn->tgt_dsn = tmp_dsn;
586- memcpy (conn->tgt_dsn , direct_sql->tgt_dsn ,
587- direct_sql->tgt_dsn_length );
588- } else
589- conn->tgt_dsn = NULL ;
528+ spider_maybe_memcpy_string (
529+ &conn->tgt_db , direct_sql->tgt_default_db_name , tmp_db,
530+ &conn->tgt_db_length , direct_sql->tgt_default_db_name_length );
531+ spider_maybe_memcpy_string (
532+ &conn->tgt_username , direct_sql->tgt_username , tmp_username,
533+ &conn->tgt_username_length , direct_sql->tgt_username_length );
534+ spider_maybe_memcpy_string (
535+ &conn->tgt_password , direct_sql->tgt_password , tmp_password,
536+ &conn->tgt_password_length , direct_sql->tgt_password_length );
537+ spider_maybe_memcpy_string (
538+ &conn->tgt_ssl_ca , direct_sql->tgt_ssl_ca , tmp_ssl_ca,
539+ &conn->tgt_ssl_ca_length , direct_sql->tgt_ssl_ca_length );
540+ spider_maybe_memcpy_string (
541+ &conn->tgt_ssl_capath , direct_sql->tgt_ssl_capath , tmp_ssl_capath,
542+ &conn->tgt_ssl_capath_length , direct_sql->tgt_ssl_capath_length );
543+ spider_maybe_memcpy_string (
544+ &conn->tgt_ssl_cert , direct_sql->tgt_ssl_cert , tmp_ssl_cert,
545+ &conn->tgt_ssl_cert_length , direct_sql->tgt_ssl_cert_length );
546+ spider_maybe_memcpy_string (
547+ &conn->tgt_ssl_cipher , direct_sql->tgt_ssl_cipher , tmp_ssl_cipher,
548+ &conn->tgt_ssl_cipher_length , direct_sql->tgt_ssl_cipher_length );
549+ spider_maybe_memcpy_string (
550+ &conn->tgt_ssl_key , direct_sql->tgt_ssl_key , tmp_ssl_key,
551+ &conn->tgt_ssl_key_length , direct_sql->tgt_ssl_key_length );
552+ spider_maybe_memcpy_string (
553+ &conn->tgt_default_file , direct_sql->tgt_default_file , tmp_default_file,
554+ &conn->tgt_default_file_length , direct_sql->tgt_default_file_length );
555+ spider_maybe_memcpy_string (
556+ &conn->tgt_default_group , direct_sql->tgt_default_group , tmp_default_group,
557+ &conn->tgt_default_group_length , direct_sql->tgt_default_group_length );
558+ spider_maybe_memcpy_string (
559+ &conn->tgt_dsn , direct_sql->tgt_dsn , tmp_dsn,
560+ &conn->tgt_dsn_length , direct_sql->tgt_dsn_length );
590561 conn->tgt_ssl_vsc = direct_sql->tgt_ssl_vsc ;
591562#if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET)
592563 } else {
0 commit comments