[Sqlalchemy-commits] [1228] sqlalchemy/trunk/test: introducing...the mods package ! the SelectResult
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-03-31 07:20:27
|
<!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>[1228] sqlalchemy/trunk/test: introducing...the mods package ! the SelectResults thing moves as the first mod</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1228</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-03-31 01:20:13 -0600 (Fri, 31 Mar 2006)</dd> </dl> <h3>Log Message</h3> <pre>introducing...the mods package ! the SelectResults thing moves as the first mod</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunklibsqlalchemy__init__py">sqlalchemy/trunk/lib/sqlalchemy/__init__.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymappingmapperpy">sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymappingpropertiespy">sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymappingutilpy">sqlalchemy/trunk/lib/sqlalchemy/mapping/util.py</a></li> <li><a href="#sqlalchemytrunktestmapperpy">sqlalchemy/trunk/test/mapper.py</a></li> <li><a href="#sqlalchemytrunktestproxy_enginepy">sqlalchemy/trunk/test/proxy_engine.py</a></li> </ul> <h3>Added Paths</h3> <ul> <li>sqlalchemy/trunk/lib/sqlalchemy/mods/</li> <li><a href="#sqlalchemytrunklibsqlalchemymods__init__py">sqlalchemy/trunk/lib/sqlalchemy/mods/__init__.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymodsselectresultspy">sqlalchemy/trunk/lib/sqlalchemy/mods/selectresults.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunklibsqlalchemy__init__py"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/__init__.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/__init__.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/__init__.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -11,11 +11,12 @@ </span><span class="cx"> from exceptions import * </span><span class="cx"> import mapping as mapperlib </span><span class="cx"> from mapping import * </span><del>- </del><span class="cx"> import sqlalchemy.schema </span><span class="cx"> import sqlalchemy.ext.proxy </span><span class="cx"> sqlalchemy.schema.default_engine = sqlalchemy.ext.proxy.ProxyEngine() </span><span class="cx"> </span><ins>+from sqlalchemy.mods import install_mods + </ins><span class="cx"> def global_connect(*args, **kwargs): </span><span class="cx"> sqlalchemy.schema.default_engine.connect(*args, **kwargs) </span><span class="cx"> </span><span class="cx">\ No newline at end of file </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymappingmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -19,11 +19,17 @@ </span><span class="cx"> # a dictionary mapping classes to their primary mappers </span><span class="cx"> mapper_registry = weakref.WeakKeyDictionary() </span><span class="cx"> </span><ins>+# a list of MapperExtensions that will be installed by default +extensions = [] + </ins><span class="cx"> # a constant returned by _getattrbycolumn to indicate </span><span class="cx"> # this mapper is not handling an attribute for a particular </span><span class="cx"> # column </span><span class="cx"> NO_ATTRIBUTE = object() </span><span class="cx"> </span><ins>+# returned by a MapperExtension method to indicate a "do nothing" response +EXT_PASS = object() + </ins><span class="cx"> class Mapper(object): </span><span class="cx"> """Persists object instances to and from schema.Table objects via the sql package. </span><span class="cx"> Instances of this class should be constructed through this package's mapper() or </span><span class="lines">@@ -47,11 +53,17 @@ </span><span class="cx"> </span><span class="cx"> if primarytable is not None: </span><span class="cx"> sys.stderr.write("'primarytable' argument to mapper is deprecated\n") </span><ins>+ + ext = MapperExtension() + + for ext_class in extensions: + ext = ext_class().chain(ext) </ins><span class="cx"> </span><del>- if extension is None: - self.extension = MapperExtension() </del><ins>+ if extension is not None: + self.extension = extension.chain(ext) </ins><span class="cx"> else: </span><del>- self.extension = extension </del><ins>+ self.extension = ext + </ins><span class="cx"> self.class_ = class_ </span><span class="cx"> self.is_primary = is_primary </span><span class="cx"> self.order_by = order_by </span><span class="lines">@@ -425,7 +437,10 @@ </span><span class="cx"> </span><span class="cx"> e.g. result = usermapper.select_by(user_name = 'fred') </span><span class="cx"> """ </span><del>- return mapperutil.SelectResults(self, self._by_clause(*args, **params)) </del><ins>+ ret = self.extension.select_by(self, *args, **params) + if ret is not EXT_PASS: + return ret + return self.select_whereclause(self._by_clause(*args, **params)) </ins><span class="cx"> </span><span class="cx"> def selectfirst_by(self, *args, **params): </span><span class="cx"> """works like select_by(), but only returns the first result by itself, or None if no </span><span class="lines">@@ -434,7 +449,7 @@ </span><span class="cx"> </span><span class="cx"> def selectone_by(self, *args, **params): </span><span class="cx"> """works like selectfirst_by(), but throws an error if not exactly one result was returned.""" </span><del>- ret = list(self.select_by(*args, **params)[0:2]) </del><ins>+ ret = mapper.select_whereclause(self._by_clause(*args, **params), limit=2) </ins><span class="cx"> if len(ret) == 1: </span><span class="cx"> return ret[0] </span><span class="cx"> raise InvalidRequestError('Multiple rows returned for selectone_by') </span><span class="lines">@@ -510,7 +525,7 @@ </span><span class="cx"> return ret[0] </span><span class="cx"> raise InvalidRequestError('Multiple rows returned for selectone') </span><span class="cx"> </span><del>- def select(self, arg = None, **kwargs): </del><ins>+ def select(self, arg=None, **kwargs): </ins><span class="cx"> """selects instances of the object from the database. </span><span class="cx"> </span><span class="cx"> arg can be any ClauseElement, which will form the criterion with which to </span><span class="lines">@@ -520,10 +535,14 @@ </span><span class="cx"> will be executed and its resulting rowset used to build new object instances. </span><span class="cx"> in this case, the developer must insure that an adequate set of columns exists in the </span><span class="cx"> rowset with which to build new object instances.""" </span><del>- if arg is not None and isinstance(arg, sql.Selectable): </del><ins>+ + ret = self.extension.select(self, arg=arg, **kwargs) + if ret is not EXT_PASS: + return ret + elif arg is not None and isinstance(arg, sql.Selectable): </ins><span class="cx"> return self.select_statement(arg, **kwargs) </span><span class="cx"> else: </span><del>- return mapperutil.SelectResults(self, arg, ops=kwargs) </del><ins>+ return self.select_whereclause(whereclause=arg, **kwargs) </ins><span class="cx"> </span><span class="cx"> def select_whereclause(self, whereclause=None, params=None, **kwargs): </span><span class="cx"> statement = self._compile(whereclause, **kwargs) </span><span class="lines">@@ -850,7 +869,7 @@ </span><span class="cx"> imap[identitykey] = instance </span><span class="cx"> for prop in self.props.values(): </span><span class="cx"> prop.execute(instance, row, identitykey, imap, True) </span><del>- if self.extension.append_result(self, row, imap, result, instance, isnew, populate_existing=populate_existing): </del><ins>+ if self.extension.append_result(self, row, imap, result, instance, isnew, populate_existing=populate_existing) is EXT_PASS: </ins><span class="cx"> if result is not None: </span><span class="cx"> result.append_nohistory(instance) </span><span class="cx"> return instance </span><span class="lines">@@ -865,7 +884,7 @@ </span><span class="cx"> return None </span><span class="cx"> # plugin point </span><span class="cx"> instance = self.extension.create_instance(self, row, imap, self.class_) </span><del>- if instance is None: </del><ins>+ if instance is EXT_PASS: </ins><span class="cx"> instance = self.class_(_mapper_nohistory=True) </span><span class="cx"> imap[identitykey] = instance </span><span class="cx"> isnew = True </span><span class="lines">@@ -877,9 +896,9 @@ </span><span class="cx"> </span><span class="cx"> # call further mapper properties on the row, to pull further </span><span class="cx"> # instances from the row and possibly populate this item. </span><del>- if self.extension.populate_instance(self, instance, row, identitykey, imap, isnew): </del><ins>+ if self.extension.populate_instance(self, instance, row, identitykey, imap, isnew) is EXT_PASS: </ins><span class="cx"> self.populate_instance(instance, row, identitykey, imap, isnew) </span><del>- if self.extension.append_result(self, row, imap, result, instance, isnew, populate_existing=populate_existing): </del><ins>+ if self.extension.append_result(self, row, imap, result, instance, isnew, populate_existing=populate_existing) is EXT_PASS: </ins><span class="cx"> if result is not None: </span><span class="cx"> result.append_nohistory(instance) </span><span class="cx"> return instance </span><span class="lines">@@ -966,6 +985,19 @@ </span><span class="cx"> class MapperExtension(object): </span><span class="cx"> def __init__(self): </span><span class="cx"> self.next = None </span><ins>+ def chain(self, ext): + self.next = ext + return self + def select_by(self, mapper, *args, **kwargs): + if self.next is None: + return EXT_PASS + else: + return self.next.select_by(mapper, *args, **kwargs) + def select(self, mapper, *args, **kwargs): + if self.next is None: + return EXT_PASS + else: + return self.next.select(mapper, *args, **kwargs) </ins><span class="cx"> def create_instance(self, mapper, row, imap, class_): </span><span class="cx"> """called when a new object instance is about to be created from a row. </span><span class="cx"> the method can choose to create the instance itself, or it can return </span><span class="lines">@@ -981,7 +1013,7 @@ </span><span class="cx"> class_ - the class we are mapping. </span><span class="cx"> """ </span><span class="cx"> if self.next is None: </span><del>- return None </del><ins>+ return EXT_PASS </ins><span class="cx"> else: </span><span class="cx"> return self.next.create_instance(mapper, row, imap, class_) </span><span class="cx"> def append_result(self, mapper, row, imap, result, instance, isnew, populate_existing=False): </span><span class="lines">@@ -1011,7 +1043,7 @@ </span><span class="cx"> identity map, i.e. were loaded by a previous select(), get their attributes overwritten </span><span class="cx"> """ </span><span class="cx"> if self.next is None: </span><del>- return True </del><ins>+ return EXT_PASS </ins><span class="cx"> else: </span><span class="cx"> return self.next.append_result(mapper, row, imap, result, instance, isnew, populate_existing) </span><span class="cx"> def populate_instance(self, mapper, instance, row, identitykey, imap, isnew): </span><span class="lines">@@ -1024,10 +1056,10 @@ </span><span class="cx"> </span><span class="cx"> def populate_instance(self, mapper, instance, row, identitykey, imap, isnew): </span><span class="cx"> othermapper.populate_instance(instance, row, identitykey, imap, isnew, frommapper=mapper) </span><del>- return False </del><ins>+ return True </ins><span class="cx"> """ </span><span class="cx"> if self.next is None: </span><del>- return True </del><ins>+ return EXT_PASS </ins><span class="cx"> else: </span><span class="cx"> return self.next.populate_instance(row, imap, result, instance, isnew) </span><span class="cx"> def before_insert(self, mapper, instance): </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymappingpropertiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -382,9 +382,6 @@ </span><span class="cx"> else: </span><span class="cx"> uowcommit.register_dependency(self.mapper, self.parent) </span><span class="cx"> uowcommit.register_processor(self.mapper, self, self.parent, False) </span><del>- # this dependency processor is used to locate "private" child objects - # during a "delete" operation, when the objectstore is being committed - # with only a partial list of objects </del><span class="cx"> uowcommit.register_processor(self.mapper, self, self.parent, True) </span><span class="cx"> else: </span><span class="cx"> raise AssertionError(" no foreign key ?") </span><span class="lines">@@ -616,7 +613,7 @@ </span><span class="cx"> order_by = self.secondary.default_order_by() </span><span class="cx"> else: </span><span class="cx"> order_by = False </span><del>- result = list(self.mapper.select(self.lazywhere, order_by=order_by, params=params)) </del><ins>+ result = self.mapper.select_whereclause(self.lazywhere, order_by=order_by, params=params) </ins><span class="cx"> else: </span><span class="cx"> result = [] </span><span class="cx"> if self.uselist: </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymappingutilpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/util.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/util.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/util.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -1,75 +1,5 @@ </span><span class="cx"> import sqlalchemy.sql as sql </span><span class="cx"> </span><del>-class SelectResults(object): - def __init__(self, mapper, clause=None, ops={}): - self._mapper = mapper - self._clause = clause - self._ops = {} - self._ops.update(ops) - - def count(self): - return self._mapper.count(self._clause) - - def min(self, col): - return sql.select([sql.func.min(col)], self._clause, **self._ops).scalar() - - def max(self, col): - return sql.select([sql.func.max(col)], self._clause, **self._ops).scalar() - - def sum(self, col): - return sql.select([sql.func.sum(col)], self._clause, **self._ops).scalar() - - def avg(self, col): - return sql.select([sql.func.avg(col)], self._clause, **self._ops).scalar() - - def clone(self): - return SelectResults(self._mapper, self._clause, self._ops.copy()) - - def filter(self, clause): - new = self.clone() - new._clause = sql.and_(self._clause, clause) - return new - - def order_by(self, order_by): - new = self.clone() - new._ops['order_by'] = order_by - return new - - def limit(self, limit): - return self[:limit] - - def offset(self, offset): - return self[offset:] - - def list(self): - return list(self) - - def __getitem__(self, item): - if isinstance(item, slice): - start = item.start - stop = item.stop - if (isinstance(start, int) and start < 0) or \ - (isinstance(stop, int) and stop < 0): - return list(self)[item] - else: - res = self.clone() - if start is not None and stop is not None: - res._ops.update(dict(offset=start, limit=stop-start)) - elif start is None and stop is not None: - res._ops.update(dict(limit=stop)) - elif start is not None and stop is None: - res._ops.update(dict(offset=start)) - if item.step is not None: - return list(res)[None:None:item.step] - else: - return res - else: - return list(self[item:item+1])[0] - - def __iter__(self): - return iter(self._mapper.select_whereclause(self._clause, **self._ops)) - - </del><span class="cx"> class TableFinder(sql.ClauseVisitor): </span><span class="cx"> """given a Clause, locates all the Tables within it into a list.""" </span><span class="cx"> def __init__(self, table, check_columns=False): </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymods__init__py"></a> <div class="addfile"><h4>Added: sqlalchemy/trunk/lib/sqlalchemy/mods/__init__.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mods/__init__.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/mods/__init__.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -0,0 +1,3 @@ </span><ins>+def install_mods(*mods): + for mod in mods: + mod.install_plugin() </ins><span class="cx">\ No newline at end of file </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymodsselectresultspy"></a> <div class="addfile"><h4>Added: sqlalchemy/trunk/lib/sqlalchemy/mods/selectresults.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mods/selectresults.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/lib/sqlalchemy/mods/selectresults.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -0,0 +1,84 @@ </span><ins>+import sqlalchemy.sql as sql + +import sqlalchemy.mapping as mapping + +def install_plugin(): + mapping.extensions.append(SelectResultsExt) + +class SelectResultsExt(mapping.MapperExtension): + def select_by(self, mapper, *args, **params): + return SelectResults(mapper, mapper._by_clause(*args, **params)) + def select(self, mapper, arg=None, **kwargs): + if arg is not None and isinstance(arg, sql.Selectable): + return mapping.EXT_PASS + else: + return SelectResults(mapper, arg, ops=kwargs) + +class SelectResults(object): + def __init__(self, mapper, clause=None, ops={}): + self._mapper = mapper + self._clause = clause + self._ops = {} + self._ops.update(ops) + + def count(self): + return self._mapper.count(self._clause) + + def min(self, col): + return sql.select([sql.func.min(col)], self._clause, **self._ops).scalar() + + def max(self, col): + return sql.select([sql.func.max(col)], self._clause, **self._ops).scalar() + + def sum(self, col): + return sql.select([sql.func.sum(col)], self._clause, **self._ops).scalar() + + def avg(self, col): + return sql.select([sql.func.avg(col)], self._clause, **self._ops).scalar() + + def clone(self): + return SelectResults(self._mapper, self._clause, self._ops.copy()) + + def filter(self, clause): + new = self.clone() + new._clause = sql.and_(self._clause, clause) + return new + + def order_by(self, order_by): + new = self.clone() + new._ops['order_by'] = order_by + return new + + def limit(self, limit): + return self[:limit] + + def offset(self, offset): + return self[offset:] + + def list(self): + return list(self) + + def __getitem__(self, item): + if isinstance(item, slice): + start = item.start + stop = item.stop + if (isinstance(start, int) and start < 0) or \ + (isinstance(stop, int) and stop < 0): + return list(self)[item] + else: + res = self.clone() + if start is not None and stop is not None: + res._ops.update(dict(offset=start, limit=stop-start)) + elif start is None and stop is not None: + res._ops.update(dict(limit=stop)) + elif start is not None and stop is None: + res._ops.update(dict(offset=start)) + if item.step is not None: + return list(res)[None:None:item.step] + else: + return res + else: + return list(self[item:item+1])[0] + + def __iter__(self): + return iter(self._mapper.select_whereclause(self._clause, **self._ops)) </ins></span></pre></div> <a id="sqlalchemytrunktestmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/mapper.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/mapper.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/test/mapper.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -133,7 +133,7 @@ </span><span class="cx"> # object isnt refreshed yet, using dict to bypass trigger </span><span class="cx"> self.assert_(u.__dict__['user_name'] != 'jack') </span><span class="cx"> # do a select </span><del>- m.select().list() </del><ins>+ m.select() </ins><span class="cx"> # test that it refreshed </span><span class="cx"> self.assert_(u.__dict__['user_name'] == 'jack') </span><span class="cx"> </span><span class="lines">@@ -255,7 +255,7 @@ </span><span class="cx"> m = mapper(User, users, properties = dict( </span><span class="cx"> addresses = relation(mapper(Address, addresses), lazy = True) </span><span class="cx"> )) </span><del>- l = m.options(eagerload('addresses')).select().list() </del><ins>+ l = m.options(eagerload('addresses')).select() </ins><span class="cx"> </span><span class="cx"> def go(): </span><span class="cx"> self.assert_result(l, User, *user_address_result) </span><span class="lines">@@ -266,7 +266,7 @@ </span><span class="cx"> m = mapper(User, users, properties = dict( </span><span class="cx"> addresses = relation(mapper(Address, addresses), lazy = False) </span><span class="cx"> )) </span><del>- l = m.options(lazyload('addresses')).select().list() </del><ins>+ l = m.options(lazyload('addresses')).select() </ins><span class="cx"> def go(): </span><span class="cx"> self.assert_result(l, User, *user_address_result) </span><span class="cx"> self.assert_sql_count(db, go, 3) </span><span class="lines">@@ -282,12 +282,12 @@ </span><span class="cx"> }) </span><span class="cx"> </span><span class="cx"> m2 = m.options(eagerload('orders.items.keywords')) </span><del>- u = m.select().list() </del><ins>+ u = m.select() </ins><span class="cx"> def go(): </span><span class="cx"> print u[0].orders[1].items[0].keywords[1] </span><span class="cx"> self.assert_sql_count(db, go, 3) </span><span class="cx"> objectstore.clear() </span><del>- u = m2.select().list() </del><ins>+ u = m2.select() </ins><span class="cx"> self.assert_sql_count(db, go, 2) </span><span class="cx"> </span><span class="cx"> class PropertyTest(MapperSuperTest): </span><span class="lines">@@ -368,7 +368,7 @@ </span><span class="cx"> self.assert_(o.description is None) </span><span class="cx"> </span><span class="cx"> def go(): </span><del>- l = m.select().list() </del><ins>+ l = m.select() </ins><span class="cx"> o2 = l[2] </span><span class="cx"> print o2.description </span><span class="cx"> </span><span class="lines">@@ -397,7 +397,7 @@ </span><span class="cx"> }) </span><span class="cx"> </span><span class="cx"> def go(): </span><del>- l = m.select().list() </del><ins>+ l = m.select() </ins><span class="cx"> o2 = l[2] </span><span class="cx"> print o2.opened, o2.description, o2.userident </span><span class="cx"> self.assert_sql(db, go, [ </span><span class="lines">@@ -410,7 +410,7 @@ </span><span class="cx"> m = mapper(Order, orders) </span><span class="cx"> m2 = m.options(defer('user_id')) </span><span class="cx"> def go(): </span><del>- l = m2.select().list() </del><ins>+ l = m2.select() </ins><span class="cx"> print l[2].user_id </span><span class="cx"> self.assert_sql(db, go, [ </span><span class="cx"> ("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), </span><span class="lines">@@ -419,7 +419,7 @@ </span><span class="cx"> objectstore.clear() </span><span class="cx"> m3 = m2.options(undefer('user_id')) </span><span class="cx"> def go(): </span><del>- l = m3.select().list() </del><ins>+ l = m3.select() </ins><span class="cx"> print l[3].user_id </span><span class="cx"> self.assert_sql(db, go, [ </span><span class="cx"> ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}), </span></span></pre></div> <a id="sqlalchemytrunktestproxy_enginepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/proxy_engine.py (1227 => 1228)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/proxy_engine.py 2006-03-31 04:27:05 UTC (rev 1227) +++ sqlalchemy/trunk/test/proxy_engine.py 2006-03-31 07:20:13 UTC (rev 1228) </span><span class="lines">@@ -96,7 +96,7 @@ </span><span class="cx"> try: </span><span class="cx"> trans = objectstore.begin() </span><span class="cx"> </span><del>- all = User.select()[:].list() </del><ins>+ all = User.select()[:] </ins><span class="cx"> assert all == [] </span><span class="cx"> </span><span class="cx"> u = User() </span></span></pre> </div> </div> </body> </html> |