diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-10-23 02:22:57 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-10-23 02:22:57 +0000 |
| commit | 1ccdfb517237408f746068f466548f9331468d7f (patch) | |
| tree | a3bd6b8c311a6a7f9aca539e288337a7cd32ef3a /lib/sqlalchemy/sql/expression.py | |
| parent | 3d0fe5bfe2e15e553279a8420ed048e6b84cc72a (diff) | |
| download | sqlalchemy-1ccdfb517237408f746068f466548f9331468d7f.tar.gz | |
call count pinata party
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
| -rw-r--r-- | lib/sqlalchemy/sql/expression.py | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index cb2bcd6d6..39c31c8cb 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -944,7 +944,6 @@ def is_column(col): """True if ``col`` is an instance of ``ColumnElement``.""" return isinstance(col, ColumnElement) - class _FigureVisitName(type): def __init__(cls, clsname, bases, dict): if not '__visit_name__' in cls.__dict__: @@ -952,6 +951,21 @@ class _FigureVisitName(type): x = m.group(1) x = re.sub(r'(?!^)[A-Z]', lambda m:'_'+m.group(0).lower(), x) cls.__visit_name__ = x.lower() + + # set up an optimized visit dispatch function + # for use by the compiler + visit_name = cls.__dict__["__visit_name__"] + if isinstance(visit_name, str): + func_text = "def _compiler_dispatch(self, visitor, **kw):\n"\ + " return visitor.visit_%s(self, **kw)" % visit_name + else: + func_text = "def _compiler_dispatch(self, visitor, **kw):\n"\ + " return getattr(visitor, 'visit_%s' % self.__visit_name__)(self, **kw)" + + env = locals().copy() + exec func_text in env + cls._compiler_dispatch = env['_compiler_dispatch'] + super(_FigureVisitName, cls).__init__(clsname, bases, dict) class ClauseElement(object): @@ -1682,6 +1696,7 @@ class FromClause(Selectable): named_with_column = False _hide_froms = [] quote = None + schema = None def _get_from_objects(self, **modifiers): return [] @@ -2553,19 +2568,19 @@ class _Label(ColumnElement): def __init__(self, name, element, type_=None): while isinstance(element, _Label): element = element.element - self.name = name or "{ANON %d %s}" % (id(self), getattr(element, 'name', 'anon')) - self.element = element.self_group(against=operators.as_) - self.type = sqltypes.to_instance(type_ or getattr(element, 'type', None)) + self.name = self.key = self._label = name or "{ANON %d %s}" % (id(self), getattr(element, 'name', 'anon')) + self._element = element + self._type = type_ self.quote = element.quote - - @property - def key(self): - return self.name - - @property - def _label(self): - return self.name - + + @util.memoized_property + def type(self): + return sqltypes.to_instance(self._type or getattr(element, 'type', None)) + + @util.memoized_property + def element(self): + return self._element.self_group(against=operators.as_) + def _proxy_attr(name): get = attrgetter(name) def attr(self): @@ -2693,7 +2708,7 @@ class TableClause(_Immutable, FromClause): """ named_with_column = True - + def __init__(self, name, *columns): super(TableClause, self).__init__() self.name = self.fullname = name |
