summaryrefslogtreecommitdiff
path: root/test/sql/test_query.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-12-01 13:22:23 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2017-12-01 16:32:27 -0500
commite447582b8575eaf165f02864a4b0b977930b3a52 (patch)
treed8bb7dab334fc5516e43a4e77f6761b831da4053 /test/sql/test_query.py
parent5da41e46d3e293df03a9741073ed02e2fcca08a2 (diff)
downloadsqlalchemy-e447582b8575eaf165f02864a4b0b977930b3a52.tar.gz
Fix regexp for expanding IN
Fixed bug in new "expanding bind parameter" feature whereby if multiple params were used in one statement, the regular expression would not match the parameter name correctly. Change-Id: Ifaf7d627aac4ead2a13c8dddccb5c515253d88e6 Fixes: #4140
Diffstat (limited to 'test/sql/test_query.py')
-rw-r--r--test/sql/test_query.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/sql/test_query.py b/test/sql/test_query.py
index afb113748..74efbf9a4 100644
--- a/test/sql/test_query.py
+++ b/test/sql/test_query.py
@@ -471,6 +471,66 @@ class QueryTest(fixtures.TestBase):
), [{"uname": ['fred']}, {"uname": ['ed']}]
)
+ @testing.requires.no_quoting_special_bind_names
+ def test_expanding_in_special_chars(self):
+ testing.db.execute(
+ users.insert(),
+ [
+ dict(user_id=7, user_name='jack'),
+ dict(user_id=8, user_name='fred'),
+ ]
+ )
+
+ with testing.db.connect() as conn:
+ stmt = select([users]).where(
+ users.c.user_name.in_(bindparam('u35', expanding=True))
+ ).where(
+ users.c.user_id == bindparam("u46")
+ ).order_by(users.c.user_id)
+
+ eq_(
+ conn.execute(
+ stmt, {"u35": ['jack', 'fred'], "u46": 7}).fetchall(),
+ [(7, 'jack')]
+ )
+
+ stmt = select([users]).where(
+ users.c.user_name.in_(bindparam('u.35', expanding=True))
+ ).where(
+ users.c.user_id == bindparam("u.46")
+ ).order_by(users.c.user_id)
+
+ eq_(
+ conn.execute(
+ stmt, {"u.35": ['jack', 'fred'], "u.46": 7}).fetchall(),
+ [(7, 'jack')]
+ )
+
+ def test_expanding_in_multiple(self):
+ testing.db.execute(
+ users.insert(),
+ [
+ dict(user_id=7, user_name='jack'),
+ dict(user_id=8, user_name='fred'),
+ dict(user_id=9, user_name='ed')
+ ]
+ )
+
+ with testing.db.connect() as conn:
+ stmt = select([users]).where(
+ users.c.user_name.in_(bindparam('uname', expanding=True))
+ ).where(
+ users.c.user_id.in_(bindparam('userid', expanding=True))
+ ).order_by(users.c.user_id)
+
+ eq_(
+ conn.execute(
+ stmt,
+ {"uname": ['jack', 'fred', 'ed'], "userid": [8, 9]}
+ ).fetchall(),
+ [(8, 'fred'), (9, 'ed')]
+ )
+
@testing.requires.tuple_in
def test_expanding_in_composite(self):
testing.db.execute(