From: Mike Bayer Date: Wed, 28 Dec 2016 21:32:53 +0000 (-0500) Subject: Pass **kw to bound params in multi values X-Git-Tag: rel_1_1_5~14^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4fec72f178f0da016301a0d12ad9abe02cc2b62a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Pass **kw to bound params in multi values Fixed bug where literal_binds compiler flag was not honored by the :class:`.Insert` construct for the "multiple values" feature; the subsequent values are now rendered as literals. Change-Id: I81ac358fd59995885d482e7571620090210865d2 Fixes: #3880 --- diff --git a/doc/build/changelog/changelog_11.rst b/doc/build/changelog/changelog_11.rst index 1554987c10..704962e423 100644 --- a/doc/build/changelog/changelog_11.rst +++ b/doc/build/changelog/changelog_11.rst @@ -52,6 +52,14 @@ sqlalchemy.sql.expression, due to mis-spelled "any_" and "all_" functions. + .. change:: 3880 + :tags: bg, sql + :tickets: 3880 + + Fixed bug where literal_binds compiler flag was not honored by the + :class:`.Insert` construct for the "multiple values" feature; the + subsequent values are now rendered as literals. + .. change:: 3877 :tags: bug, oracle, postgresql :tickets: 3877 diff --git a/lib/sqlalchemy/sql/crud.py b/lib/sqlalchemy/sql/crud.py index 42e22f93d0..5739c22f9e 100644 --- a/lib/sqlalchemy/sql/crud.py +++ b/lib/sqlalchemy/sql/crud.py @@ -603,7 +603,7 @@ def _extend_values_for_multiparams(compiler, stmt, values, kw): c, (_create_bind_param( compiler, c, row[c.key], - name="%s_m%d" % (c.key, i + 1) + name="%s_m%d" % (c.key, i + 1), **kw ) if elements._is_literal(row[c.key]) else compiler.process( row[c.key].self_group(), **kw)) diff --git a/test/sql/test_insert.py b/test/sql/test_insert.py index 73731e9527..e23ab520de 100644 --- a/test/sql/test_insert.py +++ b/test/sql/test_insert.py @@ -683,6 +683,18 @@ class InsertImplicitReturningTest( 'othername_m0': 'foo'} ) + def test_insert_multiple_values_literal_binds(self): + ins = self.tables.myothertable.insert().values([ + {"othername": "foo"}, + {"othername": "bar"}, + ]) + self.assert_compile( + ins, + "INSERT INTO myothertable (othername) VALUES ('foo'), ('bar')", + checkparams={}, + literal_binds=True + ) + def test_insert_multiple_values_return_defaults(self): # TODO: not sure if this should raise an # error or what