Skip to content

Commit 174222a

Browse files
authored
Quote db_name and table_name (#92)
1 parent 1932617 commit 174222a

File tree

6 files changed

+122
-122
lines changed

6 files changed

+122
-122
lines changed

mysql_ch_replicator/clickhouse_api.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515

1616
CREATE_TABLE_QUERY = '''
17-
CREATE TABLE {if_not_exists} {db_name}.{table_name}
17+
CREATE TABLE {if_not_exists} `{db_name}`.`{table_name}`
1818
(
1919
{fields},
2020
`_version` UInt64,
@@ -26,7 +26,7 @@
2626
'''
2727

2828
DELETE_QUERY = '''
29-
DELETE FROM {db_name}.{table_name} WHERE ({field_name}) IN ({field_values})
29+
DELETE FROM `{db_name}`.`{table_name}` WHERE ({field_name}) IN ({field_values})
3030
'''
3131

3232

@@ -126,8 +126,8 @@ def execute_command(self, query):
126126
time.sleep(ClickhouseApi.RETRY_INTERVAL)
127127

128128
def recreate_database(self):
129-
self.execute_command(f'DROP DATABASE IF EXISTS {self.database}')
130-
self.execute_command(f'CREATE DATABASE {self.database}')
129+
self.execute_command(f'DROP DATABASE IF EXISTS `{self.database}`')
130+
self.execute_command(f'CREATE DATABASE `{self.database}`')
131131

132132
def get_last_used_version(self, table_name):
133133
return self.tables_last_record_version.get(table_name, 0)
@@ -210,9 +210,9 @@ def insert(self, table_name, records, table_structure: TableStructure = None):
210210
records_to_insert.append(tuple(record) + (current_version,))
211211
current_version += 1
212212

213-
full_table_name = table_name
213+
full_table_name = f'`table_name`'
214214
if '.' not in full_table_name:
215-
full_table_name = f'{self.database}.{table_name}'
215+
full_table_name = f'`{self.database}`.`{table_name}`'
216216

217217
duration = 0.0
218218
for attempt in range(ClickhouseApi.MAX_RETRIES):
@@ -258,10 +258,10 @@ def erase(self, table_name, field_name, field_values):
258258
)
259259

260260
def drop_database(self, db_name):
261-
self.execute_command(f'DROP DATABASE IF EXISTS {db_name}')
261+
self.execute_command(f'DROP DATABASE IF EXISTS `{db_name}`')
262262

263263
def create_database(self, db_name):
264-
self.cursor.execute(f'CREATE DATABASE {db_name}')
264+
self.cursor.execute(f'CREATE DATABASE `{db_name}`')
265265

266266
def select(self, table_name, where=None, final=None):
267267
query = f'SELECT * FROM {table_name}'
@@ -282,7 +282,7 @@ def query(self, query: str):
282282
return self.client.query(query)
283283

284284
def show_create_table(self, table_name):
285-
return self.client.query(f'SHOW CREATE TABLE {table_name}').result_rows[0][0]
285+
return self.client.query(f'SHOW CREATE TABLE `{table_name}`').result_rows[0][0]
286286

287287
def get_system_setting(self, name):
288288
results = self.select('system.settings', f"name = '{name}'")

mysql_ch_replicator/converter.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ def __convert_alter_table_add_column(self, db_name, table_name, tokens):
498498
column_after,
499499
)
500500

501-
query = f'ALTER TABLE {db_name}.{table_name} ADD COLUMN {column_name} {column_type_ch}'
501+
query = f'ALTER TABLE `{db_name}`.`{table_name}` ADD COLUMN `{column_name}` {column_type_ch}'
502502
if column_first:
503503
query += ' FIRST'
504504
else:
@@ -525,7 +525,7 @@ def __convert_alter_table_drop_column(self, db_name, table_name, tokens):
525525
mysql_table_structure.remove_field(field_name=column_name)
526526
ch_table_structure.remove_field(field_name=column_name)
527527

528-
query = f'ALTER TABLE {db_name}.{table_name} DROP COLUMN {column_name}'
528+
query = f'ALTER TABLE `{db_name}`.`{table_name}` DROP COLUMN {column_name}'
529529
if self.db_replicator:
530530
self.db_replicator.clickhouse_api.execute_command(query)
531531

@@ -556,7 +556,7 @@ def __convert_alter_table_modify_column(self, db_name, table_name, tokens):
556556
TableField(name=column_name, field_type=column_type_ch),
557557
)
558558

559-
query = f'ALTER TABLE {db_name}.{table_name} MODIFY COLUMN {column_name} {column_type_ch}'
559+
query = f'ALTER TABLE `{db_name}`.`{table_name}` MODIFY COLUMN `{column_name}` {column_type_ch}'
560560
if self.db_replicator:
561561
self.db_replicator.clickhouse_api.execute_command(query)
562562

@@ -592,7 +592,7 @@ def __convert_alter_table_change_column(self, db_name, table_name, tokens):
592592
TableField(name=column_name, field_type=column_type_ch),
593593
)
594594

595-
query = f'ALTER TABLE {db_name}.{table_name} MODIFY COLUMN {column_name} {column_type_ch}'
595+
query = f'ALTER TABLE `{db_name}`.`{table_name}` MODIFY COLUMN {column_name} {column_type_ch}'
596596
self.db_replicator.clickhouse_api.execute_command(query)
597597

598598
if column_name != new_column_name:
@@ -602,7 +602,7 @@ def __convert_alter_table_change_column(self, db_name, table_name, tokens):
602602
curr_field_mysql.name = new_column_name
603603
curr_field_clickhouse.name = new_column_name
604604

605-
query = f'ALTER TABLE {db_name}.{table_name} RENAME COLUMN {column_name} TO {new_column_name}'
605+
query = f'ALTER TABLE `{db_name}`.`{table_name}` RENAME COLUMN {column_name} TO {new_column_name}'
606606
self.db_replicator.clickhouse_api.execute_command(query)
607607

608608
def parse_create_table_query(self, mysql_query) -> tuple[TableStructure, TableStructure]:

mysql_ch_replicator/db_optimizer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def optimize_table(self, db_name, table_name):
7171
logger.info(f'Optimizing table {db_name}.{table_name}')
7272
t1 = time.time()
7373
self.clickhouse_api.execute_command(
74-
f'OPTIMIZE TABLE {db_name}.{table_name} FINAL SETTINGS mutations_sync = 2'
74+
f'OPTIMIZE TABLE `{db_name}`.`{table_name}` FINAL SETTINGS mutations_sync = 2'
7575
)
7676
t2 = time.time()
7777
logger.info(f'Optimize finished in {int(t2-t1)} seconds')

mysql_ch_replicator/db_replicator.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,15 @@ def perform_initial_replication(self):
242242
logger.info(f'initial replication - swapping database')
243243
if self.target_database in self.clickhouse_api.get_databases():
244244
self.clickhouse_api.execute_command(
245-
f'RENAME DATABASE {self.target_database} TO {self.target_database}_old',
245+
f'RENAME DATABASE `{self.target_database}` TO `{self.target_database}_old`',
246246
)
247247
self.clickhouse_api.execute_command(
248-
f'RENAME DATABASE {self.target_database_tmp} TO {self.target_database}',
248+
f'RENAME DATABASE `{self.target_database_tmp}` TO `{self.target_database}`',
249249
)
250250
self.clickhouse_api.drop_database(f'{self.target_database}_old')
251251
else:
252252
self.clickhouse_api.execute_command(
253-
f'RENAME DATABASE {self.target_database_tmp} TO {self.target_database}',
253+
f'RENAME DATABASE `{self.target_database_tmp}` TO `{self.target_database}`',
254254
)
255255
self.clickhouse_api.database = self.target_database
256256
logger.info(f'initial replication - done')
@@ -519,7 +519,7 @@ def handle_drop_table_query(self, query, db_name):
519519

520520
if table_name in self.state.tables_structure:
521521
self.state.tables_structure.pop(table_name)
522-
self.clickhouse_api.execute_command(f'DROP TABLE {"IF EXISTS" if if_exists else ""} {db_name}.{table_name}')
522+
self.clickhouse_api.execute_command(f'DROP TABLE {"IF EXISTS" if if_exists else ""} `{db_name}`.`{table_name}`')
523523

524524
def handle_rename_table_query(self, query, db_name):
525525
tokens = query.split()
@@ -545,7 +545,7 @@ def handle_rename_table_query(self, query, db_name):
545545
if src_table_name in self.state.tables_structure:
546546
self.state.tables_structure[dest_table_name] = self.state.tables_structure.pop(src_table_name)
547547

548-
ch_clauses.append(f"{src_db_name}.{src_table_name} TO {dest_db_name}.{dest_table_name}")
548+
ch_clauses.append(f"`{src_db_name}`.`{src_table_name}` TO `{dest_db_name}`.`{dest_table_name}`")
549549
self.clickhouse_api.execute_command(f'RENAME TABLE {", ".join(ch_clauses)}')
550550

551551
def log_stats_if_required(self):

mysql_ch_replicator/mysql_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def drop_table(self, table_name):
4949
self.cursor.execute(f'DROP TABLE IF EXISTS `{table_name}`')
5050

5151
def create_database(self, db_name):
52-
self.cursor.execute(f'CREATE DATABASE {db_name}')
52+
self.cursor.execute(f'CREATE DATABASE `{db_name}`')
5353

5454
def execute(self, command, commit=False, args=None):
5555
if args:

0 commit comments

Comments
 (0)