mysql_stmt_bind_param is deprecated
Discovered since the Kea 2.5.5 sanity checks, but due to time constraints, the issue was branched off of #3256 (closed) which was supposed to fix it because it requires a bit of work to pass all the named bound parameters to the new function. There needs to be a generic way of retrieving these names based on the statement index, because we have functions that bind based on the statement index alone, which is more reason why this task is time-consuming.
From the MySQL docs:
Note
mysql_stmt_bind_param()
is deprecated and subject to removal in a future version of MySQL. It is replaced bymysql_stmt_bind_named_param()
.
From the 8.2.0 release notes:
The client library now supports the use of query attributes in prepared statements with the introduction of mysql_stmt_bind_named_param(), a new C API prepared statement function. mysql_stmt_bind_named_param() replaces the now deprecated mysql_stmt_bind_param() function. Unlike mysql_stmt_bind_param(), mysql_stmt_bind_named_param() enables binding both unnamed and named parameters of a prepared statement. For an overview of the interface, see C API Prepared Statement Interface. (Bug #35435138, WL #15803)
From the 8.3.0 release notes:
The compiler now emits a deprecation warning for the mysql_stmt_bind_param() C API function, which was deprecated in MySQL 8.2.0 and superseded by mysql_stmt_bind_named_param(). (Bug #35819974)
From the 8.4.0 release notes:
Important Change: The following MySQL C API functions, removed in MySQL 8.3, have been reimplemented and restored in MySQL 8.4.0:
- mysql_stmt_bind_param()
The functions just listed are supported for the lifetime of the MySQL 8.4 series. (WL #16221)
And the reported warnings:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
./mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_impl.cc:9:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:535:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_impl.cc:208:11: note: in instantiation of function template specialization 'isc::db::MySqlConnection::insertQuery<int>' requested here
conn_.insertQuery(index, in_bindings);
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_impl.cc:9:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:460:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_impl.cc:247:15: note: in instantiation of function template specialization 'isc::db::MySqlConnection::selectQuery<int>' requested here
conn_.selectQuery(index, in_bindings, out_bindings,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_callouts.cc:16:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
./mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6.cc:10:
In file included from ./mysql_cb_dhcp6.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
./mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp4.cc:9:
In file included from ./mysql_cb_dhcp4.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
./mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6.cc:10:
In file included from ./mysql_cb_dhcp6.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp6.cc:251:19: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<isc::dhcp::MySqlConfigBackendDHCPv6Impl::StatementIndex>' requested here
if (conn_.updateDeleteQuery(MySqlConfigBackendDHCPv6Impl::UPDATE_GLOBAL_PARAMETER6,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6.cc:10:
In file included from ./mysql_cb_dhcp6.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:535:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp6.cc:257:19: note: in instantiation of function template specialization 'isc::db::MySqlConnection::insertQuery<isc::dhcp::MySqlConfigBackendDHCPv6Impl::StatementIndex>' requested here
conn_.insertQuery(MySqlConfigBackendDHCPv6Impl::INSERT_GLOBAL_PARAMETER6,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6.cc:10:
In file included from ./mysql_cb_dhcp6.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:460:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp6.cc:407:15: note: in instantiation of function template specialization 'isc::db::MySqlConnection::selectQuery<isc::dhcp::MySqlConfigBackendDHCPv6Impl::StatementIndex>' requested here
conn_.selectQuery(index, in_bindings, out_bindings,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp4.cc:9:
In file included from ./mysql_cb_dhcp4.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp4.cc:242:19: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<isc::dhcp::MySqlConfigBackendDHCPv4Impl::StatementIndex>' requested here
if (conn_.updateDeleteQuery(MySqlConfigBackendDHCPv4Impl::UPDATE_GLOBAL_PARAMETER4,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp4.cc:9:
In file included from ./mysql_cb_dhcp4.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:535:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp4.cc:248:19: note: in instantiation of function template specialization 'isc::db::MySqlConnection::insertQuery<isc::dhcp::MySqlConfigBackendDHCPv4Impl::StatementIndex>' requested here
conn_.insertQuery(MySqlConfigBackendDHCPv4Impl::INSERT_GLOBAL_PARAMETER4,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp4.cc:9:
In file included from ./mysql_cb_dhcp4.h:10:
In file included from ./mysql_cb_impl.h:25:
../../../../src/lib/mysql/mysql_connection.h:460:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
status = mysql_stmt_bind_param(getStatement(index),
^
mysql_cb_dhcp4.cc:371:15: note: in instantiation of function template specialization 'isc::db::MySqlConnection::selectQuery<isc::dhcp::MySqlConfigBackendDHCPv4Impl::StatementIndex>' requested here
conn_.selectQuery(index, in_bindings, out_bindings,
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_impl_unittest.cc:8:
In file included from ../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:25:
../../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
1 warning generated.
In file included from mysql_cb_dhcp4_mgr_unittest.cc:10:
In file included from ../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.h:10:
In file included from ../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:25:
../../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6_mgr_unittest.cc:10:
In file included from ../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.h:10:
In file included from ../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:25:
../../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
1 warning generated.
1 warning generated.
In file included from mysql_cb_dhcp4_unittest.cc:15:
In file included from ../../../../../src/lib/dhcpsrv/testutils/mysql_generic_backend_unittest.h:11:
../../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
In file included from mysql_cb_dhcp6_unittest.cc:15:
In file included from ../../../../../src/lib/dhcpsrv/testutils/mysql_generic_backend_unittest.h:11:
../../../../../src/lib/mysql/mysql_connection.h:579:22: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(getStatement(index),
^
../../../../../src/hooks/dhcp/mysql_cb/mysql_cb_impl.h:294:23: note: in instantiation of function template specialization 'isc::db::MySqlConnection::updateDeleteQuery<int>' requested here
return (conn_.updateDeleteQuery(index, in_bindings));
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
1 warning generated.
mysql_legal_log.cc:382:18: warning: 'mysql_stmt_bind_param' is deprecated: Use mysql_stmt_bind_named_param() instead. [-Wdeprecated-declarations]
int status = mysql_stmt_bind_param(ctx->conn_.getStatement(INSERT_LOG),
^
/usr/local/Cellar/mysql/8.3.0/include/mysql/mysql.h:764:3: note: 'mysql_stmt_bind_param' has been explicitly marked deprecated here
[[deprecated("Use mysql_stmt_bind_named_param() instead.")]]
^
1 warning generated.