Author: cbegin
Date: Sun Aug 23 21:04:10 2009
New Revision: 807018

URL: http://svn.apache.org/viewvc?rev=807018&view=rev
Log:
Fixed iBATIS 627 - Pojo within a pojo persistence

Added:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/ComponentTest.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/EncryptedString.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/User.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/Configuration.xml
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/User.xml
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/db.sql
Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
    ibatis/java/ibatis-3/trunk/version.properties

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java?rev=807018&r1=807017&r2=807018&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
 Sun Aug 23 21:04:10 2009
@@ -181,8 +181,10 @@
     // Automap remaining results
     for (String key : autoMappings.keySet()) {
       ResultMapping autoMapping = autoMappings.get(key);
-      resultObject = processResult(rs, rm, autoMapping, lazyLoader, 
resultObject, foundValues);
-      appliedResultMappings.add(autoMapping);
+      if (autoMapping.getTypeHandler() != null) {
+        resultObject = processResult(rs, rm, autoMapping, lazyLoader, 
resultObject, foundValues);
+        appliedResultMappings.add(autoMapping);
+      }
     }
     return resultObject;
   }

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/ComponentTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/ComponentTest.java?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/ComponentTest.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/ComponentTest.java
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,70 @@
+package org.apache.ibatis.submitted.complex_property;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.io.Reader;
+import java.io.IOException;
+
+import static junit.framework.Assert.*;
+
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.jdbc.ScriptRunner;
+import org.apache.ibatis.io.Resources;
+import org.junit.Test;
+import org.junit.BeforeClass;
+
+public class ComponentTest {
+  private static SqlSessionFactory sqlSessionFactory;
+
+  @BeforeClass
+  public static void setup() throws Exception {
+    setupSqlSessionFactory();
+    runDBScript();
+  }
+
+
+  @Test
+       public void shouldInsertNestedPasswordFieldOfComplexType() throws 
Exception{
+               SqlSession sqlSession = sqlSessionFactory.openSession();
+               try {
+                       //Create User
+                       User user = new User();
+      user.setId(500000L);
+                       user.setPassword(new EncryptedString("secret"));
+                       
user.setUsername("johnny"+Calendar.getInstance().getTimeInMillis());//random
+                       user.setAdministrator(true);
+                       
+                       sqlSession.insert("User.insert", user);
+
+                       //Retrieve User
+                       user = (User) sqlSession.selectOne("User.find", 
user.getId());
+                       
+                       assertNotNull(user.getId());
+
+                       sqlSession.rollback();
+               } finally {
+                       sqlSession.close();
+               }
+       }
+  
+  private static void runDBScript() throws SQLException, IOException {
+    Connection conn = 
sqlSessionFactory.getConfiguration().getEnvironment().getDataSource().getConnection();
+    ScriptRunner runner = new ScriptRunner(conn);
+    String resource = "org/apache/ibatis/submitted/complex_property/db/db.sql";
+    Reader reader = Resources.getResourceAsReader(resource);
+    runner.runScript(reader);
+    conn.close();
+  }
+
+  private static void setupSqlSessionFactory() throws IOException {
+    String resource = 
"org/apache/ibatis/submitted/complex_property/db/Configuration.xml";
+    Reader reader = Resources.getResourceAsReader(resource);
+    sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
+  }
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/EncryptedString.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/EncryptedString.java?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/EncryptedString.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/EncryptedString.java
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,22 @@
+package org.apache.ibatis.submitted.complex_property;
+
+public class EncryptedString {
+       private String encrypted;
+       
+       public EncryptedString(){
+               setEncrypted( null );
+       }
+
+       public EncryptedString(String message){
+               this();
+               
+               //encrypt the message.
+               setEncrypted( message );//TODO:encrypt
+       }
+
+       public String decrypt() { return encrypted; }//TODO:decrypt
+
+       public String getEncrypted() { return encrypted; }
+       public void setEncrypted(String arg) { this.encrypted = arg; }
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/User.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/User.java?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/User.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/User.java
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,31 @@
+package org.apache.ibatis.submitted.complex_property;
+
+public class User {
+       private Long id;
+       
+       /**user specified user ID */
+       private String username;
+
+       /**encrypted password */
+       private EncryptedString password;
+
+       boolean administrator;
+       
+       public User(){
+               setUsername( new String() );
+               setPassword( new EncryptedString() );
+               setAdministrator(false);
+       }
+       
+       public String getUsername() { return username; }
+       public void setUsername(String arg) { this.username = arg; }
+
+       public EncryptedString getPassword() { return password; }
+       public void setPassword(EncryptedString arg) { this.password = arg; }
+
+       public Long getId() { return id; }
+       public void setId(Long oid) { this.id = oid; }
+
+       public boolean isAdministrator() { return administrator; }
+       public void setAdministrator(boolean arg) { this.administrator = arg; }
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/Configuration.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/Configuration.xml?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/Configuration.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/Configuration.xml
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd";>
+
+<configuration>
+    <settings>
+        <setting name="useGeneratedKeys" value="false"/>
+        <setting name="useColumnLabel" value="true"/>
+    </settings>
+    
+    <typeAliases>
+        <typeAlias alias="UserAlias" 
type="org.apache.ibatis.submitted.complex_property.User"/>
+    </typeAliases>
+    
+    <environments default="development">
+      <environment id="development">
+        <transactionManager type="JDBC">
+          <property name="" value=""/>
+        </transactionManager>
+        <dataSource type="UNPOOLED">
+          <property name="driver" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:mem:complexprop"/>
+          <property name="username" value="sa"/>
+        </dataSource>
+      </environment>
+    </environments>
+
+    <mappers>
+        <mapper 
resource="org/apache/ibatis/submitted/complex_property/db/User.xml" />
+    </mappers>
+
+</configuration>
\ No newline at end of file

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/User.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/User.xml?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/User.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/User.xml
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd";>
+<mapper namespace="User">
+
+       <resultMap type="UserAlias" id="UserResult">
+               <id column="id" jdbcType="BIGINT" property="id" />
+               <result column="username" jdbcType="VARCHAR" 
property="username" />
+               <result column="password" jdbcType="VARCHAR" 
property="password.encrypted" />
+    <result column="administrator" jdbcType="BIT" property="administrator" />
+       </resultMap>
+
+       <select id="find" parameterType="long" resultMap="UserResult">
+               SELECT * FROM user WHERE id = #{id,jdbcType=BIGINT}
+       </select>
+
+       <select id="version" parameterType="long" resultType="int">
+               SELECT version FROM user WHERE id = #{id,jdbcType=BIGINT}
+       </select>
+
+       <delete id="delete" parameterType="UserAlias">
+               DELETE FROM user WHERE id = #{id,jdbcType=BIGINT}
+       </delete>
+
+       <insert id="insert" parameterType="UserAlias" useGeneratedKeys="false">
+               INSERT INTO user 
+               ( id,
+                       username, 
+                       password,
+            administrator
+               ) 
+               VALUES 
+               ( #{id},
+                       #{username,jdbcType=VARCHAR}, 
+                       #{password.encrypted,jdbcType=VARCHAR},
+            #{administrator,jdbcType=BIT}
+               )
+       </insert>
+
+       <update id="update" parameterType="UserAlias">
+               UPDATE user SET 
+                       username = #{username,jdbcType=VARCHAR}, 
+                       password = #{password.encrypted,jdbcType=VARCHAR},
+            administrator = #{administrator,jdbcType=BIT}
+               WHERE 
+                       id = #{id,jdbcType=BIGINT} 
+       </update>
+    
+    <!--   Unique constraint check -->
+    <select id="isUniqueUsername"  parameterType="map"  resultType="boolean">
+        SELECT (count(*) = 0)
+        FROM user
+        WHERE ((#{userId,jdbcType=BIGINT} IS NOT NULL AND id != 
#{userId,jdbcType=BIGINT}) OR #{userId,jdbcType=BIGINT} IS NULL)  <!-- other 
than me -->
+        AND (username = #{username,jdbcType=VARCHAR})
+    </select>
+</mapper>

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/db.sql
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/db.sql?rev=807018&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/db.sql
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/complex_property/db/db.sql
 Sun Aug 23 21:04:10 2009
@@ -0,0 +1,8 @@
+
+create table user (
+       id int,
+       username varchar(32) not null,
+       password varchar(128) not null,
+       administrator int,
+       primary key (id)
+);

Modified: ibatis/java/ibatis-3/trunk/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/version.properties?rev=807018&r1=807017&r2=807018&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/version.properties (original)
+++ ibatis/java/ibatis-3/trunk/version.properties Sun Aug 23 21:04:10 2009
@@ -1,5 +1,5 @@
 #Build version info
-#Sun Aug 16 20:24:23 MDT 2009
+#Sun Aug 23 15:02:29 MDT 2009
 version=3.0.0
-buildDate=2009/08/16 20\:24
-buildNum=197
+buildDate=2009/08/23 15\:02
+buildNum=198


Reply via email to