[Sqlalchemy-commits] [1170] sqlalchemy/trunk/lib/sqlalchemy: got rid of from "ids", using the From o
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-03-19 05:05:17
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1170] sqlalchemy/trunk/lib/sqlalchemy: got rid of from "ids", using the From object itself as identity now.</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1170</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-03-18 23:05:01 -0600 (Sat, 18 Mar 2006)</dd> </dl> <h3>Log Message</h3> <pre>got rid of from "ids", using the From object itself as identity now. improves correlation logic and fixes [ticket:116]</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunklibsqlalchemydatabasesoraclepy">sqlalchemy/trunk/lib/sqlalchemy/databases/oracle.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemysqlpy">sqlalchemy/trunk/lib/sqlalchemy/sql.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunklibsqlalchemydatabasesoraclepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/databases/oracle.py (1169 => 1170)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/databases/oracle.py 2006-03-19 04:20:06 UTC (rev 1169) +++ sqlalchemy/trunk/lib/sqlalchemy/databases/oracle.py 2006-03-19 05:05:01 UTC (rev 1170) </span><span class="lines">@@ -283,7 +283,7 @@ </span><span class="cx"> orderby = self.strings[select.order_by_clause] </span><span class="cx"> else: </span><span class="cx"> # TODO: try to get "oid_column" to be used here </span><del>- orderby = "%s.rowid ASC" % select.froms[0].id </del><ins>+ orderby = "%s.rowid ASC" % select.froms[0].name </ins><span class="cx"> select.append_column(sql.ColumnClause("ROW_NUMBER() OVER (ORDER BY %s)" % orderby).label("ora_rn")) </span><span class="cx"> limitselect = sql.select([c for c in select.c if c.key!='ora_rn']) </span><span class="cx"> if select.offset is not None: </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/sql.py (1169 => 1170)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/sql.py 2006-03-19 04:20:06 UTC (rev 1169) +++ sqlalchemy/trunk/lib/sqlalchemy/sql.py 2006-03-19 05:05:01 UTC (rev 1170) </span><span class="lines">@@ -355,9 +355,9 @@ </span><span class="cx"> FROM objects in the dictionary corresponding to this ClauseElement, </span><span class="cx"> and possibly removes or modifies others.""" </span><span class="cx"> for f in self._get_from_objects(): </span><del>- data.setdefault(f.id, f) </del><ins>+ data.setdefault(f, f) </ins><span class="cx"> if asfrom: </span><del>- data[self.id] = self </del><ins>+ data[self] = self </ins><span class="cx"> def compare(self, other): </span><span class="cx"> """compares this ClauseElement to the given ClauseElement. </span><span class="cx"> </span><span class="lines">@@ -568,9 +568,8 @@ </span><span class="cx"> </span><span class="cx"> class FromClause(Selectable): </span><span class="cx"> """represents an element that can be used within the FROM clause of a SELECT statement.""" </span><del>- def __init__(self, from_name = None, from_key = None): </del><ins>+ def __init__(self, from_name = None): </ins><span class="cx"> self.from_name = from_name </span><del>- self.id = from_key or from_name </del><span class="cx"> def _get_from_objects(self): </span><span class="cx"> # this could also be [self], at the moment it doesnt matter to the Select object </span><span class="cx"> return [] </span><span class="lines">@@ -602,7 +601,7 @@ </span><span class="cx"> if not raiseerr: </span><span class="cx"> return None </span><span class="cx"> else: </span><del>- raise InvalidRequestError("cant get orig for " + str(column) + " with table " + column.table.id + " from table " + self.id) </del><ins>+ raise InvalidRequestError("cant get orig for " + str(column) + " with table " + column.table.name + " from table " + self.name) </ins><span class="cx"> </span><span class="cx"> def _get_exported_attribute(self, name): </span><span class="cx"> try: </span><span class="lines">@@ -682,7 +681,6 @@ </span><span class="cx"> def __init__(self, text = "", engine=None, bindparams=None, typemap=None): </span><span class="cx"> self.parens = False </span><span class="cx"> self._engine = engine </span><del>- self.id = id(self) </del><span class="cx"> self.bindparams = {} </span><span class="cx"> self.typemap = typemap </span><span class="cx"> if typemap is not None: </span><span class="lines">@@ -881,7 +879,6 @@ </span><span class="cx"> def __init__(self, left, right, onclause=None, isouter = False): </span><span class="cx"> self.left = left </span><span class="cx"> self.right = right </span><del>- self.id = self.left.id + "_" + self.right.id </del><span class="cx"> </span><span class="cx"> # TODO: if no onclause, do NATURAL JOIN </span><span class="cx"> if onclause is None: </span><span class="lines">@@ -932,8 +929,8 @@ </span><span class="cx"> engine = property(lambda s:s.left.engine or s.right.engine) </span><span class="cx"> </span><span class="cx"> class JoinMarker(FromClause): </span><del>- def __init__(self, id, join): - FromClause.__init__(self, from_key=id) </del><ins>+ def __init__(self, join): + FromClause.__init__(self) </ins><span class="cx"> self.join = join </span><span class="cx"> def _exportable_columns(self): </span><span class="cx"> return [] </span><span class="lines">@@ -943,12 +940,12 @@ </span><span class="cx"> return self.select(use_labels=True, correlate=False).alias(name) </span><span class="cx"> def _process_from_dict(self, data, asfrom): </span><span class="cx"> for f in self.onclause._get_from_objects(): </span><del>- data[f.id] = f </del><ins>+ data[f] = f </ins><span class="cx"> for f in self.left._get_from_objects() + self.right._get_from_objects(): </span><span class="cx"> # mark the object as a "blank" "from" that wont be printed </span><del>- data[f.id] = Join.JoinMarker(f.id, self) </del><ins>+ data[f] = Join.JoinMarker(self) </ins><span class="cx"> # a JOIN always impacts the final FROM list of a select statement </span><del>- data[self.id] = self </del><ins>+ data[self] = self </ins><span class="cx"> </span><span class="cx"> def _get_from_objects(self): </span><span class="cx"> return [self] + self.onclause._get_from_objects() + self.left._get_from_objects() + self.right._get_from_objects() </span><span class="lines">@@ -968,7 +965,6 @@ </span><span class="cx"> n = n[0:15] </span><span class="cx"> alias = n + "_" + hex(random.randint(0, 65535))[2:] </span><span class="cx"> self.name = alias </span><del>- self.id = self.name </del><span class="cx"> if self.selectable.oid_column is not None: </span><span class="cx"> self.oid_column = self.selectable.oid_column._make_proxy(self) </span><span class="cx"> else: </span><span class="lines">@@ -1052,7 +1048,7 @@ </span><span class="cx"> class TableClause(FromClause): </span><span class="cx"> def __init__(self, name, *columns): </span><span class="cx"> super(TableClause, self).__init__(name) </span><del>- self.name = self.id = self.fullname = name </del><ins>+ self.name = self.fullname = name </ins><span class="cx"> self._columns = util.OrderedProperties() </span><span class="cx"> self._indexes = util.OrderedProperties() </span><span class="cx"> self._foreign_keys = [] </span><span class="lines">@@ -1110,9 +1106,9 @@ </span><span class="cx"> return False </span><span class="cx"> def _process_from_dict(self, data, asfrom): </span><span class="cx"> for f in self._get_from_objects(): </span><del>- data.setdefault(f.id, f) </del><ins>+ data.setdefault(f, f) </ins><span class="cx"> if asfrom: </span><del>- data[self.id] = self </del><ins>+ data[self] = self </ins><span class="cx"> def count(self, whereclause=None, **params): </span><span class="cx"> return select([func.count(1).label('count')], whereclause, from_obj=[self], **params) </span><span class="cx"> def join(self, right, *args, **kwargs): </span><span class="lines">@@ -1170,7 +1166,6 @@ </span><span class="cx"> </span><span class="cx"> class CompoundSelect(SelectBaseMixin, FromClause): </span><span class="cx"> def __init__(self, keyword, *selects, **kwargs): </span><del>- self.id = "Compound(%d)" % id(self) </del><span class="cx"> self.keyword = keyword </span><span class="cx"> self.selects = selects </span><span class="cx"> self.use_labels = kwargs.pop('use_labels', False) </span><span class="lines">@@ -1214,7 +1209,6 @@ </span><span class="cx"> def __init__(self, columns=None, whereclause = None, from_obj = [], order_by = None, group_by=None, having=None, use_labels = False, distinct=False, engine = None, limit=None, offset=None, scalar=False, correlate=True): </span><span class="cx"> self._froms = util.OrderedDict() </span><span class="cx"> self.use_labels = use_labels </span><del>- self.id = "Select(%d)" % id(self) </del><span class="cx"> self.name = None </span><span class="cx"> self.whereclause = None </span><span class="cx"> self.having = None </span><span class="lines">@@ -1323,8 +1317,8 @@ </span><span class="cx"> </span><span class="cx"> _hash_recursion = util.RecursionStack() </span><span class="cx"> </span><del>- def clear_from(self, id): - self.append_from(FromClause(from_name = None, from_key = id)) </del><ins>+ def clear_from(self, from_obj): + self._froms[from_obj] = FromClause(from_name = None) </ins><span class="cx"> </span><span class="cx"> def append_from(self, fromclause): </span><span class="cx"> if type(fromclause) == str: </span><span class="lines">@@ -1335,7 +1329,7 @@ </span><span class="cx"> fromclause._process_from_dict(self._froms, True) </span><span class="cx"> </span><span class="cx"> def _get_froms(self): </span><del>- return [f for f in self._froms.values() if f is not self and (self._correlated is None or not self._correlated.has_key(f.id))] </del><ins>+ return [f for f in self._froms.values() if f is not self and (self._correlated is None or not self._correlated.has_key(f))] </ins><span class="cx"> froms = property(lambda s: s._get_froms()) </span><span class="cx"> </span><span class="cx"> def accept_visitor(self, visitor): </span><span class="lines">@@ -1400,7 +1394,7 @@ </span><span class="cx"> for key in parameters.keys(): </span><span class="cx"> value = parameters[key] </span><span class="cx"> if isinstance(value, Select): </span><del>- value.clear_from(self.table.id) </del><ins>+ value.clear_from(self.table) </ins><span class="cx"> elif _is_literal(value): </span><span class="cx"> if _is_literal(key): </span><span class="cx"> col = self.table.c[key] </span></span></pre> </div> </div> </body> </html> |