diff --git a/include/ma_dyncol.h b/include/ma_dyncol.h index cacd8f66c50..cb03ccb5382 100644 --- a/include/ma_dyncol.h +++ b/include/ma_dyncol.h @@ -220,6 +220,9 @@ mariadb_dyncol_unpack(DYNAMIC_COLUMN *str, uint *count, MYSQL_LEX_STRING **names, DYNAMIC_COLUMN_VALUE **vals); +void mariadb_dyncol_unpack_free(MYSQL_LEX_STRING *names, + DYNAMIC_COLUMN_VALUE *vals); + int mariadb_dyncol_column_cmp_named(const MYSQL_LEX_STRING *s1, const MYSQL_LEX_STRING *s2); diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index e3c932c88f0..9480b2b218c 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -248,6 +248,7 @@ mariadb_dyncol_val_str mariadb_dyncol_val_long mariadb_dyncol_val_double mariadb_dyncol_unpack +mariadb_dyncol_unpack_free mariadb_dyncol_column_cmp_named mariadb_dyncol_column_count mariadb_dyncol_prepare_decimal diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c index 98319f2aafe..3b5e05f1b01 100644 --- a/mysys/ma_dyncol.c +++ b/mysys/ma_dyncol.c @@ -4316,6 +4316,18 @@ err: return rc; } +/** + Free arrays allocated by mariadb_dyncol_unpack() + + @param names Where to put names (should be free by user) + @param vals Where to put values (should be free by user) +*/ +void mariadb_dyncol_unpack_free(LEX_STRING *names, DYNAMIC_COLUMN_VALUE *vals) +{ + my_free(names); + my_free(vals); +} + /** Get not NULL column count diff --git a/storage/cassandra/ha_cassandra.cc b/storage/cassandra/ha_cassandra.cc index 3fbe1834f89..7e2d7efe87d 100644 --- a/storage/cassandra/ha_cassandra.cc +++ b/storage/cassandra/ha_cassandra.cc @@ -1925,16 +1925,9 @@ int ha_cassandra::write_dynamic_row(uint count, void ha_cassandra::free_dynamic_row(DYNAMIC_COLUMN_VALUE **vals, LEX_STRING **names) { - if (*vals) - { - my_free(*vals); - *vals= 0; - } - if (*names) - { - my_free(*names); - *names= 0; - } + mariadb_dyncol_unpack_free(*names, *vals); + *vals= 0; + *names= 0; } int ha_cassandra::write_row(uchar *buf)