Skip to content

Commit 8848231

Browse files
CabpacobCabpacob
authored andcommitted
Implemented continuing and aborting of changing
1 parent 1424828 commit 8848231

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

utils/change_engine/interface.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ def create(self):
2727

2828
def rename(self, new_name):
2929
if self.exist:
30-
self.__client.execute(f'RENAME TABLE {self.name} TO {new_name}')
30+
self.__client.execute(f'RENAME TABLE {self.fullname} TO {new_name}')
3131

3232
self.__name = new_name
3333

34+
def change_database(self, new_database):
35+
self.rename(f'{new_database}.{self.name}')
36+
3437
def drop(self):
35-
assert self.exist, f'Table {self.name} does not exist'
38+
assert self.exist, f'Table {self.fullname} does not exist'
3639

37-
self.__client.execute(f'DROP TABLE {self.name}')
40+
self.__client.execute(f'DROP TABLE {self.fullname}')
3841

3942

4043
class Database:
@@ -68,7 +71,7 @@ def construct_table(table_name):
6871
tables = self.__client.execute(f'SELECT name FROM system.tables WHERE database == \'{self.name}\'')
6972
tables = map(lambda row: row[0], tables)
7073

71-
return {name: construct_table(name) for name in tables}
74+
return [construct_table(name) for name in tables]
7275

7376
def get_table(self, table_name):
7477
assert self.exist, f'Database {self.name} does not exist'
@@ -97,6 +100,10 @@ def create_table(self, table_name):
97100

98101
return table
99102

103+
def move_tables(self, tables):
104+
for table in tables:
105+
table.change_database(self.name)
106+
100107
def drop(self):
101108
assert self.exist, f'Database {self.name} does not exist'
102109

utils/change_engine/ordinary_to_atomic.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,21 @@ def __get_atomic_name(self, ordinary_name):
2323
return f'{self.__atomic_prefix}{ordinary_name}'
2424

2525
def __finished_previous_sessions(self, ordinary_database, atomic_database):
26-
if atomic_database.exist and not ordinary_database.exist:
27-
atomic_database.rename(ordinary_database.name)
26+
if atomic_database.exist:
27+
answer = self.__user_interactor.ask(
28+
f'Changing for database {ordinary_database.name} failed in previous launch.\n'
29+
'Do you want to continue changing? (y/n)\n'
30+
)
2831

29-
self.__user_interactor.notify(f'Changing continued after fail in previous launch and can\'t restore ordinary database, but atomic was restored')
30-
31-
return False
32-
elif atomic_database.exist and ordinary_database.exist:
33-
answer = self.__user_interactor.ask(f'Changing failed in previous launch. Do you want to continue changing? (y/n)')
3432
if answer == 'y':
35-
pass #TODO
33+
atomic_database.move_tables(ordinary_database.tables)
34+
ordinary_database.drop()
35+
atomic_database.rename(ordinary_database.name)
3636
elif answer == 'n':
37+
if not ordinary_database.exist:
38+
ordinary_database.create()
39+
40+
ordinary_database.move_tables(atomic_database.tables)
3741
atomic_database.drop()
3842
else:
3943
self.__user_interactor.notify(f'Wrong answer, skipped')
@@ -56,7 +60,8 @@ def convert(self, ordinary_name):
5660
atomic_database.create(engine = 'Atomic')
5761
tables = ordinary_database.tables
5862

59-
for table_name, table in tables.items():
63+
for table in tables:
64+
table_name = table.name
6065
ordinary_table = ordinary_database.get_table(table_name)
6166
atomic_table_name = f'{atomic_database.name}.{table_name}'
6267
ordinary_table.rename(atomic_table_name)

0 commit comments

Comments
 (0)