Skip to content

Commit d613b55

Browse files
authored
fix(mysql): generate IF NOT EXISTS if force=True (#10785)
1 parent c7d1d38 commit d613b55

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

ibis/backends/mysql/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,14 @@ def get_schema(
244244
return sch.Schema(fields)
245245

246246
def create_database(self, name: str, force: bool = False) -> None:
247-
sql = sge.Create(kind="DATABASE", exist=force, this=sg.to_identifier(name)).sql(
248-
self.name
249-
)
247+
sql = sge.Create(
248+
kind="DATABASE", exists=force, this=sg.to_identifier(name)
249+
).sql(self.name)
250250
with self.begin() as cur:
251251
cur.execute(sql)
252252

253253
def drop_database(self, name: str, force: bool = False) -> None:
254-
sql = sge.Drop(kind="DATABASE", exist=force, this=sg.to_identifier(name)).sql(
254+
sql = sge.Drop(kind="DATABASE", exists=force, this=sg.to_identifier(name)).sql(
255255
self.name
256256
)
257257
with self.begin() as cur:

ibis/backends/mysql/tests/test_client.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
MYSQL_PASS,
1919
MYSQL_USER,
2020
)
21-
from ibis.backends.tests.errors import MySQLOperationalError
21+
from ibis.backends.tests.errors import MySQLOperationalError, MySQLProgrammingError
2222
from ibis.util import gen_name
2323

2424
MYSQL_TYPES = [
@@ -245,3 +245,25 @@ def test_invalid_port():
245245
url = f"mysql://{MYSQL_USER}:{MYSQL_PASS}@{MYSQL_HOST}:{port}/{IBIS_TEST_MYSQL_DB}"
246246
with pytest.raises(MySQLOperationalError):
247247
ibis.connect(url)
248+
249+
250+
def test_create_database_exists(con):
251+
con.create_database(dbname := gen_name("dbname"))
252+
253+
with pytest.raises(MySQLProgrammingError):
254+
con.create_database(dbname)
255+
256+
con.create_database(dbname, force=True)
257+
258+
con.drop_database(dbname, force=True)
259+
260+
261+
def test_drop_database_exists(con):
262+
con.create_database(dbname := gen_name("dbname"))
263+
264+
con.drop_database(dbname)
265+
266+
with pytest.raises(MySQLOperationalError):
267+
con.drop_database(dbname)
268+
269+
con.drop_database(dbname, force=True)

0 commit comments

Comments
 (0)