import sqlalchemy.exceptions as sa_exc
from sqlalchemy import log, util, event
from sqlalchemy.sql import expression
+deque = util.importlater('collections').deque
mapperutil = util.importlater('sqlalchemy.orm', 'util')
[str(m.path_entity) for m in query._entities]))
else:
return None
-
+
def _get_paths(self, query, raiseerr):
path = None
entity = None
current_path = list(query._current_path)
- tokens = []
- for key in util.to_list(self.key):
- if isinstance(key, basestring):
- tokens += key.split('.')
- else:
- tokens += [key]
- for token in tokens:
+ tokens = deque(self.key)
+ while tokens:
+ token = tokens.popleft()
if isinstance(token, basestring):
+ sub_tokens = token.split(".", 1)
+ token = sub_tokens[0]
+ tokens.extendleft(sub_tokens[1:])
+
if not entity:
if current_path:
if current_path[1] == token:
if rev.direction is interfaces.MANYTOONE and \
rev._use_get and \
not isinstance(rev.strategy, LazyLoader):
- q = q.options(EagerLazyOption(rev.key, lazy='select'))
+ q = q.options(EagerLazyOption((rev.key,), lazy='select'))
if state.load_options:
q = q._conditional_options(*state.load_options)
opt = self._option_fixture(Address.user, User.addresses)
self._assert_path_result(opt, q, [], [])
-
-