)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c901a35949b7e3d37d60f6abc4cfb803360f44a2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add function to remove constraints from database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Function used in alembic database migration script to"},{"line_number":10,"context_line":"remove foreign keys from table don\u0027t remove unique constraint created for such"},{"line_number":11,"context_line":"fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_6b9efd07","line":10,"updated":"2016-07-07 13:43:01.000000000","message":"A few of these lines are too long.","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add function to remove constraints from database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Function used in alembic database migration script to"},{"line_number":10,"context_line":"remove foreign keys from table don\u0027t remove unique constraint created for such"},{"line_number":11,"context_line":"fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_6cd0d3c9","line":10,"in_reply_to":"1aa78d24_6b9efd07","updated":"2016-07-07 14:12:10.000000000","message":"Fixed","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c901a35949b7e3d37d60f6abc4cfb803360f44a2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_8baec92b","line":14,"range":{"start_line":14,"start_character":30,"end_line":14,"end_character":39},"updated":"2016-07-07 13:43:01.000000000","message":"little bit","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":11,"context_line":"fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_4cd357d5","line":14,"range":{"start_line":14,"start_character":30,"end_line":14,"end_character":39},"in_reply_to":"1aa78d24_8baec92b","updated":"2016-07-07 14:12:10.000000000","message":"Done","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c901a35949b7e3d37d60f6abc4cfb803360f44a2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_cb7bb1bc","line":15,"range":{"start_line":15,"start_character":18,"end_line":15,"end_character":42},"updated":"2016-07-07 13:43:01.000000000","message":"There needs to be number agreement here, so it should be \"names ... contraints\".","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during database"},{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_acde3bda","line":15,"range":{"start_line":15,"start_character":18,"end_line":15,"end_character":42},"in_reply_to":"1aa78d24_cb7bb1bc","updated":"2016-07-07 14:12:10.000000000","message":"Done","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c901a35949b7e3d37d60f6abc4cfb803360f44a2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_ab28e59a","line":16,"range":{"start_line":16,"start_character":11,"end_line":16,"end_character":20},"updated":"2016-07-07 13:43:01.000000000","message":"s/introduce/introduces a/","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":13,"context_line":"upgrade."},{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_ece4c3ac","line":16,"range":{"start_line":16,"start_character":11,"end_line":16,"end_character":20},"in_reply_to":"1aa78d24_ab28e59a","updated":"2016-07-07 14:12:10.000000000","message":"Done","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c901a35949b7e3d37d60f6abc4cfb803360f44a2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I7e7732560984b1c1e45230434ddc4be8cf5ab630"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_2b1b5582","line":17,"range":{"start_line":17,"start_character":61,"end_line":17,"end_character":67},"updated":"2016-07-07 13:43:01.000000000","message":"s/remove/removal of/","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Removing unique constraint is littlebit different in mysql and postgresql"},{"line_number":15,"context_line":"databases because names of such constraint are different."},{"line_number":16,"context_line":"This patch introduce function to remove constraints from table during migration."},{"line_number":17,"context_line":"It is also used in remove_fks_from_table() function to allow remove unique"},{"line_number":18,"context_line":"constraints when fk is removed."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I7e7732560984b1c1e45230434ddc4be8cf5ab630"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_6ce733ac","line":17,"range":{"start_line":17,"start_character":61,"end_line":17,"end_character":67},"in_reply_to":"1aa78d24_2b1b5582","updated":"2016-07-07 14:12:10.000000000","message":"Done","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"4c1af6fc8889888c4475037391d453d2f2c69742","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add function to remove constraints from database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Function used in alembic database migration script to"},{"line_number":10,"context_line":"remove foreign keys from table don\u0027t remove unique constraint created"},{"line_number":11,"context_line":"for such fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during"},{"line_number":13,"context_line":"database upgrade."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1aa78d24_4a5dd647","line":10,"range":{"start_line":10,"start_character":31,"end_line":10,"end_character":36},"updated":"2016-07-08 02:27:49.000000000","message":"nit: doesn\u0027t","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6827eeb5b69e74d45d4943dcfb40cb9e4c7a588c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add function to remove constraints from database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Function used in alembic database migration script to"},{"line_number":10,"context_line":"remove foreign keys from table don\u0027t remove unique constraint created"},{"line_number":11,"context_line":"for such fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during"},{"line_number":13,"context_line":"database upgrade."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1aa78d24_c3ac0c8f","line":10,"range":{"start_line":10,"start_character":31,"end_line":10,"end_character":36},"in_reply_to":"1aa78d24_4a5dd647","updated":"2016-07-08 07:44:25.000000000","message":"thx, I will change it in next PS","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"32ced7077e39d0a885f7c8e0c7ee5fa5af871367","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add function to remove constraints from database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Function used in alembic database migration script to"},{"line_number":10,"context_line":"remove foreign keys from table don\u0027t remove unique constraint created"},{"line_number":11,"context_line":"for such fk in table."},{"line_number":12,"context_line":"Sometimes there is need to remove also such unique constraint during"},{"line_number":13,"context_line":"database upgrade."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1aa78d24_237e87ae","line":10,"range":{"start_line":10,"start_character":31,"end_line":10,"end_character":36},"in_reply_to":"1aa78d24_c3ac0c8f","updated":"2016-07-08 20:18:52.000000000","message":"Done","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"}],"neutron/db/migration/__init__.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"e9868c6ce1f5c6747a3343bc8798312198b0196c","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":191,"context_line":"    for fk in foreign_keys:"},{"line_number":192,"context_line":"        op.drop_constraint("},{"line_number":193,"context_line":"            constraint_name\u003dfk[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_6040dc07","line":190,"range":{"start_line":190,"start_character":4,"end_line":190,"end_character":23},"updated":"2016-07-07 13:16:09.000000000","message":"What about do some refactor here and change usage of remove_foreign_keys for remove_constraint?","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e666239009828eeada7cd24a2a3fe618488e4e42","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":191,"context_line":"    for fk in foreign_keys:"},{"line_number":192,"context_line":"        op.drop_constraint("},{"line_number":193,"context_line":"            constraint_name\u003dfk[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_ecacc38d","line":190,"range":{"start_line":190,"start_character":4,"end_line":190,"end_character":23},"in_reply_to":"1aa78d24_6040dc07","updated":"2016-07-07 14:12:10.000000000","message":"Done","commit_id":"3819f25ef1ec8bd4c97f7b21d1ab93d1f13a9f0f"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"9267b73ecfff9f65b747b74ac7c0c9362c97d260","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def remove_unique_constraints(table, foreign_keys):"},{"line_number":182,"context_line":"    for fk in foreign_keys:"},{"line_number":183,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":184,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":185,"context_line":"        elif op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":186,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":187,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":188,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_9f3a6397","line":187,"range":{"start_line":183,"start_character":0,"end_line":187,"end_character":74},"updated":"2016-07-07 22:19:03.000000000","message":"We can avoid special casing here by using \u0027inspector.get_unique_constraints\u0027 as you do in \u0027unique_constraint_exists\u0027, can\u0027t we?\n\nWhat about sqlite?","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"32ced7077e39d0a885f7c8e0c7ee5fa5af871367","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def remove_unique_constraints(table, foreign_keys):"},{"line_number":182,"context_line":"    for fk in foreign_keys:"},{"line_number":183,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":184,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":185,"context_line":"        elif op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":186,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":187,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":188,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_6309afdd","line":187,"range":{"start_line":183,"start_character":0,"end_line":187,"end_character":74},"in_reply_to":"1aa78d24_5c1f525b","updated":"2016-07-08 20:18:52.000000000","message":"changed","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f5809e2ca73132ccc9d78e5af58b7fed47801030","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def remove_unique_constraints(table, foreign_keys):"},{"line_number":182,"context_line":"    for fk in foreign_keys:"},{"line_number":183,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":184,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":185,"context_line":"        elif op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":186,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":187,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":188,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_5c1f525b","line":187,"range":{"start_line":183,"start_character":0,"end_line":187,"end_character":74},"in_reply_to":"1aa78d24_666c4109","updated":"2016-07-08 10:06:09.000000000","message":"Ok. I will make such change and add docstring to this function","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6827eeb5b69e74d45d4943dcfb40cb9e4c7a588c","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def remove_unique_constraints(table, foreign_keys):"},{"line_number":182,"context_line":"    for fk in foreign_keys:"},{"line_number":183,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":184,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":185,"context_line":"        elif op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":186,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":187,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":188,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_a372a047","line":187,"range":{"start_line":183,"start_character":0,"end_line":187,"end_character":74},"in_reply_to":"1aa78d24_9f3a6397","updated":"2016-07-08 07:44:25.000000000","message":"I will try to check it today","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"48eb27efaa26a32c950b3bcb7e9ecf182ae57b9a","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def remove_unique_constraints(table, foreign_keys):"},{"line_number":182,"context_line":"    for fk in foreign_keys:"},{"line_number":183,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":184,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":185,"context_line":"        elif op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":186,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":187,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":188,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_666c4109","line":187,"range":{"start_line":183,"start_character":0,"end_line":187,"end_character":74},"in_reply_to":"1aa78d24_9f3a6397","updated":"2016-07-08 09:47:50.000000000","message":"We do not support sqlite as a production backend, so we can leave \n\n    if op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:\n            constraint_name \u003d \"%s_%s_key\" % (table,\n                                         fk[\u0027constrained_columns\u0027][0])\n    else:\n        constraint_name \u003d fk[\u0027constrained_columns\u0027][0]\n\nIt will be good if you put a docsting there that will mention that this function should be used only if we do not set unique constraint name when we have created it.","commit_id":"fd0d59b2d3ba8417b80cf03a9e6b9ab8204e143b"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1bad349cc336cdde1a4b056650407dd9443cbf9e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    return False"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def remove_constraint(table, constraint_name, constraint_type):"},{"line_number":170,"context_line":"    if (constraint_type \u003d\u003d \u0027unique\u0027 and"},{"line_number":171,"context_line":"        not unique_constraint_exists(table, constraint_name)):"},{"line_number":172,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_7c12b70a","line":169,"range":{"start_line":169,"start_character":4,"end_line":169,"end_character":21},"updated":"2016-07-11 13:09:29.000000000","message":"I think that it will be good to rename this method to safe_drop_unique_constaints and use it only for unique constraints as for foreign keys it does not benefit from it. I know I suggested to use for fks, sorry for that.","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ac117e867829938bc585759917dd229e6b549da","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    return False"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def remove_constraint(table, constraint_name, constraint_type):"},{"line_number":170,"context_line":"    if (constraint_type \u003d\u003d \u0027unique\u0027 and"},{"line_number":171,"context_line":"        not unique_constraint_exists(table, constraint_name)):"},{"line_number":172,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_e4427b3d","line":169,"range":{"start_line":169,"start_character":4,"end_line":169,"end_character":21},"in_reply_to":"1aa78d24_7c12b70a","updated":"2016-07-12 07:27:53.000000000","message":"No problem. Changed","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"b30b2090dcc03a0b097f63969a66bcf5afbb06db","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    This function will use as name of constraint according to such pattern."},{"line_number":188,"context_line":"    \"\"\""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    for fk in foreign_keys:"},{"line_number":191,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":192,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":193,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":194,"context_line":"        else:"},{"line_number":195,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":196,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_4f7a8df2","line":196,"range":{"start_line":190,"start_character":0,"end_line":196,"end_character":59},"updated":"2016-07-11 18:42:27.000000000","message":"see PS3 comment regarding special casing. take a look at [1] for the general idea.\n\n[1] http://paste.openstack.org/show/529780/","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ac117e867829938bc585759917dd229e6b549da","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    This function will use as name of constraint according to such pattern."},{"line_number":188,"context_line":"    \"\"\""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    for fk in foreign_keys:"},{"line_number":191,"context_line":"        if op.get_context().dialect.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":192,"context_line":"            constraint_name \u003d \"%s_%s_key\" % (table,"},{"line_number":193,"context_line":"                                             fk[\u0027constrained_columns\u0027][0])"},{"line_number":194,"context_line":"        else:"},{"line_number":195,"context_line":"            constraint_name \u003d fk[\u0027constrained_columns\u0027][0]"},{"line_number":196,"context_line":"        remove_constraint(table, constraint_name, \"unique\")"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_656af382","line":196,"range":{"start_line":190,"start_character":0,"end_line":196,"end_character":59},"in_reply_to":"1aa78d24_4f7a8df2","updated":"2016-07-12 07:27:53.000000000","message":"Thx. It works fine with Your solution. I changed it and I hope it will be better now :)","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"6b3270ed4296975a835ce6309faf6d8f24b804c3","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":200,"context_line":"    for fk in foreign_keys:"},{"line_number":201,"context_line":"        remove_constraint(table, fk[\u0027name\u0027], \u0027foreignkey\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def create_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_79367cb5","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":58},"updated":"2016-07-08 20:41:10.000000000","message":"By changing current behavior, you will not drop constraints in this place. Function ``remove_constraint`` will always return ``None``. Is this expected use-case?\nRight now, this code doesn\u0027t make sense to be here, beause does nothing.","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"c5bf41317670336150015a8d52e716e177c54f21","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":200,"context_line":"    for fk in foreign_keys:"},{"line_number":201,"context_line":"        remove_constraint(table, fk[\u0027name\u0027], \u0027foreignkey\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def create_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_a0f9bbca","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":58},"in_reply_to":"1aa78d24_63688abb","updated":"2016-07-09 15:17:46.000000000","message":"Right, my mistake. I understood it completely different, in opposite way. Thanks for clarification.\nSorry for mess :)","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"509022d0f4ad2ab2713e34636f5be602c2dad080","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":200,"context_line":"    for fk in foreign_keys:"},{"line_number":201,"context_line":"        remove_constraint(table, fk[\u0027name\u0027], \u0027foreignkey\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def create_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_63688abb","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":58},"in_reply_to":"1aa78d24_79367cb5","updated":"2016-07-08 22:09:27.000000000","message":"why? constraint_type is different then \"unique\" so it will not check if constraint exists and just delete it (I agreed such check with Ann Tarady).","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ac117e867829938bc585759917dd229e6b549da","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"def remove_foreign_keys(table, foreign_keys):"},{"line_number":200,"context_line":"    for fk in foreign_keys:"},{"line_number":201,"context_line":"        remove_constraint(table, fk[\u0027name\u0027], \u0027foreignkey\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def create_foreign_keys(table, foreign_keys):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_0525ef07","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":58},"in_reply_to":"1aa78d24_a0f9bbca","updated":"2016-07-12 07:27:53.000000000","message":"No problem :)","commit_id":"cdb46bbffa35684ba2e892fa83ae4ba6e73485f6"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"e75b449c7e9c1750ac78087353aed483dce44414","unresolved":false,"context_lines":[{"line_number":160,"context_line":"def get_unique_constraints_map(table):"},{"line_number":161,"context_line":"    inspector \u003d reflection.Inspector.from_engine(op.get_bind())"},{"line_number":162,"context_line":"    return {"},{"line_number":163,"context_line":"        tuple(sorted(cons[\u0027column_names\u0027])): cons[\u0027name\u0027]"},{"line_number":164,"context_line":"        for cons in inspector.get_unique_constraints(table)"},{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_b47ec2ac","line":163,"range":{"start_line":163,"start_character":8,"end_line":163,"end_character":21},"updated":"2016-07-12 10:28:45.000000000","message":"nit: It might be nice to introduce a function for that construct with some descriptive name for readability purpose (e.g. \u0027columns_as_key\u0027, maybe you can come with some better idea for the name).","commit_id":"7a206a942f97201968a043b6bf557912253b0032"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"372ce0472167289b6d80e7e3d04eabce29113fec","unresolved":false,"context_lines":[{"line_number":160,"context_line":"def get_unique_constraints_map(table):"},{"line_number":161,"context_line":"    inspector \u003d reflection.Inspector.from_engine(op.get_bind())"},{"line_number":162,"context_line":"    return {"},{"line_number":163,"context_line":"        tuple(sorted(cons[\u0027column_names\u0027])): cons[\u0027name\u0027]"},{"line_number":164,"context_line":"        for cons in inspector.get_unique_constraints(table)"},{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_e1d249d0","line":163,"range":{"start_line":163,"start_character":8,"end_line":163,"end_character":21},"in_reply_to":"1aa78d24_ab9ae011","updated":"2016-07-12 11:46:55.000000000","message":"Right, but it is also used in [1] and we might want to make it clear that they both do the same thing. I\u0027m just not sure if it is obvious enough now.\n\nAnyway, I\u0027m ok with the way it is implemented now.\n\n[1] https://review.openstack.org/#/c/338986/5/neutron/db/migration/__init__.py@172","commit_id":"7a206a942f97201968a043b6bf557912253b0032"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"936e6e40d213aa393eebe155e9902843503a1a3c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"def get_unique_constraints_map(table):"},{"line_number":161,"context_line":"    inspector \u003d reflection.Inspector.from_engine(op.get_bind())"},{"line_number":162,"context_line":"    return {"},{"line_number":163,"context_line":"        tuple(sorted(cons[\u0027column_names\u0027])): cons[\u0027name\u0027]"},{"line_number":164,"context_line":"        for cons in inspector.get_unique_constraints(table)"},{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_ab9ae011","line":163,"range":{"start_line":163,"start_character":8,"end_line":163,"end_character":21},"in_reply_to":"1aa78d24_b47ec2ac","updated":"2016-07-12 10:58:13.000000000","message":"I\u0027m not sure. It is already in separate function for readability. IMHO it could be too much to add one more function here.\nAlso separate variable for that IMHO is not necessary.","commit_id":"7a206a942f97201968a043b6bf557912253b0032"}]}
