DBD-MariaDB
view release on metacpan or search on metacpan
}
imp_dbh->bind_type_guessing = bool_value;
}
else if (memEQs(key, kl, "mariadb_bind_comment_placeholders"))
imp_dbh->bind_comment_placeholders = bool_value;
#ifdef HAVE_FABRIC
else if (memEQs(key, kl, "mariadb_fabric_opt_group"))
{
STRLEN len;
char *str = SvPVutf8_nomg(valuesv, len);
if (strlen(str) != len)
{
error_nul_character(dbh, "mariadb_fabric_opt_group");
return 0;
}
if (!imp_dbh->pmysql && !mariadb_db_reconnect(dbh, NULL))
{
mariadb_dr_do_error(dbh, CR_SERVER_GONE_ERROR, "MySQL server has gone away", "HY000");
return 0;
}
mysql_options(imp_dbh->pmysql, FABRIC_OPT_GROUP, str);
}
else if (memEQs(key, kl, "mariadb_fabric_opt_default_mode"))
{
if (!imp_dbh->pmysql && !mariadb_db_reconnect(dbh, NULL))
{
mariadb_dr_do_error(dbh, CR_SERVER_GONE_ERROR, "MySQL server has gone away", "HY000");
return 0;
}
if (SvOK(valuesv)) {
STRLEN len;
const char *str = SvPV_nomg(valuesv, len);
if (len == 0 || memEQs(str, len, "ro") || memEQs(str, len, "rw"))
mysql_options(imp_dbh->pmysql, FABRIC_OPT_DEFAULT_MODE, len == 0 ? NULL : str);
else
{
mariadb_dr_do_error(dbh, CR_UNKNOWN_ERROR, "Valid settings for FABRIC_OPT_DEFAULT_MODE are 'ro', 'rw', or undef/empty string", "HY000");
return 0;
}
}
else {
mysql_options(imp_dbh->pmysql, FABRIC_OPT_DEFAULT_MODE, NULL);
}
}
else if (memEQs(key, kl, "mariadb_fabric_opt_mode"))
{
STRLEN len;
const char *str = SvPV_nomg(valuesv, len);
if (!memEQs(str, len, "ro") && !memEQs(str, len, "rw"))
{
mariadb_dr_do_error(dbh, CR_UNKNOWN_ERROR, "Valid settings for FABRIC_OPT_MODE are 'ro' or 'rw'", "HY000");
return 0;
}
if (!imp_dbh->pmysql && !mariadb_db_reconnect(dbh, NULL))
{
mariadb_dr_do_error(dbh, CR_SERVER_GONE_ERROR, "MySQL server has gone away", "HY000");
return 0;
}
mysql_options(imp_dbh->pmysql, FABRIC_OPT_MODE, str);
}
else if (memEQs(key, kl, "mariadb_fabric_opt_group_credentials"))
{
mariadb_dr_do_error(dbh, CR_UNKNOWN_ERROR, "'fabric_opt_group_credentials' is not supported", "HY000");
return 0;
}
#endif
else if (memEQs(key, kl, "mariadb_max_allowed_packet"))
{
if (imp_dbh->is_embedded)
{
mariadb_dr_do_error(dbh, CR_UNKNOWN_ERROR, "mariadb_max_allowed_packet is not supported for Embedded server", "HY000");
return 0;
}
#if (!defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 50709 && MYSQL_VERSION_ID != 60000) || (defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100206 && MYSQL_VERSION_ID != 100300)
/* MYSQL_OPT_MAX_ALLOWED_PACKET was added in mysql 5.7.9 */
/* MYSQL_OPT_MAX_ALLOWED_PACKET was added in MariaDB 10.2.6 and MariaDB 10.3.1 */
UV uv = SvUV_nomg(valuesv);
unsigned long packet_size = (uv <= ULONG_MAX ? uv : ULONG_MAX);
if (!imp_dbh->pmysql && !mariadb_db_reconnect(dbh, NULL))
{
mariadb_dr_do_error(dbh, CR_SERVER_GONE_ERROR, "MySQL server has gone away", "HY000");
return 0;
}
mysql_options(imp_dbh->pmysql, MYSQL_OPT_MAX_ALLOWED_PACKET, &packet_size);
#else
/* before MySQL 5.7.9 and MariaDB 10.2.6 and MariaDB 10.3.0 it is not possible to change max_allowed_packet after connection was established */
if (imp_dbh->connected)
mariadb_dr_do_error(dbh, CR_UNKNOWN_ERROR, "Changing mariadb_max_allowed_packet is not supported after connection was established", "HY000");
return 0;
#endif
}
else if (memEQs(key, kl, "mariadb_multi_statements"))
{
if (!imp_dbh->connected) /* When not connected, it is handled in mariadb_dr_connect() */
return 0;
if (!imp_dbh->pmysql && !mariadb_db_reconnect(dbh, NULL))
{
mariadb_dr_do_error(dbh, CR_SERVER_GONE_ERROR, "MySQL server has gone away", "HY000");
return 0;
}
if (mysql_set_server_option(imp_dbh->pmysql, bool_value ? MYSQL_OPTION_MULTI_STATEMENTS_ON : MYSQL_OPTION_MULTI_STATEMENTS_OFF) != 0)
{
mariadb_dr_do_error(dbh, mysql_errno(imp_dbh->pmysql), mysql_error(imp_dbh->pmysql), mysql_sqlstate(imp_dbh->pmysql));
return 0;
}
imp_dbh->use_multi_statements = bool_value;
}
else
{
if (imp_dbh->connected) /* Ignore unknown attributes passed by DBI->connect, they are handled in mariadb_dr_connect() */
error_unknown_attribute(dbh, key);
return 0;
}
}
else
{
if (!skip_attribute(key)) /* Not handled by this driver */
error_unknown_attribute(dbh, key);
return 0;
}
return 1;
}
( run in 2.655 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )