I mentioned this last week in another thread but I suspect it got lost.

I recently came across a situation where the code failed when running it under devstack but passed the unit tests. It turns out that the unit tests regexp() behaves differently than the built-in one in mysql.

Down in db/sqlalchemy/api.py we end up calling

query = query.filter(column_attr.op(db_regexp_op)('None'))

When using mysql, it looks like a regexp comparison of the string 'None' against a NULL field fails to match.

Since sqlite doesn't have its own regexp function we provide one in openstack/common/db/sqlalchemy/session.py. In the buggy case we end up calling it as regexp('None', None), where the types are "unicode" and "NoneType". However, we end up converting the second arg to text type before calling reg.search() on it, so it matches.

Having unit tests that don't behave like the real thing seems like a bad idea...

Chris

_______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to