)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29e9379fbd023aa8cb97dd6daa85fe35e4355440","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Check schema when dropping constraints."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"MySQL constraints are not names like others."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Previous to this patch, we were looking up the names in the"},{"line_number":12,"context_line":"INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table, but were"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPX%2F%2F%2BNQ%3D","line":9,"updated":"2013-06-04 21:07:33.000000000","message":"change \"names\" to \"named\"\n\nalso, change \"others\" to \"other RDBMSs\"?","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dda0065958a92560065cc8f1a5d02e39f9534a19","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Check schema when dropping constraints."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"MySQL constraints are not names like others."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Previous to this patch, we were looking up the names in the"},{"line_number":12,"context_line":"INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table, but were"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPX%2F%2F9wI%3D","line":9,"in_reply_to":"AAAAPX%2F%2F%2BNQ%3D","updated":"2013-06-05 01:06:38.000000000","message":"Done","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29e9379fbd023aa8cb97dd6daa85fe35e4355440","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"MySQL constraints are not names like others."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Previous to this patch, we were looking up the names in the"},{"line_number":12,"context_line":"INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table, but were"},{"line_number":13,"context_line":"neglecting to also check the Schema. The same table"},{"line_number":14,"context_line":"could be in multiple schemas; as an example a unit test"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPX%2F%2F%2BNI%3D","line":11,"updated":"2013-06-04 21:07:33.000000000","message":"change \"the\" to \"MySQL\u0027s\"","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dda0065958a92560065cc8f1a5d02e39f9534a19","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"MySQL constraints are not names like others."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Previous to this patch, we were looking up the names in the"},{"line_number":12,"context_line":"INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table, but were"},{"line_number":13,"context_line":"neglecting to also check the Schema. The same table"},{"line_number":14,"context_line":"could be in multiple schemas; as an example a unit test"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPX%2F%2F9wE%3D","line":11,"in_reply_to":"AAAAPX%2F%2F%2BNI%3D","updated":"2013-06-05 01:06:38.000000000","message":"Done","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"}],"keystone/common/sql/migrate_repo/versions/023_drop_credential_constraints.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0134fc541bf9bf8fc1a799a9f6b477e81735153d","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_constraint_name(table, column_name):"},{"line_number":22,"context_line":"    fkeys \u003d [fk for fk in table.constraints if column_name in fk.columns]"},{"line_number":23,"context_line":"    constraint_name \u003d fkeys[0].name"},{"line_number":24,"context_line":"    return constraint_name"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FdRY%3D","line":22,"updated":"2013-06-03 15:16:09.000000000","message":"couldn\u0027t you have multiple constraints on the same column? in which case, this is just going to return the first such constraint, and may result in the wrong one being dropped?","commit_id":"e1756a1fc3248ae47ee5a87e1e5d61871b02ad68"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"759d98c177a8b17a28da0ec9c9e1916ca21e7bcf","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def get_constraint_name(table, column_name):"},{"line_number":22,"context_line":"    fkeys \u003d [fk for fk in table.constraints if column_name in fk.columns]"},{"line_number":23,"context_line":"    constraint_name \u003d fkeys[0].name"},{"line_number":24,"context_line":"    return constraint_name"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fc%2Fc%3D","line":22,"in_reply_to":"AAAAPH%2F%2FdRY%3D","updated":"2013-06-03 16:29:12.000000000","message":"Potentially, but we don\u0027t have that now.  If we have that case in the future, we should differentiate, but that will require more complex code than is currently required.","commit_id":"e1756a1fc3248ae47ee5a87e1e5d61871b02ad68"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29e9379fbd023aa8cb97dd6daa85fe35e4355440","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def upgrade(migrate_engine):"},{"line_number":39,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":40,"context_line":"        return"},{"line_number":41,"context_line":"    migration_helpers.remove_constraints(list_constraints(migrate_engine))"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2F%2BM4%3D","line":39,"updated":"2013-06-04 21:07:33.000000000","message":"suggest add a comment explains why we don\u0027t do anything.","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dda0065958a92560065cc8f1a5d02e39f9534a19","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def upgrade(migrate_engine):"},{"line_number":39,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":40,"context_line":"        return"},{"line_number":41,"context_line":"    migration_helpers.remove_constraints(list_constraints(migrate_engine))"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2F9wA%3D","line":39,"in_reply_to":"AAAAPX%2F%2F%2BM4%3D","updated":"2013-06-05 01:06:38.000000000","message":"Done","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"}],"keystone/common/sql/migration_helpers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"29e9379fbd023aa8cb97dd6daa85fe35e4355440","unresolved":false,"context_lines":[{"line_number":38,"context_line":"#  \u0027fk_column\u0027: the name of a column on the above table,  The constraint"},{"line_number":39,"context_line":"#               is added to or dropped from this column"},{"line_number":40,"context_line":"#  \u0027ref_column\u0027:a sqlalchemy column object.  This is the reference column"},{"line_number":41,"context_line":"#               for the constraint."},{"line_number":42,"context_line":"def remove_constraints(constraints):"},{"line_number":43,"context_line":"    for constraint_def in constraints:"},{"line_number":44,"context_line":"        migrate.ForeignKeyConstraint("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2F%2BMc%3D","line":41,"updated":"2013-06-04 21:07:33.000000000","message":"ref_column is the name of the column, not a Column object, see 023_drop_credential_constraints.py line 31.","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dda0065958a92560065cc8f1a5d02e39f9534a19","unresolved":false,"context_lines":[{"line_number":38,"context_line":"#  \u0027fk_column\u0027: the name of a column on the above table,  The constraint"},{"line_number":39,"context_line":"#               is added to or dropped from this column"},{"line_number":40,"context_line":"#  \u0027ref_column\u0027:a sqlalchemy column object.  This is the reference column"},{"line_number":41,"context_line":"#               for the constraint."},{"line_number":42,"context_line":"def remove_constraints(constraints):"},{"line_number":43,"context_line":"    for constraint_def in constraints:"},{"line_number":44,"context_line":"        migrate.ForeignKeyConstraint("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2F9%2Fs%3D","line":41,"in_reply_to":"AAAAPX%2F%2F%2BMc%3D","updated":"2013-06-05 01:06:38.000000000","message":"No.  It is a column\n\u0027ref_column\u0027: user_table.c.id\nconfirmed in the debugger","commit_id":"e9c5b2143f6d97e970adfdf2a4f4bcecc0e2c536"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2930c2491d4c473ce658bded0deace4fea93c1fb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import sqlalchemy"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"#  Different RDBMSs use different schemes for naming the Foreign Key"},{"line_number":23,"context_line":"#  Constraints.  SQLAlchemy does not yet attempt to determine the name"},{"line_number":24,"context_line":"#  for the constraint, and instead attempts to deduce it from the column."},{"line_number":25,"context_line":"#  This fails on MySQL."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F2A4%3D","line":22,"updated":"2013-06-07 18:37:05.000000000","message":"these should be doc strings","commit_id":"e97262d21d3fce44201732eb409d24caaa11e026"}]}
