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