Skip to content

Commit 0b8fdec

Browse files
authored
Merge pull request #796 from SukiCZ/fix/use_after_create_delete
Fix/use after create delete
2 parents 26a25be + de1e7fe commit 0b8fdec

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Features:
1616
* Mark `update` without `where`-clause as destructive query (Thanks: [Klaus Wünschel]).
1717
* Added DELIMITER command (Thanks: [Georgy Frolov])
1818
* Added clearer error message when failing to connect to the default socket.
19+
* Extend main.is_dropping_database check with create after delete statement.
1920
* Search `${XDG_CONFIG_HOME}/mycli/myclirc` after `${HOME}/.myclirc` and before `/etc/myclirc` (Thanks: [Takeshi D. Itoh])
2021

2122
Bug Fixes:

mycli/AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ Contributors:
6868
* Mike Palandra
6969
* Georgy Frolov
7070
* Jonathan Lloyd
71+
* Jakub Boukal
7172
* Takeshi D. Itoh
7273
* laixintao
7374

mycli/packages/parseutils.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ def is_open_quote(sql):
241241

242242
def is_dropping_database(queries, dbname):
243243
"""Determine if the query is dropping a specific database."""
244+
result = False
244245
if dbname is None:
245246
return False
246247

@@ -253,16 +254,14 @@ def normalize_db_name(db):
253254
keywords = [t for t in query.tokens if t.is_keyword]
254255
if len(keywords) < 2:
255256
continue
256-
if keywords[0].normalized == "DROP" and keywords[1].value.lower() in (
257+
if keywords[0].normalized in ("DROP", "CREATE") and keywords[1].value.lower() in (
257258
"database",
258259
"schema",
259260
):
260261
database_token = next(
261262
(t for t in query.tokens if isinstance(t, Identifier)), None
262263
)
263-
return (
264-
database_token is not None
265-
and normalize_db_name(database_token.get_name()) == dbname
266-
)
264+
if database_token is not None and normalize_db_name(database_token.get_name()) == dbname:
265+
result = keywords[0].normalized == "DROP"
267266
else:
268-
return False
267+
return result

test/test_parseutils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ def test_query_has_where_clause(sql, has_where_clause):
175175
('drop schema foo', 'bar', False),
176176
('drop database bar', 'foo', False),
177177
('drop database foo', None, False),
178+
('drop database foo; create database foo', 'foo', False),
179+
('drop database foo; create database bar', 'foo', True),
178180
('select bar from foo; drop database bazz', 'foo', False),
179181
('select bar from foo; drop database bazz', 'bazz', True),
180182
('-- dropping database \n '

0 commit comments

Comments
 (0)