diff --git a/include/ma_common.h b/include/ma_common.h index 1ac0cb68..252fdb32 100644 --- a/include/ma_common.h +++ b/include/ma_common.h @@ -87,6 +87,7 @@ struct st_mysql_options_extension { void (*status_callback)(void *ptr, enum enum_mariadb_status_info type, ...); void *status_data; my_bool tls_verify_server_cert; + char zstd_compression_level; }; typedef struct st_connection_handler diff --git a/include/mysql.h b/include/mysql.h index 76b16830..effec1b1 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -223,6 +223,7 @@ extern const char *SQLSTATE_UNKNOWN; MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, + MYSQL_OPT_ZSTD_COMPRESSION_LEVEL, /* MariaDB specific */ MYSQL_PROGRESS_CALLBACK=5999, diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 7d5f6241..9d89fef3 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -711,6 +711,7 @@ struct st_default_options mariadb_defaults[] = {{MYSQL_OPT_SSL_ENFORCE}, MARIADB_OPTION_BOOL, "tls-enforce"}, {{MYSQL_OPT_SSL_VERIFY_SERVER_CERT}, MARIADB_OPTION_BOOL,"tls-verify-peer"}, {{MARIADB_OPT_RESTRICTED_AUTH}, MARIADB_OPTION_STR, "restricted-auth"}, + {{MYSQL_OPT_ZSTD_COMPRESSION_LEVEL}, MARIADB_OPTION_INT, "zstd-compression-level"}, {{0}, 0, NULL} }; @@ -3836,6 +3837,9 @@ mysql_optionsv(MYSQL *mysql,enum mysql_option option, ...) } } break; + case MYSQL_OPT_ZSTD_COMPRESSION_LEVEL: + OPT_SET_EXTENDED_VALUE_INT(&mysql->options, zstd_compression_level, *((unsigned int *)arg1)); + break; default: va_end(ap); SET_CLIENT_ERROR(mysql, CR_NOT_IMPLEMENTED, SQLSTATE_UNKNOWN, 0); diff --git a/plugins/auth/my_auth.c b/plugins/auth/my_auth.c index 6c17259b..e21da3b0 100644 --- a/plugins/auth/my_auth.c +++ b/plugins/auth/my_auth.c @@ -407,7 +407,14 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio, */ if (mysql->client_flag & CLIENT_ZSTD_COMPRESSION) { - *end++= 3; + uchar compression_level= 3; + if (mysql->options.extension && + mysql->options.extension->zstd_compression_level >= 1 && + mysql->options.extension->zstd_compression_level <= 20) + { + compression_level= mysql->options.extension->zstd_compression_level; + } + *end++= compression_level; } /* Write authentication package */