--- /dev/null
+.. change::
+ :tags: bug, mssql
+ :tickets: 6658
+
+ Fixed bug where the "schema_translate_map" feature would fail to function
+ correctly in conjunction with an INSERT into a table that has an IDENTITY
+ column, where the value of the IDENTITY column were specified in the values
+ of the INSERT thus triggering SQLAlchemy's feature of setting IDENTITY
+ INSERT to "on"; it's in this directive where the schema translate map would
+ fail to be honored.
+
_result_strategy = None
def _opt_encode(self, statement):
+
if not self.dialect.supports_unicode_statements:
- return self.dialect._encoder(statement)[0]
+ encoded = self.dialect._encoder(statement)[0]
else:
- return statement
+ encoded = statement
+
+ if self.compiled and self.compiled.schema_translate_map:
+
+ rst = self.compiled.preparer._render_schema_translates
+ encoded = rst(encoded, self.compiled.schema_translate_map)
+
+ return encoded
def pre_exec(self):
"""Activate IDENTITY_INSERT if needed."""
from sqlalchemy import util
from sqlalchemy.dialects.mssql import base as mssql
from sqlalchemy.testing import AssertsCompiledSQL
+from sqlalchemy.testing import config
from sqlalchemy.testing import engines
from sqlalchemy.testing import eq_
from sqlalchemy.testing import fixtures
conn.execute(cattable.insert().values({cattable.c.id: literal(5)}))
eq_(conn.scalar(select(cattable.c.id)), 5)
+ @testing.requires.schemas
+ def test_insert_using_schema_translate(self, connection, metadata):
+
+ t = Table(
+ "t",
+ metadata,
+ Column("id", Integer),
+ Column("description", String(50)),
+ PrimaryKeyConstraint("id", name="PK_cattable"),
+ schema=None,
+ )
+ conn = connection.execution_options(
+ schema_translate_map={None: config.test_schema}
+ )
+ metadata.create_all(conn)
+
+ conn.execute(t.insert().values({"id": 1, "description": "descrip"}))
+
+ eq_(conn.execute(select(t)).first(), (1, "descrip"))
+
class QueryUnicodeTest(fixtures.TestBase):