[Sqlalchemy-commits] [2281] sqlalchemy/trunk: - fix to deferred so that load operation doesnt mista
Brought to you by:
zzzeek
From: <co...@sq...> - 2007-01-30 20:03:22
|
<!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>[2281] sqlalchemy/trunk: - fix to deferred so that load operation doesnt mistakenly occur when only</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>2281</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2007-01-30 16:04:53 -0600 (Tue, 30 Jan 2007)</dd> </dl> <h3>Log Message</h3> <pre>- fix to deferred so that load operation doesnt mistakenly occur when only PK col attributes are set</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunkCHANGES">sqlalchemy/trunk/CHANGES</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyormstrategiespy">sqlalchemy/trunk/lib/sqlalchemy/orm/strategies.py</a></li> <li><a href="#sqlalchemytrunktestormmapperpy">sqlalchemy/trunk/test/orm/mapper.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunkCHANGES"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/CHANGES (2280 => 2281)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/CHANGES 2007-01-30 01:01:22 UTC (rev 2280) +++ sqlalchemy/trunk/CHANGES 2007-01-30 22:04:53 UTC (rev 2281) </span><span class="lines">@@ -17,6 +17,8 @@ </span><span class="cx"> relationships, specifically between polymorphic mappers. </span><span class="cx"> - fixed bug where cascade operations incorrectly included deleted collection </span><span class="cx"> items in the cascade [ticket:445] </span><ins>+ - fix to deferred so that load operation doesnt mistakenly occur when only + PK col attributes are set </ins><span class="cx"> - oracle: </span><span class="cx"> - when returning "rowid" as the ORDER BY column or in use with ROW_NUMBER OVER, </span><span class="cx"> oracle dialect checks the selectable its being applied to and will switch to </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyormstrategiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/orm/strategies.py (2280 => 2281)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/orm/strategies.py 2007-01-30 01:01:22 UTC (rev 2280) +++ sqlalchemy/trunk/lib/sqlalchemy/orm/strategies.py 2007-01-30 22:04:53 UTC (rev 2281) </span><span class="lines">@@ -73,6 +73,10 @@ </span><span class="cx"> def lazyload(): </span><span class="cx"> if self._should_log_debug: </span><span class="cx"> self.logger.debug("deferred load %s group %s" % (mapperutil.attribute_str(instance, self.key), str(self.group))) </span><ins>+ + if not mapper.has_identity(instance): + return None + </ins><span class="cx"> try: </span><span class="cx"> pk = self.parent.pks_by_table[self.columns[0].table] </span><span class="cx"> except KeyError: </span></span></pre></div> <a id="sqlalchemytrunktestormmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/orm/mapper.py (2280 => 2281)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/orm/mapper.py 2007-01-30 01:01:22 UTC (rev 2280) +++ sqlalchemy/trunk/test/orm/mapper.py 2007-01-30 22:04:53 UTC (rev 2281) </span><span class="lines">@@ -659,7 +659,36 @@ </span><span class="cx"> ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY %s" % orderby, {}), </span><span class="cx"> ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3}) </span><span class="cx"> ]) </span><del>- </del><ins>+ + def testunsaved(self): + """test that deferred loading doesnt kick in when just PK cols are set""" + m = mapper(Order, orders, properties={ + 'description':deferred(orders.c.description) + }) + + sess = create_session() + o = Order() + sess.save(o) + o.order_id = 7 + def go(): + o.description = "some description" + self.assert_sql_count(testbase.db, go, 0) + + def testunsavedgroup(self): + """test that deferred loading doesnt kick in when just PK cols are set""" + m = mapper(Order, orders, properties={ + 'description':deferred(orders.c.description, group='primary'), + 'opened':deferred(orders.c.isopen, group='primary') + }) + + sess = create_session() + o = Order() + sess.save(o) + o.order_id = 7 + def go(): + o.description = "some description" + self.assert_sql_count(testbase.db, go, 0) + </ins><span class="cx"> def testsave(self): </span><span class="cx"> m = mapper(Order, orders, properties={ </span><span class="cx"> 'description':deferred(orders.c.description) </span></span></pre> </div> </div> </body> </html> |