Sounds like this would be a good extension point as a whole.  One
thing stuck out in your message though.

========
// general text processing
 string dynamicText = (string)mappedStatement.Process(
 dynamicTextHandler, new int[] {5, 6, 9});
============

The idea that iBatis might handle general text processing (I'm
assuming this was just an example to show various uses that could be)
as a primary duty is a little worrying, when there are many template
processing engines laying about
(velocity/nvelocity/stringtemplate/etc).

All in all seperating out the two distinct sets of functionality could
be very useful I agree.  If nothing else it could make iBatis useful
to a whole new set of people.

-Chad



On 2/15/06, Ron Grabowski <[EMAIL PROTECTED]> wrote:
> SqlMappers do two tasks: building/executing dynamic sql and translating
> the result set into domain objects. It might be useful to expose more
> of the "building dynamic sql" code to the user:
>
>  IDictionary map = new Hashtable();
>  map["StartDate"] = DateTime.Now;
>  map["EndDate"] = endDate;
>  map["Users"] = new int[] {4, 7, 6, 9, 10};
>
>  IMappedStatement mappedStatement =
>   sqlMapper.GetMappedStatement("Calendar.Search");
>
>  // CreateIDbCommand(object parameterObject)
>  IDbCommand cmd = mappedStatement.CreateIDbCommand(map);
>
> The returned IDbCommand would have its IDataParameters collection
> populated and could be forwarded off to another framework (the
> Microsoft Enterprise Library DAAB for example). I've haven't used the
> DAAB in a very long time but from the samples on-line I'd envision it
> looking something like this:
>
>  IDbCommand cmd = generateCommandFromIBatisNet();
>  Database db = DatabaseFactory.CreateDatabase();
>  IDataReader reader = db.ExecuteReader(cmd);
>
> This might also be an entry point for generic data mapping:
>
>  // produce some sort of Ldap object that will be executed
>  // by another system
>  LdapResult result = (LdapResult)mappedStatement.Process(
>   ldapHandler, 5);
>
>  // hibernate will use the hqlCriteria object in one of its queries
>  HqlCriteria hqlCriteria = (HqlCriteria)mappedStatement.Process(
>   hibernateCriteriaHandler, new int[] {5, 6, 9});
>
>  // general text processing
>  string dynamicText = (string)mappedStatement.Process(
>   dynamicTextHandler, new int[] {5, 6, 9});
>
> Getting back on track, I think this is somewhat possible (long and
> ugly!) today with IBatisNet:
>
>  // untested
>
>  int parameter = 5;
>
>  IMappedStatement mappedStatement =
>   sqlMapper.GetMappedStatement("Calendar.Search");
>
>  RequestScope request =
>   mappedStatement.Statement.Sql.GetRequestScope(
>    parameter,
>    sqlMapper.LocalSession);
>
>  mappedStatement.PreparedCommand.Create(
>   request,
>   sqlMapper.LocalSession,
>   mappedStatement.Statement,
>   parameter);
>
>  IDbCommand cmd = request.IDbCommand;
>
> Thoughts, ideas?
>
> - Ron
>

Reply via email to