summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/selectable.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/selectable.py')
-rw-r--r--lib/sqlalchemy/sql/selectable.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index e49c10001..01c803f3b 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -1151,7 +1151,7 @@ class TableClause(Immutable, FromClause):
return [self]
-class ForUpdateArg(object):
+class ForUpdateArg(ClauseElement):
@classmethod
def parse_legacy_select(self, arg):
@@ -1185,6 +1185,8 @@ class ForUpdateArg(object):
read = True
elif arg == 'read_nowait':
read = nowait = True
+ elif arg is not True:
+ raise exc.ArgumentError("Unknown for_update argument: %r" % arg)
return ForUpdateArg(read=read, nowait=nowait)
@@ -1195,9 +1197,13 @@ class ForUpdateArg(object):
elif self.read and self.nowait:
return "read_nowait"
elif self.nowait:
- return "update_nowait"
+ return "nowait"
else:
- return "update"
+ return True
+
+ def _copy_internals(self, clone=_clone, **kw):
+ if self.of is not None:
+ self.of = [clone(col, **kw) for col in self.of]
def __init__(self, nowait=False, read=False, of=None):
"""Represents arguments specified to :meth:`.Select.for_update`.
@@ -1208,7 +1214,7 @@ class ForUpdateArg(object):
self.nowait = nowait
self.read = read
if of is not None:
- self.of = [_only_column_elements(of, "of")
+ self.of = [_only_column_elements(elem, "of")
for elem in util.to_list(of)]
else:
self.of = None
@@ -1770,7 +1776,7 @@ class CompoundSelect(SelectBase):
self.selects = [clone(s, **kw) for s in self.selects]
if hasattr(self, '_col_map'):
del self._col_map
- for attr in ('_order_by_clause', '_group_by_clause'):
+ for attr in ('_order_by_clause', '_group_by_clause', '_for_update_arg'):
if getattr(self, attr) is not None:
setattr(self, attr, clone(getattr(self, attr), **kw))
@@ -2255,7 +2261,7 @@ class Select(HasPrefixes, SelectBase):
# present here.
self._raw_columns = [clone(c, **kw) for c in self._raw_columns]
for attr in '_whereclause', '_having', '_order_by_clause', \
- '_group_by_clause':
+ '_group_by_clause', '_for_update_arg':
if getattr(self, attr) is not None:
setattr(self, attr, clone(getattr(self, attr), **kw))