)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"65e43a4c394968be6fdc0b92bb38130875d1d359","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added new field \u0027value\u0027 for DBDuplicateEntry exception."},{"line_number":10,"context_line":"It shows duplicated value for mysql and postresql 9.x engines"},{"line_number":11,"context_line":"and is read from the error message using regular expressions."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I647e314cafe8ceb570bf18948d6ab83ab6afef97"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_8b7cd621","line":11,"updated":"2014-07-27 10:26:53.000000000","message":"nit: please mention in the commit message that the duplicated value can\u0027t be extracted from SQLite error messages, so we do our best here for other db backends we support.","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"aa0f845d5056a215843adc848f0a881077145108","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added new field \u0027value\u0027 for DBDuplicateEntry exception."},{"line_number":10,"context_line":"It shows duplicated value for mysql and postresql 9.x engines"},{"line_number":11,"context_line":"and is read from the error message using regular expressions."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I647e314cafe8ceb570bf18948d6ab83ab6afef97"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_fd3d068f","line":11,"in_reply_to":"baada198_8b7cd621","updated":"2014-07-28 09:30:55.000000000","message":"Done","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"}],"oslo/db/exception.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class DBDuplicateEntry(DBError):"},{"line_number":32,"context_line":"    \"\"\"Wraps an implementation specific exception.\"\"\""},{"line_number":33,"context_line":"    def __init__(self, columns\u003dNone, duplicated_value\u003dNone,"},{"line_number":34,"context_line":"                 inner_exception\u003dNone):"},{"line_number":35,"context_line":"        self.columns \u003d columns or []"},{"line_number":36,"context_line":"        self.duplicated_value \u003d duplicated_value"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_7c6906bd","line":33,"updated":"2014-07-21 15:52:56.000000000","message":"nit: let\u0027s make this new argument the last one, so that we wouldn\u0027t have to change all the calls passing inner_exception argument not using keyword arguments","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class DBDuplicateEntry(DBError):"},{"line_number":32,"context_line":"    \"\"\"Wraps an implementation specific exception.\"\"\""},{"line_number":33,"context_line":"    def __init__(self, columns\u003dNone, duplicated_value\u003dNone,"},{"line_number":34,"context_line":"                 inner_exception\u003dNone):"},{"line_number":35,"context_line":"        self.columns \u003d columns or []"},{"line_number":36,"context_line":"        self.duplicated_value \u003d duplicated_value"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d5a9cb26","line":33,"in_reply_to":"baada198_7c6906bd","updated":"2014-07-22 11:22:06.000000000","message":"Done","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def __init__(self, columns\u003dNone, duplicated_value\u003dNone,"},{"line_number":34,"context_line":"                 inner_exception\u003dNone):"},{"line_number":35,"context_line":"        self.columns \u003d columns or []"},{"line_number":36,"context_line":"        self.duplicated_value \u003d duplicated_value"},{"line_number":37,"context_line":"        super(DBDuplicateEntry, self).__init__(inner_exception)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_1ca00af3","line":36,"updated":"2014-07-21 15:52:56.000000000","message":"nit: can we rename it to \u0027value\u0027?","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def __init__(self, columns\u003dNone, duplicated_value\u003dNone,"},{"line_number":34,"context_line":"                 inner_exception\u003dNone):"},{"line_number":35,"context_line":"        self.columns \u003d columns or []"},{"line_number":36,"context_line":"        self.duplicated_value \u003d duplicated_value"},{"line_number":37,"context_line":"        super(DBDuplicateEntry, self).__init__(inner_exception)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_f5a6cf53","line":36,"in_reply_to":"baada198_1ca00af3","updated":"2014-07-22 11:22:06.000000000","message":"Done","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"}],"oslo/db/sqlalchemy/exc_filters.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    r\" for key \u0027(?P\u003ccolumn\u003e[^\u0027]+)\u0027.*$\")"},{"line_number":89,"context_line":"@filters(\"postgresql\", sqla_exc.IntegrityError,"},{"line_number":90,"context_line":"    (r\u0027^.*duplicate\\s+key.*\"(?P\u003ccolumn\u003e[^\"]+)\"\\s*\\n.*\u0027"},{"line_number":91,"context_line":"    r\u0027Key\\s+\\((?P\u003ckey\u003e.*)\\)\u003d\\((?P\u003cvalue\u003e.*)\\)\\s+already\\s+exists.*$\u0027,"},{"line_number":92,"context_line":"    r\"^.*duplicate\\s+key.*\\\"(?P\u003ccolumn\u003e[^\\\"]+)\\\"\\s*\\n.*$\"))"},{"line_number":93,"context_line":"def _default_dupe_key_error(integrity_error, match, engine_name,"},{"line_number":94,"context_line":"    is_disconnect):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_1cee4a22","line":91,"updated":"2014-07-21 15:52:56.000000000","message":"nit: we could add a comment explaining this one is only suitable for PostgreSQL 9.x versions","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    r\" for key \u0027(?P\u003ccolumn\u003e[^\u0027]+)\u0027.*$\")"},{"line_number":89,"context_line":"@filters(\"postgresql\", sqla_exc.IntegrityError,"},{"line_number":90,"context_line":"    (r\u0027^.*duplicate\\s+key.*\"(?P\u003ccolumn\u003e[^\"]+)\"\\s*\\n.*\u0027"},{"line_number":91,"context_line":"    r\u0027Key\\s+\\((?P\u003ckey\u003e.*)\\)\u003d\\((?P\u003cvalue\u003e.*)\\)\\s+already\\s+exists.*$\u0027,"},{"line_number":92,"context_line":"    r\"^.*duplicate\\s+key.*\\\"(?P\u003ccolumn\u003e[^\\\"]+)\\\"\\s*\\n.*$\"))"},{"line_number":93,"context_line":"def _default_dupe_key_error(integrity_error, match, engine_name,"},{"line_number":94,"context_line":"    is_disconnect):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_756abfee","line":91,"in_reply_to":"baada198_1cee4a22","updated":"2014-07-22 11:22:06.000000000","message":"Done","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    columns \u003d match.group(\u0027column\u0027)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # note(vsergeyev): UniqueConstraint name convention: \"uniq_t0c10c2\""},{"line_number":125,"context_line":"    #                  where `t` it is table name and columns `c1`, `c2`"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bcbb9e0d","line":122,"updated":"2014-07-21 15:52:56.000000000","message":"nit: can we rename this group to \u0027columns\u0027?","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    columns \u003d match.group(\u0027column\u0027)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # note(vsergeyev): UniqueConstraint name convention: \"uniq_t0c10c2\""},{"line_number":125,"context_line":"    #                  where `t` it is table name and columns `c1`, `c2`"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_956f53fc","line":122,"in_reply_to":"baada198_bcbb9e0d","updated":"2014-07-22 11:22:06.000000000","message":"Done","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    else:"},{"line_number":134,"context_line":"        columns \u003d columns[len(uniqbase):].split(\"0\")[1:]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    duplicated_value \u003d None"},{"line_number":137,"context_line":"    if \u0027value\u0027 in match.groupdict():"},{"line_number":138,"context_line":"        duplicated_value \u003d match.groupdict()[\u0027value\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9c6eda94","line":136,"updated":"2014-07-21 15:52:56.000000000","message":"value \u003d match.groupdict().get(\u0027value\u0027) ?","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    else:"},{"line_number":134,"context_line":"        columns \u003d columns[len(uniqbase):].split(\"0\")[1:]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    duplicated_value \u003d None"},{"line_number":137,"context_line":"    if \u0027value\u0027 in match.groupdict():"},{"line_number":138,"context_line":"        duplicated_value \u003d match.groupdict()[\u0027value\u0027]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_157b43bf","line":136,"in_reply_to":"baada198_9c6eda94","updated":"2014-07-22 11:22:06.000000000","message":"Done","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"65e43a4c394968be6fdc0b92bb38130875d1d359","unresolved":false,"context_lines":[{"line_number":86,"context_line":"@filters(\"mysql\", sqla_exc.IntegrityError,"},{"line_number":87,"context_line":"    r\"^.*\\b1062\\b.*Duplicate entry \u0027(?P\u003cvalue\u003e[^\u0027]+)\u0027\""},{"line_number":88,"context_line":"    r\" for key \u0027(?P\u003ccolumns\u003e[^\u0027]+)\u0027.*$\")"},{"line_number":89,"context_line":"# NOTE(pkholkin): the first regex is suitable for PostgreSQL 8.x versions"},{"line_number":90,"context_line":"#                 the second regex is suitable only for PostgreSQL 9.x versions"},{"line_number":91,"context_line":"@filters(\"postgresql\", sqla_exc.IntegrityError,"},{"line_number":92,"context_line":"    (r\u0027^.*duplicate\\s+key.*\"(?P\u003ccolumns\u003e[^\"]+)\"\\s*\\n.*\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_2ba58ab4","line":89,"updated":"2014-07-27 10:26:53.000000000","message":"nit: the first one is actually for 9.x versions :P","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"aa0f845d5056a215843adc848f0a881077145108","unresolved":false,"context_lines":[{"line_number":86,"context_line":"@filters(\"mysql\", sqla_exc.IntegrityError,"},{"line_number":87,"context_line":"    r\"^.*\\b1062\\b.*Duplicate entry \u0027(?P\u003cvalue\u003e[^\u0027]+)\u0027\""},{"line_number":88,"context_line":"    r\" for key \u0027(?P\u003ccolumns\u003e[^\u0027]+)\u0027.*$\")"},{"line_number":89,"context_line":"# NOTE(pkholkin): the first regex is suitable for PostgreSQL 8.x versions"},{"line_number":90,"context_line":"#                 the second regex is suitable only for PostgreSQL 9.x versions"},{"line_number":91,"context_line":"@filters(\"postgresql\", sqla_exc.IntegrityError,"},{"line_number":92,"context_line":"    (r\u0027^.*duplicate\\s+key.*\"(?P\u003ccolumns\u003e[^\"]+)\"\\s*\\n.*\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_6207951d","line":89,"in_reply_to":"baada198_2ba58ab4","updated":"2014-07-28 09:30:55.000000000","message":"Done","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"65e43a4c394968be6fdc0b92bb38130875d1d359","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"@filters(\"sqlite\", sqla_exc.IntegrityError,"},{"line_number":144,"context_line":"    (r\"^.*columns?(?P\u003ccolumns\u003e[^)]+)(is|are)\\s+not\\s+unique$\","},{"line_number":145,"context_line":"    r\"^.*UNIQUE\\s+constraint\\s+failed:\\s+(?P\u003ccolumns\u003e.+)$\"))"},{"line_number":146,"context_line":"def _sqlite_dupe_key_error(integrity_error, match, engine_name, is_disconnect):"},{"line_number":147,"context_line":"    \"\"\"Filter for SQLite duplicate key error."}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_4b7f1e17","line":144,"updated":"2014-07-27 10:26:53.000000000","message":"nit: while this is correct and harmless, it\u0027s a kind of unrelated change, given the fact that we\u0027re not changing of sqlite errors in any way in this patch. Could you please split this into another change?","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"aa0f845d5056a215843adc848f0a881077145108","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"@filters(\"sqlite\", sqla_exc.IntegrityError,"},{"line_number":144,"context_line":"    (r\"^.*columns?(?P\u003ccolumns\u003e[^)]+)(is|are)\\s+not\\s+unique$\","},{"line_number":145,"context_line":"    r\"^.*UNIQUE\\s+constraint\\s+failed:\\s+(?P\u003ccolumns\u003e.+)$\"))"},{"line_number":146,"context_line":"def _sqlite_dupe_key_error(integrity_error, match, engine_name, is_disconnect):"},{"line_number":147,"context_line":"    \"\"\"Filter for SQLite duplicate key error."}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_bd82ae4f","line":144,"in_reply_to":"baada198_4b7f1e17","updated":"2014-07-28 09:30:55.000000000","message":"Yes, here are no changes for sqlite. Only the group name \u0027columns\u0027 was added because it was done in the same way for other backends.","commit_id":"e59b9063f841abd2e0af5895665db300086af41b"}],"oslo/db/sqlalchemy/session.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"90d2baa2d1570abe4f3496dc312e0e241c039909","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        uniqbase \u003d \"uniq_\""},{"line_number":375,"context_line":"        if not columns.startswith(uniqbase):"},{"line_number":376,"context_line":"            if engine_name \u003d\u003d \"postgresql\":"},{"line_number":377,"context_line":"                return [columns[columns.index(\"_\"):columns.rindex(\"_\")]]"},{"line_number":378,"context_line":"            return [columns]"},{"line_number":379,"context_line":"        return columns[len(uniqbase):].split(\"0\")[1:]"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_dd796dfd","line":377,"updated":"2014-07-18 15:55:28.000000000","message":"hmm, why do you change this line?","commit_id":"4caef40bc96c3c3ab6a2ce4b13dda1efc088113b"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"af4bebcb13eedd4ca14cb78fbfe04ec8adb130bf","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    duplicated_value \u003d None"},{"line_number":410,"context_line":"    if engine_name \u003d\u003d \u0027mysql\u0027:"},{"line_number":411,"context_line":"        duplicated_value \u003d match.group(1)"},{"line_number":412,"context_line":"    elif engine_name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":413,"context_line":"        # NOTE(pkholkin): for postgresql version 9.x"},{"line_number":414,"context_line":"        duplicated_value \u003d match.group(3)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_347c4520","line":412,"updated":"2014-07-18 14:41:33.000000000","message":"what happened here, if we will have postgresql 8.4 installed ?","commit_id":"4caef40bc96c3c3ab6a2ce4b13dda1efc088113b"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"90d2baa2d1570abe4f3496dc312e0e241c039909","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    duplicated_value \u003d None"},{"line_number":410,"context_line":"    if engine_name \u003d\u003d \u0027mysql\u0027:"},{"line_number":411,"context_line":"        duplicated_value \u003d match.group(1)"},{"line_number":412,"context_line":"    elif engine_name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":413,"context_line":"        # NOTE(pkholkin): for postgresql version 9.x"},{"line_number":414,"context_line":"        duplicated_value \u003d match.group(3)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_7dadc130","line":412,"in_reply_to":"baada198_347c4520","updated":"2014-07-18 15:55:28.000000000","message":"Agreed. We should try to do our best when parsing error messages, but if the backend (e.g. postgresql 8.4) doesn\u0027t provide corresponding information, we should not fail here.","commit_id":"4caef40bc96c3c3ab6a2ce4b13dda1efc088113b"}],"tests/sqlalchemy/test_exc_filters.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.assertEqual(\"mysqldb has an attribute error\", matched.message)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"class TestDuplicate(TestsExceptionFilter):"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _run_dupe_constraint_test(self, dialect_name, message,"},{"line_number":172,"context_line":"        expected_columns\u003d[\u0027a\u0027, \u0027b\u0027], expected_value\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9c225aff","line":169,"updated":"2014-07-21 15:52:56.000000000","message":"it would be nice to see two additional tests:\n\n1) test that a single column unique constraint value is parsed correctly\n\n2) test that multiline INSERT statement is handled correctly (e.g. INSERT INTO testtbl (a, b, c) values (1, 2, 3), (2, 2, 3) with a unique constraint on columns (b, c))","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.assertEqual(\"mysqldb has an attribute error\", matched.message)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"class TestDuplicate(TestsExceptionFilter):"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _run_dupe_constraint_test(self, dialect_name, message,"},{"line_number":172,"context_line":"        expected_columns\u003d[\u0027a\u0027, \u0027b\u0027], expected_value\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_1529839b","line":169,"in_reply_to":"baada198_9c225aff","updated":"2014-07-22 11:22:06.000000000","message":"1) done  \n\n2) messages for single and multiline inserts are the same","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"184db3d71adcb825872bde1c50dc55b1f5b51154","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def test_mysql_mysqldb(self):"},{"line_number":198,"context_line":"        self._run_dupe_constraint_test(\"mysql\","},{"line_number":199,"context_line":"            \u0027(1062, \"Duplicate entry \u0027"},{"line_number":200,"context_line":"            \u0027\\\u00272-3\\\u0027 for key \\\u0027uniq_tbl0a0b\\\u0027\")\u0027, expected_value\u003d\u00272-3\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_mysql_mysqlconnector(self):"},{"line_number":203,"context_line":"        self._run_dupe_constraint_test(\"mysql\","}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_3cb22e06","line":200,"updated":"2014-07-21 15:52:56.000000000","message":"can we make sure this value is parsed and return as a tuple, e.g. (2, 3) for all supported backends?","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"26ac3416bd0864c9569e2c570561b0cecec629c8","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def test_mysql_mysqldb(self):"},{"line_number":198,"context_line":"        self._run_dupe_constraint_test(\"mysql\","},{"line_number":199,"context_line":"            \u0027(1062, \"Duplicate entry \u0027"},{"line_number":200,"context_line":"            \u0027\\\u00272-3\\\u0027 for key \\\u0027uniq_tbl0a0b\\\u0027\")\u0027, expected_value\u003d\u00272-3\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_mysql_mysqlconnector(self):"},{"line_number":203,"context_line":"        self._run_dupe_constraint_test(\"mysql\","}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_f819667b","line":200,"in_reply_to":"baada198_3cb22e06","updated":"2014-07-22 11:22:06.000000000","message":"not done yet","commit_id":"f292b33de4a5031187408474041ed1e226df0bdb"}],"tests/sqlalchemy/test_sqlalchemy.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"90d2baa2d1570abe4f3496dc312e0e241c039909","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        session._raise_if_duplicate_entry_error(integrity_error, \u0027ibm_db_sa\u0027)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class DuplicatedEntryMysql(test_base.MySQLOpportunisticTestCase):"},{"line_number":128,"context_line":"    def setUp(self):"},{"line_number":129,"context_line":"        super(DuplicatedEntryMysql, self).setUp()"},{"line_number":130,"context_line":"        meta \u003d MetaData()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_40f574eb","line":127,"updated":"2014-07-18 15:55:28.000000000","message":"Can we use a common test case here? Something like:\n\n    class TestDuplicatedEntryValue(test_base.DbTestCase):\n         ... all code goes here\n\n     \n    class TestDuplicatedEntryValuePostreSQL(test_base.PostgreSQLOpportunisticTestCase):\n        pass\n\n    class TestDuplicatedEntryValueMySQL(test_base.MySQLOpportunisticTestCase):\n        pass","commit_id":"4caef40bc96c3c3ab6a2ce4b13dda1efc088113b"}]}
