mirror of
https://github.com/ansible-collections/community.mysql.git
synced 2025-04-21 01:41:26 -07:00
Allow the "%" character in database name
The naming rules for MySQL/MariaDB identifiers, when quoted, allow the `%` character. However, currently, the use of the `%` character in database names results in mismatch or missing databases. - Rewrite query to identify the databases in the catalog using `information_schema` instead of `SHOW DATABASES LIKE` - Escape the `%` character in `CREATE DATABASE` query. Signed-off-by: Nicolas Payart <npayart@gmail.com>
This commit is contained in:
parent
f47d4635f1
commit
1c5a23b2c3
4 changed files with 309 additions and 285 deletions
|
@ -330,7 +330,7 @@ executed_commands = []
|
|||
def db_exists(cursor, db):
|
||||
res = 0
|
||||
for each_db in db:
|
||||
res += cursor.execute("SHOW DATABASES LIKE %s", (each_db.replace("_", r"\_"),))
|
||||
res += cursor.execute("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = %s", (each_db,))
|
||||
return res == len(db)
|
||||
|
||||
|
||||
|
@ -519,7 +519,8 @@ def db_create(cursor, db, encoding, collation):
|
|||
query_params = dict(enc=encoding, collate=collation)
|
||||
res = 0
|
||||
for each_db in db:
|
||||
query = ['CREATE DATABASE %s' % mysql_quote_identifier(each_db, 'database')]
|
||||
# Escape '%' since mysql cursor.execute() uses a format string
|
||||
query = ['CREATE DATABASE %s' % mysql_quote_identifier(each_db, 'database').replace('%', '%%')]
|
||||
if encoding:
|
||||
query.append("CHARACTER SET %(enc)s")
|
||||
if collation:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue