Sure. You can also add some context as well.
On 8/21/07, Javier Fonseca V. <[EMAIL PROTECTED]> wrote: > > Francois, do you think that I should ask to the Derby-Dev mail list? > > On 8/21/07, Francois Orsini <[EMAIL PROTECTED]> wrote: > > > > Thanks for catching this Dan. > > > > DDL in Transaction is supported as per the manual: > > A schema manipulation statement (DDL) is not automatically committed > > when it is performed, but participates in the transaction within which it is > > issued. > > http://db.apache.org/derby/docs/dev/devguide/devguide-single.html#cdevconcepts19173 > > > > > > Then, I don't know why the restriction is there in the code to prevent > > DDL in a trigger context. I checked the ANSI SQL-2003 specs and I haven't > > seen (at least obvious) restrictions of schema manipulation/change statement > > within some trigger action context. If anyone knows... > > > > The comments in the code are not saying much about the reason for the > > restriction: > > > > java/engine/org/apache/derby/impl/sql/execute/InternalTriggerExecutionContext.java > > > > /** > > * Make sure that whatever statement is about to be executed > > * is ok from the context of this trigger. > > * <p> > > * Note that we are sub classed in replication for checks > > * for replication specific language. > > * > > * @param constantAction the constant action of the action > > * that we are to validate > > * > > * @exception StandardException on error > > */ > > public void validateStatement(ConstantAction constantAction) throws > > StandardException > > { > > > > // DDL statements are not allowed in triggers. Direct use of DDL > > > > // statements in a trigger's action statement is disallowed by > > the > > // parser. However, this runtime check is needed to prevent > > execution > > // of DDL statements by procedures within a trigger context. > > if (constantAction instanceof DDLConstantAction) { > > throw StandardException.newException( > > SQLState.LANG_NO_DDL_IN_TRIGGER, triggerd.getName(), > > constantAction.toString()); > > } > > > > // No INSERT/UPDATE/DELETE for a before trigger. There is no > > need to > > // check this here because parser does not allow these DML > > statements > > // in a trigger's action statement in a before trigger. Parser > > also > > // disallows creation of before triggers calling procedures > > that modify > > // SQL data. > > > > } > > > > --francois > > > > On 8/20/07, Daniel John Debrunner <[EMAIL PROTECTED] > wrote: > > > > > > Francois Orsini wrote: > > > > Javier, > > > > > > > > I guess and I may be wrong that the main reason for not allowing DDL > > > > > > > operation in a trigger is due to the fact that a DDL operation will > > > get > > > > implicitly committed, > > > > > > DDL is not implicitly committed in Derby. > > > > > > Dan. > > > > > > > >
