mysql dialect _adjust_casing step (windows) accesses tables dict illegally

Issue #2181 resolved
Mike Bayer repo owner created an issue
File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\schema.py", line 263, in __new__   table._init(name,
metadata, *args, **kw)
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\schema.py", line 329, in _init
   reflecttable(self, include_columns=include_columns)
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\engine\base.py", line 2132, in reflecttable
   self.dialect.reflecttable(conn, table, include_columns)
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\engine\default.py", line 254, in reflecttable
   return insp.reflecttable(table, include_columns)
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\engine\reflection.py", line 353, in reflecttable
   dialect._adjust_casing(table)
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\dialects\mysql\base.py", line 1986, in _adjust_casing
   table.metadata.tables[lc_alias](lc_alias) = table
 File "d:\python25\lib\site-packages\sqlalchemy-0.7.0-py2.5.egg
\sqlalchemy\util\_collections.py", line 38, in _immutable
   raise TypeError("%s object is immutable" %
self.__class__.__name__)
TypeError: immutabledict object is immutable

Comments (3)

  1. Mike Bayer reporter

    this would be the patch:

    diff -r 1dcf33e71280698007af718a2404034ef51dd1c7 lib/sqlalchemy/dialects/mysql/base.py
    --- a/lib/sqlalchemy/dialects/mysql/base.py Thu Jun 02 03:09:08 2011 -0400
    +++ b/lib/sqlalchemy/dialects/mysql/base.py Thu Jun 02 11:13:22 2011 -0400
    @@ -1982,8 +1982,7 @@
             # For winxx database hosts.  TODO: is this really needed?
             if casing == 1 and table.name != table.name.lower():
                 table.name = table.name.lower()
    -            lc_alias = sa_schema._get_table_key(table.name, table.schema)
    -            table.metadata.tables[lc_alias](lc_alias) = table
    +            table.metadata._add_table(table.name, table.schema, table)
    
         def _detect_charset(self, connection):
             raise NotImplementedError()
    
  2. Log in to comment