)]}'
{"oslo/db/sqlalchemy/test_migrations.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"0ab560843ab20887efb05c8f1dea93182017b51b","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param rendered_meta_def: rendered column default value (from model)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":351,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Boolean)):"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_38127d57","line":349,"updated":"2014-08-20 15:44:57.000000000","message":"while this suggestion includes code that was pre-existing here outside of the patch, we nonetheless can\u0027t build a mountain of conditionals here.  Replace the calls for \"name \u003d\u003d \u0027mysql\u0027\" and \"name \u003d\u003d \u0027postgresql\u0027\" and instead break functions for MySQL and Postgresql into individual methods.  Then mark these methods using dispatch (see https://review.openstack.org/#/c/109436/), create a \"stuff\" method called `_compare_db_server_default()`, then call it here: `self._compare_db_server_default(ctxt.bind, ins_col, meta_col, ...)`\n\nWithin the dialect-specific methods themselves, for the moment we probably need to stick with the \"issubclass()\" approach for testing the types, that can be improved as well but it\u0027s OK for the moment.","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4f2e01b14197e6eb91b52594d1448ee65dff7ab4","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param rendered_meta_def: rendered column default value (from model)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":351,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Boolean)):"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_1001f904","line":349,"in_reply_to":"1abeadc6_38127d57","updated":"2014-08-21 10:55:39.000000000","message":"Done","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"0ab560843ab20887efb05c8f1dea93182017b51b","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":351,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Boolean)):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":354,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            return not ("}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_9d9703ec","line":353,"updated":"2014-08-20 15:44:57.000000000","message":"this check applies to all server_default checks, move it up above the \"dialect.name\" check","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4f2e01b14197e6eb91b52594d1448ee65dff7ab4","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":351,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Boolean)):"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":354,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            return not ("}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_3006f51d","line":353,"in_reply_to":"1abeadc6_9d9703ec","updated":"2014-08-21 10:55:39.000000000","message":"Done","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"0ab560843ab20887efb05c8f1dea93182017b51b","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":362,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Integer)):"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":365,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            return meta_def.arg \u003d\u003d insp_def"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_1d8bf3c3","line":364,"updated":"2014-08-20 15:44:57.000000000","message":"remove this, should be handled just once up above","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4f2e01b14197e6eb91b52594d1448ee65dff7ab4","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if (ctxt.dialect.name \u003d\u003d \u0027mysql\u0027 and"},{"line_number":362,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.Integer)):"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":365,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            return meta_def.arg \u003d\u003d insp_def"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_700ced3b","line":364,"in_reply_to":"1abeadc6_1d8bf3c3","updated":"2014-08-21 10:55:39.000000000","message":"Done","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"0ab560843ab20887efb05c8f1dea93182017b51b","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        if (self.get_engine().dialect.name \u003d\u003d \u0027postgresql\u0027 and"},{"line_number":370,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.String)):"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":373,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":374,"context_line":"            return not (insp_def \u003d\u003d \"\u0027%s\u0027::character varying\" % meta_def.arg)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_7d8ea7d1","line":372,"updated":"2014-08-20 15:44:57.000000000","message":"remove this, should be handled just once up above","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4f2e01b14197e6eb91b52594d1448ee65dff7ab4","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        if (self.get_engine().dialect.name \u003d\u003d \u0027postgresql\u0027 and"},{"line_number":370,"context_line":"                issubclass(type(meta_col.type), sqlalchemy.String)):"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            if meta_def is None or insp_def is None:"},{"line_number":373,"context_line":"                return meta_def !\u003d insp_def"},{"line_number":374,"context_line":"            return not (insp_def \u003d\u003d \"\u0027%s\u0027::character varying\" % meta_def.arg)"},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_90142945","line":372,"in_reply_to":"1abeadc6_7d8ea7d1","updated":"2014-08-21 10:55:39.000000000","message":"Done","commit_id":"52b00d290a972896de37d3b2db11e19bf4761f4d"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"84f4b66299fe5712d7c575f26336f377cdcb2a12","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if meta_def is None or insp_def is None:"},{"line_number":352,"context_line":"            return meta_def !\u003d insp_def"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        return self._compare_server_default(ctxt.bind, meta_col, insp_def,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_3a6a4cee","line":351,"updated":"2014-08-21 14:01:45.000000000","message":"OK whats going on with the error is that when user-defined compare_server_default returns a non-None value, Alembic\u0027s built-in rules are skipped.   In the case of the error with the sequence, Alembic has a rule for Postgresql to just skip the integer primary key columns.   Technically I\u0027d prefer if the conditional here is not present at all, I\u0027m not sure that Alembic can\u0027t handle a simple case like this as is.  However, if we want to start more conservatively, we can move this rule back into the mysql- and postgresql- specific versions, and only call upon it for the target datatypes (e.g. Boolean and Integer for mysql, String for postgresql).   Otherwise, compare_server_default should return None so that Alembic\u0027s own rules can be used for the particular type.  That should resolve the failure.  But later I want to try to refine this rule.","commit_id":"de8dfedffb001e641b60569f000218f8385cd04f"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"0e207f8f2eee4357dbdfb2c152df44e17927d060","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if meta_def is None or insp_def is None:"},{"line_number":352,"context_line":"            return meta_def !\u003d insp_def"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        return self._compare_server_default(ctxt.bind, meta_col, insp_def,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_1cc3cb89","line":351,"in_reply_to":"1abeadc6_3a6a4cee","updated":"2014-08-21 14:52:19.000000000","message":"Done","commit_id":"de8dfedffb001e641b60569f000218f8385cd04f"}],"tests/sqlalchemy/test_migrations.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d257d1329788887f998df16650cd6838b9a43cbe","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            sa.Column(\u0027bool_wo_default\u0027, sa.Boolean),"},{"line_number":190,"context_line":"            sa.Column(\u0027bar\u0027, sa.Numeric(10, 5)),"},{"line_number":191,"context_line":"            sa.Column(\u0027defaulttest\u0027, sa.Integer, server_default\u003d\u00275\u0027),"},{"line_number":192,"context_line":"            sa.Column(\u0027defaulttest2\u0027, sa.String(8), server_default\u003d\u0027\u0027),"},{"line_number":193,"context_line":"            sa.UniqueConstraint(\u0027spam\u0027, \u0027eggs\u0027, name\u003d\u0027uniq_cons\u0027),"},{"line_number":194,"context_line":"        )"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_40db411b","line":192,"updated":"2014-09-01 08:30:43.000000000","message":"nit: can we add another column with non-empty string server_default value?","commit_id":"931b2e5cfa39864f54d974bbd7002511bf44c468"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d257d1329788887f998df16650cd6838b9a43cbe","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                      server_default\u003dsa.sql.expression.false()),"},{"line_number":243,"context_line":"            sa.Column(\u0027bool_wo_default\u0027, sa.Boolean, unique\u003dTrue),"},{"line_number":244,"context_line":"            sa.Column(\u0027bar\u0027, sa.BigInteger),"},{"line_number":245,"context_line":"            sa.Column(\u0027defaulttest\u0027, sa.Integer, server_default\u003d\u00275\u0027),"},{"line_number":246,"context_line":"            sa.Column(\u0027defaulttest2\u0027, sa.String(8), server_default\u003d\u0027\u0027),"},{"line_number":247,"context_line":"            sa.UniqueConstraint(\u0027spam\u0027, \u0027foo\u0027, name\u003d\u0027uniq_cons\u0027),"},{"line_number":248,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_c0e731e3","line":245,"updated":"2014-09-01 08:30:43.000000000","message":"nit: can we use different default values here and add assertions below?","commit_id":"931b2e5cfa39864f54d974bbd7002511bf44c468"}]}
