Awesome Ron! I was looking for something like this as well for reports. I don't really need to loop through and create a list of objects just to loop through them again to shove them in a report. I can do that from a recordset. I was looking through the code and it looks like DefaultPreparedCommand.Create should delegate to DefaultPreparedCommand.CreateCommand to set the request.IDbCommand? I can update the code, but thought I would check with you first.
Mike On Sun, May 31, 2009 at 11:57 AM, Ron Grabowski <rongrabow...@yahoo.com>wrote: > I don't just want the underlying sql string; I want a fully populated > IDbCommand (i.e. its Parameters collection filled) based on the parameter > object that I pass in. IPreparedCommand is a contract for inspecting a > <statement /> node and applying the parameter object with the intent of > executing the query inside ibatis and eventually mapping the output. The > functonality I've added allows someone to go half-way through that process: > I just want the <statement /> and parameter object processed. I'll choose > whether or not I want to execute the query or pass it to another execution > engine. IPreparedCommand requires you to pass in a request scope that is > typically used during the normal map/execute/map lifecycle. My CreateCommand > creates the appropriate request scope internally and stops processing when > it has a complete IDbCommand. This workflow isn't really a standard ibatis > workflow so I didn't make it part of the interface; you have to call > DefaultPreparedCommand.CreateCommand yourself. > > It can also help with testing the parameter object mapping without actually > having to execute the query on the database: > > <select id="FindProduct"> > SELECT * FROM Product WHERE ProductId = #value# > </select> > > var preparedCommand = new DefaultPreparedCommand(); > var findProductStatement = modelStore.GetMappedStatement("FindProduct"); > IDbCommand command = preparedCommand.CreateCommand(findProductStatement, > 42); > > Assert.AreEqual(command.Parameters["@param0"].Value, 42); > > ------------------------------ > *From:* Sal Bass <salbass...@hotmail.com> > *To:* user-cs@ibatis.apache.org > *Sent:* Sunday, May 31, 2009 9:59:25 AM > *Subject:* RE: Ibatis.Net - A Call to Arms > > Ron, > > I am still trying to dig my way through all of the Ibatis source to get > familiar with how everything works. Is the purpose of your code to get > access at the sql statement that is in the mapping file before it is > executed? > > > > ------------------------------ > Date: Sun, 31 May 2009 00:03:40 -0700 > From: rongrabow...@yahoo.com > Subject: Re: Ibatis.Net - A Call to Arms > To: user-cs@ibatis.apache.org > > I've implemented one of my suggestions: > > var preparedCommand = new DefaultPreparedCommand(); > var findProductStatement = modelStore.GetMappedStatement("FindProduct"); > IDbCommand command = preparedCommand.CreateCommand(findProductStatement, > 42); > > That should allow us to write some tests against the dynamic sql generator > without having to execute a query on a real database. > > ------------------------------ > *From:* Ron Grabowski <rongrabow...@yahoo.com> > *To:* user-cs@ibatis.apache.org > *Sent:* Thursday, May 28, 2009 12:50:18 AM > *Subject:* Re: Ibatis.Net - A Call to Arms > > I'm still alive and forcing my team to use IBatis.Net :-) > > They've commented on the verboseness and requirement of having multiple xml > config files...things like not being able to use one of the built-in > DbProviderFactorys strings. > > Perhaps merging providers.config within sqlmap.config so there are less > files. > > Fluent interfaces seem to be the new hotness these days. Improve the > abilitty to configure the mapper without sqlmap.config and providers.config. > > Migrate the internal Transaction objects to System.Transaction. > > Expand on the demos of using Castle NVelocity to do the dynamic sql ??? > > Have a way to generate an IDbCommand without actually executing it: > > // > https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/commons/Rhino.Commons/ToPublic/SqlCommandSet.cs > var sqlCommandSet = new SqlCommandSet(); > > // lots and lots of products > foreach (Product product in products) > { > sqlCommandSet.Append(dataMapper.CreateCommand("Product.Insert", > product)); > } > > // one trip to the database when using ADO.Net 2.0 and Sql Server > sqlCommandSet.ExecuteNonQuery(); > > ------------------------------ > *From:* Sal Bass <salbass...@hotmail.com> > *To:* user-cs@ibatis.apache.org > *Sent:* Monday, May 25, 2009 5:07:34 PM > *Subject:* Ibatis.Net - A Call to Arms > > Per Clinton's suggestion, I am making this post to find out if we can keep > Ibatis.Net going. As we all know, Ibatis fills an important niche and is > still very relevant. We need people to take charge and to commit time for > development. So, who's in? If we don't do this there is nothing to keep it > going. > > > > ------------------------------ > HotmailĀ® has a new way to see what's up with your friends. Check it out. > > ------------------------------ > HotmailĀ® has a new way to see what's up with your friends. Check it > out.<http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009> >