)]}'
{"oslo_db/sqlalchemy/utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cf092b2c9b7a91a8ed237cfbd09fbc757389c033","unresolved":false,"context_lines":[{"line_number":792,"context_line":"    return (user, password, database, host)"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"def get_indexes(migrate_engine, table_name):"},{"line_number":796,"context_line":"    \"\"\"Get all index list from a given table."},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    :param migrate_engine: sqlalchemy engine"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_25ae1f98","line":795,"range":{"start_line":795,"start_character":16,"end_line":795,"end_character":30},"updated":"2016-11-28 14:26:30.000000000","message":"nit: prefix `migrate_` is there only for historical reason - this code was taken from Nova tree, where it was used in migration scripts. Let\u0027s just go with `engine` instead","commit_id":"8e0a9162c5c9f96df520d2da92bae9669efa78c8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cf092b2c9b7a91a8ed237cfbd09fbc757389c033","unresolved":false,"context_lines":[{"line_number":799,"context_line":"    :param table_name:     name of the table"},{"line_number":800,"context_line":"    \"\"\""},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    inspector \u003d reflection.Inspector.from_engine(migrate_engine)"},{"line_number":803,"context_line":"    indexes \u003d inspector.get_indexes(table_name)"},{"line_number":804,"context_line":"    return indexes"},{"line_number":805,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_a5a86f78","line":802,"updated":"2016-11-28 14:26:30.000000000","message":"Do I understand correctly, that the purpose of this helper is to avoid people dealing with SA Inspector? I\u0027m fine with that, it\u0027s just we probably  never considered it be a big deal and that\u0027s the only reason we did not have such a thing in oslo.db","commit_id":"8e0a9162c5c9f96df520d2da92bae9669efa78c8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cf092b2c9b7a91a8ed237cfbd09fbc757389c033","unresolved":false,"context_lines":[{"line_number":816,"context_line":"    return index_name in index_names"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"def index_exists_on_columns(migrate_engine, table_name, columns):"},{"line_number":820,"context_line":"    \"\"\"Check if given columns has exists."},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    :param migrate_engine: sqlalchemy engine"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_e5f4275c","line":819,"range":{"start_line":819,"start_character":28,"end_line":819,"end_character":42},"updated":"2016-11-28 14:26:30.000000000","message":"nit: ditto","commit_id":"8e0a9162c5c9f96df520d2da92bae9669efa78c8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cf092b2c9b7a91a8ed237cfbd09fbc757389c033","unresolved":false,"context_lines":[{"line_number":817,"context_line":""},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"def index_exists_on_columns(migrate_engine, table_name, columns):"},{"line_number":820,"context_line":"    \"\"\"Check if given columns has exists."},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    :param migrate_engine: sqlalchemy engine"},{"line_number":823,"context_line":"    :param table_name:     name of the table"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_85045318","line":820,"updated":"2016-11-28 14:26:30.000000000","message":"nit: Check if an index on given columns exists.","commit_id":"8e0a9162c5c9f96df520d2da92bae9669efa78c8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cf092b2c9b7a91a8ed237cfbd09fbc757389c033","unresolved":false,"context_lines":[{"line_number":823,"context_line":"    :param table_name:     name of the table"},{"line_number":824,"context_line":"    :param columns:        a list type of columns that will be checked"},{"line_number":825,"context_line":"    \"\"\""},{"line_number":826,"context_line":"    if not isinstance(columns, list):"},{"line_number":827,"context_line":"        columns \u003d list(columns)"},{"line_number":828,"context_line":"    for index in get_indexes(migrate_engine, table_name):"},{"line_number":829,"context_line":"        if index[\u0027column_names\u0027] \u003d\u003d columns:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_053923f2","line":826,"updated":"2016-11-28 14:26:30.000000000","message":"my understanding is that this is specifically to allow for passing of tuples (as get_indexes() returns a list of dicts where the key `column_names` points to a list value and list to tuple comparison would always yield False)","commit_id":"8e0a9162c5c9f96df520d2da92bae9669efa78c8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"1c3b61e79f8e43087e19b4c0ba069d019d7edaa7","unresolved":false,"context_lines":[{"line_number":796,"context_line":"    \"\"\"Get all index list from a given table."},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    :param engine: sqlalchemy engine"},{"line_number":799,"context_line":"    :param table_name:     name of the table"},{"line_number":800,"context_line":"    \"\"\""},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    inspector \u003d reflection.Inspector.from_engine(engine)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_caafc57b","line":799,"range":{"start_line":799,"start_character":23,"end_line":799,"end_character":27},"updated":"2016-11-30 13:27:57.000000000","message":"nit: one whitespace is enough","commit_id":"3dea44f17b61d4918a044f9b0c51798c7cca673e"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"1c3b61e79f8e43087e19b4c0ba069d019d7edaa7","unresolved":false,"context_lines":[{"line_number":820,"context_line":"    \"\"\"Check if an index on given columns exists."},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    :param engine: sqlalchemy engine"},{"line_number":823,"context_line":"    :param table_name:     name of the table"},{"line_number":824,"context_line":"    :param columns:        a list type of columns that will be checked"},{"line_number":825,"context_line":"    \"\"\""},{"line_number":826,"context_line":"    if not isinstance(columns, list):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_2ac75946","line":823,"updated":"2016-11-30 13:27:57.000000000","message":"ditto","commit_id":"3dea44f17b61d4918a044f9b0c51798c7cca673e"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"1c3b61e79f8e43087e19b4c0ba069d019d7edaa7","unresolved":false,"context_lines":[{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    :param engine: sqlalchemy engine"},{"line_number":823,"context_line":"    :param table_name:     name of the table"},{"line_number":824,"context_line":"    :param columns:        a list type of columns that will be checked"},{"line_number":825,"context_line":"    \"\"\""},{"line_number":826,"context_line":"    if not isinstance(columns, list):"},{"line_number":827,"context_line":"        columns \u003d list(columns)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_4ac4953f","line":824,"updated":"2016-11-30 13:27:57.000000000","message":"ditto","commit_id":"3dea44f17b61d4918a044f9b0c51798c7cca673e"}],"oslo_db/tests/sqlalchemy/test_utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"1c3b61e79f8e43087e19b4c0ba069d019d7edaa7","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"        self.addCleanup(meta.drop_all)"},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":"    def test_get_indexes(self):"},{"line_number":1075,"context_line":"        self.assertFalse(utils.index_exists(self.engine, \u0027test_table\u0027,"},{"line_number":1076,"context_line":"                                            \u0027index_a\u0027))"},{"line_number":1077,"context_line":"        self.assertFalse(utils.index_exists(self.engine, \u0027test_table\u0027,"},{"line_number":1078,"context_line":"                                            \u0027index_b\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_cab5057f","line":1075,"updated":"2016-11-30 13:27:57.000000000","message":"nit: do we really need first two asserts? we know that these indexes do not exist, as we create the table in setUp()","commit_id":"3dea44f17b61d4918a044f9b0c51798c7cca673e"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"1c3b61e79f8e43087e19b4c0ba069d019d7edaa7","unresolved":false,"context_lines":[{"line_number":1091,"context_line":"                                           \u0027new_index\u0027))"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    def test_index_exists_on_columns(self):"},{"line_number":1094,"context_line":"        self.assertFalse(utils.index_exists(self.engine, \u0027test_table\u0027,"},{"line_number":1095,"context_line":"                                            \u0027new_index\u0027))"},{"line_number":1096,"context_line":"        columns \u003d [self.test_table.c.a, self.test_table.c.b]"},{"line_number":1097,"context_line":"        Index(\u0027new_index\u0027, *columns).create(self.engine)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_ea71e1e1","line":1094,"updated":"2016-11-30 13:27:57.000000000","message":"nit: ditto","commit_id":"3dea44f17b61d4918a044f9b0c51798c7cca673e"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"4914f01acf86f78a6c76ee4bedf66ad9427e20fa","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"        Index(\u0027index_b\u0027, self.test_table.c.b).create(self.engine)"},{"line_number":1077,"context_line":"        indexes \u003d utils.get_indexes(self.engine, \"test_table\")"},{"line_number":1078,"context_line":"        indexes \u003d [(index[\u0027name\u0027], index[\u0027column_names\u0027]) for index in indexes]"},{"line_number":1079,"context_line":"        self.assertTrue((\u0027index_a\u0027, [\u0027a\u0027]) in indexes)"},{"line_number":1080,"context_line":"        self.assertTrue((\u0027index_b\u0027, [\u0027b\u0027]) in indexes)"},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"    def test_index_exists(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_e5dc9048","line":1079,"range":{"start_line":1079,"start_character":13,"end_line":1079,"end_character":23},"updated":"2016-12-01 03:04:43.000000000","message":"use assertIn ?","commit_id":"01e2978ed99a800daf0b12f9723302297e392985"}]}
