summaryrefslogtreecommitdiff
path: root/test/sql/test_insert_exec.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-07-05 21:05:18 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-07-06 09:58:11 -0400
commit370d73b4e4b3009ea5feed1341ead965f6aa98bb (patch)
treed86d23568f0edc9b2c67210073c83bca99eaca7e /test/sql/test_insert_exec.py
parent6e8c390c1b937d842893646fb59785eaa48b243b (diff)
downloadsqlalchemy-370d73b4e4b3009ea5feed1341ead965f6aa98bb.tar.gz
generalize sql server check for id col to accommodate ORM cases
Fixed issues that prevented the new usage patterns for using DML with ORM objects presented at :ref:`orm_dml_returning_objects` from working correctly with the SQL Server pyodbc dialect. Here we add a step to look in compile_state._dict_values more thoroughly for the keys we need to determine "identity insert" or not, and also add a new compiler variable dml_compile_state so that we can skip the ORM's compile_state if present. Fixes: #8210 Change-Id: Idbd76bb3eb075c647dc6c1cb78f7315c821e15f7
Diffstat (limited to 'test/sql/test_insert_exec.py')
-rw-r--r--test/sql/test_insert_exec.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/test/sql/test_insert_exec.py b/test/sql/test_insert_exec.py
index 3e51e9450..b6945813e 100644
--- a/test/sql/test_insert_exec.py
+++ b/test/sql/test_insert_exec.py
@@ -19,6 +19,14 @@ from sqlalchemy.testing.schema import Column
from sqlalchemy.testing.schema import Table
+class ExpectExpr:
+ def __init__(self, element):
+ self.element = element
+
+ def __clause_element__(self):
+ return self.element
+
+
class InsertExecTest(fixtures.TablesTest):
__backend__ = True
@@ -35,13 +43,27 @@ class InsertExecTest(fixtures.TablesTest):
)
@testing.requires.multivalues_inserts
- def test_multivalues_insert(self, connection):
+ @testing.combinations("string", "column", "expect", argnames="keytype")
+ def test_multivalues_insert(self, connection, keytype):
+
users = self.tables.users
+
+ if keytype == "string":
+ user_id, user_name = "user_id", "user_name"
+ elif keytype == "column":
+ user_id, user_name = users.c.user_id, users.c.user_name
+ elif keytype == "expect":
+ user_id, user_name = ExpectExpr(users.c.user_id), ExpectExpr(
+ users.c.user_name
+ )
+ else:
+ assert False
+
connection.execute(
users.insert().values(
[
- {"user_id": 7, "user_name": "jack"},
- {"user_id": 8, "user_name": "ed"},
+ {user_id: 7, user_name: "jack"},
+ {user_id: 8, user_name: "ed"},
]
)
)