diff options
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r-- | lib/sqlalchemy/testing/assertions.py | 3 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/assertsql.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/suite/test_insert.py | 15 |
4 files changed, 31 insertions, 3 deletions
diff --git a/lib/sqlalchemy/testing/assertions.py b/lib/sqlalchemy/testing/assertions.py index 02137474b..9ff2f76eb 100644 --- a/lib/sqlalchemy/testing/assertions.py +++ b/lib/sqlalchemy/testing/assertions.py @@ -400,6 +400,7 @@ class AssertsCompiledSQL(object): use_default_dialect=False, allow_dialect_select=False, supports_default_values=True, + supports_default_metavalue=True, literal_binds=False, render_postcompile=False, schema_translate_map=None, @@ -410,6 +411,7 @@ class AssertsCompiledSQL(object): if use_default_dialect: dialect = default.DefaultDialect() dialect.supports_default_values = supports_default_values + dialect.supports_default_metavalue = supports_default_metavalue elif allow_dialect_select: dialect = None else: @@ -421,6 +423,7 @@ class AssertsCompiledSQL(object): elif dialect == "default": dialect = default.DefaultDialect() dialect.supports_default_values = supports_default_values + dialect.supports_default_metavalue = supports_default_metavalue elif dialect == "default_enhanced": dialect = default.StrCompileDialect() elif isinstance(dialect, util.string_types): diff --git a/lib/sqlalchemy/testing/assertsql.py b/lib/sqlalchemy/testing/assertsql.py index 1bdd11585..98261a374 100644 --- a/lib/sqlalchemy/testing/assertsql.py +++ b/lib/sqlalchemy/testing/assertsql.py @@ -76,7 +76,11 @@ class CompiledSQL(SQLMatchRule): def _compile_dialect(self, execute_observed): if self.dialect == "default": - return DefaultDialect() + dialect = DefaultDialect() + # this is currently what tests are expecting + # dialect.supports_default_values = True + dialect.supports_default_metavalue = True + return dialect else: # ugh if self.dialect == "postgresql": diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index f82d5f065..8a70cc692 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -335,11 +335,19 @@ class SuiteRequirements(Requirements): return exclusions.only_if( lambda config: config.db.dialect.supports_empty_insert - or config.db.dialect.supports_default_values, + or config.db.dialect.supports_default_values + or config.db.dialect.supports_default_metavalue, "empty inserts not supported", ) @property + def empty_inserts_executemany(self): + """target platform supports INSERT with no values, i.e. + INSERT DEFAULT VALUES or equivalent, within executemany()""" + + return self.empty_inserts + + @property def insert_from_select(self): """target platform supports INSERT from a SELECT.""" diff --git a/lib/sqlalchemy/testing/suite/test_insert.py b/lib/sqlalchemy/testing/suite/test_insert.py index 35f3315c7..3c033a774 100644 --- a/lib/sqlalchemy/testing/suite/test_insert.py +++ b/lib/sqlalchemy/testing/suite/test_insert.py @@ -167,8 +167,21 @@ class InsertBehaviorTest(fixtures.TablesTest): self.tables.autoinc_pk.c.id != None ) ) + eq_(len(r.all()), 1) - assert len(r.fetchall()) + @requirements.empty_inserts_executemany + def test_empty_insert_multiple(self, connection): + r = connection.execute(self.tables.autoinc_pk.insert(), [{}, {}, {}]) + assert r._soft_closed + assert not r.closed + + r = connection.execute( + self.tables.autoinc_pk.select().where( + self.tables.autoinc_pk.c.id != None + ) + ) + + eq_(len(r.all()), 3) @requirements.insert_from_select def test_insert_from_select_autoinc(self, connection): |