Second consecutive dynamic SQL incorrectly using value from first SELECT ------------------------------------------------------------------------
Key: IBATIS-459 URL: https://issues.apache.org/jira/browse/IBATIS-459 Project: iBatis for Java Issue Type: Bug Components: SQL Maps Affects Versions: 2.3.0 Environment: Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing) ibatis-2.3.0.677.jar mysql-connector-java-5.0.7-bin.jar 5.0.37-community-log MySQL Community Edition (GPL) Spring Framework 2.0.1 SuSE 9.3 Reporter: Janek Bogucki When these two dao methods are invoked funDao.getUQProviderDescMostRecentDistinct("lang"); funDao.getUQProviderDescMostRecentDistinct("pid"); <-- Throws exception this exception results on the second statement: [junit] SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: [junit] --- The error occurred in data/fun-sqlmap.xml. [junit] --- The error occurred while applying a result map. [junit] --- Check the uqProviderDescMostRecentDistinct-AutoResultMap. [junit] --- Check the result mapping for the 'lang' property. [junit] --- Cause: java.sql.SQLException: Column 'lang' not found. Column 'lang' is not used in the underlying dynamic SQL: <select id="uqProviderDescMostRecentDistinct" resultClass="string" parameterClass="string"> select distinct $value$ from uqProviderDesc where updateQueueId = (select max(id) from updateQueue) order by $value$ </select> The same error results without the order clause The SQL send to MySQL is correct as can be seen from these mysql log entries 9366 906 Query select distinct lang from uqProviderDesc where updateQueueId = (select max(id) from updateQueue) order by lang 9374 907 Query select distinct pid from uqProviderDesc where updateQueueId = (select max(id) from updateQueue) order by pid My DAO is based on the Spring Framework support for IBATIS, package tests.com.studylink.data.fun; import java.util.List; import org.apache.commons.lang.Validate; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class SqlMapFunDao extends SqlMapClientDaoSupport implements FunDao { public List<String> getUQProviderDescMostRecentDistinct(String field){ Validate.notNull(field); return (List<String>)getSqlMapClientTemplate().queryForList("uqProviderDescMostRecentDistinct", field); } } -- When the Java statements are swapped the error message changes funDao.getUQProviderDescMostRecentDistinct("pid"); funDao.getUQProviderDescMostRecentDistinct("lang"); <-- Throws exception [junit] Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: [junit] --- The error occurred in data/fun-sqlmap.xml. [junit] --- The error occurred while applying a result map. [junit] --- Check the uqProviderDescMostRecentDistinct-AutoResultMap. [junit] --- Check the result mapping for the 'pid' property. [junit] --- Cause: java.sql.SQLException: Column 'pid' not found. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.