Skip to content

Commit 4186a90

Browse files
committed
Fix "DROP TABLE IF EXISTS"
1 parent 6e1c851 commit 4186a90

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

mysql_ch_replicator/db_replicator.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,17 +499,26 @@ def handle_drop_table_query(self, query, db_name):
499499
tokens = query.split()
500500
if tokens[0].lower() != 'drop' or tokens[1].lower() != 'table':
501501
raise Exception('wrong drop table query', query)
502+
503+
if_exists = (len(tokens) > 4 and
504+
tokens[2].lower() == 'if' and
505+
tokens[3].lower() == 'exists')
506+
if if_exists:
507+
del tokens[2:4] # Remove the 'IF', 'EXISTS' tokens
508+
502509
if len(tokens) != 3:
503510
raise Exception('wrong token count', query)
511+
504512
table_name = tokens[2]
505513
if '.' in table_name:
506514
db_name, table_name = table_name.split('.')
507515
if db_name == self.database:
508516
db_name = self.target_database
509517
table_name = strip_sql_name(table_name)
510518
db_name = strip_sql_name(db_name)
511-
self.state.tables_structure.pop(table_name)
512-
self.clickhouse_api.execute_command(f'DROP TABLE {db_name}.{table_name}')
519+
if table_name in self.state.tables_structure:
520+
self.state.tables_structure.pop(table_name)
521+
self.clickhouse_api.execute_command(f'DROP TABLE {"IF EXISTS" if if_exists else ""} {db_name}.{table_name}')
513522

514523
def log_stats_if_required(self):
515524
curr_time = time.time()

0 commit comments

Comments
 (0)