You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by bg...@apache.org on 2005/04/19 05:43:07 UTC

svn commit: r161836 - in incubator/ibatis/trunk/java/mapper/mapper2: src/com/ibatis/common/beans/GenericProbe.java test/com/ibatis/sqlmap/DynamicTest.java test/com/ibatis/sqlmap/IterateTest.java test/com/ibatis/sqlmap/maps/DynamicAccount.xml

Author: bgoodin
Date: Mon Apr 18 20:43:07 2005
New Revision: 161836

URL: http://svn.apache.org/viewcvs?view=rev&rev=161836
Log:
IBATIS 112 - set GenericProbe.getObject to look for an object that is a List. Added severl tests appended test names with "Literal"  for testing the $[]$ in various scenarios.

Modified:
    incubator/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/GenericProbe.java
    incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/DynamicTest.java
    incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/IterateTest.java
    incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/DynamicAccount.xml

Modified: incubator/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/GenericProbe.java
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/GenericProbe.java?view=diff&r1=161835&r2=161836
==============================================================================
--- incubator/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/GenericProbe.java (original)
+++ incubator/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/common/beans/GenericProbe.java Mon Apr 18 20:43:07 2005
@@ -15,6 +15,7 @@
  */
 package com.ibatis.common.beans;
 
+import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
@@ -33,7 +34,9 @@
 
   private static final BaseProbe BEAN_PROBE = new ComplexBeanProbe();
   private static final BaseProbe DOM_PROBE = new DomProbe();
-
+  private static final String START_INDEX = "[";
+  private static final String END_INDEX = "]";
+  
   protected GenericProbe() {
   }
 
@@ -48,6 +51,8 @@
   public Object getObject(Object object, String name) {
     if (object instanceof org.w3c.dom.Document) {
       return DOM_PROBE.getObject(object, name);
+    } else if (object instanceof List) {
+      return ((List)object).get(new Integer(name.substring(1,name.indexOf(END_INDEX))).intValue());
     } else {
       return BEAN_PROBE.getObject(object, name);
     }

Modified: incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/DynamicTest.java
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/DynamicTest.java?view=diff&r1=161835&r2=161836
==============================================================================
--- incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/DynamicTest.java (original)
+++ incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/DynamicTest.java Mon Apr 18 20:43:07 2005
@@ -148,6 +148,17 @@
     assertEquals(1, list.size());
   }
 
+  public void testComplexDynamicQueryLiteral() throws SQLException {
+    Account account = new Account();
+    account.setId(2);
+    account.setFirstName("Jim");
+    account.setLastName("Smith");
+    account.setEmailAddress("jim.smith@somewhere.com");
+    List list = sqlMap.queryForList("complexDynamicQueryByExampleLiteral", account);
+    assertAccount2((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+  
 // COMPLETE STATEMENT SUBSTITUTION
 
 // -- No longer supported.  Conflicted with and deemed less valuable than

Modified: incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/IterateTest.java
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/IterateTest.java?view=diff&r1=161835&r2=161836
==============================================================================
--- incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/IterateTest.java (original)
+++ incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/IterateTest.java Mon Apr 18 20:43:07 2005
@@ -24,6 +24,15 @@
     assertEquals(3, list.size());
   }
 
+  // Iterate
+  
+  public void testIterateLiteral() throws SQLException {
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+    List list = sqlMap.queryForList("dynamicIterateLiteral", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+
   public void testMultiIterate() throws SQLException {
     List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
     List list = sqlMap.queryForList("multiDynamicIterate", params);
@@ -31,6 +40,13 @@
     assertEquals(3, list.size());
   }
 
+  public void testMultiIterateLiteral() throws SQLException {
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+    List list = sqlMap.queryForList("multiDynamicIterateLiteral", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+  
   // ARRAY
 
   public void testArrayPropertyIterate() throws SQLException {
@@ -46,6 +62,15 @@
     account.setAge(4);
     account.setIds(new int[]{1, 2, 3});
     List list = sqlMap.queryForList("dynamicQueryByExample2", account);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+  
+  public void testArrayPropertyIterate2Literal() throws SQLException {
+    Account account = new Account();
+    account.setAge(4);
+    account.setIds(new int[]{1, 2, 3});
+    List list = sqlMap.queryForList("dynamicQueryByExample2Literal", account);
     assertAccount1((Account) list.get(0));
     assertEquals(3, list.size());
   }

Modified: incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/DynamicAccount.xml
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/DynamicAccount.xml?view=diff&r1=161835&r2=161836
==============================================================================
--- incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/DynamicAccount.xml (original)
+++ incubator/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/maps/DynamicAccount.xml Mon Apr 18 20:43:07 2005
@@ -155,6 +155,21 @@
     </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="multiDynamicIterate"
     parameterClass="list"
     resultClass="testdomain.Account">
@@ -174,6 +189,25 @@
     </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">
@@ -258,6 +292,48 @@
       <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>
@@ -299,7 +375,24 @@
         </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