What if we introduced a configuration element
'explicitMap="(true|false)"' If it's true you will need to define a
key for every property. If it is false it will function like it
currently does. This  could be  global attribute. Of course this could
lead us to more people wanting finer grained configuration
functionality for maps (blargh!!!!).

Brandon


On Mon, 7 Feb 2005 17:30:12 +0100 (CET), Clinton Begin (JIRA)
<[email protected]> wrote:
>      [ 
> http://issues.apache.org/jira/browse/IBATIS-51?page=comments#action_58679 ]
> 
> Clinton Begin commented on IBATIS-51:
> -------------------------------------
> 
> Thanks for figuring this one out Dimiter.
> 
> This was a concious decision made by us.  Previously a bug was entered that 
> made sense...as you can see I've always been uncomfortable with the subject, 
> as I even left the old code there.
> 
> So, here's a perfect example of why Maps suck for domain models (not a 
> criticism, just a point).  When exactly does a Map "have" a property?  There 
> are two possibilities:
> 
> 1) A Map has properties based on whether it "containsKey" for the given 
> property name.
>     - Caveat:  In some cases you'll find yourself having to set keys in the 
> Map before they'll work with a given statement as a parameter or predefined 
> result.  Perhaps this is better, simply because it is more explicit.
> 
> -OR-
> 
> 2) Because a Map is so loosely described, a Map can be said to have ANY 
> property --all the time, no matter what keys are currently on it.
>     - Caveat: <isPropertyAvailable>  will always return true.
> 
> So before I swing the pendulum back towards option #1, I wonder if you guys 
> can possibly use <isNotNull> instead of <isPresent>?
> 
> PS:  It's not so much that we're busy, but in fact our source tree has been 
> locked for two weeks in transition to ASF infrastructure....sad but true.
> 
> Cheers,
> Clinton
> 
> > Nulls interpretted incorrectly in version 2.0.9
> > -----------------------------------------------
> >
> >          Key: IBATIS-51
> >          URL: http://issues.apache.org/jira/browse/IBATIS-51
> >      Project: iBatis for Java
> >         Type: Bug
> >   Components: SQL Maps
> >     Versions: 2.0.9
> >  Environment: MySQL 3.23.x
> >     Reporter: Dimiter Kapitanov
> 
> >
> > When use HashMap as parameter class, SQL query is consturcted (with nulls) 
> > even for missing properties.
> > This is new bug, appeared in iBatis DBL 2.0.9 (it didn't exist in iBatis 
> > DBL 2.0.7).
> > Demonstration code :
> > -------------------------
> > [M.java]
> > import com.ibatis.sqlmap.client.SqlMapClient;
> > import com.ibatis.sqlmap.client.SqlMapClientBuilder;
> > import java.io.*;
> > import java.util.*;
> > /**
> >  * Test for bug in iBatis DBL 2.0.9.
> >  */
> > public class M
> > {
> >     public static void main(String[] args)
> >     {
> >         System.out.println("Testing iBatis DBL 2.0.9 bug : ");
> >         System.out.println("If you run this program with iBatis 2.0.7 it " +
> >             "will return result, if you run it with iBatis 2.0.9 it will " +
> >             "return null.");
> >
> >         try
> >         {
> >             String mapFile = "DB_Config.xml";
> >             Reader reader = new FileReader(mapFile);
> >             SqlMapClient mapper = SqlMapClientBuilder.buildSqlMapClient(
> >                 reader);
> >
> >             HashMap m = new HashMap();
> >             m.put("name", "Am");
> >             Map result = (Map)mapper.queryForObject("selectAccount", m);
> >
> >             System.out.println("Result = " + result);
> >         }
> >         catch (Exception exc)
> >         {
> >             exc.printStackTrace();
> >         }
> >     }
> > }
> > -------------------------
> > [DB_Config.xml]
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
> > "http://www.ibatis.com/dtd/sql-map-config-2.dtd";>
> > <sqlMapConfig>
> >   <properties resource="debug.ini"/>
> >   <transactionManager type="JDBC">
> >     <dataSource type="SIMPLE">
> >       <property value="${DB_DRIVER}" name="JDBC.Driver"/>
> >       <property value="${DB_URL}" name="JDBC.ConnectionURL"/>
> >       <property value="${DB_USER}" name="JDBC.Username"/>
> >       <property value="${DB_PASSWORD}" name="JDBC.Password"/>
> >       <property value="${DB_QUERY}" name="Pool.PingQuery"/>
> >       <property value="15" name="Pool.MaximumActiveConnections"/>
> >       <property value="15" name="Pool.MaximumIdleConnections"/>
> >       <property value="1000" name="Pool.MaximumWait"/>
> >     </dataSource>
> >   </transactionManager>
> >   <sqlMap resource="Account.xml"/>
> >
> > </sqlMapConfig>
> > -------------------------
> > [Account.xml]
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
> >  "http://www.ibatis.com/dtd/sql-map-2.dtd";>
> > <sqlMap>
> >     <statement id="selectAccount" parameterClass="java.util.HashMap" 
> > resultClass="java.util.HashMap">
> >         SELECT * FROM table1
> >         <dynamic prepend="WHERE">
> >         <isPropertyAvailable prepend="AND" property="id">
> >             id = #id#
> >         </isPropertyAvailable>
> >         <isPropertyAvailable prepend="AND" property="name">
> >             name = #name#
> >         </isPropertyAvailable>
> >         </dynamic>
> >         ORDER BY name
> >     </statement>
> > </sqlMap>
> > ---------------------
> > [debug.sql]
> > #
> > # testDB SQL script (uses MySQL 3.23.x).
> > #
> > CREATE DATABASE testDB;
> > GRANT ALL PRIVILEGES ON testDB.* TO 'testDB'@'localhost' IDENTIFIED BY 
> > 'testDB';
> > FLUSH PRIVILEGES;
> > use testDB;
> > CREATE TABLE table1 (
> >   id int unsigned NOT NULL auto_increment primary key,
> >   name varchar(20)
> > );
> > insert into table1 values (1, 'Am');
> > insert into table1 values (2, 'Tam');
> > ---------------------
> > [debug.ini]
> > #
> > # testDB settings.
> > #
> > DB_DRIVER=com.mysql.jdbc.Driver
> > DB_URL=jdbc:mysql://localhost/testDB?useUnicode=true
> > DB_USER=testDB
> > DB_PASSWORD=testDB
> > DB_QUERY=select 1 from table1
> 
> --
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the administrators:
>    http://issues.apache.org/jira/secure/Administrators.jspa
> -
> If you want more information on JIRA, or have a bug to report see:
>    http://www.atlassian.com/software/jira
> 
>

Reply via email to