return exclusions.open()
+ @property
+ def fetch_rows_post_commit(self):
+ """target platform will allow cursor.fetchone() to proceed after a
+ COMMIT.
+
+ Typically this refers to an INSERT statement with RETURNING which
+ is invoked within "autocommit". If the row can be returned
+ after the autocommit, then this rule can be open.
+
+ """
+
+ return exclusions.open()
+
+
@property
def empty_inserts(self):
"""target platform supports INSERT with no values, i.e.
Column('data', String(50))
)
- def test_explicit_returning_pk(self):
+ @requirements.fetch_rows_post_commit
+ def test_explicit_returning_pk_autocommit(self):
engine = config.db
table = self.tables.autoinc_pk
r = engine.execute(
fetched_pk = config.db.scalar(select([table.c.id]))
eq_(fetched_pk, pk)
+ def test_explicit_returning_pk_no_autocommit(self):
+ engine = config.db
+ table = self.tables.autoinc_pk
+ with engine.begin() as conn:
+ r = conn.execute(
+ table.insert().returning(
+ table.c.id),
+ data="some data"
+ )
+ pk = r.first()[0]
+ fetched_pk = config.db.scalar(select([table.c.id]))
+ eq_(fetched_pk, pk)
+
def test_autoincrement_on_insert_implcit_returning(self):
config.db.execute(
"not supported by database"
)
+ @property
+ def insert_from_select(self):
+ return skip_if(
+ ["firebird"], "crashes for unknown reason"
+ )
+
+ @property
+ def fetch_rows_post_commit(self):
+ return skip_if(
+ ["firebird"], "not supported"
+ )
+
@property
def binary_comparisons(self):
"""target database/driver can allow BLOB/BINARY fields to be compared
"""target backend supports Decimal() objects using E notation
to represent very large values."""
- return fails_if(
- ("sybase+pyodbc", None, None,
+ return skip_if(
+ [("sybase+pyodbc", None, None,
"Don't know how do get these values through FreeTDS + Sybase"),
- ("firebird", None, None, "Precision must be from 1 to 18"),
+ ("firebird", None, None, "Precision must be from 1 to 18"),]
)
@property