[ http://issues.apache.org/jira/browse/IBATIS-51?page=comments#action_58768 ] Clinton Begin commented on IBATIS-51: -------------------------------------
Dimiter, Thank you for the explanation. I would like to fix this for you. What would you think if we just fixed the isPropertyAvailable tag to explicitly handle maps and keys. That way we can allow the Probe classes to maintain their current behaviour (which otherwise would cause others problems). So the isPropertyAvailable tag would know how to check for Map keys explicitly. I'm okay with this, as like I said before this tag is really only useful for Maps now anyway. This will solve cases 2 and 3. Your thoughts? Give me a +1 and it will be in the next release. > 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
