unneeded load during m2o check history
Issue #2049
resolved
regression introduced in #2002:
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import *
engine = create_engine('sqlite:///', echo=True)
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parents'
id = Column(Integer, primary_key=True)
class Child(Base):
__tablename__ = 'children'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey(Parent.id))
parent = relationship('Parent')
Base.metadata.create_all(engine)
session = Session(engine)
parent = Parent()
child = Child(parent=parent)
session.add(child)
session.commit()
print "--------------------------------"
session.delete(session.query(Child).one())
session.flush()
emits an unneeded SELECT:
2011-02-11 12:36:41,819 INFO sqlalchemy.engine.base.Engine.0x...9db0 BEGIN (implicit)
2011-02-11 12:36:41,819 INFO sqlalchemy.engine.base.Engine.0x...9db0 SELECT children.id AS children_id, children.parent_id AS children_parent_id
FROM children
2011-02-11 12:36:41,819 INFO sqlalchemy.engine.base.Engine.0x...9db0 ()
2011-02-11 12:36:41,821 INFO sqlalchemy.engine.base.Engine.0x...9db0 SELECT parents.id AS parents_id
FROM parents
WHERE parents.id = ?
2011-02-11 12:36:41,821 INFO sqlalchemy.engine.base.Engine.0x...9db0 (1,)
2011-02-11 12:36:41,821 INFO sqlalchemy.engine.base.Engine.0x...9db0 DELETE FROM children WHERE children.id = ?
2011-02-11 12:36:41,821 INFO sqlalchemy.engine.base.Engine.0x...9db0 (1,)
patch for testing is :
diff -r 33eae4a1405b1968ad486bfe3aefee7f7d631128 lib/sqlalchemy/orm/dependency.py
--- a/lib/sqlalchemy/orm/dependency.py Fri Feb 11 11:24:54 2011 -0500
+++ b/lib/sqlalchemy/orm/dependency.py Fri Feb 11 12:37:47 2011 -0500
@@ -219,7 +219,9 @@
pass
def prop_has_changes(self, uowcommit, states, isdelete):
- passive = not isdelete or self.passive_deletes
+ passive = not isdelete or \
+ self.passive_deletes or \
+ self.direction is MANYTOONE
for s in states:
# TODO: add a high speed method
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.7.0 (automated comment)
- Log in to comment
the change for this turned out to be more involved, adding a new loading mode to many-to-one loads. This is in d7fda4ae03f0e1c1ab73ced15e7b0472f36d1024 and is targeted at 0.7.