Also, I guess a note about the ordering of the statements is in order. So the Configuration maintains a list of the <database-objects/> bound. For the create script it appends them unto the end of the current processing. For the drop script it adds them to the beginning.
So I assume you are referring to the ordering amongst the different <database-object/>s, which is my previous answer... Overall, for large mapping sets, I basically envisioned this as being done in a separate mapping file just like we suggest for things like cache strategies, etc anyway. The only "fool-proof" way to achieve this is to introduce a notion of dependencies, which I don't think we want to get into. That's my $.02 at any rate. P.S. I choose <database-object/> because in my setup, that's what you are defining: one database object. -----Original Message----- From: Max Andersen Sent: Tuesday, August 09, 2005 5:58 AM To: Steve Ebersole; Hibernate devel Subject: Re: [Hibernate] RE: testing question i don't like database-object, but I don't have a better suggestion, so...(maybe just <ddl> ?) I do though have some trimming suggestions: <database-object name="blahBlah"> <create>CREATE INDEX ...</create> <drop>...</drop> <scope dialect="org.hibernate.dialect.Oracle9Dialect"/> </database-object> and <database-object name="blaBlah" class="MyPLSQLTrigger"/> (don't see much need for a separate <definition> tag for the class) btw. the reason for my wish for multiple create/drop's were simply to allow grouping of these construct to ensure proper ordering. Can we guarantee that with single drop/create's ? /max > So I have this implemented locally. It actually uses the > org.hibernate.mapping.RelationModel interface. It allows definition > through the mapping file or programmatically via the Configuration. > There are two basic usages: > > #1: > <database-object> > <create> > <![CDATA[CREATE OR REPLACE TRIGGER t_iu_gen_prop > BEFORE INSERT OR UPDATE ON gen_prop > FOR EACH ROW > BEGIN > IF INSERTING THEN > :new.lastModified := HEXTORAW( '1' ); > ELSE > :new.lastModified := HEXTORAW( > TO_NUMBER( RAWTOHEX( :old.lastModified ) ) + 1 > ); > END IF; > END;]]> > </create> > <drop> > <![CDATA[DROP TRIGGER t_iu_gen_prop]]> > </drop> > <!-- again, completely optional --> > <dialect-scope name="org.hibernate.dialect.Oracle9Dialect"/> > <dialect-scope name="org.hibernate.dialect.OracleDialect"/> > </database-object> > > #2: > <database-object> > <definition class="MyPLSQLTrigger"/> > <!-- again, completely optional --> > <dialect-scope name="org.hibernate.dialect.Oracle9Dialect"/> > <dialect-scope name="org.hibernate.dialect.OracleDialect"/> > </database-object> > > If anyone wants different name(s), speak now or forever hold your > peace... > > Steve > > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Steve > Ebersole > Sent: Monday, August 08, 2005 8:01 AM > To: Hibernate devel > Subject: RE: [Hibernate] RE: testing question > > Actually, probably even better: > > public interface DatabaseObject { > public String sqlCreateString(); > public String sqlDropString(); > } > > ;) > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Steve > Ebersole > Sent: Monday, August 08, 2005 7:54 AM > To: Hibernate devel > Subject: RE: [Hibernate] RE: testing question > > Yes, but I was more thinking: > > public interface DatabaseObject { > public String getCreateCommand(); > public String getDropCommand(); > } > > because the CREATE/DROP SQL commands explicit operate on a single > database object... > > -----Original Message----- > From: Max Andersen > Sent: Monday, August 08, 2005 7:49 AM > To: Steve Ebersole; Hibernate devel > Subject: Re: [Hibernate] RE: testing question > > > And here MyTransactSQLTrigger would be a userprovided class that has > String[] createSQL/dropSQL methods ? > > Sounds good. > I was more thinking like: > > <database-object name="WhateverMostlyForLogging"> > <create-ddl> > CREATE ... > </create-ddl> > <create-ddl> > CREATE ... > </create-ddl> > <drop-ddl> > DROP .. > </drop-ddl> > </database-object> > > but I guess both are usable. > > /max >> If we just let them register something like the DatabaseObject > mentioned >> (keyed by dialect) I guess I'm fine with that. Maybe something like: >> >> <database-object class="MyTransactSQLTrigger "> >> <!-- optional "dialect scoping" --> >> <dialect class="o.h.d.SybaseDialect"/> >> <dialect class="o.h.d.SQLServerDialect"/> >> </database-object> >> >> <database-object class="MyPLSQLTrigger"> >> <!-- optional "dialect scoping" --> >> <dialect class="o.h.d.OracleDialect"/> >> <dialect class="o.h.d.Oracle9Dialect"/> >> </database-object> >> >> Due to "export" feature, I guess DatabaseObject would really instead >> need to expose the create/drop strings. >> >> -----Original Message----- >> From: Max Andersen >> Sent: Monday, August 08, 2005 6:36 AM >> To: Steve Ebersole; [EMAIL PROTECTED]; Hibernate devel >> Subject: Re: testing question >> >> >>> >>> This is the same reason why I always get failures on the tests >> relating >>> to stored procedure support. >>> >> >> These tests creates the SP's before testing - thus if you get errors >> while >> running >> junit test then that is something that should be failing. >> >> How about simply extending hibernate with the possibility for user >> provided additional DDL's ? >> (been suggested before by users, but not had any compelling usecase > for >> >> it...maybe our own >> testing is ?) >> >> /max >> >>> I think we should come up with a unified way to approach this. So >> I'll >>> throw out my proposal as a starting point and see if anyone has > better >>> solutions. >>> >>> The basic idea is to have the individual tests in this category >> register >>> "additional db objects" with the base test case class; these would be >>> used during setUp() and tearDown() processing. DatabaseObject might >>> look like: >>> >>> interface DatabaseObject { >>> void doCreate(Connection conn); >>> void doDrop(Connection conn); >>> } >>> >>> I am thinking of a new test base class that tests relying on > non-table >>> db-object creation could extend; or even add this functionality to > the >>> existing TestCase. It would add a single new method > "DatabaseObject[] >>> getAdditionalDatabaseObjects(Dialect dialect)" which it would call >>> during setUp() processing. The reason for this instead of just >>> overriding setUp()/tearDown() would be to only execute this stuff > when >>> we actually rebuild the session fatory. >>> >>> The simple option would be to have each test class do this work >>> themselves in setUp() and tearDown() for each test execution even >> though >>> we are not necessarily creating/dropping the schema at that > frequency. >>> >>> Anyway, thoughts? >>> >>> Steve >>> >> >> >> >> >> ------------------------------------------------------- >> SF.Net email is Sponsored by the Better Software Conference & EXPO >> September 19-22, 2005 * San Francisco, CA * Development Lifecycle >> Practices >> Agile & Plan-Driven Development * Managing Projects & Teams * Testing > & >> QA >> Security * Process Improvement & Measurement * > http://www.sqe.com/bsce5sf >> _______________________________________________ >> hibernate-devel mailing list >> hibernate-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > > > ------------------------------------------------------- > SF.Net email is Sponsored by the Better Software Conference & EXPO > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > Practices > Agile & Plan-Driven Development * Managing Projects & Teams * Testing & > QA > Security * Process Improvement & Measurement * > http://www.sqe.com/bsce5sf > _______________________________________________ > hibernate-devel mailing list > hibernate-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > ------------------------------------------------------- > SF.Net email is Sponsored by the Better Software Conference & EXPO > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > Practices > Agile & Plan-Driven Development * Managing Projects & Teams * Testing & > QA > Security * Process Improvement & Measurement * > http://www.sqe.com/bsce5sf > _______________________________________________ > hibernate-devel mailing list > hibernate-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > ------------------------------------------------------- > SF.Net email is Sponsored by the Better Software Conference & EXPO > September 19-22, 2005 * San Francisco, CA * Development Lifecycle > Practices > Agile & Plan-Driven Development * Managing Projects & Teams * Testing & > QA > Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf > _______________________________________________ > hibernate-devel mailing list > hibernate-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/hibernate-devel ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ hibernate-devel mailing list hibernate-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hibernate-devel