From: Mike Bayer Date: Wed, 15 Dec 2010 17:16:28 +0000 (-0500) Subject: - fix mssql index bug, regression post 0.6.4 X-Git-Tag: rel_0_7b1~158^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d09f5e837f2feb6e4101544ad7c6f15c0d0508a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - fix mssql index bug, regression post 0.6.4 - dont emit unicode warning if _warn_on_bytestring is false, including for in-python string conversion --- diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 7dd7400ea6..8f3b9ddb6e 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1148,8 +1148,10 @@ class MSDialect(default.DefaultDialect): "and sch.name=:schname " "and ind.is_primary_key=0", bindparams=[ - sql.bindparam('tabname', tablename, sqltypes.Unicode), - sql.bindparam('schname', current_schema, sqltypes.Unicode) + sql.bindparam('tabname', tablename, + sqltypes.String(convert_unicode=True)), + sql.bindparam('schname', current_schema, + sqltypes.String(convert_unicode=True)) ] ) ) @@ -1161,16 +1163,21 @@ class MSDialect(default.DefaultDialect): 'column_names':[] } rp = connection.execute( - sql.text("select ind_col.index_id, col.name from sys.columns as col " - "join sys.index_columns as ind_col on " - "ind_col.column_id=col.column_id " - "join sys.tables as tab on tab.object_id=col.object_id " - "join sys.schemas as sch on sch.schema_id=tab.schema_id " - "where tab.name=:tabname " - "and sch.name=:schname", + sql.text( + "select ind_col.index_id, ind_col.object_id, col.name " + "from sys.columns as col " + "join sys.tables as tab on tab.object_id=col.object_id " + "join sys.index_columns as ind_col on " + "(ind_col.column_id=col.column_id and " + "ind_col.object_id=tab.object_id) " + "join sys.schemas as sch on sch.schema_id=tab.schema_id " + "where tab.name=:tabname " + "and sch.name=:schname", bindparams=[ - sql.bindparam('tabname', tablename, sqltypes.Unicode), - sql.bindparam('schname', current_schema, sqltypes.Unicode) + sql.bindparam('tabname', tablename, + sqltypes.String(convert_unicode=True)), + sql.bindparam('schname', current_schema, + sqltypes.String(convert_unicode=True)) ]), ) for row in rp: diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 1fa9336830..e31486eff9 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -823,10 +823,11 @@ class String(Concatenable, TypeEngine): return None else: encoder = codecs.getencoder(dialect.encoding) + warn_on_bytestring = self._warn_on_bytestring def process(value): if isinstance(value, unicode): return encoder(value, self.unicode_error)[0] - elif value is not None: + elif warn_on_bytestring and value is not None: util.warn("Unicode type received non-unicode bind " "param value") return value