"""
def _get_context_strategy(self, context, path):
- cls = context.attributes.get(('loaderstrategy',
- _reduce_path(path)), None)
- if cls:
+ key = ('loaderstrategy', _reduce_path(path))
+ if key in context.attributes:
+ cls = context.attributes[key]
try:
return self._strategies[cls]
except KeyError:
"""
return tuple([i % 2 != 0 and
- path[i] or
- getattr(path[i], 'base_mapper', path[i])
- for i in xrange(len(path))])
+ element or
+ getattr(element, 'base_mapper', element)
+ for i, element in enumerate(path)])
class LoaderStrategy(object):
"""Describe the loading behavior of a StrategizedProperty object.
return element
def _literal_as_column(element):
- if hasattr(element, '__clause_element__'):
+ if isinstance(element, Visitable):
+ return element
+ elif hasattr(element, '__clause_element__'):
return element.__clause_element__()
- elif not isinstance(element, Visitable):
- return literal_column(str(element))
else:
- return element
+ return literal_column(str(element))
def _literal_as_binds(element, name=None, type_=None):
if hasattr(element, '__clause_element__'):
self.table = selectable
self.type = sqltypes.to_instance(type_)
self.is_literal = is_literal
-
+
+ @util.memoized_property
+ def _from_objects(self):
+ if self.table is not None:
+ return [self.table]
+ else:
+ return []
+
@util.memoized_property
def description(self):
# Py3K
else:
return super(ColumnClause, self).label(name)
- @property
- def _from_objects(self):
- if self.table is not None:
- return [self.table]
- else:
- return []
def _bind_param(self, operator, obj):
return _BindParamClause(self.name, obj,
class _SelectBase(Executable, FromClause):
"""Base class for :class:`Select` and ``CompoundSelects``."""
+ _order_by_clause = ClauseList()
+ _group_by_clause = ClauseList()
+
def __init__(self,
use_labels=False,
for_update=False,
self._limit = limit
self._offset = offset
self._bind = bind
-
- self._order_by_clause = ClauseList(*util.to_list(order_by) or [])
- self._group_by_clause = ClauseList(*util.to_list(group_by) or [])
+
+ if order_by is not None:
+ self._order_by_clause = ClauseList(*util.to_list(order_by))
+ if group_by is not None:
+ self._group_by_clause = ClauseList(*util.to_list(group_by))
def as_scalar(self):
"""return a 'scalar' representation of this selectable, which can be