def _remove_views_which_depend_on_link_table(env, cursor): if get_db_type(env) == 'postgres': # These views were created by Agilo 0.6. As they create references to # the link table, we can not prefix it with 'agilo_' later. These views # are not needed for Agilo 0.7 so we just drop them. cursor.execute('DROP VIEW aggregated_user_stories') cursor.execute('DROP VIEW aggregated_rt')
def drop_postgres_primary_key(self): if get_db_type(self.env) != 'postgres': return if not self.has_postgres_primary_key('agilo_backlog_ticket_pk'): return self.cursor.execute( 'ALTER TABLE agilo_backlog_ticket_old DROP CONSTRAINT agilo_backlog_ticket_pk' )
def _rename_column_key_in_team_metrics_entry(env, cursor, db_connector): team_metrics_entry = \ Table('team_metrics_entry', key=('team', 'sprint', 'metrics_key'))[ Column('team'), Column('sprint'), Column('metrics_key'), Column('value', type='real'), ] if get_db_type(env) == 'mysql': # Agilo 0.7 before final (db version 3) was unable to run with # MySQL. So the table could not be created in db version 2. # Therefore we can just create a new one. create_table_with_cursor(team_metrics_entry, cursor, db_connector) else: old_team_metrics_entry_colum_names = ['team', 'sprint', 'key', 'value'] recreate_table_with_changed_types(team_metrics_entry, cursor, db_connector, old_column_names=old_team_metrics_entry_colum_names)
def _rename_column_end_in_sprint_table(env, cursor, db_connector): if get_db_type(env) != 'postgres': # Agilo 0.7 before final (db version 3) was unable to run with # PostgreSQL. As we need the sprint table in db2 already, we had to # create it with the new table layout. Therefore we don't change the # postgres table here. sprint = \ Table('sprint', key=('name'))[ Column('name'), Column('description'), Column('start', type='integer'), Column('sprint_end', type='integer'), Column('milestone'), Column('team'), ] old_sprint_column_names = ['name', 'description', 'start', 'end', 'milestone', 'team'] recreate_table_with_changed_types(sprint, cursor, db_connector, old_column_names=old_sprint_column_names)
def _rename_column_key_in_team_metrics_entry(env, cursor, db_connector): team_metrics_entry = \ Table('team_metrics_entry', key=('team', 'sprint', 'metrics_key'))[ Column('team'), Column('sprint'), Column('metrics_key'), Column('value', type='real'), ] if get_db_type(env) == 'mysql': # Agilo 0.7 before final (db version 3) was unable to run with # MySQL. So the table could not be created in db version 2. # Therefore we can just create a new one. create_table_with_cursor(team_metrics_entry, cursor, db_connector) else: old_team_metrics_entry_colum_names = ['team', 'sprint', 'key', 'value'] recreate_table_with_changed_types( team_metrics_entry, cursor, db_connector, old_column_names=old_team_metrics_entry_colum_names)
def _rename_column_end_in_sprint_table(env, cursor, db_connector): if get_db_type(env) != 'postgres': # Agilo 0.7 before final (db version 3) was unable to run with # PostgreSQL. As we need the sprint table in db2 already, we had to # create it with the new table layout. Therefore we don't change the # postgres table here. sprint = \ Table('sprint', key=('name'))[ Column('name'), Column('description'), Column('start', type='integer'), Column('sprint_end', type='integer'), Column('milestone'), Column('team'), ] old_sprint_column_names = [ 'name', 'description', 'start', 'end', 'milestone', 'team' ] recreate_table_with_changed_types( sprint, cursor, db_connector, old_column_names=old_sprint_column_names)
def _create_new_tables(env, cursor, db_connector): backlog = \ Table('backlog', key=('name'))[ Column('name'), Column('b_type', type='integer'), Column('description'), Column('ticket_types'), Column('sorting_keys'), Column('b_strict', type='integer') ] backlog_ticket = \ Table('backlog_ticket', key=('name', 'pos', 'scope'))[ Column('name'), # The name of the Backlog Column('pos', type='integer'), # The position of the ticket Column('scope'), # The scope is the name of a Sprint or a Milestone Column('level', type='integer'), # The level in the hierarchy of this ticket Column('ticket_id', type='integer') # The id of the ticket ] calendar_entry = \ Table('calendar_entry', key=('date', 'teammember'))[ Column('date', type='integer'), Column('teammember'), Column('hours', type='real'), ] team = \ Table('team', key=('name'))[ Column('name'), Column('description'), ] team_member = \ Table('team_member', key=('name'))[ Column('name'), Column('team'), Column('description'), Column('ts_mon', type='real'), Column('ts_tue', type='real'), Column('ts_wed', type='real'), Column('ts_thu', type='real'), Column('ts_fri', type='real'), Column('ts_sat', type='real'), Column('ts_sun', type='real'), ] new_tables = [ backlog, backlog_ticket, calendar_entry, team, team_member, ] sprint = \ Table('sprint', key=('name'))[ Column('name'), Column('description'), Column('start', type='integer'), Column('end', type='integer'), Column('milestone'), Column('team'), ] if get_db_type(env) == 'postgres': # For PostgreSQL 'end' is a reserved word. Agilo 0.7 before final # (db version 3) therefore were unable to run with PostgreSQL. # # But we have to create sprints for every milestone in 0.6 and for that # we need a sprint table so we just use the table definition from # 0.7 final here. db3 will take not to recreate the table. end_column = sprint.columns[3] assert end_column.name == 'end' end_column.name = 'sprint_end' new_tables.append(sprint) if get_db_type(env) != 'mysql': # In MySQL 'key' is a reserved word. Agilo 0.7 before final # (db version 3) therefore were unable to run with MySQL. So we # just skip the table creation here. db3 will create the table with the # correct columns (and fixed column names) for us. team_metrics_entry = \ Table('team_metrics_entry', key=('team', 'sprint', 'key'))[ Column('team'), Column('sprint'), Column('key'), Column('value', type='real'), ] new_tables.append(team_metrics_entry) for table in new_tables: create_table_with_cursor(table, cursor, db_connector) return sprint
def drop_postgres_primary_key(self): if get_db_type(self.env) != 'postgres': return if not self.has_postgres_primary_key('agilo_backlog_ticket_pk'): return self.cursor.execute('ALTER TABLE agilo_backlog_ticket_old DROP CONSTRAINT agilo_backlog_ticket_pk')
def _create_new_tables(env, cursor, db_connector): backlog = \ Table('backlog', key=('name'))[ Column('name'), Column('b_type', type='integer'), Column('description'), Column('ticket_types'), Column('sorting_keys'), Column('b_strict', type='integer') ] backlog_ticket = \ Table('backlog_ticket', key=('name', 'pos', 'scope'))[ Column('name'), # The name of the Backlog Column('pos', type='integer'), # The position of the ticket Column('scope'), # The scope is the name of a Sprint or a Milestone Column('level', type='integer'), # The level in the hierarchy of this ticket Column('ticket_id', type='integer') # The id of the ticket ] calendar_entry = \ Table('calendar_entry', key=('date', 'teammember'))[ Column('date', type='integer'), Column('teammember'), Column('hours', type='real'), ] team = \ Table('team', key=('name'))[ Column('name'), Column('description'), ] team_member = \ Table('team_member', key=('name'))[ Column('name'), Column('team'), Column('description'), Column('ts_mon', type='real'), Column('ts_tue', type='real'), Column('ts_wed', type='real'), Column('ts_thu', type='real'), Column('ts_fri', type='real'), Column('ts_sat', type='real'), Column('ts_sun', type='real'), ] new_tables = [backlog, backlog_ticket, calendar_entry, team, team_member,] sprint = \ Table('sprint', key=('name'))[ Column('name'), Column('description'), Column('start', type='integer'), Column('end', type='integer'), Column('milestone'), Column('team'), ] if get_db_type(env) == 'postgres': # For PostgreSQL 'end' is a reserved word. Agilo 0.7 before final # (db version 3) therefore were unable to run with PostgreSQL. # # But we have to create sprints for every milestone in 0.6 and for that # we need a sprint table so we just use the table definition from # 0.7 final here. db3 will take not to recreate the table. end_column = sprint.columns[3] assert end_column.name == 'end' end_column.name = 'sprint_end' new_tables.append(sprint) if get_db_type(env) != 'mysql': # In MySQL 'key' is a reserved word. Agilo 0.7 before final # (db version 3) therefore were unable to run with MySQL. So we # just skip the table creation here. db3 will create the table with the # correct columns (and fixed column names) for us. team_metrics_entry = \ Table('team_metrics_entry', key=('team', 'sprint', 'key'))[ Column('team'), Column('sprint'), Column('key'), Column('value', type='real'), ] new_tables.append(team_metrics_entry) for table in new_tables: create_table_with_cursor(table, cursor, db_connector) return sprint