summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-02-13 11:26:54 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2019-02-13 11:26:54 -0500
commit71d642711d26ee8e1e7e8b19d70be8be1eca22eb (patch)
treeedaf76ca61a1cd35ee365cf99ddd3fd745358877 /test
parent5cc5234e0b065907deb2765249dde1c526fe5c89 (diff)
downloadsqlalchemy-71d642711d26ee8e1e7e8b19d70be8be1eca22eb.tar.gz
Set IDENTITY_INSERT for insert.values({column: expr})
Fixed bug where the SQL Server "IDENTITY_INSERT" logic that allows an INSERT to proceed with an explicit value on an IDENTITY column was not detecting the case where :meth:`.Insert.values` were used with a dictionary that contained a :class:`.Column` as key and a SQL expression as a value. Fixes: #4499 Change-Id: Ia61cd6524b030b40a665db9c20771f0c5aa5fcd7
Diffstat (limited to 'test')
-rw-r--r--test/dialect/mssql/test_query.py85
-rw-r--r--test/orm/test_unitofwork.py2
2 files changed, 61 insertions, 26 deletions
diff --git a/test/dialect/mssql/test_query.py b/test/dialect/mssql/test_query.py
index 46af4658d..bf836fc14 100644
--- a/test/dialect/mssql/test_query.py
+++ b/test/dialect/mssql/test_query.py
@@ -7,6 +7,7 @@ from sqlalchemy import event
from sqlalchemy import ForeignKey
from sqlalchemy import func
from sqlalchemy import Integer
+from sqlalchemy import literal
from sqlalchemy import MetaData
from sqlalchemy import or_
from sqlalchemy import PrimaryKeyConstraint
@@ -172,36 +173,68 @@ class IdentityInsertTest(fixtures.TestBase, AssertsCompiledSQL):
)
def test_execute(self):
- cattable.insert().values(id=9, description="Python").execute()
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert().values(id=9, description="Python"))
- cats = cattable.select().order_by(cattable.c.id).execute()
- eq_([(9, "Python")], list(cats))
+ cats = conn.execute(cattable.select().order_by(cattable.c.id))
+ eq_([(9, "Python")], list(cats))
- result = cattable.insert().values(description="PHP").execute()
- eq_([10], result.inserted_primary_key)
- lastcat = cattable.select().order_by(desc(cattable.c.id)).execute()
- eq_((10, "PHP"), lastcat.first())
+ result = conn.execute(cattable.insert().values(description="PHP"))
+ eq_([10], result.inserted_primary_key)
+ lastcat = conn.execute(
+ cattable.select().order_by(desc(cattable.c.id))
+ )
+ eq_((10, "PHP"), lastcat.first())
def test_executemany(self):
- cattable.insert().execute(
- [
- {"id": 89, "description": "Python"},
- {"id": 8, "description": "Ruby"},
- {"id": 3, "description": "Perl"},
- {"id": 1, "description": "Java"},
- ]
- )
- cats = cattable.select().order_by(cattable.c.id).execute()
- eq_(
- [(1, "Java"), (3, "Perl"), (8, "Ruby"), (89, "Python")], list(cats)
- )
- cattable.insert().execute(
- [{"description": "PHP"}, {"description": "Smalltalk"}]
- )
- lastcats = (
- cattable.select().order_by(desc(cattable.c.id)).limit(2).execute()
- )
- eq_([(91, "Smalltalk"), (90, "PHP")], list(lastcats))
+ with testing.db.connect() as conn:
+ conn.execute(
+ cattable.insert(),
+ [
+ {"id": 89, "description": "Python"},
+ {"id": 8, "description": "Ruby"},
+ {"id": 3, "description": "Perl"},
+ {"id": 1, "description": "Java"},
+ ],
+ )
+ cats = conn.execute(cattable.select().order_by(cattable.c.id))
+ eq_(
+ [(1, "Java"), (3, "Perl"), (8, "Ruby"), (89, "Python")],
+ list(cats),
+ )
+ conn.execute(
+ cattable.insert(),
+ [{"description": "PHP"}, {"description": "Smalltalk"}],
+ )
+ lastcats = conn.execute(
+ cattable.select().order_by(desc(cattable.c.id)).limit(2)
+ )
+ eq_([(91, "Smalltalk"), (90, "PHP")], list(lastcats))
+
+ def test_insert_plain_param(self):
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert(), id=5)
+ eq_(conn.scalar(select([cattable.c.id])), 5)
+
+ def test_insert_values_key_plain(self):
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert().values(id=5))
+ eq_(conn.scalar(select([cattable.c.id])), 5)
+
+ def test_insert_values_key_expression(self):
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert().values(id=literal(5)))
+ eq_(conn.scalar(select([cattable.c.id])), 5)
+
+ def test_insert_values_col_plain(self):
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert().values({cattable.c.id: 5}))
+ eq_(conn.scalar(select([cattable.c.id])), 5)
+
+ def test_insert_values_col_expression(self):
+ with testing.db.connect() as conn:
+ conn.execute(cattable.insert().values({cattable.c.id: literal(5)}))
+ eq_(conn.scalar(select([cattable.c.id])), 5)
class QueryUnicodeTest(fixtures.TestBase):
diff --git a/test/orm/test_unitofwork.py b/test/orm/test_unitofwork.py
index dc8a818d2..d6ca16600 100644
--- a/test/orm/test_unitofwork.py
+++ b/test/orm/test_unitofwork.py
@@ -479,6 +479,8 @@ class ForeignPKTest(fixtures.MappedTest):
class ClauseAttributesTest(fixtures.MappedTest):
+ __backend__ = True
+
@classmethod
def define_tables(cls, metadata):
Table(