supported.
-----
- sql
- added new flag to String and create_engine(), assert_unicode=(True|False|None).
- When convert_unicode=True, this flag also defaults to `True`, and results in all
- unicode conversion operations raising an exception when a non-unicode bytestring
- is passed as a bind parameter. It is strongly advised that all unicode-aware
- applications make proper use of Python unicode objects (i.e. u'hello' and
- not 'hello').
-
+ When convert_unicode=True, this flag also defaults to `True`, and results in all
+ unicode conversion operations raising an exception when a non-unicode bytestring
+ is passed as a bind parameter. It is strongly advised that all unicode-aware
+ applications make proper use of Python unicode objects (i.e. u'hello' and
+ not 'hello').
+
+ - column labels in the form "tablename.columname", i.e. with a dot, are now
+ supported.
+
- orm
- fixed endless loop issue when using lazy="dynamic" on both
typemap = self.dialect.dbapi_type_map
for i, item in enumerate(metadata):
- # sqlite possibly prepending table name to colnames so strip
- colname = (item[0].split('.')[-1]).decode(self.dialect.encoding)
-
+ colname = item[0].decode(self.dialect.encoding)
+
+ if '.' in colname:
+ # sqlite will in some circumstances prepend table name to colnames, so strip
+ origname = colname
+ colname = colname.split('.')[-1]
+ else:
+ origname = None
+
if self.context.result_map:
try:
(name, obj, type_) = self.context.result_map[colname]
rec = (type_, type_.dialect_impl(self.dialect).result_processor(self.dialect), i)
if self.__props.setdefault(name.lower(), rec) is not rec:
- self.__props[name.lower()] = (type_, self.__ambiguous_processor(colname), 0)
+ self.__props[name.lower()] = (type_, self.__ambiguous_processor(name), 0)
+
+ # store the "origname" if we truncated (sqlite only)
+ if origname:
+ if self.__props.setdefault(origname.lower(), rec) is not rec:
+ self.__props[origname.lower()] = (type_, self.__ambiguous_processor(origname), 0)
self.__keys.append(colname)
self.__props[i] = rec
"UNION select query_users.user_id, query_users.user_name from query_users", bind=testbase.db).execute().fetchone()
self.assert_(r['user_id']) == 1
self.assert_(r['user_name']) == "john"
+
+ # test using literal tablename.colname
+ r = text('select query_users.user_id AS "query_users.user_id", query_users.user_name AS "query_users.user_name" from query_users', bind=testbase.db).execute().fetchone()
+ self.assert_(r['query_users.user_id']) == 1
+ self.assert_(r['query_users.user_name']) == "john"
def test_ambiguous_column(self):