From 78380c88b2fc1abe105884cb0676dbe7892200cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Thu, 13 Jun 2019 09:08:58 -0300 Subject: [PATCH] Fix mapped columns in case --- database/database_table.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/database/database_table.py b/database/database_table.py index c5aecc5..99b0f91 100644 --- a/database/database_table.py +++ b/database/database_table.py @@ -773,7 +773,8 @@ class DatabaseTable(Table): if table is self: return self._derivative_recursion(column, year, recursion_list) derivative = table._resolv_derivative(column, year) - self._derivatives[target] = {'original': original, 'dbcolumn': dbcolumn, 'level': 0, + + self._derivatives[target] = {'original': original, 'dbcolumn': dbcolumn, 'level': 0, 'dbmapped': True, 'new': '.'.join([table.name, derivative['dbcolumn'][0]])} return self._derivatives[target] @@ -796,10 +797,12 @@ class DatabaseTable(Table): level = derivative['level'] + 1 processed = original + dbmapped = False # column neded to execute the derivative is present on table or need a file. for substitution in substitutions: processed = re.sub(substitution['original'], substitution['new'], processed) + dbmapped = True self._derivatives[target] = {'original': original, 'dbcolumn': dbcolumn, 'level': level, - 'processed': processed} + 'processed': processed, 'dbmapped': dbmapped} return self._derivatives[target] def _resolv_derivative(self, original, year): @@ -836,7 +839,7 @@ class DatabaseTable(Table): query = query.where(ttable.c.ano_censo == year) yield query - def apply_derivatives(self, ttable, columns, year, bind=None): + def apply_derivatives(self, ttable, columns, year, bind=None, dbonly=False): ''' Given a list of columns, searches for derivatives and denormalizations and applies them in the appropriate order. Dependencies will be updated regardless of being or not in the @@ -860,17 +863,17 @@ class DatabaseTable(Table): ttable.schema = t_schema if len(self._derivatives) > 0: max_level = max([self._derivatives[d]['level'] for d in self._derivatives]) - derivative_levels = [] for i in range(max_level): i = i+1 query = {} level = [self._derivatives[d] for d in self._derivatives if\ self._derivatives[d]['level'] == i] for derivative in level: - query[derivative['dbcolumn'][0]] = text(derivative['processed']) + if not dbonly or derivative['dbmapped']: + query[derivative['dbcolumn'][0]] = text(derivative['processed']) query = update(ttable).values(**query) - print(query) + bind.execute(query) return self._derivatives @@ -934,7 +937,7 @@ class DatabaseTable(Table): # Run derivatives ttable = self.create_temporary_mirror(year, bind) - self.apply_derivatives(ttable, ttable.columns.keys(), year, bind) + self.apply_derivatives(ttable, ttable.columns.keys(), year, bind, dbonly=True) self.update_from_temporary(ttable, ttable.columns.keys(), bind) def get_relations(self, table): -- GitLab