El martes, 25 de septiembre de 2012 20:57:54 UTC-3, Russell Keith-Magee escribió: > > On Tue, Sep 25, 2012 at 11:24 PM, maxi <maxir...@gmail.com <javascript:>> > wrote: > > > > > > El martes, 25 de septiembre de 2012 09:05:47 UTC-3, Karen Tracey > escribió: > >> > >> On Mon, Sep 24, 2012 at 10:15 PM, maxi <maxir...@gmail.com> wrote: > >>> > >>> Hi, > >>> > >>> DatabseFeatures class has a supports_transactions property for test if > >>> the db engine support transactions. > >>> supports_transactions implementation makes some metadata alters to > check > >>> this behaivor. > >>> > >>> Now, is really needed to do this to check transaction support? > >>> I don't know exactly how many times this supports_transactions is > called > >>> but I think what it produce unnecessary alterations in database > structure, > >>> or I'm misinterpreting how it supposed works. > >>> > >> > > > > Hi Karen, > > > >> > >> First, this method is used during testing, generally not during normal > >> operation. It's implemented as a cached property so regardless of how > many > >> times the value is tested the underlying code which creates and drops a > >> table is only actually called once per database. Is it needed? We need > to > >> know if the database actually supports transactions or if > >> commit/rollback/etc are simply no-ops. If you know of an alternative > way of > >> determining this, that works across all databases, please share. I > added > >> that code and I've never liked it but I don't know of another way to > >> accomplish what it needs to do. > >> > > > > No, I just answer because it caught my attention. Why not just trust in > a > > True/False property ? > > As I recall, the reason we can't just use a property is MySQL. There's > no reliable way to tell whether the database has been set up as > InnoDB, which supports transactions, or MyISAM, which doesn't. An > experimental approach allows us to be certain. > > > BTW, What do you mean with "commit/rollback/etc are simply no-ops" ? > > Exactly that. On databases that don't support transactions, > commit/rollback etc are no-ops. > > > I'm working on django-firebird backend implementation (now using the new > > firebird python-driver "fdb") and I need reimplement > supports_transactions, > > because I need to commit any work before drop the table, otherwise, I > fall > > into "Object in use" error. > > Are you saying that the current 'supports_transaction' test is leaving > data in an uncommitted state? From a quick eyeball, I don't see how -- > which bit is tripping up Firebird? Where do you need to add a commit? >
No, I mean if I do select * from TABLE and inmediately I try to drop the table whitout make a commit, the table object is still in use and then I gen an "Object in use" exception. Then, I need todo - select * from TABLE <- fetch - commit work - drop TABLE And the current implementation is: cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)') self.connection._commit() cursor.execute('INSERT INTO ROLLBACK_TEST (X) VALUES (8)') self.connection._rollback() cursor.execute('SELECT COUNT(X) FROM ROLLBACK_TEST') count, = cursor.fetchone() # Commit is needed here cursor.execute('DROP TABLE ROLLBACK_TEST') self.connection._commit() BTW, I was talking about it with the fdb main developer and he notes what there is a possible bug here about how Transaction must work. So, if support_transaction is the natural feature from my db engine I can just return True. Is Ok? Best regards. --- Maxi -- You received this message because you are subscribed to the Google Groups "Django developers" group. To view this discussion on the web visit https://groups.google.com/d/msg/django-developers/-/H88VFE55n-YJ. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.