dialect-specific types is now a WeakKeyDictionary.
This to prevent dialect objects from
being referenced forever for an application that
creates an arbitrarily large number of engines
or dialects. There is a small performance penalty
which will be resolved in 0.6. [ticket:1299]
- NullPool supports reconnect on failure behavior.
[ticket:1094]
+ - The per-dialect cache used by TypeEngine to cache
+ dialect-specific types is now a WeakKeyDictionary.
+ This to prevent dialect objects from
+ being referenced forever for an application that
+ creates an arbitrarily large number of engines
+ or dialects. There is a small performance penalty
+ which will be resolved in 0.6. [ticket:1299]
+
- postgres
- Added Index reflection support to Postgres, using a
great patch we long neglected, submitted by
import inspect
import datetime as dt
-
+import weakref
from sqlalchemy import exceptions
from sqlalchemy.util import pickle, Decimal as _python_Decimal
import sqlalchemy.util as util
try:
return self._impl_dict[dialect]
except AttributeError:
- self._impl_dict = {}
+ self._impl_dict = weakref.WeakKeyDictionary() # will be optimized in 0.6
return self._impl_dict.setdefault(dialect, dialect.type_descriptor(self))
except KeyError:
return self._impl_dict.setdefault(dialect, dialect.type_descriptor(self))
def __getstate__(self):
d = self.__dict__.copy()
- d['_impl_dict'] = {}
+ d['_impl_dict'] = weakref.WeakKeyDictionary() # will be optimized in 0.6
return d
def get_col_spec(self):
try:
return self._impl_dict[dialect]
except AttributeError:
- self._impl_dict = {}
+ self._impl_dict = weakref.WeakKeyDictionary() # will be optimized in 0.6
except KeyError:
pass
from sqlalchemy.orm import mapper, relation, clear_mappers, create_session
from sqlalchemy.orm.mapper import Mapper, _mapper_registry
from sqlalchemy.orm.session import _sessions
+import sqlalchemy as sa
+from sqlalchemy.sql import column
from testlib import *
from testlib.fixtures import Base
metadata.drop_all()
assert_no_mappers()
-
+ def test_type_compile(self):
+ from sqlalchemy.databases.sqlite import SQLiteDialect
+ cast = sa.cast(column('x'), sa.Integer)
+ @profile_memory
+ def go():
+ dialect = SQLiteDialect()
+ cast.compile(dialect=dialect)
+ go()
+
if __name__ == '__main__':
testenv.main()