← Back to team overview

maria-developers team mailing list archive

Re: Rev 3847: Client attributes

 

02.10.2013 18:13, Sergei Golubchik пишет:
Hi, Sanja!

On Oct 02, sanja@xxxxxxxxxxxx wrote:

=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc	2013-07-21 14:39:19 +0000
+++ b/client/mysqltest.cc	2013-10-02 13:54:55 +0000
@@ -5648,6 +5648,10 @@ void safe_connect(MYSQL* mysql, const ch
    verbose_msg("Connecting to server %s:%d (socket %s) as '%s'"
                ", connection '%s', attempt %d ...",
                host, port, sock, user, name, failed_attempts);
+
+  mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
+  mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
+                 "program_name", "mysqltest");
Did you test connecting without connection attributes?
e.g. 5.5 client and 10.0 server?
and mysql-5.5 client? And mysql-5.6 client?
please do, at least manually
I tested it works (attributes are compatible and if they are not supported it does not prevent other functions).

    while(!mysql_real_connect(mysql, host,user, pass, db, port, sock,
                              CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS))
    {

=== modified file 'include/mysql.h'
--- a/include/mysql.h	2013-07-18 14:46:57 +0000
+++ b/include/mysql.h	2013-10-02 13:54:55 +0000
@@ -557,6 +557,8 @@ int             STDCALL mysql_list_proce
                                                    int status);
  int		STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
  				      const void *arg);
+int             STDCALL mysql_options4(MYSQL *mysql,enum mysql_option option,
+                                       const void *arg1, const void *arg2);
This is pretty silly, I'd rather have

   mysql_optionv(MYSQL *mysql, enum mysql_option option, ...)

or even (redefining the existing function):

   mysql_option(MYSQL *mysql, enum mysql_option option, ...)

but we're copying MySQL here, so we don't have much of a choice

  void		STDCALL mysql_free_result(MYSQL_RES *result);
  int             STDCALL mysql_free_result_start(MYSQL_RES *result);
  int             STDCALL mysql_free_result_cont(MYSQL_RES *result, int status);

=== modified file 'sql/sql_acl.cc'
--- a/sql/sql_acl.cc	2013-09-21 08:14:42 +0000
+++ b/sql/sql_acl.cc	2013-10-02 13:54:55 +0000
@@ -8570,7 +8628,13 @@ static ulong parse_client_handshake_pack
          mpvio->acl_user->plugin= old_password_plugin_name;
      }
    }
-
+
+  if (db &&
Why do you check for db being not NULL?
removed and its works.

+      (thd->client_capabilities & CLIENT_CONNECT_ATTRS) &&
+      read_client_connect_attrs(&next_field, ((char *)net->read_pos) + pkt_len,
+                                mpvio->thd->charset()))
+    return packet_error;
+
    /*
      if the acl_user needs a different plugin to authenticate
      (specified in GRANT ... AUTHENTICATED VIA plugin_name ..)

=== modified file 'sql/sys_vars.cc'
--- a/sql/sys_vars.cc	2013-09-21 08:14:42 +0000
+++ b/sql/sys_vars.cc	2013-10-02 13:54:55 +0000
@@ -71,6 +71,7 @@
  #define export /* not static */
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+#ifndef EMBEDDED_LIBRARY
Why is this?
removed (it actually caused bug)

The big question is if embedded does not support performance schema should we remove all performance schema control variables?

static Sys_var_mybool Sys_pfs_enabled(
         "performance_schema",
Regards,
Sergei



Follow ups

References