diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-07-14 22:00:01 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-07-14 22:00:01 +0000 |
commit | 44bd28704c25529520ee054e5c222b85ba587302 (patch) | |
tree | ac970a193b75133542ccc6815cfb0ed8e5f2aa11 | |
parent | eff37a21b2c35b632462b5b7978647811889bfe6 (diff) | |
parent | baf30bf6c49cd92428841cdcd89016553b8032b2 (diff) | |
download | oslo-db-44bd28704c25529520ee054e5c222b85ba587302.tar.gz |
Merge "Add DBDuplicateEntry detection for mysqlconnector driver"
-rw-r--r-- | oslo/db/sqlalchemy/session.py | 15 | ||||
-rw-r--r-- | tests/sqlalchemy/test_utils.py | 9 |
2 files changed, 20 insertions, 4 deletions
diff --git a/oslo/db/sqlalchemy/session.py b/oslo/db/sqlalchemy/session.py index 758ca19..c7ef0f2 100644 --- a/oslo/db/sqlalchemy/session.py +++ b/oslo/db/sqlalchemy/session.py @@ -328,12 +328,20 @@ class SqliteForeignKeysListener(PoolListener): # N columns - (IntegrityError) duplicate key value violates unique # constraint "name_of_our_constraint" # -# mysql: +# mysql+mysqldb: # 1 column - (IntegrityError) (1062, "Duplicate entry 'value_of_c1' for key # 'c1'") # N columns - (IntegrityError) (1062, "Duplicate entry 'values joined # with -' for key 'name_of_our_constraint'") # +# mysql+mysqlconnector: +# http://docs.sqlalchemy.org/en/rel_0_9/dialects/ +# mysql.html#module-sqlalchemy.dialects.mysql.mysqlconnector +# 1 column - (IntegrityError) 1062 (23000): Duplicate entry 'value_of_c1' for +# key 'c1' +# N columns - (IntegrityError) 1062 (23000): Duplicate entry 'values +# joined with -' for key 'name_of_our_constraint' +# # ibm_db_sa: # N columns - (IntegrityError) SQL0803N One or more values in the INSERT # statement, UPDATE statement, or foreign key update caused by a @@ -344,8 +352,9 @@ class SqliteForeignKeysListener(PoolListener): _DUP_KEY_RE_DB = { "sqlite": (re.compile(r"^.*columns?([^)]+)(is|are)\s+not\s+unique$"), re.compile(r"^.*UNIQUE\s+constraint\s+failed:\s+(.+)$")), - "postgresql": (re.compile(r"^.*duplicate\s+key.*\"([^\"]+)\"\s*\n.*$"),), - "mysql": (re.compile(r"^.*\(1062,.*'([^\']+)'\"\)$"),), + "postgresql": (re.compile(r'^.*duplicate\s+key.*"([^"]+)"\s*\n.*$'),), + "mysql": (re.compile( + r"^.*\b1062\b.*Duplicate entry '[^']+' for key '([^']+)'.*$"),), "ibm_db_sa": (re.compile(r"^.*SQL0803N.*$"),), } diff --git a/tests/sqlalchemy/test_utils.py b/tests/sqlalchemy/test_utils.py index a24a83a..effa884 100644 --- a/tests/sqlalchemy/test_utils.py +++ b/tests/sqlalchemy/test_utils.py @@ -719,13 +719,20 @@ class TestRaiseDuplicateEntryError(test_base.BaseTestCase): '(IntegrityError) UNIQUE constraint failed: tbl.a, tbl.b' ) - def test_mysql(self): + def test_mysql_mysqldb(self): self._test_impl( 'mysql', '(IntegrityError) (1062, "Duplicate entry ' '\'2-3\' for key \'uniq_tbl0a0b\'")' ) + def test_mysql_mysqlconnector(self): + self._test_impl( + 'mysql', + '(IntegrityError) 1062 (23000): Duplicate entry ' + '\'2-3\' for key \'uniq_tbl0a0b\'', + ) + def test_postgresql(self): self._test_impl( 'postgresql', |