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 [8/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/jpetstore/persistence/iface/AccountDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/AccountDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/AccountDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/AccountDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,15 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+import com.ibatis.jpetstore.domain.Account;
+
+public interface AccountDao {
+
+  Account getAccount(String username);
+
+  Account getAccount(String username, String password);
+
+  void insertAccount(Account account);
+
+  void updateAccount(Account account);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/CategoryDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/CategoryDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/CategoryDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/CategoryDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,13 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+import com.ibatis.jpetstore.domain.Category;
+
+import java.util.List;
+
+public interface CategoryDao {
+
+  List getCategoryList();
+
+  Category getCategory(String categoryId);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ItemDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ItemDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ItemDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ItemDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,16 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.jpetstore.domain.*;
+
+public interface ItemDao {
+
+  void updateAllQuantitiesFromOrder(Order order);
+
+  boolean isItemInStock(String itemId);
+
+  PaginatedList getItemListByProduct(String productId);
+
+  Item getItem(String itemId);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/OrderDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/OrderDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/OrderDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/OrderDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,14 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.jpetstore.domain.Order;
+
+public interface OrderDao {
+
+  PaginatedList getOrdersByUsername(String username);
+
+  Order getOrder(int orderId);
+
+  void insertOrder(Order order);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ProductDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ProductDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ProductDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/ProductDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,14 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.jpetstore.domain.Product;
+
+public interface ProductDao {
+
+  PaginatedList getProductListByCategory(String categoryId);
+
+  Product getProduct(String productId);
+
+  PaginatedList searchProductList(String keywords);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/SequenceDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/SequenceDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/SequenceDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/iface/SequenceDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,7 @@
+package com.ibatis.jpetstore.persistence.iface;
+
+public interface SequenceDao {
+
+  int getNextId(String name);
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/AccountSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/AccountSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/AccountSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/AccountSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,40 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.jpetstore.domain.Account;
+import com.ibatis.jpetstore.persistence.iface.AccountDao;
+
+public class AccountSqlMapDao extends BaseSqlMapDao implements AccountDao {
+
+  public AccountSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  public Account getAccount(String username) {
+    return (Account) queryForObject("getAccountByUsername", username);
+  }
+
+  public Account getAccount(String username, String password) {
+    Account account = new Account();
+    account.setUsername(username);
+    account.setPassword(password);
+    return (Account) queryForObject("getAccountByUsernameAndPassword", account);
+  }
+
+  public void insertAccount(Account account) {
+    update("insertAccount", account);
+    update("insertProfile", account);
+    update("insertSignon", account);
+  }
+
+  public void updateAccount(Account account) {
+    update("updateAccount", account);
+    update("updateProfile", account);
+
+    if (account.getPassword() != null && account.getPassword().length() > 0) {
+      update("updateSignon", account);
+    }
+  }
+
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/BaseSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/BaseSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/BaseSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/BaseSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,14 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.dao.client.template.SqlMapDaoTemplate;
+
+public class BaseSqlMapDao extends SqlMapDaoTemplate {
+
+  protected static final int PAGE_SIZE = 4;
+
+  public BaseSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/CategorySqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/CategorySqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/CategorySqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/CategorySqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,23 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.jpetstore.domain.Category;
+import com.ibatis.jpetstore.persistence.iface.CategoryDao;
+
+import java.util.List;
+
+public class CategorySqlMapDao extends BaseSqlMapDao implements CategoryDao {
+
+  public CategorySqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  public List getCategoryList() {
+    return queryForList("getCategoryList", null);
+  }
+
+  public Category getCategory(String categoryId) {
+    return (Category) queryForObject("getCategory", categoryId);
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ItemSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ItemSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ItemSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ItemSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,44 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.jpetstore.domain.*;
+import com.ibatis.jpetstore.persistence.iface.ItemDao;
+
+import java.util.*;
+
+public class ItemSqlMapDao extends BaseSqlMapDao implements ItemDao {
+
+  public ItemSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  public void updateAllQuantitiesFromOrder(Order order) {
+    for (int i = 0; i < order.getLineItems().size(); i++) {
+      LineItem lineItem = (LineItem) order.getLineItems().get(i);
+      String itemId = lineItem.getItemId();
+      Integer increment = new Integer(lineItem.getQuantity());
+      Map param = new HashMap(2);
+      param.put("itemId", itemId);
+      param.put("increment", increment);
+      update("updateInventoryQuantity", param);
+    }
+  }
+
+  public boolean isItemInStock(String itemId) {
+    Integer i = (Integer) queryForObject("getInventoryQuantity", itemId);
+    return (i != null && i.intValue() > 0);
+  }
+
+  public PaginatedList getItemListByProduct(String productId) {
+    return queryForPaginatedList("getItemListByProduct", productId, PAGE_SIZE);
+  }
+
+  public Item getItem(String itemId) {
+    Integer i = (Integer) queryForObject("getInventoryQuantity", itemId);
+    Item item = (Item) queryForObject("getItem", itemId);
+    item.setQuantity(i.intValue());
+    return item;
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/OrderSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/OrderSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/OrderSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/OrderSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,36 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.jpetstore.domain.*;
+import com.ibatis.jpetstore.persistence.iface.OrderDao;
+
+public class OrderSqlMapDao extends BaseSqlMapDao implements OrderDao {
+
+  public OrderSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  public PaginatedList getOrdersByUsername(String username) {
+    return queryForPaginatedList("getOrdersByUsername", username, 10);
+  }
+
+  public Order getOrder(int orderId) {
+    Order order = null;
+    Object parameterObject = new Integer(orderId);
+    order = (Order) queryForObject("getOrder", parameterObject);
+    order.setLineItems(queryForList("getLineItemsByOrderId", new Integer(order.getOrderId())));
+    return order;
+  }
+
+  public void insertOrder(Order order) {
+    insert("insertOrder", order);
+    insert("insertOrderStatus", order);
+    for (int i = 0; i < order.getLineItems().size(); i++) {
+      LineItem lineItem = (LineItem) order.getLineItems().get(i);
+      lineItem.setOrderId(order.getOrderId());
+      insert("insertLineItem", lineItem);
+    }
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ProductSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ProductSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ProductSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/ProductSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,46 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.common.util.PaginatedList;
+import com.ibatis.dao.client.DaoManager;
+import com.ibatis.jpetstore.domain.Product;
+import com.ibatis.jpetstore.persistence.iface.ProductDao;
+
+import java.util.*;
+
+public class ProductSqlMapDao extends BaseSqlMapDao implements ProductDao {
+
+  public ProductSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  public PaginatedList getProductListByCategory(String categoryId) {
+    return queryForPaginatedList("getProductListByCategory", categoryId, PAGE_SIZE);
+  }
+
+  public Product getProduct(String productId) {
+    return (Product) queryForObject("getProduct", productId);
+  }
+
+  public PaginatedList searchProductList(String keywords) {
+    Object parameterObject = new ProductSearch(keywords);
+    return queryForPaginatedList("searchProductList", parameterObject, PAGE_SIZE);
+  }
+
+  /* Inner Classes */
+
+  public static class ProductSearch {
+    private List keywordList = new ArrayList();
+
+    public ProductSearch(String keywords) {
+      StringTokenizer splitter = new StringTokenizer(keywords, " ", false);
+      while (splitter.hasMoreTokens()) {
+        keywordList.add("%" + splitter.nextToken() + "%");
+      }
+    }
+
+    public List getKeywordList() {
+      return keywordList;
+    }
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/SequenceSqlMapDao.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/SequenceSqlMapDao.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/SequenceSqlMapDao.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/SequenceSqlMapDao.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,36 @@
+package com.ibatis.jpetstore.persistence.sqlmapdao;
+
+import com.ibatis.dao.client.*;
+import com.ibatis.jpetstore.domain.Sequence;
+import com.ibatis.jpetstore.persistence.iface.SequenceDao;
+
+public class SequenceSqlMapDao extends BaseSqlMapDao implements SequenceDao {
+
+  public SequenceSqlMapDao(DaoManager daoManager) {
+    super(daoManager);
+  }
+
+  /**
+   * This is a generic sequence ID generator that is based on a database
+   * table called 'SEQUENCE', which contains two columns (NAME, NEXTID).
+   * <p/>
+   * This approach should work with any database.
+   *
+   * @param name The name of the sequence.
+   * @return The Next ID
+   * @
+   */
+  public synchronized int getNextId(String name) {
+    Sequence sequence = new Sequence(name, -1);
+
+    sequence = (Sequence) queryForObject("getSequence", sequence);
+    if (sequence == null) {
+      throw new DaoException("Error: A null sequence was returned from the database (could not get next " + name + " sequence).");
+    }
+    Object parameterObject = new Sequence(name, sequence.getNextId() + 1);
+    update("updateSequence", parameterObject);
+
+    return sequence.getNextId();
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,111 @@
+<?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">
+
+  <typeAlias alias="account" type="com.ibatis.jpetstore.domain.Account"/>
+
+  <select id="getAccountByUsername" resultClass="account" parameterClass="string">
+    SELECT
+    SIGNON.USERNAME,
+    ACCOUNT.EMAIL,
+    ACCOUNT.FIRSTNAME,
+    ACCOUNT.LASTNAME,
+    ACCOUNT.STATUS,
+    ACCOUNT.ADDR1 AS address1,
+    ACCOUNT.ADDR2 AS address2,
+    ACCOUNT.CITY,
+    ACCOUNT.STATE,
+    ACCOUNT.ZIP,
+    ACCOUNT.COUNTRY,
+    ACCOUNT.PHONE,
+    PROFILE.LANGPREF AS languagePreference,
+    PROFILE.FAVCATEGORY AS favouriteCategoryId,
+    PROFILE.MYLISTOPT AS listOption,
+    PROFILE.BANNEROPT AS bannerOption,
+    BANNERDATA.BANNERNAME
+    FROM ACCOUNT, PROFILE, SIGNON, BANNERDATA
+    WHERE ACCOUNT.USERID = #username#
+    AND SIGNON.USERNAME = ACCOUNT.USERID
+    AND PROFILE.USERID = ACCOUNT.USERID
+    AND PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY
+  </select>
+
+  <select id="getAccountByUsernameAndPassword" resultClass="account" parameterClass="account">
+    SELECT
+    SIGNON.USERNAME,
+    ACCOUNT.EMAIL,
+    ACCOUNT.FIRSTNAME,
+    ACCOUNT.LASTNAME,
+    ACCOUNT.STATUS,
+    ACCOUNT.ADDR1 AS address1,
+    ACCOUNT.ADDR2 AS address2,
+    ACCOUNT.CITY,
+    ACCOUNT.STATE,
+    ACCOUNT.ZIP,
+    ACCOUNT.COUNTRY,
+    ACCOUNT.PHONE,
+    PROFILE.LANGPREF AS languagePreference,
+    PROFILE.FAVCATEGORY AS favouriteCategoryId,
+    PROFILE.MYLISTOPT AS listOption,
+    PROFILE.BANNEROPT AS bannerOption,
+    BANNERDATA.BANNERNAME
+    FROM ACCOUNT, PROFILE, SIGNON, BANNERDATA
+    WHERE ACCOUNT.USERID = #username#
+    AND SIGNON.PASSWORD = #password#
+    AND SIGNON.USERNAME = ACCOUNT.USERID
+    AND PROFILE.USERID = ACCOUNT.USERID
+    AND PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY
+  </select>
+
+  <update id="updateAccount" parameterClass="account">
+    UPDATE ACCOUNT SET
+    EMAIL = #email#,
+    FIRSTNAME = #firstName#,
+    LASTNAME = #lastName#,
+    STATUS = #status#,
+    ADDR1 = #address1#,
+    ADDR2 = #address2:VARCHAR#,
+    CITY = #city#,
+    STATE = #state#,
+    ZIP = #zip#,
+    COUNTRY = #country#,
+    PHONE = #phone#
+    WHERE USERID = #username#
+  </update>
+
+  <insert id="insertAccount" parameterClass="account">
+    INSERT INTO ACCOUNT
+    (EMAIL, FIRSTNAME, LASTNAME, STATUS, ADDR1, ADDR2, CITY, STATE, ZIP, COUNTRY, PHONE, USERID)
+    VALUES
+    (#email#, #firstName#, #lastName#, #status#, #address1#, #address2:VARCHAR#, #city#, #state#, #zip#, #country#,
+    #phone#, #username#)
+  </insert>
+
+  <update id="updateProfile" parameterClass="account">
+    UPDATE PROFILE SET
+    LANGPREF = #languagePreference#,
+    FAVCATEGORY = #favouriteCategoryId#,
+    MYLISTOPT = #listOption#,
+    BANNEROPT = #bannerOption#
+    WHERE USERID = #username#
+  </update>
+
+  <insert id="insertProfile" parameterClass="account">
+    INSERT INTO PROFILE (LANGPREF, FAVCATEGORY, MYLISTOPT, BANNEROPT, USERID)
+    VALUES (#languagePreference#, #favouriteCategoryId#, #listOption#, #bannerOption#, #username#)
+  </insert>
+
+  <update id="updateSignon" parameterClass="account">
+    UPDATE SIGNON SET PASSWORD = #password#
+    WHERE USERNAME = #username#
+  </update>
+
+  <insert id="insertSignon" parameterClass="account">
+    INSERT INTO SIGNON (PASSWORD,USERNAME)
+    VALUES (#password#, #username#)
+  </insert>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,32 @@
+<?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="Category">
+
+  <typeAlias alias="category" type="com.ibatis.jpetstore.domain.Category"/>
+
+  <cacheModel id="categoryCache" type="LRU">
+    <flushInterval hours="24"/>
+    <property name="size" value="100"/>
+  </cacheModel>
+
+  <select id="getCategory" resultClass="category" parameterClass="string" cacheModel="categoryCache">
+    SELECT
+    CATID AS categoryId,
+    NAME,
+    DESCN AS description
+    FROM CATEGORY
+    WHERE CATID = #categoryId#
+  </select>
+
+  <select id="getCategoryList" resultClass="category" cacheModel="categoryCache">
+    SELECT
+    CATID AS categoryId,
+    NAME,
+    DESCN AS description
+    FROM CATEGORY
+  </select>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Item.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Item.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Item.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Item.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,77 @@
+<?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="Item">
+
+  <typeAlias alias="item" type="com.ibatis.jpetstore.domain.Item"/>
+
+  <cacheModel id="itemCache" type="LRU">
+    <flushInterval hours="24"/>
+    <property name="size" value="100"/>
+  </cacheModel>
+
+  <cacheModel id="quantityCache" type="LRU">
+    <flushInterval hours="24"/>
+    <flushOnExecute statement="updateInventoryQuantity"/>
+    <property name="size" value="100"/>
+  </cacheModel>
+
+  <select id="getItemListByProduct" resultClass="item" parameterClass="string" cacheModel="itemCache">
+    SELECT
+    I.ITEMID,
+    LISTPRICE,
+    UNITCOST,
+    SUPPLIER AS supplierId,
+    I.PRODUCTID AS "product.productId",
+    NAME AS "product.name",
+    DESCN AS "product.description",
+    CATEGORY AS "product.categoryId",
+    STATUS,
+    ATTR1 AS attribute1,
+    ATTR2 AS attribute2,
+    ATTR3 AS attribute3,
+    ATTR4 AS attribute4,
+    ATTR5 AS attribute5
+    FROM ITEM I, PRODUCT P
+    WHERE P.PRODUCTID = I.PRODUCTID
+    AND I.PRODUCTID = #value#
+  </select>
+
+  <select id="getItem" resultClass="item" parameterClass="string" cacheModel="quantityCache">
+    select
+    I.ITEMID,
+    LISTPRICE,
+    UNITCOST,
+    SUPPLIER AS supplierId,
+    I.PRODUCTID AS "product.productId",
+    NAME AS "product.name",
+    DESCN AS "product.description",
+    CATEGORY AS "product.categoryId",
+    STATUS,
+    ATTR1 AS attribute1,
+    ATTR2 AS attribute2,
+    ATTR3 AS attribute3,
+    ATTR4 AS attribute4,
+    ATTR5 AS attribute5,
+    QTY AS quantity
+    from ITEM I, INVENTORY V, PRODUCT P
+    where P.PRODUCTID = I.PRODUCTID
+    and I.ITEMID = V.ITEMID
+    and I.ITEMID = #value#
+  </select>
+
+  <select id="getInventoryQuantity" resultClass="int" parameterClass="string">
+    SELECT QTY AS value
+    FROM INVENTORY
+    WHERE ITEMID = #itemId#
+  </select>
+
+  <update id="updateInventoryQuantity" parameterClass="map">
+    UPDATE INVENTORY SET
+    QTY = QTY - #increment#
+    WHERE ITEMID = #itemId#
+  </update>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/LineItem.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/LineItem.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/LineItem.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/LineItem.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,26 @@
+<?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="LineItem">
+
+  <typeAlias alias="lineItem" type="com.ibatis.jpetstore.domain.LineItem"/>
+
+  <select id="getLineItemsByOrderId" resultClass="lineItem" parameterClass="int">
+    SELECT
+    ORDERID,
+    LINENUM AS lineNumber,
+    ITEMID,
+    QUANTITY,
+    UNITPRICE
+    FROM LINEITEM
+    WHERE ORDERID = #orderId#
+  </select>
+
+  <insert id="insertLineItem" parameterClass="lineItem">
+    INSERT INTO LINEITEM (ORDERID, LINENUM, ITEMID, QUANTITY, UNITPRICE)
+    VALUES (#orderId#, #lineNumber#, #itemId#, #quantity#, #unitPrice#)
+  </insert>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Order.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Order.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Order.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Order.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,93 @@
+<?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="Order">
+
+  <typeAlias alias="order" type="com.ibatis.jpetstore.domain.Order"/>
+
+  <statement id="getOrder" resultClass="order" parameterClass="int">
+    select
+    BILLADDR1 AS billAddress1,
+    BILLADDR2 AS billAddress2,
+    BILLCITY,
+    BILLCOUNTRY,
+    BILLSTATE,
+    BILLTOFIRSTNAME,
+    BILLTOLASTNAME,
+    BILLZIP,
+    SHIPADDR1 AS shipAddress1,
+    SHIPADDR2 AS shipAddress2,
+    SHIPCITY,
+    SHIPCOUNTRY,
+    SHIPSTATE,
+    SHIPTOFIRSTNAME,
+    SHIPTOLASTNAME,
+    SHIPZIP,
+    CARDTYPE,
+    COURIER,
+    CREDITCARD,
+    EXPRDATE AS expiryDate,
+    LOCALE,
+    ORDERDATE,
+    ORDERS.ORDERID,
+    TOTALPRICE,
+    USERID AS username,
+    STATUS
+    FROM ORDERS, ORDERSTATUS
+    WHERE ORDERS.ORDERID = #orderId#
+    AND ORDERS.ORDERID = ORDERSTATUS.ORDERID
+  </statement>
+
+  <select id="getOrdersByUsername" resultClass="order" parameterClass="string">
+    SELECT
+    BILLADDR1 AS billAddress1,
+    BILLADDR2 AS billAddress2,
+    BILLCITY,
+    BILLCOUNTRY,
+    BILLSTATE,
+    BILLTOFIRSTNAME,
+    BILLTOLASTNAME,
+    BILLZIP,
+    SHIPADDR1 AS shipAddress1,
+    SHIPADDR2 AS shipAddress2,
+    SHIPCITY,
+    SHIPCOUNTRY,
+    SHIPSTATE,
+    SHIPTOFIRSTNAME,
+    SHIPTOLASTNAME,
+    SHIPZIP,
+    CARDTYPE,
+    COURIER,
+    CREDITCARD,
+    EXPRDATE AS expiryDate,
+    LOCALE,
+    ORDERDATE,
+    ORDERS.ORDERID,
+    TOTALPRICE,
+    USERID AS username,
+    STATUS
+    FROM ORDERS, ORDERSTATUS
+    WHERE ORDERS.USERID = #value#
+    AND ORDERS.ORDERID = ORDERSTATUS.ORDERID
+    ORDER BY ORDERDATE
+  </select>
+
+  <insert id="insertOrder" parameterClass="order">
+    INSERT INTO ORDERS (ORDERID, USERID, ORDERDATE, SHIPADDR1, SHIPADDR2, SHIPCITY, SHIPSTATE,
+    SHIPZIP, SHIPCOUNTRY, BILLADDR1, BILLADDR2, BILLCITY, BILLSTATE, BILLZIP, BILLCOUNTRY,
+    COURIER, TOTALPRICE, BILLTOFIRSTNAME, BILLTOLASTNAME, SHIPTOFIRSTNAME, SHIPTOLASTNAME,
+    CREDITCARD, EXPRDATE, CARDTYPE, LOCALE)
+    VALUES(#orderId#, #username#, #orderDate#, #shipAddress1#, #shipAddress2:VARCHAR#, #shipCity#,
+    #shipState#, #shipZip#, #shipCountry#, #billAddress1#, #billAddress2:VARCHAR#, #billCity#,
+    #billState#, #billZip#, #billCountry#, #courier#, #totalPrice#, #billToFirstName#, #billToLastName#,
+    #shipToFirstName#, #shipToLastName#, #creditCard#, #expiryDate#, #cardType#, #locale#)
+  </insert>
+
+  <insert id="insertOrderStatus" parameterClass="order">
+    INSERT INTO ORDERSTATUS (ORDERID, LINENUM, TIMESTAMP, STATUS)
+    VALUES (#orderId:NUMERIC#, #orderId:NUMERIC#, #orderDate:TIMESTAMP#, #status:VARCHAR#)
+  </insert>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Product.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Product.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Product.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Product.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,49 @@
+<?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="Product">
+
+  <typeAlias alias="product" type="com.ibatis.jpetstore.domain.Product"/>
+
+  <cacheModel id="productCache" type="LRU">
+    <flushInterval hours="24"/>
+    <property name="size" value="100"/>
+  </cacheModel>
+
+  <select id="getProduct" resultClass="product" parameterClass="string" cacheModel="productCache">
+    SELECT
+    PRODUCTID,
+    NAME,
+    DESCN as description,
+    CATEGORY as categoryId
+    FROM PRODUCT
+    WHERE PRODUCTID = #productId#
+  </select>
+
+  <select id="getProductListByCategory" resultClass="product" parameterClass="string" cacheModel="productCache">
+    SELECT
+    PRODUCTID,
+    NAME,
+    DESCN as description,
+    CATEGORY as categoryId
+    FROM PRODUCT
+    WHERE CATEGORY = #value#
+  </select>
+
+  <select id="searchProductList" resultClass="product">
+    select
+    PRODUCTID,
+    NAME,
+    DESCN as description,
+    CATEGORY as categoryId
+    from PRODUCT
+    <dynamic prepend="WHERE">
+      <iterate property="keywordList" open="" close="" conjunction="OR">
+        lower(name) like #keywordList[]# OR lower(category) like #keywordList[]# OR lower(descn) like #keywordList[]#
+      </iterate>
+    </dynamic>
+  </select>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Sequence.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Sequence.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Sequence.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/Sequence.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,22 @@
+<?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="Sequence">
+
+  <typeAlias alias="sequence" type="com.ibatis.jpetstore.domain.Sequence"/>
+
+  <select id="getSequence" resultClass="sequence" parameterClass="sequence">
+    SELECT name, nextid
+    FROM SEQUENCE
+    WHERE NAME = #name#
+  </select>
+
+  <update id="updateSequence" parameterClass="sequence">
+    UPDATE SEQUENCE
+    SET NEXTID = #nextId#
+    WHERE NAME = #name#
+  </update>
+
+</sqlMap>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml Thu Aug  7 16:21:46 2008
@@ -0,0 +1,27 @@
+<?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="properties/database.properties"/>
+
+  <transactionManager type="JDBC">
+    <dataSource type="SIMPLE">
+      <property value="${driver}" name="JDBC.Driver"/>
+      <property value="${url}" name="JDBC.ConnectionURL"/>
+      <property value="${username}" name="JDBC.Username"/>
+      <property value="${password}" name="JDBC.Password"/>
+    </dataSource>
+  </transactionManager>
+
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Category.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Product.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Sequence.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/LineItem.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Order.xml"/>
+  <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Item.xml"/>
+
+</sqlMapConfig>

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BaseSqlMapTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BaseSqlMapTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BaseSqlMapTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BaseSqlMapTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,156 @@
+package com.ibatis.sqlmap;
+
+import com.ibatis.common.jdbc.ScriptRunner;
+import com.ibatis.common.resources.Resources;
+import com.ibatis.sqlmap.client.*;
+import junit.framework.TestCase;
+import testdomain.*;
+
+import javax.sql.DataSource;
+import java.io.Reader;
+import java.sql.Connection;
+import java.util.*;
+
+public class BaseSqlMapTest extends TestCase {
+
+  protected static SqlMapClient sqlMap;
+
+  protected static void initSqlMap(String configFile, Properties props) throws Exception {
+    Reader reader = Resources.getResourceAsReader(configFile);
+    sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader, props);
+    reader.close();
+  }
+
+  protected static void initScript(String script) throws Exception {
+    DataSource ds = sqlMap.getDataSource();
+
+    Connection conn = ds.getConnection();
+
+    Reader reader = Resources.getResourceAsReader(script);
+
+    ScriptRunner runner = new ScriptRunner(conn, false, false);
+    runner.setLogWriter(null);
+    runner.setErrorLogWriter(null);
+
+    runner.runScript(reader);
+    conn.commit();
+    conn.close();
+    reader.close();
+  }
+
+  protected Account newAccount6() {
+    Account account = new Account();
+    account.setId(6);
+    account.setFirstName("Jennifer");
+    account.setLastName("Begin");
+    account.setEmailAddress("no_email@provided.com");
+    account.setBannerOption(true);
+    account.setCartOption(true);
+    return account;
+  }
+
+  protected FieldAccount newFieldAccount6() {
+    FieldAccount account = new FieldAccount();
+    account.id(6);
+    account.firstName("Jennifer");
+    account.lastName("Begin");
+    account.emailAddress("no_email@provided.com");
+    return account;
+  }
+
+  protected void assertAccount1(Account account) {
+    assertNotNull(account);
+    assertEquals(1, account.getId());
+    assertEquals("Clinton", account.getFirstName());
+    assertEquals("Begin", account.getLastName());
+    assertEquals("clinton.begin@ibatis.com", account.getEmailAddress());
+  }
+
+  protected void assertAccount2(Account account) {
+    assertNotNull(account);
+    assertEquals(2, account.getId());
+    assertEquals("Jim", account.getFirstName());
+    assertEquals("Smith", account.getLastName());
+    assertEquals(account.getEmailAddress(), "jim.smith@somewhere.com");
+  }
+
+  protected void assertList(List list) {
+    assertEquals(2, list.size());
+  }
+
+  protected void assertAccount6(Account account) {
+    assertNotNull(account);
+    assertEquals(6, account.getId());
+    assertEquals("Jennifer", account.getFirstName());
+    assertEquals("Begin", account.getLastName());
+    assertEquals("no_email@provided.com", account.getEmailAddress());
+  }
+
+  protected void assertPrivateAccount6(PrivateAccount account) {
+    assertNotNull(account);
+    assertEquals(6, account.getId());
+    assertEquals("Jennifer", account.getFirstName());
+    assertEquals("Begin", account.getLastName());
+    assertEquals("no_email@provided.com", account.getEmailAddress());
+  }
+
+  protected void assertFieldAccount6(FieldAccount account) {
+    assertNotNull(account);
+    assertEquals(6, account.id());
+    assertEquals("Jennifer", account.firstName());
+    assertEquals("Begin", account.lastName());
+    assertEquals("no_email@provided.com", account.emailAddress());
+  }
+
+  protected void assertAccount1(Map account) {
+    Integer id = (Integer) account.get("id");
+    String firstName = (String) account.get("firstName");
+    String lastName = (String) account.get("lastName");
+    String emailAddress = (String) account.get("emailAddress");
+
+    if (id == null) {
+      id = (Integer) account.get("ID");
+      firstName = (String) account.get("FIRSTNAME");
+      lastName = (String) account.get("LASTNAME");
+      emailAddress = (String) account.get("EMAILADDRESS");
+    }
+
+    assertEquals(new Integer(1), id);
+    assertEquals("Clinton", firstName);
+    assertEquals("Begin", lastName);
+    assertEquals("clinton.begin@ibatis.com", emailAddress);
+  }
+
+  protected void assertOrder1(Order order) {
+    Calendar cal = new GregorianCalendar(2003, 1, 15, 8, 15, 00);
+
+    assertEquals(1, order.getId());
+    assertEquals(cal.getTime().getTime(), order.getDate().getTime());
+    assertEquals("VISA", order.getCardType());
+    assertEquals("999999999999", order.getCardNumber());
+    assertEquals("05/03", order.getCardExpiry());
+    assertEquals("11 This Street", order.getStreet());
+    assertEquals("Victoria", order.getCity());
+    assertEquals("BC", order.getProvince());
+    assertEquals("C4B 4F4", order.getPostalCode());
+  }
+
+  protected void assertOrder1(Map order) {
+    Calendar cal = new GregorianCalendar(2003, 1, 15, 8, 15, 00);
+
+    assertEquals(new Integer(1), order.get("id"));
+    assertEquals(cal.getTime().getTime(), ((Date) order.get("date")).getTime());
+    assertEquals("VISA", order.get("cardType"));
+    assertEquals("999999999999", order.get("cardNumber"));
+    assertEquals("05/03", order.get("cardExpiry"));
+    assertEquals("11 This Street", order.get("street"));
+    assertEquals("Victoria", order.get("city"));
+    assertEquals("BC", order.get("province"));
+    assertEquals("C4B 4F4", order.get("postalCode"));
+  }
+
+  public void testDummy() {
+    // just to avoid warnings when running all tests.
+  }
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BatchTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BatchTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BatchTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/BatchTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,373 @@
+package com.ibatis.sqlmap;
+
+import com.ibatis.sqlmap.engine.execution.BatchException;
+import org.apache.ibatis.executor.BatchResult;
+import testdomain.Account;
+
+import java.sql.*;
+import java.util.*;
+
+/**
+ * @author Jeff Butler
+ */
+public class BatchTest extends BaseSqlMapTest {
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+  }
+
+  public void testExecutebatchDetailed() {
+    List accountList1 = new ArrayList();
+    Account account = new Account();
+    account.setId(10);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(11);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(12);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(13);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(14);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    List accountList2 = new ArrayList();
+    account = new Account();
+    account.setId(15);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(16);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(17);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(18);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    try {
+      sqlMap.startTransaction();
+      sqlMap.startBatch();
+
+      // insert 5 accounts
+      for (int i = 0; i < accountList1.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList1.get(i));
+      }
+
+      // update 1 account
+      account = new Account();
+      account.setId(10);
+      account.setFirstName("barney");
+      account.setLastName("rubble");
+      account.setEmailAddress("barney.rubble@gmail.com");
+
+      sqlMap.update("updateAccountViaInlineParameters", account);
+
+      // insert 4 accounts
+      for (int i = 0; i < accountList2.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList2.get(i));
+      }
+
+      List results = sqlMap.executeBatchDetailed();
+      sqlMap.commitTransaction();
+
+      assertEquals(3, results.size());
+
+      BatchResult br = (BatchResult) results.get(0);
+      assertEquals(5, br.getUpdateCounts().length);
+
+      br = (BatchResult) results.get(1);
+      assertEquals(1, br.getUpdateCounts().length);
+
+      br = (BatchResult) results.get(2);
+      assertEquals(4, br.getUpdateCounts().length);
+
+    } catch (BatchException e) {
+      fail(e.getMessage());
+    } catch (SQLException e) {
+      fail(e.getMessage());
+    } finally {
+      try {
+        sqlMap.endTransaction();
+      } catch (SQLException e) {
+        fail(e.getMessage());
+      }
+    }
+  }
+
+  public void testExecutebatchDetailedWithError() {
+    List accountList1 = new ArrayList();
+    Account account = new Account();
+    account.setId(10);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(11);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(12);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(13);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(14);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    List accountList2 = new ArrayList();
+    account = new Account();
+    account.setId(15);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(16);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(17);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(18);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    try {
+      sqlMap.startTransaction();
+      sqlMap.startBatch();
+
+      // insert 5 accounts
+      for (int i = 0; i < accountList1.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList1.get(i));
+      }
+
+      // update 1 account
+      account = new Account();
+      account.setId(10);
+      account.setFirstName("barney");
+      account.setLastName("rubble");
+      account.setEmailAddress("barney.rubble@gmail.com");
+
+      sqlMap.update("updateAccountViaInlineParameters", account);
+
+      // insert another account
+      account = new Account();
+      account.setId(19);
+      account.setFirstName("fred");
+      account.setLastName("flintstone");
+      account.setEmailAddress("fred.flintstone@gmail.com");
+      sqlMap.insert("insertAccountViaInlineParameters", account);
+
+      // insert 1 account with all null values (this should cause an error when the batch is executed)
+      account = new Account();
+      sqlMap.insert("insertAccountViaInlineParameters", account);
+
+      // update 1 account
+      account = new Account();
+      account.setId(11);
+      account.setFirstName("barney");
+      account.setLastName("rubble");
+      account.setEmailAddress("barney.rubble@gmail.com");
+
+      sqlMap.update("updateAccountViaInlineParameters", account);
+
+      // insert 4 accounts
+      for (int i = 0; i < accountList2.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList2.get(i));
+      }
+
+      sqlMap.executeBatchDetailed();
+      fail("This statement should not get executed - we expect an SQLException");
+    } catch (BatchException e) {
+      // the first statement of the failing batch should have executed OK
+      BatchUpdateException bue = e.getBatchUpdateException();
+      assertEquals(1, bue.getUpdateCounts().length);
+
+      List results = e.getSuccessfulBatchResults();
+      assertEquals(2, results.size());
+      BatchResult br = (BatchResult) results.get(0);
+      assertEquals(5, br.getUpdateCounts().length);
+      br = (BatchResult) results.get(1);
+      assertEquals(1, br.getUpdateCounts().length);
+    } catch (SQLException e) {
+      fail(e.getMessage());
+    } finally {
+      try {
+        sqlMap.endTransaction();
+      } catch (SQLException e) {
+        fail(e.getMessage());
+      }
+    }
+  }
+
+  public void testExecutebatch() {
+    List accountList1 = new ArrayList();
+    Account account = new Account();
+    account.setId(10);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(11);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(12);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(13);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    account = new Account();
+    account.setId(14);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList1.add(account);
+
+    List accountList2 = new ArrayList();
+    account = new Account();
+    account.setId(15);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(16);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(17);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    account = new Account();
+    account.setId(18);
+    account.setFirstName("fred");
+    account.setLastName("flintstone");
+    account.setEmailAddress("fred.flintstone@gmail.com");
+    accountList2.add(account);
+
+    try {
+      sqlMap.startTransaction();
+      sqlMap.startBatch();
+
+      // insert 5 accounts
+      for (int i = 0; i < accountList1.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList1.get(i));
+      }
+
+      // update 1 account
+      account = new Account();
+      account.setId(10);
+      account.setFirstName("barney");
+      account.setLastName("rubble");
+      account.setEmailAddress("barney.rubble@gmail.com");
+
+      sqlMap.update("updateAccountViaInlineParameters", account);
+
+      // insert 4 accounts
+      for (int i = 0; i < accountList2.size(); i++) {
+        sqlMap.insert("insertAccountViaInlineParameters", accountList2.get(i));
+      }
+
+      int results = sqlMap.executeBatch();
+      sqlMap.commitTransaction();
+
+      assertEquals(10, results);
+    } catch (SQLException e) {
+      fail(e.getMessage());
+    } finally {
+      try {
+        sqlMap.endTransaction();
+      } catch (SQLException e) {
+        fail(e.getMessage());
+      }
+    }
+  }
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/CacheStatementTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/CacheStatementTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/CacheStatementTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/CacheStatementTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,286 @@
+package com.ibatis.sqlmap;
+
+import com.ibatis.sqlmap.client.*;
+import org.apache.ibatis.cache.CacheKey;
+import testdomain.Account;
+
+import java.sql.SQLException;
+import java.util.*;
+
+public class CacheStatementTest extends BaseSqlMapTest {
+
+  // SETUP & TEARDOWN
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+  }
+
+  protected void tearDown() throws Exception {
+  }
+
+  public void testMappedStatementQueryWithCache() throws SQLException {
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+
+    int firstId = System.identityHashCode(list);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+
+    int secondId = System.identityHashCode(list);
+
+    assertEquals(firstId, secondId);
+
+    Account account = (Account) list.get(1);
+    account.setEmailAddress("new.clinton@ibatis.com");
+    sqlMap.update("updateAccountViaInlineParameters", account);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+
+    int thirdId = System.identityHashCode(list);
+
+    assertTrue(firstId != thirdId);
+
+  }
+
+  public void testMappedStatementQueryWithCache2() throws SQLException {
+    // tests the new methods that don't require a parameter object
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+
+    int firstId = System.identityHashCode(list);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+
+    int secondId = System.identityHashCode(list);
+
+    assertEquals(firstId, secondId);
+
+    Account account = (Account) list.get(1);
+    account.setEmailAddress("new.clinton@ibatis.com");
+    sqlMap.update("updateAccountViaInlineParameters", account);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+
+    int thirdId = System.identityHashCode(list);
+
+    assertTrue(firstId != thirdId);
+
+  }
+
+  public void testFlushDataCache() throws SQLException {
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.flushDataCache();
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCache2() throws SQLException {
+    // tests the new methods that don't require a parameter object
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.flushDataCache();
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCacheOnExecute() throws SQLException {
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.update("updateAccountViaInlineParameters", list.get(0));
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCacheOnExecute2() throws SQLException {
+    // tests the new methods that don't require a parameter object
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.update("updateAccountViaInlineParameters", list.get(0));
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCacheOnExecuteInBatch() throws SQLException {
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.startTransaction();
+    sqlMap.update("updateAccountViaInlineParameters", list.get(0));
+    sqlMap.executeBatch();
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    sqlMap.endTransaction();
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCacheOnExecuteInBatch2() throws SQLException {
+    // tests the new methods that don't require a parameter object
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    sqlMap.startTransaction();
+    sqlMap.update("updateAccountViaInlineParameters", list.get(0));
+    sqlMap.executeBatch();
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap");
+    int thirdId = System.identityHashCode(list);
+    sqlMap.endTransaction();
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testFlushDataCacheOnExecuteInBatchWithTx() throws SQLException {
+    List list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int firstId = System.identityHashCode(list);
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int secondId = System.identityHashCode(list);
+    assertEquals(firstId, secondId);
+    try {
+      sqlMap.startTransaction();
+      sqlMap.startBatch();
+      sqlMap.update("updateAccountViaInlineParameters", list.get(0));
+      sqlMap.executeBatch();
+      sqlMap.commitTransaction();
+    } finally {
+      sqlMap.endTransaction();
+    }
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+    int thirdId = System.identityHashCode(list);
+    assertTrue(firstId != thirdId);
+  }
+
+  public void testMappedStatementQueryWithThreadedCache() throws SQLException {
+
+    Map results = new HashMap();
+
+    TestCacheThread.startThread(sqlMap, results, "getCachedAccountsViaResultMap");
+    Integer firstId = (Integer) results.get("id");
+
+    TestCacheThread.startThread(sqlMap, results, "getCachedAccountsViaResultMap");
+    Integer secondId = (Integer) results.get("id");
+
+    assertTrue(firstId.equals(secondId));
+
+    List list = (List) results.get("list");
+
+    Account account = (Account) list.get(1);
+    account.setEmailAddress("new.clinton@ibatis.com");
+    sqlMap.update("updateAccountViaInlineParameters", account);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+
+    int thirdId = System.identityHashCode(list);
+
+    assertTrue(firstId.intValue() != thirdId);
+
+  }
+
+  public void testMappedStatementQueryWithThreadedReadWriteCache() throws SQLException {
+
+    Map results = new HashMap();
+
+    TestCacheThread.startThread(sqlMap, results, "getRWCachedAccountsViaResultMap");
+    Integer firstId = (Integer) results.get("id");
+
+    TestCacheThread.startThread(sqlMap, results, "getRWCachedAccountsViaResultMap");
+    Integer secondId = (Integer) results.get("id");
+
+    assertFalse(firstId.equals(secondId));
+
+    List list = (List) results.get("list");
+
+    Account account = (Account) list.get(1);
+    account.setEmailAddress("new.clinton@ibatis.com");
+    sqlMap.update("updateAccountViaInlineParameters", account);
+
+    list = sqlMap.queryForList("getCachedAccountsViaResultMap", null);
+
+    int thirdId = System.identityHashCode(list);
+
+    assertTrue(firstId.intValue() != thirdId);
+
+  }
+
+  public void testCacheKeyWithSameHashcode() {
+    CacheKey key1 = new CacheKey();
+    CacheKey key2 = new CacheKey();
+
+    key1.update("HS1CS001");
+    key2.update("HS1D4001");
+
+    assertEquals("Expect same hashcode.", key1.hashCode(), key2.hashCode());
+    assertFalse("Expect not equal", key1.equals(key2));
+  }
+
+  public void testCacheKeyWithTwoParamsSameHashcode() {
+    CacheKey key1 = new CacheKey();
+    CacheKey key2 = new CacheKey();
+
+    key1.update("HS1CS001");
+    key1.update("HS1D4001");
+
+    key2.update("HS1D4001");
+    key2.update("HS1CS001");
+
+    assertEquals("Expect same hashcode.", key1.hashCode(), key2.hashCode());
+    assertFalse("Expect not equal", key1.equals(key2));
+  }
+
+  private static class TestCacheThread extends Thread {
+    private SqlMapClient sqlMap;
+    private Map results;
+    private String statementName;
+
+    public TestCacheThread(SqlMapClient sqlMap, Map results, String statementName) {
+      this.sqlMap = sqlMap;
+      this.results = results;
+      this.statementName = statementName;
+    }
+
+    public void run() {
+      try {
+        SqlMapSession session = sqlMap.openSession();
+        List list = session.queryForList(statementName, null);
+        int firstId = System.identityHashCode(list);
+        list = session.queryForList(statementName, null);
+        int secondId = System.identityHashCode(list);
+        //assertEquals(firstId, secondId);
+        results.put("id", new Integer(System.identityHashCode(list)));
+        results.put("list", list);
+        session.close();
+      } catch (SQLException e) {
+        throw new RuntimeException("Error.  Cause: " + e);
+      }
+    }
+
+    public static void startThread(SqlMapClient sqlMap, Map results, String statementName) {
+      Thread t = new TestCacheThread(sqlMap, results, statementName);
+      t.start();
+      try {
+        t.join();
+      } catch (InterruptedException e) {
+        throw new RuntimeException("Error.  Cause: " + e);
+      }
+    }
+  }
+
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ComplexTypeTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ComplexTypeTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ComplexTypeTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ComplexTypeTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,34 @@
+package com.ibatis.sqlmap;
+
+import testdomain.ComplexBean;
+
+import java.util.*;
+
+public class ComplexTypeTest extends BaseSqlMapTest {
+
+  // SETUP & TEARDOWN
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+    initScript("scripts/order-init.sql");
+    initScript("scripts/line_item-init.sql");
+  }
+
+  protected void tearDown() throws Exception {
+  }
+
+  public void testMapBeanMap() throws Exception {
+    Map map = new HashMap();
+    ComplexBean bean = new ComplexBean();
+    bean.setMap(new HashMap());
+    bean.getMap().put("id", new Integer(1));
+    map.put("bean", bean);
+
+    Integer id = (Integer) sqlMap.queryForObject("mapBeanMap", map);
+
+    assertEquals(id, bean.getMap().get("id"));
+  }
+
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DirectFieldMappingTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DirectFieldMappingTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DirectFieldMappingTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DirectFieldMappingTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,36 @@
+package com.ibatis.sqlmap;
+
+import testdomain.*;
+
+import java.sql.SQLException;
+
+public class DirectFieldMappingTest extends BaseSqlMapTest {
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+  }
+
+  public void testInsertAndSelectDirectToFields() throws SQLException {
+    FieldAccount account = newFieldAccount6();
+
+    sqlMap.insert("insertAccountFromFields", account);
+
+    account = (FieldAccount) sqlMap.queryForObject("getAccountToFields", new Integer(6));
+
+    assertFieldAccount6(account);
+    assertFieldAccount6(account.account());
+  }
+
+  public void testGetAccountWithPrivateConstructor() throws SQLException {
+    FieldAccount account = newFieldAccount6();
+
+    sqlMap.insert("insertAccountFromFields", account);
+
+    PrivateAccount pvt = (PrivateAccount) sqlMap.queryForObject("getAccountWithPrivateConstructor", new Integer(6));
+
+    assertPrivateAccount6(pvt);
+  }
+
+
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DiscriminatorTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DiscriminatorTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DiscriminatorTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DiscriminatorTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,75 @@
+package com.ibatis.sqlmap;
+
+import testdomain.*;
+
+import java.util.List;
+
+public class DiscriminatorTest extends BaseSqlMapTest {
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/docs-init.sql");
+  }
+
+  public void testDiscriminator() throws Exception {
+
+    List list = sqlMap.queryForList("getDocuments", null);
+    assertEquals(6, list.size());
+
+    assertTrue(list.get(0) instanceof Book);
+    assertTrue(list.get(1) instanceof Magazine);
+    assertTrue(list.get(2) instanceof Book);
+    assertTrue(list.get(3) instanceof Magazine);
+    assertTrue(list.get(4) instanceof Document);
+    assertTrue(list.get(5) instanceof Document);
+
+    assertEquals(1, ((Document) list.get(0)).getId());
+    assertEquals(2, ((Document) list.get(1)).getId());
+    assertEquals(3, ((Document) list.get(2)).getId());
+    assertEquals(4, ((Document) list.get(3)).getId());
+    assertEquals(5, ((Document) list.get(4)).getId());
+    assertEquals(6, ((Document) list.get(5)).getId());
+
+    assertEquals(new Integer(55), ((Book) list.get(0)).getPages());
+    assertEquals("Lyon", ((Magazine) list.get(1)).getCity());
+    assertEquals(new Integer(3587), ((Book) list.get(2)).getPages());
+    assertEquals("Paris", ((Magazine) list.get(3)).getCity());
+  }
+
+
+  public void testDiscriminatorInNestedResultMap() throws Exception {
+    List list = sqlMap.queryForList("getPersonDocuments");
+    assertEquals(3, list.size());
+
+    assertTrue(((PersonDocument) list.get(0)).getFavoriteDocument() instanceof Magazine);
+    assertTrue(((PersonDocument) list.get(1)).getFavoriteDocument() instanceof Book);
+    assertTrue(((PersonDocument) list.get(2)).getFavoriteDocument() instanceof Document);
+
+  }
+
+  public void testDiscriminatorWithNestedResultMap() throws Exception {
+    List list = sqlMap.queryForList("getDocumentsWithAttributes");
+    assertEquals(6, list.size());
+
+    assertTrue(list.get(0) instanceof Book);
+    Book b = (Book) list.get(0);
+    assertEquals(2, b.getAttributes().size());
+
+    assertTrue(list.get(1) instanceof Magazine);
+    Magazine m = (Magazine) list.get(1);
+    assertEquals(1, m.getAttributes().size());
+
+    assertTrue(list.get(2) instanceof Book);
+    b = (Book) list.get(2);
+    assertEquals(2, b.getAttributes().size());
+
+    Document d = (Document) list.get(3);
+    assertEquals(0, d.getAttributes().size());
+
+    d = (Document) list.get(4);
+    assertEquals(0, d.getAttributes().size());
+
+    d = (Document) list.get(5);
+    assertEquals(0, d.getAttributes().size());
+  }
+}
\ No newline at end of file

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicPrependTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicPrependTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicPrependTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicPrependTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,179 @@
+package com.ibatis.sqlmap;
+
+import testdomain.*;
+
+import java.sql.SQLException;
+import java.util.*;
+
+public class DynamicPrependTest extends BaseSqlMapTest {
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+  }
+
+  protected void tearDown() throws Exception {
+  }
+
+  // Iterate with prepend
+
+  public void testIterateWithPrepend1() throws SQLException {
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend1", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+
+  public void testIterateWithPrepend2() throws SQLException {
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+
+  public void testIterateWithPrepend2b() throws SQLException {
+
+    Account account1, account2, account3;
+    account1 = new Account();
+    account1.setId(1);
+
+    account2 = new Account();
+    account2.setId(2);
+
+    account3 = new Account();
+    account3.setId(3);
+
+    List params = Arrays.asList(new Account[]{account1, account2, account3});
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2b", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+
+  public void testIterateWithPrepend2c() throws SQLException {
+
+    Account account1, account2, account3;
+    account1 = new Account();
+    account1.setId(1);
+
+    account2 = new Account();
+    account2.setId(2);
+
+    account3 = new Account();
+    account3.setId(3);
+
+    List params = Arrays.asList(new Account[]{account1, account2, account3});
+
+    MyBean x = new MyBean();
+    x.setMyList(params);
+
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2c", x);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+    assertEquals(1, ((Account) list.get(0)).getId());
+    assertEquals(2, ((Account) list.get(1)).getId());
+
+  }
+
+  public void testIterateWithPrepend2d() throws SQLException {
+
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+
+    MyBean x = new MyBean();
+    x.setMyList(params);
+
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2d", x);
+    assertAccount1((Account) list.get(0));
+    assertEquals(2, list.size());
+    assertEquals(1, ((Account) list.get(0)).getId());
+    assertEquals(3, ((Account) list.get(1)).getId());
+
+  }
+
+  public void testIterateWithPrepend2e() throws SQLException {
+
+    Object[] params = new Object[]{new Integer(1), new Integer(2), new Integer(3)};
+
+    MyBean x = new MyBean();
+    x.setMyArray(params);
+
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2e", x);
+    assertAccount1((Account) list.get(0));
+    assertEquals(2, list.size());
+    assertEquals(1, ((Account) list.get(0)).getId());
+    assertEquals(3, ((Account) list.get(1)).getId());
+
+  }
+
+  public void testIterateWithPrepend2f() throws SQLException {
+
+    int[] params = new int[]{1, 2, 3};
+
+    MyBean x = new MyBean();
+    x.setIntArray(params);
+
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend2f", x);
+    assertAccount1((Account) list.get(0));
+    assertEquals(2, list.size());
+    assertEquals(1, ((Account) list.get(0)).getId());
+    assertEquals(3, ((Account) list.get(1)).getId());
+
+  }
+
+  public void testIterateWithPrepend3() throws SQLException {
+    List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
+    List list = sqlMap.queryForList("dynamicIterateWithPrepend3", params);
+    assertAccount1((Account) list.get(0));
+    assertEquals(3, list.size());
+  }
+
+  public void testDynamicWithPrepend1() throws SQLException {
+    Account account = new Account();
+    account.setId(1);
+    account = (Account) sqlMap.queryForObject("dynamicWithPrepend", account);
+    assertAccount1(account);
+  }
+
+  public void testDynamicWithPrepend2() throws SQLException {
+    Account account = new Account();
+    account.setId(1);
+    account.setFirstName("Clinton");
+    account = (Account) sqlMap.queryForObject("dynamicWithPrepend", account);
+    assertAccount1(account);
+  }
+
+  public void testDynamicWithPrepend3() throws SQLException {
+    Account account = new Account();
+    account.setId(1);
+    account.setFirstName("Clinton");
+    account.setLastName("Begin");
+    account = (Account) sqlMap.queryForObject("dynamicWithPrepend", account);
+    assertAccount1(account);
+  }
+
+  public void testIterateWithPrepend4() throws SQLException {
+    List list = sqlMap.queryForList("dynamicWithPrepend", null);
+    assertAccount1((Account) list.get(0));
+    assertEquals(5, list.size());
+  }
+
+  public void testIterateWithTwoPrepends() throws SQLException {
+    Account account = new Account();
+    account.setId(1);
+    account.setFirstName("Clinton");
+    account = (Account) sqlMap.queryForObject("dynamicWithPrepend", account);
+    assertNotNull(account);
+    assertAccount1(account);
+
+    List list = sqlMap.queryForList("dynamicWithTwoDynamicElements", account);
+    assertAccount1((Account) list.get(0));
+  }
+
+  public void testComplexDynamic() throws SQLException {
+    Account account = new Account();
+    account.setId(1);
+    account.setFirstName("Clinton");
+    account.setLastName("Begin");
+    List list = sqlMap.queryForList("complexDynamicStatement", account);
+    assertAccount1((Account) list.get(0));
+  }
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicTest.java?rev=683745&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicTest.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/DynamicTest.java Thu Aug  7 16:21:46 2008
@@ -0,0 +1,248 @@
+package com.ibatis.sqlmap;
+
+import testdomain.Account;
+
+import java.sql.SQLException;
+import java.util.*;
+
+public class DynamicTest extends BaseSqlMapTest {
+
+  protected void setUp() throws Exception {
+    initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null);
+    initScript("scripts/account-init.sql");
+  }
+
+  protected void tearDown() throws Exception {
+  }
+
+  // PARAMETER PRESENT
+
+  public void testIsParameterPresentTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsParameterPresent", new Integer(1));
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsParameterPresentFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsParameterPresent", null);
+    assertEquals(5, list.size());
+  }
+
+  // EMPTY
+
+  public void testIsNotEmptyTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsNotEmpty", "Clinton");
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsNotEmptyFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsNotEmpty", "");
+    assertEquals(5, list.size());
+  }
+
+  // EQUAL
+
+  public void testIsEqualTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsEqual", "Clinton");
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsEqualFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsEqual", "BLAH!");
+    assertEquals(5, list.size());
+  }
+
+  // GREATER
+
+  public void testIsGreaterTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsGreater", new Integer(5));
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsGreaterFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsGreater", new Integer(1));
+    assertEquals(5, list.size());
+  }
+
+  // GREATER EQUAL
+
+  public void testIsGreaterEqualTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsGreaterEqual", new Integer(3));
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsGreaterEqualFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsGreaterEqual", new Integer(1));
+    assertEquals(5, list.size());
+  }
+
+  // LESS
+
+  public void testIsLessTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsLess", new Integer(1));
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsLessFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsLess", new Integer(5));
+    assertEquals(5, list.size());
+  }
+
+  // LESS EQUAL
+
+  public void testIsLessEqualTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsLessEqual", new Integer(3));
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsLessEqualFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsLessEqual", new Integer(5));
+    assertEquals(5, list.size());
+  }
+
+  // NULL
+
+  public void testIsNotNullTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsNotNull", "");
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testIsNotNullFalse() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsNotNull", null);
+    assertEquals(5, list.size());
+  }
+
+  // PROPERTY AVAILABLE
+
+  public void testIsPropertyAvailableTrue() throws SQLException {
+    List list = sqlMap.queryForList("dynamicIsPropertyAvailable", new Account());
+    assertAccount1((Account) list.get(0));
+    assertEquals(1, list.size());
+  }
+
+  public void testEmptyParameterObject() throws SQLException {
+    Account account = new Account();
+    account.setId(-1);
+    List list = sqlMap.queryForList("dynamicQueryByExample", account);
+    assertAccount1((Account) list.get(0));
+    assertEquals(5, list.size());
+  }
+
+  public void testComplexDynamicQuery() 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("complexDynamicQueryByExample", account);
+    assertAccount2((Account) list.get(0));
+    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
+// -- iterative $substitutions[]$.
+//
+//  public void testCompleteStatementSubst() throws SQLException {
+//    String statement = "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#";
+//    Integer id = new Integer(1);
+//
+//    Map params = new HashMap();
+//    params.put("id", id);
+//    params.put("statement", statement);
+//
+//    List list = sqlMap.queryForList("dynamicSubst", params);
+//    assertAccount1((Account) list.get(0));
+//    assertEquals(1, list.size());
+//  }
+
+  // Query By Example w/Prepend
+
+  public void testQueryByExample() throws SQLException {
+    Account account;
+
+    account = new Account();
+    account.setId(1);
+    account = (Account) sqlMap.queryForObject("dynamicQueryByExample", account);
+    assertAccount1(account);
+
+    account = new Account();
+    account.setFirstName("Clinton");
+    account = (Account) sqlMap.queryForObject("dynamicQueryByExample", account);
+    assertAccount1(account);
+
+    account = new Account();
+    account.setLastName("Begin");
+    account = (Account) sqlMap.queryForObject("dynamicQueryByExample", account);
+    assertAccount1(account);
+
+    account = new Account();
+    account.setEmailAddress("clinton");
+    account = (Account) sqlMap.queryForObject("dynamicQueryByExample", account);
+    assertAccount1(account);
+
+    account = new Account();
+    account.setId(1);
+    account.setFirstName("Clinton");
+    account.setLastName("Begin");
+    account.setEmailAddress("clinton");
+    account = (Account) sqlMap.queryForObject("dynamicQueryByExample", account);
+    assertAccount1(account);
+
+
+  }
+
+
+  public void testRemappableResults() throws SQLException {
+    Account account;
+
+    account = new Account();
+    account.setId(1);
+    account = (Account) sqlMap.queryForObject("testRemappableResults", new Integer(1));
+
+    assertAccount1(account);
+
+    account = new Account();
+    account.setId(5);
+    account = (Account) sqlMap.queryForObject("testRemappableResults", new Integer(77));
+
+    assertEquals(0, account.getId());
+    assertEquals("Jim", account.getFirstName());
+  }
+
+  public void testIsPropertyAvailable() throws Exception {
+    Map account = new HashMap();
+
+    account.put("id", new Integer(1));
+    account.put("name", "Clinton");
+    account = (Map) sqlMap.queryForObject("selectIfPropertyAvailable", account);
+
+    assertEquals(new Integer(1), account.get("ACC_ID"));
+    assertEquals("Clinton", account.get("ACC_FIRST_NAME"));
+  }
+}