collection of Sequence objects, list
of schema names. [ticket:2104]
+- oracle
+ - Using column names that would require quotes
+ for the column itself or for a name-generated
+ bind parameter, such as names with special
+ characters, underscores, non-ascii characters,
+ now properly translate bind parameter keys when
+ talking to cx_oracle. [ticket:2100] (Also
+ in 0.6.7)
+
0.7.0b3
=======
- general
quoted_bind_names = \
getattr(self.compiled, '_quoted_bind_names', None)
if quoted_bind_names:
- if not self.dialect.supports_unicode_binds:
+ if not self.dialect.supports_unicode_statements:
+ # if DBAPI doesn't accept unicode statements,
+ # keys in self.parameters would have been encoded
+ # here. so convert names in quoted_bind_names
+ # to encoded as well.
quoted_bind_names = \
dict(
- (fromname, toname.encode(self.dialect.encoding))
+ (fromname.encode(self.dialect.encoding),
+ toname.encode(self.dialect.encoding))
for fromname, toname in
quoted_bind_names.items()
)
)
+class UnicodeSchemaTest(fixtures.TestBase):
+ __only_on__ = 'oracle'
+
+ @testing.provide_metadata
+ def test_quoted_column_non_unicode(self):
+ metadata = self.metadata
+ table=Table("atable", metadata,
+ Column("_underscorecolumn", Unicode(255), primary_key=True),
+ )
+ metadata.create_all()
+
+ table.insert().execute(
+ {'_underscorecolumn': u'’é'},
+ )
+ result = testing.db.execute(
+ table.select().where(table.c._underscorecolumn==u'’é')
+ ).scalar()
+ eq_(result, u'’é')
+
+ @testing.provide_metadata
+ def test_quoted_column_unicode(self):
+ metadata = self.metadata
+ table=Table("atable", metadata,
+ Column(u"méil", Unicode(255), primary_key=True),
+ )
+ metadata.create_all()
+
+ table.insert().execute(
+ {u'méil': u'’é'},
+ )
+ result = testing.db.execute(
+ table.select().where(table.c[u'méil']==u'’é')
+ ).scalar()
+ eq_(result, u'’é')
+
+