[Sqlalchemy-commits] [1338] sqlalchemy/branches/schema/lib/sqlalchemy/orm: select_by was busted
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-04-26 00:05:43
|
<!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>[1338] sqlalchemy/branches/schema/lib/sqlalchemy/orm: select_by was busted</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1338</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-04-25 19:05:30 -0500 (Tue, 25 Apr 2006)</dd> </dl> <h3>Log Message</h3> <pre>select_by was busted</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormmapperpy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormpropertiespy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormquerypy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormsessionpy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesschemalibsqlalchemyormmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py (1337 => 1338)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-04-25 23:48:01 UTC (rev 1337) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-04-26 00:05:30 UTC (rev 1338) </span><span class="lines">@@ -803,7 +803,7 @@ </span><span class="cx"> return [] </span><span class="cx"> def copy(self): </span><span class="cx"> raise NotImplementedError() </span><del>- def get_criterion(self, key, value): </del><ins>+ def get_criterion(self, query, key, value): </ins><span class="cx"> """Returns a WHERE clause suitable for this MapperProperty corresponding to the </span><span class="cx"> given key/value pair, where the key is a column or object property name, and value </span><span class="cx"> is a value to be matched. This is only picked up by PropertyLoaders. </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormpropertiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py (1337 => 1338)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py 2006-04-25 23:48:01 UTC (rev 1337) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py 2006-04-26 00:05:30 UTC (rev 1338) </span><span class="lines">@@ -302,7 +302,7 @@ </span><span class="cx"> self.foreigntable = dependent[0] </span><span class="cx"> </span><span class="cx"> </span><del>- def get_criterion(self, key, value): </del><ins>+ def get_criterion(self, query, key, value): </ins><span class="cx"> """given a key/value pair, determines if this PropertyLoader's mapper contains a key of the </span><span class="cx"> given name in its property list, or if this PropertyLoader's association mapper, if any, </span><span class="cx"> contains a key of the given name in its property list, and returns a WHERE clause against </span><span class="lines">@@ -326,7 +326,7 @@ </span><span class="cx"> c = (self.mapper.table.c[key].columns[0]==value) & self.primaryjoin </span><span class="cx"> return c.copy_container() </span><span class="cx"> elif self.association is not None: </span><del>- c = self.mapper._get_criterion(key, value) & self.primaryjoin </del><ins>+ c = query._get_criterion(self.mapper, key, value) & self.primaryjoin </ins><span class="cx"> return c.copy_container() </span><span class="cx"> return None </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormquerypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py (1337 => 1338)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py 2006-04-25 23:48:01 UTC (rev 1337) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py 2006-04-26 00:05:30 UTC (rev 1338) </span><span class="lines">@@ -187,7 +187,7 @@ </span><span class="cx"> for key, value in params.iteritems(): </span><span class="cx"> if value is False: </span><span class="cx"> continue </span><del>- c = self._get_criterion(key, value) </del><ins>+ c = self._get_criterion(self.mapper, key, value) </ins><span class="cx"> if c is None: </span><span class="cx"> raise InvalidRequestError("Cant find criterion for property '"+ key + "'") </span><span class="cx"> if clause is None: </span><span class="lines">@@ -268,17 +268,17 @@ </span><span class="cx"> value.setup(key, statement, **kwargs) </span><span class="cx"> return statement </span><span class="cx"> </span><del>- def _get_criterion(self, key, value): </del><ins>+ def _get_criterion(self, mapper, key, value): </ins><span class="cx"> """used by select_by to match a key/value pair against </span><span class="cx"> local properties, column names, or a matching property in this mapper's </span><span class="cx"> list of relations.""" </span><del>- if self.props.has_key(key): - return self.props[key].columns[0] == value - elif self.table.c.has_key(key): - return self.table.c[key] == value </del><ins>+ if mapper.props.has_key(key): + return mapper.props[key].columns[0] == value + elif mapper.table.c.has_key(key): + return mapper.table.c[key] == value </ins><span class="cx"> else: </span><del>- for prop in self.props.values(): - c = prop.get_criterion(key, value) </del><ins>+ for prop in mapper.props.values(): + c = prop.get_criterion(self, key, value) </ins><span class="cx"> if c is not None: </span><span class="cx"> return c </span><span class="cx"> else: </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormsessionpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py (1337 => 1338)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py 2006-04-25 23:48:01 UTC (rev 1337) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py 2006-04-26 00:05:30 UTC (rev 1338) </span><span class="lines">@@ -153,10 +153,10 @@ </span><span class="cx"> return self.bind_to </span><span class="cx"> else: </span><span class="cx"> return mapper.table.engine </span><del>- def query(self, mapper_or_class): </del><ins>+ def query(self, mapper_or_class, entity_name=None): </ins><span class="cx"> """given a mapper or Class, returns a new Query object corresponding to this Session and the mapper, or the classes' primary mapper.""" </span><span class="cx"> if isinstance(mapper_or_class, type): </span><del>- return query.Query(class_mapper(mapper_or_class), self) </del><ins>+ return query.Query(class_mapper(mapper_or_class, entity_name=entity_name), self) </ins><span class="cx"> else: </span><span class="cx"> return query.Query(mapper_or_class, self) </span><span class="cx"> def _sql(self): </span><span class="lines">@@ -212,13 +212,15 @@ </span><span class="cx"> is a list or tuple of objects specifically to be flushed.""" </span><span class="cx"> self.uow.flush(self, objects) </span><span class="cx"> </span><del>- def get(self, class_, *ident): </del><ins>+ def get(self, class_, *ident, **kwargs): </ins><span class="cx"> """given a class and a primary key identifier, loads the corresponding object.""" </span><del>- return self.query(class_).get(*ident) </del><ins>+ entity_name = kwargs.get('entity_name', None) + return self.query(class_, entity_name=entity_name).get(*ident) </ins><span class="cx"> </span><del>- def load(self, class_, *ident): </del><ins>+ def load(self, class_, *ident, **kwargs): </ins><span class="cx"> """given a class and a primary key identifier, loads the corresponding object.""" </span><del>- return self.query(class_).get(*ident) </del><ins>+ entity_name = kwargs.get('entity_name', None) + return self.query(class_, entity_name=entity_name).get(*ident) </ins><span class="cx"> </span><span class="cx"> def refresh(self, object): </span><span class="cx"> """reloads the attributes for the given object from the database, clears </span><span class="lines">@@ -286,7 +288,7 @@ </span><span class="cx"> # TODO: copy the state of the given object into this one. tricky ! </span><span class="cx"> inst = u.identity_map[key] </span><span class="cx"> else: </span><del>- inst = self.get(*key[1]) </del><ins>+ inst = self.get(object.__class__, *key[1]) </ins><span class="cx"> if obj is object: </span><span class="cx"> instance = inst </span><span class="cx"> </span></span></pre> </div> </div> </body> </html> |