From 9f856b88f6695318e32842a88fddd8f645e5cda5 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 14 Oct 2007 16:56:32 +0000 Subject: [PATCH] - attempted to add a test for #622 / #751, but cant reproduce the failing condition - fixed major oracle bug introduced by r3561, since colnames come back as unicode now, need to encode keys in setinputsizes() step --- lib/sqlalchemy/databases/mssql.py | 2 +- lib/sqlalchemy/engine/default.py | 2 +- test/dialect/oracle.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index df9a017adc..a37ceb38e1 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -663,7 +663,7 @@ class MSSQLDialect(default.DefaultDialect): class MSSQLDialect_pymssql(MSSQLDialect): supports_sane_rowcount = False max_identifier_length = 30 - + def import_dbapi(cls): import pymssql as module # pymmsql doesn't have a Binary method. we use string diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index f4565c9382..1a15c8b8d1 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -270,7 +270,7 @@ class DefaultExecutionContext(base.ExecutionContext): typeengine = params.get_type(key) dbtype = typeengine.dialect_impl(self.dialect).get_dbapi_type(self.dialect.dbapi) if dbtype is not None: - inputsizes[key] = dbtype + inputsizes[key.encode(self.dialect.encoding)] = dbtype self.cursor.setinputsizes(**inputsizes) def _process_defaults(self): diff --git a/test/dialect/oracle.py b/test/dialect/oracle.py index 2ad0c4bebb..fa196c5585 100644 --- a/test/dialect/oracle.py +++ b/test/dialect/oracle.py @@ -142,6 +142,22 @@ class TypesTest(SQLCompileTest): b = bindparam("foo", u"hello world!") assert b.type.dialect_impl(dialect).get_dbapi_type(dbapi) == 'STRING' + def test_longstring(self): + metadata = MetaData(testbase.db) + testbase.db.execute(""" + CREATE TABLE Z_TEST + ( + ID NUMERIC(22) PRIMARY KEY, + ADD_USER VARCHAR2(20) NOT NULL + ) + """) + try: + t = Table("z_test", metadata, autoload=True) + t.insert().execute(id=1.0, add_user='foobar') + assert t.select().execute().fetchall() == [(1, 'foobar')] + finally: + testbase.db.execute("DROP TABLE Z_TEST") + class SequenceTest(SQLCompileTest): def test_basic(self): seq = Sequence("my_seq_no_schema") -- 2.47.3