summaryrefslogtreecommitdiff
path: root/test/dialect/oracle/test_dialect.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-02-08 10:12:33 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-02-08 10:12:33 -0500
commitc2aa6374f3965c28aa2d56cbddf6dab3e1de18a2 (patch)
tree06e74da251a00d34ba79326266326a9f8928eb52 /test/dialect/oracle/test_dialect.py
parent15e37d5e540439439009cc2ea0f9421114c21909 (diff)
downloadsqlalchemy-c2aa6374f3965c28aa2d56cbddf6dab3e1de18a2.tar.gz
Accommodate escaped_bind_names for defaults/insert params
Fixed issue in Oracle dialect where using a column name that requires quoting when written as a bound parameter, such as ``"_id"``, would not correctly track a Python generated default value due to the bound-parameter rewriting missing this value, causing an Oracle error to be raised. Fixes: #7676 Change-Id: I5a54426d24f2f9b336e3597d5595fb3e031aad97
Diffstat (limited to 'test/dialect/oracle/test_dialect.py')
-rw-r--r--test/dialect/oracle/test_dialect.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/dialect/oracle/test_dialect.py b/test/dialect/oracle/test_dialect.py
index c06baace0..5383ffc0c 100644
--- a/test/dialect/oracle/test_dialect.py
+++ b/test/dialect/oracle/test_dialect.py
@@ -490,6 +490,35 @@ class QuotedBindRoundTripTest(fixtures.TestBase):
dict(uid=[1, 2, 3]),
)
+ @testing.combinations(True, False, argnames="executemany")
+ def test_python_side_default(self, metadata, connection, executemany):
+ """test #7676"""
+
+ ids = ["a", "b", "c"]
+
+ def gen_id():
+ return ids.pop(0)
+
+ t = Table(
+ "has_id",
+ metadata,
+ Column("_id", String(50), default=gen_id, primary_key=True),
+ Column("_data", Integer),
+ )
+ metadata.create_all(connection)
+
+ if executemany:
+ result = connection.execute(
+ t.insert(), [{"_data": 27}, {"_data": 28}, {"_data": 29}]
+ )
+ eq_(
+ connection.execute(t.select().order_by(t.c._id)).all(),
+ [("a", 27), ("b", 28), ("c", 29)],
+ )
+ else:
+ result = connection.execute(t.insert(), {"_data": 27})
+ eq_(result.inserted_primary_key, ("a",))
+
class CompatFlagsTest(fixtures.TestBase, AssertsCompiledSQL):
def _dialect(self, server_version, **kw):