summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/expression.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
-rw-r--r--lib/sqlalchemy/sql/expression.py54
1 files changed, 16 insertions, 38 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index f88c418eb..f3c17236d 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -963,17 +963,11 @@ class ClauseElement(object):
def execute(self, *multiparams, **params):
"""Compile and execute this ``ClauseElement``."""
-
- if len(multiparams) == 0:
- keys = params.keys()
- elif isinstance(multiparams[0], dict):
- keys = multiparams[0].keys()
- elif isinstance(multiparams[0], (list, tuple)):
- keys = multiparams[0][0].keys()
- else:
- keys = None
- return self.compile(bind=self.bind, column_keys=keys, inline=(len(multiparams) > 1)).execute(*multiparams, **params)
+ e = self.bind
+ if e is None:
+ raise exceptions.InvalidRequestError("This Compiled object is not bound to any Engine or Connection.")
+ return e._execute_clauseelement(self, multiparams, params)
def scalar(self, *multiparams, **params):
"""Compile and execute this ``ClauseElement``, returning the result's scalar representation."""
@@ -1516,7 +1510,8 @@ class FromClause(Selectable):
def __init__(self, name=None):
self.name = name
-
+ self.oid_column = None
+
def _get_from_objects(self, **modifiers):
# this could also be [self], at the moment it doesnt matter to the Select object
return []
@@ -1547,16 +1542,6 @@ class FromClause(Selectable):
return False
- def _locate_oid_column(self):
- """Subclasses should override this to return an appropriate OID column."""
-
- return None
-
- def _get_oid_column(self):
- if not hasattr(self, '_oid_column'):
- self._oid_column = self._locate_oid_column()
- return self._oid_column
-
def _get_all_embedded_columns(self):
ret = []
class FindCols(visitors.ClauseVisitor):
@@ -1656,7 +1641,6 @@ class FromClause(Selectable):
"""A dictionary mapping an original Table-bound
column to a proxied column in this FromClause.
""")
- oid_column = property(_get_oid_column)
def _export_columns(self, columns=None):
"""Initialize column collections.
@@ -2012,6 +1996,7 @@ class _Function(_CalculatedClause, FromClause):
def __init__(self, name, *clauses, **kwargs):
self.packagenames = kwargs.get('packagenames', None) or []
+ self.oid_column = None
kwargs['operator'] = operators.comma_op
_CalculatedClause.__init__(self, name, **kwargs)
for c in clauses:
@@ -2190,6 +2175,7 @@ class Join(FromClause):
def __init__(self, left, right, onclause=None, isouter = False):
self.left = _selectable(left)
self.right = _selectable(right).self_group()
+ self.oid_column = self.left.oid_column
if onclause is None:
self.onclause = self._match_primaries(self.left, self.right)
else:
@@ -2238,8 +2224,6 @@ class Join(FromClause):
def self_group(self, against=None):
return _FromGrouping(self)
- def _locate_oid_column(self):
- return self.left.oid_column
def _exportable_columns(self):
return [c for c in self.left.columns] + [c for c in self.right.columns]
@@ -2393,6 +2377,10 @@ class Alias(FromClause):
alias = '{ANON %d %s}' % (id(self), alias or 'anon')
self.name = alias
self.encodedname = alias.encode('ascii', 'backslashreplace')
+ if self.selectable.oid_column is not None:
+ self.oid_column = self.selectable.oid_column._make_proxy(self)
+ else:
+ self.oid_column = None
def is_derived_from(self, fromclause):
x = self.selectable
@@ -2411,12 +2399,6 @@ class Alias(FromClause):
def _table_iterator(self):
return self.original._table_iterator()
- def _locate_oid_column(self):
- if self.selectable.oid_column is not None:
- return self.selectable.oid_column._make_proxy(self)
- else:
- return None
-
def named_with_column(self):
return True
@@ -2655,7 +2637,7 @@ class TableClause(FromClause):
super(TableClause, self).__init__(name)
self.name = self.fullname = name
self.encodedname = self.name.encode('ascii', 'backslashreplace')
- self._oid_column = _ColumnClause('oid', self, _is_oid=True)
+ self.oid_column = _ColumnClause('oid', self, _is_oid=True)
self._export_columns(columns)
def _clone(self):
@@ -2669,9 +2651,6 @@ class TableClause(FromClause):
self._columns[c.name] = c
c.table = self
- def _locate_oid_column(self):
- return self._oid_column
-
def _proxy_column(self, c):
self.append_column(c)
return c
@@ -2844,7 +2823,8 @@ class CompoundSelect(_SelectBaseMixin, FromClause):
self.selects.append(s)
self._col_map = {}
-
+ self.oid_column = self.selects[0].oid_column
+
_SelectBaseMixin.__init__(self, **kwargs)
name = property(lambda s:s.keyword + " statement")
@@ -2852,9 +2832,6 @@ class CompoundSelect(_SelectBaseMixin, FromClause):
def self_group(self, against=None):
return _FromGrouping(self)
- def _locate_oid_column(self):
- return self.selects[0].oid_column
-
def _exportable_columns(self):
for s in self.selects:
for c in s.c:
@@ -3165,6 +3142,7 @@ class Select(_SelectBaseMixin, FromClause):
return oid
else:
return None
+ oid_column = property(_locate_oid_column)
def union(self, other, **kwargs):
return union(self, other, **kwargs)