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