You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/08/08 01:21:58 UTC
svn commit: r683745 [11/22] - in /ibatis/trunk/java/ibatis-3: ./
ibatis-3-compat/ ibatis-3-compat/src/ ibatis-3-compat/src/main/
ibatis-3-compat/src/main/java/ ibatis-3-compat/src/main/java/com/
ibatis-3-compat/src/main/java/com/ibatis/ ibatis-3-compat...
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/DynamicAccount.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/DynamicAccount.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/DynamicAccount.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/DynamicAccount.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap namespace="Account">
+
+ <select id="dynamicIsParameterPresent"
+ parameterClass="integer"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isParameterPresent>
+ where ACC_ID = #value#
+ </isParameterPresent>
+ </select>
+
+ <select id="dynamicIsNotEmpty"
+ parameterClass="string"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isNotEmpty>
+ where ACC_FIRST_NAME = #value#
+ </isNotEmpty>
+ </select>
+
+ <select id="dynamicIsEqual"
+ parameterClass="string"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isEqual compareValue="Clinton">
+ where ACC_FIRST_NAME = 'Clinton'
+ </isEqual>
+ </select>
+
+ <select id="dynamicIsGreater"
+ parameterClass="int"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isGreaterThan compareValue="3">
+ where ACC_ID = 1
+ </isGreaterThan>
+ </select>
+
+ <select id="dynamicIsGreaterEqual"
+ parameterClass="int"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isGreaterEqual compareValue="3">
+ where ACC_ID = 1
+ </isGreaterEqual>
+ </select>
+
+ <select id="dynamicIsLess"
+ parameterClass="int"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isLessThan compareValue="3">
+ where ACC_ID = 1
+ </isLessThan>
+ </select>
+
+ <select id="dynamicIsLessEqual"
+ parameterClass="int"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isLessEqual compareValue="3">
+ where ACC_ID = 1
+ </isLessEqual>
+ </select>
+
+ <select id="dynamicIsNotNull"
+ parameterClass="string"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isNotNull>
+ where ACC_ID = 1
+ </isNotNull>
+ </select>
+
+ <select id="dynamicIsPropertyAvailable"
+ parameterClass="string"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isPropertyAvailable property="id">
+ where ACC_ID = 1
+ </isPropertyAvailable>
+ </select>
+
+ <select id="dynamicSubst"
+ parameterClass="map"
+ resultClass="testdomain.Account">
+ <dynamic>
+ $statement$
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterate"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ </select>
+
+ <select id="dynamicIterateLiteral"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ $[]$
+ </iterate>
+ </select>
+
+ <select id="dynamicIterateInConditional"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ <isEqual property="[]" compareValue="1">
+ #[]#
+ </isEqual>
+ <isEqual property="[]" compareValue="3">
+ #[]#
+ </isEqual>
+ </iterate>
+ </select>
+
+ <select id="multiDynamicIterate"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ AND ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ </select>
+
+ <select id="multiDynamicIterateLiteral"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ AND ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ </select>
+
+ <select id="iterateNestedListProperty"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction="," property="accountList">
+ #accountList[].id#
+ </iterate>
+ </select>
+
+ <select id="iterateNestedListPropertyB"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction="," property="accountList">
+ #accountList[].id#
+ <isNotEqual prepend="," compareProperty="firstName" compareValue="test">
+ #id#
+ </isNotEqual>
+ </iterate>
+ </select>
+
+ <select id="iterateNestedMapListProperty"
+ parameterClass="map"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE ACC_ID IN
+ <iterate open="(" close=")" conjunction="," property="accountList">
+ #accountList[].id#
+ </iterate>
+ </select>
+
+ <select id="dynamicQueryByExample"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE">
+ <isGreaterThan prepend="AND" property="id" compareValue="0">
+ ACC_ID = #id#
+ </isGreaterThan>
+ <isNotNull prepend="AND" property="ids" removeFirstPrepend="true">
+ ACC_ID in
+ <iterate prepend="YODUDE" property="ids" open="(" close=")" conjunction=",">
+ #ids[]#
+ </iterate>
+ </isNotNull>
+ <isNotEmpty prepend="AND" property="firstName">
+ ACC_FIRST_NAME = #firstName#
+ </isNotEmpty>
+ <isNotEmpty prepend="AND" property="lastName">
+ ACC_LAST_NAME = #lastName#
+ </isNotEmpty>
+ <isNotEmpty prepend="AND" property="emailAddress">
+ <isEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = 'clinton.begin@ibatis.com'
+ </isEqual>
+ <isNotEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = #emailAddress#
+ </isNotEqual>
+ </isNotEmpty>
+ </dynamic>
+ </select>
+
+ <select id="complexDynamicQueryByExample"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE" open="(" close=")">
+ <isNotPropertyAvailable property="id" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isGreaterThan prepend="AND" property="id" compareValue="0">
+ ACC_ID = #id#
+ </isGreaterThan>
+ </isNotPropertyAvailable>
+ <isNotNull prepend="AND" property="ids" removeFirstPrepend="false">
+ ACC_ID in
+ <iterate property="ids" open="(" close=")" conjunction=",">
+ $ids[]$
+ </iterate>
+ </isNotNull>
+ <isPropertyAvailable property="lastName" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isNotEmpty prepend="AND" property="firstName" removeFirstPrepend="false">
+ ACC_FIRST_NAME = #firstName#
+ </isNotEmpty>
+ </isPropertyAvailable>
+ <isPropertyAvailable property="lastName" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isNotEmpty prepend="AND" property="lastName" removeFirstPrepend="false">
+ ACC_LAST_NAME = #lastName#
+ </isNotEmpty>
+ </isPropertyAvailable>
+ <isNotEmpty prepend="AND" property="emailAddress">
+ <isEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = 'clinton.begin@ibatis.com'
+ </isEqual>
+ <isNotEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = #emailAddress#
+ </isNotEqual>
+ </isNotEmpty>
+ </dynamic>
+ </select>
+
+ <select id="complexDynamicQueryByExampleLiteral"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE" open="(" close=")">
+ <isNotPropertyAvailable property="id" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isGreaterThan prepend="AND" property="id" compareValue="0">
+ ACC_ID = #id#
+ </isGreaterThan>
+ </isNotPropertyAvailable>
+ <isNotNull prepend="AND" property="ids" removeFirstPrepend="false">
+ ACC_ID in
+ <iterate property="ids" open="(" close=")" conjunction=",">
+ #ids[]#
+ </iterate>
+ </isNotNull>
+ <isPropertyAvailable property="lastName" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isNotEmpty prepend="AND" property="firstName" removeFirstPrepend="false">
+ ACC_FIRST_NAME = #firstName#
+ </isNotEmpty>
+ </isPropertyAvailable>
+ <isPropertyAvailable property="lastName" prepend="AND" open="(" close=")" removeFirstPrepend="true">
+ <isNotEmpty prepend="AND" property="lastName" removeFirstPrepend="false">
+ ACC_LAST_NAME = #lastName#
+ </isNotEmpty>
+ </isPropertyAvailable>
+ <isNotEmpty prepend="AND" property="emailAddress">
+ <isEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = 'clinton.begin@ibatis.com'
+ </isEqual>
+ <isNotEqual property="emailAddress" compareValue="clinton">
+ ACC_EMAIL = #emailAddress#
+ </isNotEqual>
+ </isNotEmpty>
+ </dynamic>
+ </select>
+
+ <select id="dynamicQueryByExample2"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE">
+ <iterate property="ids" conjunction="OR">
+ <isNotNull property="age">
+ ACC_ID = #ids[]#
+ </isNotNull>
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicQueryByExample2Literal"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE">
+ <iterate property="ids" conjunction="OR">
+ <isNotNull property="age">
+ ACC_ID = $ids[]$
+ </isNotNull>
+ </iterate>
+ </dynamic>
+ </select>
+ <!--
+ issue IBATIS-42 test
+ include the following code in the same place where
+ 'ACC_ID = #ids[]#' exists in the dynamicQueryByExample2 statement
+ <isNotNull property="age">
+ ACC_ID = #ids[]#
+ </isNotNull>
+ -->
+
+ <select id="dynamicIterateWithPrepend1"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ ACC_ID IN
+ <iterate open="(" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate open="(" close=")" conjunction="OR">
+ ACC_ID = #[]#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2b"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate open="(" close=")" conjunction="OR">
+ ACC_ID = #[].id#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2c"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate property="myList" open="(" close=")" conjunction="OR">
+ ACC_ID = #myList[].id#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2d"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate property="myList" open="(" close=")" conjunction="OR">
+ <isEqual property="myList[]" compareValue="1">
+ ACC_ID = #myList[]#
+ </isEqual>
+ <isEqual property="myList[]" compareValue="3">
+ ACC_ID = #myList[]#
+ </isEqual>
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2e"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate property="myArray" open="(" close=")" conjunction="OR">
+ <isEqual property="myArray[]" compareValue="1">
+ ACC_ID = #myArray[]#
+ </isEqual>
+ <isEqual property="myArray[]" compareValue="3">
+ ACC_ID = #myArray[]#
+ </isEqual>
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend2f"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <iterate property="intArray" open="(" close=")" conjunction="OR">
+ <isEqual property="intArray[]" compareValue="1">
+ ACC_ID = #intArray[]#
+ </isEqual>
+ <isEqual property="intArray[]" compareValue="3">
+ ACC_ID = #intArray[]#
+ </isEqual>
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="dynamicIterateWithPrepend3"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <isParameterPresent prepend="BLAH!">
+ <iterate open="(" close=")" conjunction="OR">
+ ACC_ID = #[]#
+ </iterate>
+ </isParameterPresent>
+ </dynamic>
+ </select>
+
+ <sql id="includeComplex">
+ <dynamic prepend="where">
+ <isParameterPresent>
+ <isNotEmpty prepend="and" property="id">
+ ACC_ID = #id#
+ </isNotEmpty>
+ <isNotEmpty prepend="and" property="firstName">
+ ACC_FIRST_NAME = #firstName#
+ </isNotEmpty>
+ <isNotEmpty prepend="and" property="lastName">
+ ACC_LAST_NAME = #lastName#
+ </isNotEmpty>
+ </isParameterPresent>
+ </dynamic>
+ </sql>
+
+ <select id="dynamicWithPrepend"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <include refid="includeComplex"/>
+ </select>
+
+ <select id="dynamicWithTwoDynamicElements"
+ parameterClass="testdomain.Account"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="where">
+ <isNotEmpty prepend="BLAH!" property="id">
+ ACC_ID = #id#
+ </isNotEmpty>
+ </dynamic>
+ <dynamic prepend="and">
+ <isNotEmpty prepend="BLAH!" property="firstName">
+ ACC_FIRST_NAME = #firstName#
+ </isNotEmpty>
+ <isNotEmpty prepend="and" property="lastName">
+ ACC_LAST_NAME = #lastName#
+ </isNotEmpty>
+ </dynamic>
+ </select>
+
+ <select id="complexDynamicStatement" cacheModel="account-cache" resultClass="testdomain.Account"
+ parameterClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <dynamic prepend="WHERE">
+ <isNotNull prepend="AND" property="firstName">
+ (ACC_FIRST_NAME = #firstName#
+ <isNotNull prepend="OR" property="lastName">
+ ACC_LAST_NAME = #lastName#
+ </isNotNull>
+ )
+ </isNotNull>
+ <isNotNull prepend="AND" property="emailAddress">
+ ACC_EMAIL like #emailAddress#
+ </isNotNull>
+ <isGreaterThan prepend="AND" property="id" compareValue="0">
+ ACC_ID = #id#
+ </isGreaterThan>
+ </dynamic>
+ order by ACC_LAST_NAME
+ </select>
+
+ <select id="iterateListInMap"
+ parameterClass="map"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE 1 = 1
+ <dynamic>
+ <iterate open="AND ACC_ID IN (" close=")" conjunction="," property="paramList">
+ #paramList[]#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="iterateListDirect"
+ parameterClass="list"
+ resultClass="testdomain.Account">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ WHERE 1 = 1
+ <dynamic>
+ <iterate open="AND ACC_ID IN (" close=")" conjunction=",">
+ #[]#
+ </iterate>
+ </dynamic>
+ </select>
+
+ <select id="testRemappableResults" parameterClass="int" resultClass="testdomain.Account" remapResults="true">
+ select
+ <isNotEqual compareValue="77">
+ ACC_ID as id,
+ </isNotEqual>
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ <isEqual compareValue="77">
+ where ACC_ID = 2
+ </isEqual>
+ <isNotEqual compareValue="77">
+ where ACC_ID = #value#
+ </isNotEqual>
+ </select>
+
+ <select id="selectIfPropertyAvailable" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
+ SELECT * FROM ACCOUNT
+ <dynamic prepend="WHERE">
+ <isPropertyAvailable prepend="AND" property="xid">
+ ACC_ID = #xid#
+ </isPropertyAvailable>
+ <isPropertyAvailable prepend="AND" property="name">
+ ACC_FIRST_NAME = #name#
+ </isPropertyAvailable>
+ </dynamic>
+ ORDER BY ACC_ID
+ </select>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Jira.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Jira.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Jira.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Jira.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <resultMap id="jira260GroupedResult" class="testdomain.ArticleIndex" groupBy="categoryTitle">
+ <result property="categoryTitle" column="category_title"/>
+ <result property="topics" resultMap="topicResult"/>
+ </resultMap>
+
+ <resultMap id="topicResult" class="testdomain.Topic" groupBy="topicTitle">
+ <result property="topicTitle" column="topic_title"/>
+ <result property="descriptionList" resultMap="descriptionResult"/>
+ </resultMap>
+
+ <resultMap id="descriptionResult" class="testdomain.TopicDescription">
+ <result property="description" column="topic_description"/>
+ </resultMap>
+
+ <resultMap id="jira260FlatResult" class="testdomain.ArticleIndexDenorm">
+ <result property="categoryTitle" column="category_title"/>
+ <result property="topicTitle" column="topic_title"/>
+ <result property="description" column="topic_description"/>
+ </resultMap>
+
+ <sql id="Jira260Query">
+ SELECT CATEGORY_TITLE,
+ TOPIC_TITLE,
+ TOPIC_DESCRIPTION
+ FROM ARTICLE_INDEX
+ ORDER BY CATEGORY_TITLE, TOPIC_TITLE
+ </sql>
+
+ <!--
+ The error actually described in JIRA-260
+ -->
+ <select id="getJira260GroupedResult" resultMap="jira260GroupedResult">
+ <include refid="Jira260Query"/>
+ </select>
+
+ <select id="getJira260FlatResult" resultMap="jira260FlatResult">
+ <include refid="Jira260Query"/>
+ </select>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/LineItem.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/LineItem.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/LineItem.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/LineItem.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <resultMap id="missingParamCheckA" class="testdomain.LineItem">
+ <result property="id" column="id"/>
+ <result property="orderId" column="orderId"/>
+ <result property="itemCode" column="itemCode"/>
+ </resultMap>
+
+ <resultMap id="missingParamCheckB" class="testdomain.LineItem" extends="missingParamCheckA">
+ <result property="quantity" column="quantity"/>
+ <result property="price" column="price"/>
+ </resultMap>
+
+ <select id="getAllLineItemProps" parameterClass="int" resultMap="missingParamCheckA">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+ LIN_ITM_CODE as itemCode
+ from LINE_ITEM where LIN_ORD_ID = #value#
+ </select>
+
+ <select id="getSomeLineItemProps" parameterClass="int" resultMap="missingParamCheckB">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+
+ LIN_QUANTITY as quantity,
+ LIN_PRICE as price
+ from LINE_ITEM where LIN_ORD_ID = #value#
+ </select>
+
+
+ <select id="getLineItemsForOrder"
+ parameterClass="java.lang.Integer"
+ resultClass="testdomain.LineItem">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+ LIN_ITM_CODE as itemCode,
+ LIN_QUANTITY as quantity,
+ LIN_PRICE as price
+ from LINE_ITEM where LIN_ORD_ID = #value#
+ </select>
+
+ <insert id="insertLineItem" parameterClass="testdomain.LineItem">
+ <selectKey resultClass="int" keyProperty="id" type="post">
+ select 99 from LINE_ITEM where LIN_ID = 1 and LIN_ORD_ID=1
+ </selectKey>
+ insert into LINE_ITEM
+ (LIN_ID, LIN_ORD_ID, LIN_ITM_CODE, LIN_QUANTITY, LIN_PRICE)
+ values
+ (#id#, #orderId#, #itemCode#, #quantity#, #price#)
+ </insert>
+
+ <insert id="insertLineItemOrDie" parameterClass="testdomain.LineItem">
+ <selectKey resultClass="int" keyProperty="id" type="post">
+ select 99 from LINE_ITEM where LIN_ID = 1 and LIN_ORD_ID=1
+ </selectKey>
+ insert into LINE_ITEM_LOL
+ (LIN_ID, LIN_ORD_ID, LIN_ITM_CODE, LIN_QUANTITY, LIN_PRICE)
+ values
+ (#id#, #orderId#, #itemCode#, #quantity#, #price#)
+ </insert>
+
+ <insert id="insertLineItemPreKey" parameterClass="testdomain.LineItem">
+ <selectKey resultClass="int" keyProperty="id">
+ select 99 from LINE_ITEM where LIN_ID = 1 and LIN_ORD_ID=1
+ </selectKey>
+ insert into LINE_ITEM
+ (LIN_ID, LIN_ORD_ID, LIN_ITM_CODE, LIN_QUANTITY, LIN_PRICE)
+ values
+ (#id#, #orderId#, #itemCode#, #quantity#, #price#)
+ </insert>
+
+ <insert id="insertLineItemNoKey" parameterClass="testdomain.LineItem">
+ insert into LINE_ITEM
+ (LIN_ID, LIN_ORD_ID, LIN_ITM_CODE, LIN_QUANTITY, LIN_PRICE)
+ values
+ (#id#, #orderId#, #itemCode#, #quantity#, #price#)
+ </insert>
+
+ <select id="getSpecificLineItem"
+ parameterClass="java.util.HashMap"
+ resultClass="testdomain.LineItem">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+ LIN_ITM_CODE as itemCode,
+ LIN_QUANTITY as quantity,
+ LIN_PRICE as price
+ from LINE_ITEM
+ where LIN_ORD_ID = #orderId#
+ and LIN_ID = #lineId#
+ </select>
+
+ <select id="getDynSpecificLineItem"
+ parameterClass="java.util.HashMap"
+ resultClass="testdomain.LineItem">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+ LIN_ITM_CODE as itemCode,
+ LIN_QUANTITY as quantity,
+ LIN_PRICE as price
+ from LINE_ITEM
+ where LIN_ORD_ID = #orderId#
+ <dynamic>
+ <isNotNull property="lineId">
+ and LIN_ID = #lineId#
+ </isNotNull>
+ </dynamic>
+ </select>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/NestedIterateStatements.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/NestedIterateStatements.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/NestedIterateStatements.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/NestedIterateStatements.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,442 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+<sqlMap namespace="NestedIterateStatements">
+
+ <resultMap id="personResult" class="testdomain.Person">
+ <result property="id" column="id"/>
+ <result property="firstName" column="first_name"/>
+ <result property="lastName" column="last_name"/>
+ </resultMap>
+
+ <select id="NestedIterateTest1" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ id = #idList[]#
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest2" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isEqual property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest3" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isNotEqual property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isNotEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest4" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isGreaterThan property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isGreaterThan>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest5" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isGreaterEqual property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isGreaterEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest6" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isLessThan property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isLessThan>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest7" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" conjunction="or">
+ <isLessEqual property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isLessEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- try iterating over two properties -->
+ <select id="NestedIterateTest8" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="lastNames" conjunction="or">
+ <iterate property="firstNames" conjunction="or">
+ first_name = #firstNames[]# and last_name = #lastNames[]#
+ </iterate>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- try nested iterates -->
+ <select id="NestedIterateTest9" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" conjunction="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- This test makes sure that removeFirstPrepend works for every iteration -->
+ <select id="NestedIterateTest9a" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or" removeFirstPrepend="iterate">
+ (
+ <iterate prepend="and" property="orConditions[].conditions" conjunction="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest10" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" open="(" close=")" removeFirstPrepend="true">
+ <isEqual property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest11" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" removeFirstPrepend="true">
+ <isNotEqual property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isNotEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest12" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" removeFirstPrepend="true">
+ <isGreaterThan property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isGreaterThan>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest13" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" removeFirstPrepend="true">
+ <isGreaterEqual property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isGreaterEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest14" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" removeFirstPrepend="true">
+ <isLessThan property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isLessThan>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest15" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="idList" removeFirstPrepend="true">
+ <isLessEqual property="idList[]" compareValue="4" prepend="or">
+ id = #idList[]#
+ </isLessEqual>
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test for IBATIS-293 written in the form of 2-7 above -->
+ <select id="NestedIterateTest16" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" conjunction="and">
+ <isEqual property="orConditions[].conditions[].include" compareValue="true">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </isEqual>
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test for IBATIS-293 written in the form of 9-15 above -->
+ <select id="NestedIterateTest17" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" removeFirstPrepend="true">
+ <isEqual property="orConditions[].conditions[].include" compareValue="true" prepend="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </isEqual>
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test for IBATIS-293 written in the form of 9-15 above -->
+ <select id="NestedIterateTest18" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" removeFirstPrepend="true">
+ <isNotPropertyAvailable property="orConditions[].conditions[].fred" prepend="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </isNotPropertyAvailable>
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test for IBATIS-293 written in the form of 9-15 above -->
+ <select id="NestedIterateTest19" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" removeFirstPrepend="true">
+ <isNotNull property="orConditions[].conditions[].include" prepend="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </isNotNull>
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test for IBATIS-293 written in the form of 9-15 above -->
+ <select id="NestedIterateTest20" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <dynamic prepend="where">
+ <iterate property="orConditions" conjunction="or">
+ (
+ <iterate property="orConditions[].conditions" removeFirstPrepend="true">
+ <isNotEmpty property="orConditions[].conditions[].include" prepend="and">
+ $orConditions[].conditions[].condition$ #orConditions[].conditions[].value#
+ </isNotEmpty>
+ </iterate>
+ )
+ </iterate>
+ </dynamic>
+ order by id
+ </select>
+
+ <!-- test the open, close, prepend attributes when no elements satisfy -->
+ <select id="NestedIterateTest21" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="idList" conjunction="or" prepend="where" open="(" close=")">
+ <isEqual property="idList[]" compareValue="55">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test the open, close, prepend attributes when the first element doesn't satisfy -->
+ <select id="NestedIterateTest22" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="idList" conjunction="or" prepend="where" open="(" close=")">
+ <isEqual property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test the open, close, prepend attributes when only the first element satisfies -->
+ <select id="NestedIterateTest23" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="idList" conjunction="or" prepend="where" open="(" close=")">
+ <isEqual property="idList[]" compareValue="1">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test the open, close, prepend attributes when only the last element satisfies -->
+ <select id="NestedIterateTest24" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="idList" conjunction="or" prepend="where" open="(" close=")">
+ <isEqual property="idList[]" compareValue="9">
+ id = #idList[]#
+ </isEqual>
+ </iterate>
+ order by id
+ </select>
+
+
+ <!-- test the open, close, prepend attributes when more than one element satisfies -->
+ <select id="NestedIterateTest25" resultMap="personResult" parameterClass="testdomain.NestedIterateParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="idList" conjunction="or" prepend="where" open="(" close=")">
+ <isLessThan property="idList[]" compareValue="4">
+ id = #idList[]#
+ </isLessThan>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test nested map -->
+ <select id="NestedIterateTest26" resultMap="personResult" parameterClass="map">
+ select id, first_name, last_name
+ from person
+ <iterate property="po.idList" conjunction="or" prepend="where" open="(" close=")">
+ <isLessThan property="po.idList[]" compareValue="4">
+ id = #po.idList[]#
+ </isLessThan>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test deeper combo of list maps nesting -->
+ <select id="NestedIterateTest27" resultMap="personResult" parameterClass="map">
+ select id, first_name, last_name
+ from person
+ <iterate property="firstList">
+ <iterate property="firstList[].po.idList" conjunction="or" prepend="where" open="(" close=")">
+ <isLessThan property="firstList[].po.idList[]" compareValue="4">
+ id = #firstList[].po.idList[]#
+ </isLessThan>
+ </iterate>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test nested object -->
+ <select id="NestedIterateTest28" resultMap="personResult" parameterClass="testdomain.SimpleNestedParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="nestedIterateParameterObject.idList" conjunction="or" prepend="where" open="(" close=")">
+ <isLessThan property="nestedIterateParameterObject.idList[]" compareValue="4">
+ id = #nestedIterateParameterObject.idList[]#
+ </isLessThan>
+ </iterate>
+ order by id
+ </select>
+
+ <!-- test deeper combo of list bean nesting -->
+ <select id="NestedIterateTest29" resultMap="personResult" parameterClass="testdomain.SimpleNestedParameterObject">
+ select id, first_name, last_name
+ from person
+ <iterate property="nestedList">
+ <iterate property="nestedList[].nestedIterateParameterObject.idList" conjunction="or" prepend="where" open="("
+ close=")">
+ <isLessThan property="nestedList[].nestedIterateParameterObject.idList[]" compareValue="4">
+ id = #nestedList[].nestedIterateParameterObject.idList[]#
+ </isLessThan>
+ </iterate>
+ </iterate>
+ order by id
+ </select>
+
+ <select id="NestedIterateTest30" parameterClass="testdomain.Category" resultClass="testdomain.Product">
+ SELECT * FROM product WHERE productId=
+ <iterate property="parentCategory.productList">
+ <isEqual property="parentCategory.productList[].productId" compareValue="FI-SW-01">
+ #parentCategory.productList[].productId#
+ </isEqual>
+ <isEqual property="parentCategory.productList[].productId" compareValue="NOTHING">
+ #parentCategory.productList[].productId#
+ </isEqual>
+ <isEqual property="parentCategory.productList[].productId" compareValue="NOTHINGAGAIN">
+ #parentCategory.productList[].productId#
+ </isEqual>
+ </iterate>
+ </select>
+</sqlMap>
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleConfig.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleConfig.properties?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleConfig.properties (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleConfig.properties Thu Aug 7 16:21:46 2008
@@ -0,0 +1,4 @@
+driver=oracle.jdbc.driver.OracleDriver
+url=jdbc:oracle:thin:@192.168.1.101:1521:oracle1
+username=jpetstore
+password=test
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleProc.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleProc.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleProc.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/OracleProc.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <parameterMap id="swapParameters" class="map">
+ <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
+ <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
+ <parameter property="status" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
+ </parameterMap>
+
+ <procedure id="swapEmailAddresses" parameterMap="swapParameters">
+ {call swap_email_address (?, ?, ?)}
+ </procedure>
+
+ <parameterMap id="swapParametersUsingBean" class="testdomain.ProcBean">
+ <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
+ <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
+ <parameter property="status" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
+ </parameterMap>
+
+ <procedure id="swapEmailAddressesUsingBean" parameterMap="swapParametersUsingBean">
+ {call swap_email_address (?, ?, ?)}
+ </procedure>
+
+ <procedure id="noParamProc" resultClass="string">
+ {call no_param_proc ()}
+ </procedure>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Order.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Order.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Order.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/Order.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <cacheModel id="order-cache" type="MEMORY">
+ <flushInterval hours="24"/>
+ </cacheModel>
+
+ <typeAlias alias="order" type="testdomain.Order"/>
+
+ <resultMap id="credit-card-result" class="java.lang.String">
+ <result property="value" column="ORD_CARD_NUMBER"/>
+ </resultMap>
+
+ <resultMap id="lite-order-map-result" class="java.util.HashMap">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ </resultMap>
+
+ <resultMap id="lite-order-result-by-name" class="order">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ </resultMap>
+
+ <resultMap id="lite-order-result-by-index" class="order">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ </resultMap>
+
+ <resultMap id="order-with-account-result" class="order">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ <result property="account" column="ORD_ACC_ID" select="getAccountViaColumnName"/>
+ </resultMap>
+
+ <resultMap id="order-with-lines-result" class="order"
+ extends="lite-order-result-by-name">
+ <result property="lineItems" column="ORD_ID" select="getLineItemsForOrder"/>
+ </resultMap>
+
+ <resultMap id="lineItemNestedResult" class="testdomain.LineItem">
+ <result column="LIN_ID" property="id"/>
+ <result column="LIN_ORD_ID" property="orderId"/>
+ <result column="LIN_ITM_CODE" property="itemCode"/>
+ <result column="LIN_QUANTITY" property="quantity"/>
+ <result column="LIN_PRICE" property="price"/>
+ </resultMap>
+
+ <resultMap id="orderResultWithNestedMaps" class="order"
+ extends="lite-order-result-by-name" groupBy="id">
+ <result property="account" resultMap="Account.account-result"/>
+ <result property="lineItems" resultMap="lineItemNestedResult"/>
+ </resultMap>
+
+ <resultMap id="order-with-lines-array" class="order"
+ extends="lite-order-result-by-name">
+ <result property="lineItemArray" column="ORD_ID" select="getLineItemsForOrder"/>
+ </resultMap>
+
+ <resultMap id="order-with-collection-result" class="order">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ <result property="lineItems" column="ORD_ID" select="getLineItemsForOrder"/>
+ </resultMap>
+
+ <resultMap id="order-with-types-result" class="order">
+ <result property="id" jdbcType="NUMERIC" column="ORD_ID"/>
+ <result property="date" jdbcType="TIMESTAMP" column="ORD_DATE"/>
+ <result property="cardExpiry" jdbcType="VARCHAR" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" jdbcType="VARCHAR" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" jdbcType="VARCHAR" column="ORD_CARD_NUMBER"/>
+ <result property="street" jdbcType="VARCHAR" column="ORD_STREET"/>
+ <result property="city" jdbcType="VARCHAR" column="ORD_CITY"/>
+ <result property="province" jdbcType="VARCHAR" column="ORD_PROVINCE"/>
+ <result property="postalCode" jdbcType="VARCHAR" column="ORD_POSTAL_CODE"/>
+ </resultMap>
+
+ <resultMap id="order-with-favourite-line-item" class="order">
+ <result property="id" jdbcType="NUMERIC" column="ORD_ID"/>
+ <result property="date" jdbcType="TIMESTAMP" column="ORD_DATE"/>
+ <result property="cardExpiry" jdbcType="VARCHAR" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" jdbcType="VARCHAR" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" jdbcType="VARCHAR" column="ORD_CARD_NUMBER"/>
+ <result property="street" jdbcType="VARCHAR" column="ORD_STREET"/>
+ <result property="city" jdbcType="VARCHAR" column="ORD_CITY"/>
+ <result property="province" jdbcType="VARCHAR" column="ORD_PROVINCE"/>
+ <result property="postalCode" jdbcType="VARCHAR" column="ORD_POSTAL_CODE"/>
+ <result property="favouriteLineItem"
+ column="{orderId=ORD_ID,lineId=ORD_FAVOURITE_LINE}"
+ select="getSpecificLineItem"/>
+ </resultMap>
+
+ <resultMap id="order-with-dyn-favourite-line-item" class="order">
+ <result property="id" jdbcType="NUMERIC" column="ORD_ID"/>
+ <result property="date" jdbcType="TIMESTAMP" column="ORD_DATE"/>
+ <result property="cardExpiry" jdbcType="VARCHAR" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" jdbcType="VARCHAR" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" jdbcType="VARCHAR" column="ORD_CARD_NUMBER"/>
+ <result property="street" jdbcType="VARCHAR" column="ORD_STREET"/>
+ <result property="city" jdbcType="VARCHAR" column="ORD_CITY"/>
+ <result property="province" jdbcType="VARCHAR" column="ORD_PROVINCE"/>
+ <result property="postalCode" jdbcType="VARCHAR" column="ORD_POSTAL_CODE"/>
+ <result property="favouriteLineItem"
+ column="{orderId=ORD_ID,lineId=ORD_FAVOURITE_LINE}"
+ select="getDynSpecificLineItem"/>
+ </resultMap>
+
+ <resultMap id="order-joined-favourite" class="order">
+ <result property="id" column="ORD_ID"/>
+ <result property="date" column="ORD_DATE"/>
+ <result property="cardExpiry" column="ORD_CARD_EXPIRY"/>
+ <result property="cardType" column="ORD_CARD_TYPE"/>
+ <result property="cardNumber" column="ORD_CARD_NUMBER"/>
+ <result property="street" column="ORD_STREET"/>
+ <result property="city" column="ORD_CITY"/>
+ <result property="province" column="ORD_PROVINCE"/>
+ <result property="postalCode" column="ORD_POSTAL_CODE"/>
+ <result property="favouriteLineItem.id" column="LIN_ID"/>
+ <result property="favouriteLineItem.orderId" column="LIN_ORD_ID"/>
+ <result property="favouriteLineItem.itemCode" column="LIN_ITM_CODE"/>
+ <result property="favouriteLineItem.quantity" column="LIN_QUANTITY"/>
+ <result property="favouriteLineItem.price" column="LIN_PRICE"/>
+ </resultMap>
+
+ <select id="getOrderJoinedFavourite"
+ parameterClass="java.lang.Integer"
+ resultMap="order-joined-favourite">
+ select * from ORDERS, LINE_ITEM
+ where ORD_ID = LIN_ORD_ID
+ and ORD_FAVOURITE_LINE = LIN_ID
+ and ORD_ID = #value#
+ </select>
+
+ <select id="getOrderLiteByColumnName"
+ parameterClass="java.lang.Integer"
+ resultMap="lite-order-result-by-name">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithFavouriteLineItem"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-favourite-line-item">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithDynFavouriteLineItem"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-dyn-favourite-line-item">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderAsMap"
+ parameterClass="java.lang.Integer"
+ resultMap="lite-order-map-result">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderLiteByColumnIndex"
+ parameterClass="java.lang.Integer"
+ resultMap="lite-order-result-by-index">
+ select
+ ORD_ID,
+ ORD_DATE,
+ ORD_CARD_EXPIRY,
+ ORD_CARD_TYPE,
+ ORD_CARD_NUMBER,
+ ORD_STREET,
+ ORD_CITY,
+ ORD_PROVINCE,
+ ORD_POSTAL_CODE
+ from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithAccount"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-account-result">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithTypes"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-types-result" cacheModel="order-cache">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithLineItems"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-lines-result">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithLineItemArray"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-lines-array">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+ <select id="getOrderWithLineItemsCollection"
+ parameterClass="java.lang.Integer"
+ resultMap="order-with-collection-result">
+ select * from ORDERS where ORD_ID = #value#
+ </select>
+
+
+ <select id="getAllCreditCardNumbersFromOrders"
+ resultMap="credit-card-result">
+ select distinct ORD_CARD_NUMBER from ORDERS
+ order by ORD_CARD_NUMBER
+ </select>
+
+ <select id="getAllOrdersWithNestedResultMaps" resultMap="orderResultWithNestedMaps">
+ select o.*, a.*, l.*
+ from Orders o join Account a on o.ord_acc_id = a.acc_id
+ join Line_Item l on l.lin_ord_id = o.ord_id
+ order by o.ord_id
+ </select>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/PrivateBook.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/PrivateBook.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/PrivateBook.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/PrivateBook.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap namespace="Book">
+
+ <select id="getPrivateBooks" resultClass="testdomain.PrivateBook">
+ select
+ DOCUMENT_ID as id,
+ DOCUMENT_TITLE as title,
+ DOCUMENT_TYPE as type,
+ DOCUMENT_PAGENUMBER as pages
+ from DOCUMENTS
+ where DOCUMENT_TYPE = 'BOOK'
+ </select>
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/RepeatingGroupMapping.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/RepeatingGroupMapping.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/RepeatingGroupMapping.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/RepeatingGroupMapping.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <resultMap id="categoryResult" class="testdomain.Category" groupBy="categoryId">
+ <result property="categoryId" column="catid"/>
+ <result property="name" column="catname"/>
+ <result property="description" column="catdescn"/>
+ <result property="productList" resultMap="productResult"/>
+ </resultMap>
+
+ <resultMap id="categoryResultExtended" class="testdomain.Category" extends="categoryResult">
+ <result property="name" column="catname"/>
+ </resultMap>
+
+ <resultMap id="productResult" class="testdomain.Product" groupBy="productId">
+ <result property="productId" column="productid"/>
+ <result property="categoryId" column="category"/>
+ <result property="name" column="prodname"/>
+ <result property="description" column="proddescn"/>
+ <result property="itemList" resultMap="itemResult"/>
+ </resultMap>
+
+ <resultMap id="itemResult" class="testdomain.Item">
+ <result property="itemId" column="itemid"/>
+ <result property="productId" column="productid"/>
+ <result property="listPrice" column="listprice"/>
+ <result property="unitCost" column="unitcost"/>
+ <result property="supplierId" column="supplier"/>
+ <result property="status" column="status"/>
+ <result property="attribute1" column="attr1"/>
+ <result property="quantity" column="qty"/>
+ </resultMap>
+
+ <resultMap id="categoryResultJIRA250" class="testdomain.Category" groupBy="categoryId">
+ <result property="categoryId" column="catid"/>
+ <result property="name" column="catname"/>
+ <result property="description" column="catdescn"/>
+ <result property="productList" resultMap="productResultJIRA250"/>
+ </resultMap>
+
+ <resultMap id="productResultJIRA250" class="testdomain.Product" groupBy="productId">
+ <result property="productId" column="productid"/>
+ <result property="categoryId" column="category"/>
+ <result property="name" column="prodname"/>
+ <result property="description" column="proddescn"/>
+ </resultMap>
+
+ <select id="getAllCategories" resultMap="categoryResult">
+ select
+ c.catid, c.name as catname, c.descn as catdescn,
+ p.productid, p.category, p.name as prodname,
+ p.descn as proddescn, i.itemid, i.productid,
+ i.listprice, i.unitcost, i.supplier, i.status,
+ i.attr1, i.attr2, i.attr3, i.attr4, i.attr5,
+ v.itemid, v.qty
+ from category c, product p, item i, inventory v
+ where c.catid = p.category
+ and p.productid = i.productid
+ and i.itemid = v.itemid
+ </select>
+
+ <select id="getAllCategoriesExtended" resultMap="categoryResultExtended">
+ select
+ c.catid, c.name as catname, c.descn as catdescn,
+ p.productid, p.category, p.name as prodname,
+ p.descn as proddescn, i.itemid, i.productid,
+ i.listprice, i.unitcost, i.supplier, i.status,
+ i.attr1, i.attr2, i.attr3, i.attr4, i.attr5,
+ v.itemid, v.qty
+ from category c, product p, item i, inventory v
+ where c.catid = p.category
+ and p.productid = i.productid
+ and i.itemid = v.itemid
+ </select>
+
+ <select id="getFish" resultMap="categoryResult">
+ select
+ c.catid, c.name as catname, c.descn as catdescn,
+ p.productid, p.category, p.name as prodname,
+ p.descn as proddescn, i.itemid, i.productid,
+ i.listprice, i.unitcost, i.supplier, i.status,
+ i.attr1, i.attr2, i.attr3, i.attr4, i.attr5,
+ v.itemid, v.qty
+ from category c, product p, item i, inventory v
+ where c.catid = p.category
+ and p.productid = i.productid
+ and i.itemid = v.itemid
+ and c.catid = 'FISH'
+ </select>
+
+ <select id="getAllProductCategoriesJIRA250" resultMap="categoryResultJIRA250">
+ select
+ c.catid, c.name as catname, c.descn as catdescn,
+ null as productid, null as category, null as prodname,
+ null as proddescn
+ from category c
+ </select>
+
+</sqlMap>
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/ResultObjectFactoryStatements.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/ResultObjectFactoryStatements.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/ResultObjectFactoryStatements.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/ResultObjectFactoryStatements.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+<sqlMap namespace="ResultObjectFactoryStatements">
+
+ <resultMap id="itemResultROF" class="testdomain.IItem">
+ <result column="itemid" property="itemId"/>
+ <result column="productid" property="productId"/>
+ <result column="listprice" property="listPrice"/>
+ <result column="unitcost" property="unitCost"/>
+ <result column="status" property="status"/>
+ <result column="attr1" property="attribute1"/>
+ <result column="attr2" property="attribute2"/>
+ <result column="attr3" property="attribute3"/>
+ <result column="attr4" property="attribute4"/>
+ <result column="attr5" property="attribute5"/>
+ <result column="{supplierId=supplier}" property="supplier" select="getSupplierByIdROF"/>
+ </resultMap>
+
+ <resultMap id="supplierResultROF" class="testdomain.ISupplier">
+ <result column="suppid" property="supplierId"/>
+ <result column="name" property="name"/>
+ <result column="status" property="status"/>
+ <result column="addr1" property="addressLine1"/>
+ <result column="addr2" property="addressLine1"/>
+ <result column="city" property="city"/>
+ <result column="state" property="state"/>
+ <result column="zip" property="zip"/>
+ <result column="phone" property="phone"/>
+ </resultMap>
+
+ <select id="getAllItemsROF" resultMap="itemResultROF">
+ select *
+ from item
+ </select>
+
+ <select id="getSupplierByIdROF" resultMap="supplierResultROF" parameterClass="testdomain.ISupplierKey">
+ select *
+ from supplier
+ where suppid = #supplierId#
+ </select>
+</sqlMap>
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.properties?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.properties (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.properties Thu Aug 7 16:21:46 2008
@@ -0,0 +1,7 @@
+driver=org.hsqldb.jdbcDriver
+url=jdbc:hsqldb:.
+username=sa
+password=
+
+SqlMapPath=com/ibatis/sqlmap/maps
+dataSourceType=SIMPLE
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMapConfig
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
+
+<sqlMapConfig>
+
+ <properties resource="com/ibatis/sqlmap/maps/SqlMapConfig.properties"/>
+
+ <!-- settings
+ add these to test bug 976614
+ enhancementEnabled="false"
+ lazyLoadingEnabled="false"
+ -->
+
+ <settings
+ cacheModelsEnabled="true"
+ enhancementEnabled="false"
+ lazyLoadingEnabled="true"
+ statementCachingEnabled="false"
+ useStatementNamespaces="false"
+ />
+
+ <typeAlias alias="order" type="testdomain.Order"/>
+ <typeAlias alias="OuiNonBool" type="com.ibatis.sqlmap.extensions.PirateTypeHandlerCallback"/>
+
+ <typeHandler javaType="boolean" jdbcType="VARCHAR" callback="OuiNonBool"/>
+
+ <transactionManager type="JDBC" commitRequired="false">
+ <dataSource type="${dataSourceType}">
+ <property name="JDBC.Driver" value="${driver}"/>
+ <property name="JDBC.ConnectionURL" value="${url}"/>
+ <property name="JDBC.Username" value="${username}"/>
+ <property name="JDBC.Password" value="${password}"/>
+ <property name="JDBC.DefaultAutoCommit" value="true"/>
+ <property name="Pool.MaximumActiveConnections" value="10"/>
+ <property name="Pool.MaximumIdleConnections" value="5"/>
+ <property name="Pool.MaximumCheckoutTime" value="120000"/>
+ <property name="Pool.TimeToWait" value="500"/>
+ <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
+ <property name="Pool.PingEnabled" value="false"/>
+ <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
+ <property name="Pool.QuietMode" value="true"/>
+ </dataSource>
+ </transactionManager>
+
+ <sqlMap resource="${SqlMapPath}/Account.xml"/>
+ <sqlMap resource="${SqlMapPath}/DynamicAccount.xml"/>
+ <sqlMap resource="${SqlMapPath}/Order.xml"/>
+ <sqlMap resource="${SqlMapPath}/LineItem.xml"/>
+ <sqlMap resource="${SqlMapPath}/OracleProc.xml"/>
+ <sqlMap resource="${SqlMapPath}/Complex.xml"/>
+ <sqlMap resource="${SqlMapPath}/XmlStatements.xml"/>
+ <sqlMap resource="${SqlMapPath}/DomStatements.xml"/>
+ <sqlMap resource="${SqlMapPath}/RepeatingGroupMapping.xml"/>
+ <sqlMap resource="${SqlMapPath}/Documents.xml"/>
+ <sqlMap resource="${SqlMapPath}/Jira.xml"/>
+ <sqlMap resource="${SqlMapPath}/NestedIterateStatements.xml"/>
+ <sqlMap resource="${SqlMapPath}/PrivateBook.xml"/>
+
+</sqlMapConfig>
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig_rof.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig_rof.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig_rof.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/SqlMapConfig_rof.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMapConfig
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
+
+<sqlMapConfig>
+
+ <properties resource="com/ibatis/sqlmap/maps/SqlMapConfig.properties"/>
+
+ <settings
+ cacheModelsEnabled="true"
+ enhancementEnabled="false"
+ lazyLoadingEnabled="true"
+ useStatementNamespaces="false"
+ />
+
+ <resultObjectFactory type="com.ibatis.sqlmap.ResultObjectFactoryImpl">
+ <property name="someProperty" value="someValue"/>
+ </resultObjectFactory>
+
+ <typeAlias alias="order" type="testdomain.Order"/>
+ <typeAlias alias="OuiNonBool" type="com.ibatis.sqlmap.extensions.PirateTypeHandlerCallback"/>
+
+ <typeHandler javaType="boolean" jdbcType="VARCHAR" callback="OuiNonBool"/>
+
+ <transactionManager type="JDBC" commitRequired="false">
+ <dataSource type="${dataSourceType}">
+ <property name="JDBC.Driver" value="${driver}"/>
+ <property name="JDBC.ConnectionURL" value="${url}"/>
+ <property name="JDBC.Username" value="${username}"/>
+ <property name="JDBC.Password" value="${password}"/>
+ <property name="JDBC.DefaultAutoCommit" value="true"/>
+ <property name="Pool.MaximumActiveConnections" value="10"/>
+ <property name="Pool.MaximumIdleConnections" value="5"/>
+ <property name="Pool.MaximumCheckoutTime" value="120000"/>
+ <property name="Pool.TimeToWait" value="500"/>
+ <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
+ <property name="Pool.PingEnabled" value="false"/>
+ <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
+ <property name="Pool.QuietMode" value="true"/>
+ </dataSource>
+ </transactionManager>
+
+ <sqlMap resource="${SqlMapPath}/ResultObjectFactoryStatements.xml"/>
+
+</sqlMapConfig>
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/XmlStatements.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/XmlStatements.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/XmlStatements.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/maps/XmlStatements.xml Thu Aug 7 16:21:46 2008
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+ PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
+ "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+
+<sqlMap>
+
+ <parameterMap id="xml-parameter-map" class="map">
+ <parameter property="id"/>
+ </parameterMap>
+
+ <resultMap id="xml-account-result" class="hashmap">
+ <result property="id" column="ACC_ID"/>
+ <result property="firstName" column="ACC_FIRST_NAME"/>
+ <result property="lastName" column="ACC_LAST_NAME"/>
+ <result property="emailAddress" column="ACC_EMAIL"/>
+ <result property="account" column="{id=ACC_ID}" select="getAccountXml"/>
+ </resultMap>
+
+ <resultMap id="xml-order-with-lines-result" class="hashmap" extends="lite-order-result-by-name">
+ <result property="lineItems" javaType="map" column="{value=ORD_ID}" select="getLineItemsForOrderXml"/>
+ </resultMap>
+
+ <select id="getAccountXmlExternalMaps"
+ parameterMap="xml-parameter-map"
+ resultMap="xml-account-result">
+ select
+ ACC_ID,
+ ACC_FIRST_NAME,
+ ACC_LAST_NAME,
+ ACC_EMAIL
+ from ACCOUNT
+ where ACC_ID = ?
+ </select>
+
+ <select id="getAccountXml"
+ parameterClass="map"
+ resultClass="hashmap">
+ select
+ ACC_ID as id,
+ ACC_FIRST_NAME as firstName,
+ ACC_LAST_NAME as lastName,
+ ACC_EMAIL as emailAddress
+ from ACCOUNT
+ where ACC_ID = #id#
+ </select>
+
+ <select id="getLineItemsForOrderXml"
+ parameterClass="map"
+ resultClass="hashmap">
+ select
+ LIN_ID as id,
+ LIN_ORD_ID as orderId,
+ LIN_ITM_CODE as itemCode,
+ LIN_QUANTITY as quantity,
+ LIN_PRICE as price
+ from LINE_ITEM where LIN_ORD_ID = #value#
+ </select>
+
+ <select id="getOrderXml"
+ parameterClass="map"
+ resultMap="xml-order-with-lines-result">
+ select * from ORDERS where ORD_ID = #id#
+ </select>
+
+
+</sqlMap>
\ No newline at end of file
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/proc/DerbyProcs.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/proc/DerbyProcs.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/proc/DerbyProcs.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/proc/DerbyProcs.java Thu Aug 7 16:21:46 2008
@@ -0,0 +1,19 @@
+package com.ibatis.sqlmap.proc;
+
+import java.sql.*;
+
+public class DerbyProcs {
+ public static void selectRows(int p1, int p2, int p3, int p4, ResultSet[] rs1, ResultSet[] rs2) throws SQLException {
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ PreparedStatement ps1 = conn.prepareStatement("select * from account where acc_id in (?,?)");
+ ps1.setInt(1, p1);
+ ps1.setInt(2, p2);
+ rs1[0] = ps1.executeQuery();
+ PreparedStatement ps2 = conn.prepareStatement("select * from account where acc_id in (?,?)");
+ ps2.setInt(1, p3);
+ ps2.setInt(2, p4);
+ rs2[0] = ps2.executeQuery();
+ conn.close();
+ }
+
+}
\ No newline at end of file