diff --git a/plugins/module_utils/mysql.py b/plugins/module_utils/mysql.py index 18e34e0..214c18d 100644 --- a/plugins/module_utils/mysql.py +++ b/plugins/module_utils/mysql.py @@ -34,7 +34,47 @@ mysql_driver_fail_msg = ('A MySQL module is required: for Python 2.7 either PyMy 'Consider setting ansible_python_interpreter to use ' 'the intended Python version.') -from ansible_collections.community.mysql.plugins.module_utils.database import mysql_quote_identifier + +def get_driver_name(mysql_driver): + """ (class) -> str + Return the name of the driver (pymysql or mysqlclient (MySQLdb)) + or 'Unknown' if the driver name is not pymysql or MySQLdb. When adding a + connector here, also modify get_driver_version. + """ + if mysql_driver is None or not hasattr(mysql_driver, '__name__'): + return 'Unknown' + + if mysql_driver.__name__ not in ['pymysql', 'MySQLdb']: + return 'Unknown' + + return mysql_driver.__name__ + + +def get_driver_version(mysql_driver): + """ (class) -> str + Return the version of pymysql or mysqlclient (MySQLdb). + If the driver name is unknown, this method also return 'Unknown' + """ + + if mysql_driver is None: + return 'Unknown' + + driver_name = get_driver_name(mysql_driver) + + if driver_name == 'Unknown': + return 'Unknown' + + if driver_name == 'pymysql': + # pymysql has two methods: + # - __version__ that returns the string: 0.7.11.None + # - VERSION that returns the tupple (0, 7, 11, None) + v = mysql_driver.VERSION[:3] + return '.'.join(map(str, v)) + + if driver_name == 'MySQLdb': + # version_info returns the tuple (2, 1, 1, 'final', 0) + v = mysql_driver.version_info[:3] + return '.'.join(map(str, v)) def parse_from_mysql_config_file(cnf):