)]}'
{"oslo/db/sqlalchemy/utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"bad20b6aa327e28a6f8fefb65a2ba060e57921c2","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        columns_for_select, group_by\u003dcolumns_for_group_by,"},{"line_number":374,"context_line":"        having\u003dfunc.count(table.c.id) \u003e 1)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    for row in migrate_engine.execute(duplicated_rows_select):"},{"line_number":377,"context_line":"        # NOTE(boris-42): Do not remove row that has the biggest ID."},{"line_number":378,"context_line":"        delete_condition \u003d table.c.id !\u003d row[0]"},{"line_number":379,"context_line":"        is_none \u003d None  # workaround for pyflakes"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_bfb501cf","side":"PARENT","line":376,"updated":"2014-05-26 09:42:38.000000000","message":"I think this can be fixed as easily as changing this line to:\n\n    for row in migrate_engine.execute(duplicated_rows_select).fetchall():","commit_id":"fe29c0d37936d2048a0b0573a5ea6da95dbebbc6"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"372728f6856641d0d9da17ca278481bad81d6aca","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        rows_to_delete_select \u003d sqlalchemy.sql.select("},{"line_number":385,"context_line":"            [table.c.id]).where(delete_condition)"},{"line_number":386,"context_line":"        for row in migrate_engine.execute(rows_to_delete_select).fetchall():"},{"line_number":387,"context_line":"            LOG.info(_LI(\"Deleting duplicated row with id: %(id)s from table: \""},{"line_number":388,"context_line":"                         \"%(table)s\") % dict(id\u003drow[0], table\u003dtable_name))"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        if use_soft_delete:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ae8d1ca_b940c836","side":"PARENT","line":387,"updated":"2014-05-27 08:44:12.000000000","message":"not sure why you change this line here","commit_id":"6f64c83363651a6bafcefebee4f66f3ddb722d1e"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"ccedc926365834a153020da15b41edce13b7a1e7","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        rows_to_delete_select \u003d sqlalchemy.sql.select("},{"line_number":385,"context_line":"            [table.c.id]).where(delete_condition)"},{"line_number":386,"context_line":"        for row in migrate_engine.execute(rows_to_delete_select).fetchall():"},{"line_number":387,"context_line":"            LOG.info(_LI("},{"line_number":388,"context_line":"                \"Deleting duplicated row with id: %(id)s from table: \""},{"line_number":389,"context_line":"                \"%(table)s\") % dict(id\u003drow[0], table\u003dtable_name))"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3ae8d1ca_7909e02b","line":387,"updated":"2014-05-27 08:43:54.000000000","message":"why do we need this change?","commit_id":"31df8eb3a049d851e2f24f9fc7b1024d454b9ff2"}],"tests/sqlalchemy/test_utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"372728f6856641d0d9da17ca278481bad81d6aca","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_drop_dup_entries_in_file_conn(self):"},{"line_number":243,"context_line":"        table_name \u003d \"__test_tmp_table__\""},{"line_number":244,"context_line":"        in_file \u003d session.EngineFacade(\u0027sqlite:////tmp/%s\u0027 % \u0027blahblah\u0027)"},{"line_number":245,"context_line":"        in_file_engine \u003d in_file.get_engine()"},{"line_number":246,"context_line":"        meta \u003d MetaData()"},{"line_number":247,"context_line":"        meta.bind \u003d in_file_engine"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ae8d1ca_b9128856","line":244,"updated":"2014-05-27 08:44:12.000000000","message":"Please use create_tempfiles() to create a temporary file to be used as an SQLite in-file database (otherwise, /tmp/blahblah would be left on the file system after tests have been run)","commit_id":"31df8eb3a049d851e2f24f9fc7b1024d454b9ff2"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"ccedc926365834a153020da15b41edce13b7a1e7","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_drop_dup_entries_in_file_conn(self):"},{"line_number":243,"context_line":"        table_name \u003d \"__test_tmp_table__\""},{"line_number":244,"context_line":"        in_file \u003d session.EngineFacade(\u0027sqlite:////tmp/%s\u0027 % \u0027blahblah\u0027)"},{"line_number":245,"context_line":"        in_file_engine \u003d in_file.get_engine()"},{"line_number":246,"context_line":"        meta \u003d MetaData()"},{"line_number":247,"context_line":"        meta.bind \u003d in_file_engine"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ae8d1ca_46bc436d","line":244,"updated":"2014-05-27 08:43:54.000000000","message":"use create_tempfiles() to create file for database","commit_id":"31df8eb3a049d851e2f24f9fc7b1024d454b9ff2"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"372728f6856641d0d9da17ca278481bad81d6aca","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            in_file_engine, meta, table_name)"},{"line_number":250,"context_line":"        utils.drop_old_duplicate_entries_from_table("},{"line_number":251,"context_line":"            in_file_engine, table_name, False, \u0027b\u0027, \u0027c\u0027)"},{"line_number":252,"context_line":"        self.addCleanup(meta.drop_all)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_drop_old_duplicate_entries_from_table_soft_delete(self):"},{"line_number":255,"context_line":"        table_name \u003d \"__test_tmp_table__\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3ae8d1ca_b939a8da","line":252,"updated":"2014-05-27 08:44:12.000000000","message":"this won\u0027t be needed, if you use a temporary file, created by create_tempfiles()","commit_id":"31df8eb3a049d851e2f24f9fc7b1024d454b9ff2"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"f1e0823975a4746e716d623c8b1f0dada4b4eedf","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    def test_drop_dup_entries_in_file_conn(self):"},{"line_number":243,"context_line":"        table_name \u003d \"__test_tmp_table__\""},{"line_number":244,"context_line":"        tmp_db_file \u003d self.create_tempfiles([[\u0027name\u0027, \u0027\u0027]], ext\u003d\u0027.sql\u0027)[0]"},{"line_number":245,"context_line":"        in_file \u003d session.EngineFacade(\u0027sqlite:///%s\u0027 % tmp_db_file)"},{"line_number":246,"context_line":"        in_file_engine \u003d in_file.get_engine()"},{"line_number":247,"context_line":"        meta \u003d MetaData()"},{"line_number":248,"context_line":"        meta.bind \u003d in_file_engine"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_975b9e86","line":245,"updated":"2014-05-28 14:19:25.000000000","message":"minor nit: I prefer some another name  for this variable :)","commit_id":"6b2df97052dd235aec68d98b993152994371d606"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"6771ded1c8d9eb8c0a906aef5e38a57fb590af1f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    def test_drop_dup_entries_in_file_conn(self):"},{"line_number":243,"context_line":"        table_name \u003d \"__test_tmp_table__\""},{"line_number":244,"context_line":"        tmp_db_file \u003d self.create_tempfiles([[\u0027name\u0027, \u0027\u0027]], ext\u003d\u0027.sql\u0027)[0]"},{"line_number":245,"context_line":"        in_file \u003d session.EngineFacade(\u0027sqlite:///%s\u0027 % tmp_db_file)"},{"line_number":246,"context_line":"        in_file_engine \u003d in_file.get_engine()"},{"line_number":247,"context_line":"        meta \u003d MetaData()"},{"line_number":248,"context_line":"        meta.bind \u003d in_file_engine"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_6e737480","line":245,"in_reply_to":"3ae8d1ca_975b9e86","updated":"2014-05-29 15:17:50.000000000","message":"Done","commit_id":"6b2df97052dd235aec68d98b993152994371d606"}]}
