Brian Aker wrote:
Hi!

In working on replication I end up in our transaction code. Today DDL causes whatever transaction that is in play to commit.

Is this really a good behavior?

I am looking at cleaning up the API so that an engine will be able to do transactional DDL (assuming it can handle it). This piece of behavior is going to cause this to become... messy.

Should we toss an error on DDL if the engine does support it transactionally? Current behavior good enough/would break too much to change?

What is the proper behavior?


First, it is imperative that the server never do an implicit commit except, perhaps, on a declared batch load. An implicit rollback is pretty stinky, too, but less likely to destroy or corrupt application data.

That said, if the engine insists on doing DDL as part of a transaction, doing the DDL as part of an independent transaction is probably the way to go. The DML transaction may not see the DDL operation until it finishes the current transaction, which is probably a good thing.

I've never been a fan of transactional DDL, though Firebird users ask for it frequently. Maintaining multiple physical formats is straightforward; maintaining multiple logical formats is a royal pain in the butt.

My strategy (Nimbus, Falcon, Firebird, Rdb/ELN) is:

   * Compile statements with current logical definition
   * Create new format versions (physical formats) on DDL
   * Create new records / versions with the current physical format
   * If a running statement violates a constraint, even a constraint
     that didn't exist when the statement was compiled, throw an error
   * Invalidate all statements in the compiled statement cache
     referencing an altered table as part of the DDL operation (but
     don't invalidate running statements)

If implemented carefully, none of this costs anything at all.


--
Jim Starkey
President, NimbusDB, Inc.
978 526-1376


_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to