svn commit: r729772 - in /ibatis/trunk/java/ibatis-3: ./ ibatis-3-core/src/main/java/org/apache/ibatis/api/ ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/ ibatis-3-core/src/test/java/org/

2008-12-28 Thread cbegin
Author: cbegin
Date: Sun Dec 28 12:38:45 2008
New Revision: 729772

URL: http://svn.apache.org/viewvc?rev=729772view=rev
Log:
refactored transaction management in session api

Modified:
ibatis/trunk/java/ibatis-3/TODO

ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java

ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java

ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=729772r1=729771r2=729772view=diff
==
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Sun Dec 28 12:38:45 2008
@@ -1,20 +1,16 @@
-Known Issues
-  * Duplicate element IDs are clobbering each other in config
-  * Statement (other elements?) not found does not fail gracefully
-
-Core
+Improvements
+ * Duplicate element IDs are clobbering each other in config
+ * Statement (other elements?) not found does not fail gracefully
  * Improved Error Messages
+ * Exception hierarchy returned from exceptionfactory
 
-XML Config
+Incomplete
  * Named parameter parsing/merging
  * Loosely bound cache id to instance
- (perhaps use late-binding lookup proxies for all config elements?)
 
 API
- * Transaction Manager (REAL AutoCommit support...)
  * Mapper Interface Binding
- * Client / Mapper Factory
- * Exception hierarchy returned from exceptionfactory
 
 Testing
  * Functional tests

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java?rev=729772r1=729771r2=729772view=diff
==
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java
 Sun Dec 28 12:38:45 2008
@@ -24,7 +24,9 @@
   int delete(String statement, Object parameter);
 
   void commit();
-  void end();
+  void commit(boolean force);
+  void rollback();
+  void rollback(boolean force);
   void close();
 
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java?rev=729772r1=729771r2=729772view=diff
==
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java
 Sun Dec 28 12:38:45 2008
@@ -92,17 +92,25 @@
   }
 
   public void commit() {
+commit(false);
+  }
+
+  public void commit(boolean force) {
 try {
-  executor.commit(!autoCommit  dirty);
+  executor.commit(isCommitOrRollbackRequired(force));
   dirty = false;
 } catch (SQLException e) {
   throw ExceptionFactory.wrapException(Error committing transaction.  
Cause:  + e, e);
 }
   }
 
-  public void end() {
+  public void rollback() {
+rollback(false);
+  }
+
+  public void rollback(boolean force) {
 try {
-  executor.rollback(!autoCommit  dirty);
+  executor.rollback(isCommitOrRollbackRequired(force));
   dirty = false;
 } catch (SQLException e) {
   throw ExceptionFactory.wrapException(Error rolling back transaction.  
Cause:  + e, e);
@@ -112,9 +120,7 @@
   public void close() {
 try {
   try {
-if (dirty) {
-  this.end();
-}
+rollback(false);
   } finally {
 executor.close();
   }
@@ -123,5 +129,8 @@
 }
   }
 
+  private boolean isCommitOrRollbackRequired(boolean force) {
+return (!autoCommit  dirty) || force;
+  }
 
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java?rev=729772r1=729771r2=729772view=diff
==
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
 Sun Dec 28 12:38:45 2008
@@ -2,7 +2,6 @@
 
 import org.junit.*;
 import org.apache.ibatis.BaseDataTest;
-import org.apache.ibatis.api.*;
 import org.apache.ibatis.io.Resources;
 
 import 

svn commit: r729779 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis: api/SqlSessionTest.java parser/AuthorMapper.xml

2008-12-28 Thread cbegin
Author: cbegin
Date: Sun Dec 28 13:46:40 2008
New Revision: 729779

URL: http://svn.apache.org/viewvc?rev=729779view=rev
Log:
added tests for implicit rollback and explicit commit

Modified:

ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java

ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java?rev=729779r1=729778r2=729779view=diff
==
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java
 Sun Dec 28 13:46:40 2008
@@ -74,6 +74,55 @@
   }
 
   @Test
+  public void shouldUpdateAuthorImplicitRollback() throws Exception {
+SqlSession session = sqlMapper.openSession();
+Author original;
+Author updated;
+try {
+  original = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  original.setEmail(n...@email.com);
+  session.update(com.domain.AuthorMapper.updateAuthor, original);
+
+  updated = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  Assert.assertEquals(original.getEmail(), updated.getEmail());
+} finally {
+  session.close();
+}
+try {
+  session = sqlMapper.openSession();
+  updated = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  Assert.assertEquals(j...@ibatis.apache.org, updated.getEmail());
+} finally {
+  session.close();
+}
+  }
+
+  @Test
+  public void shouldUpdateAuthorCommit() throws Exception {
+SqlSession session = sqlMapper.openSession();
+Author original;
+Author updated;
+try {
+  original = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  original.setEmail(n...@email.com);
+  session.update(com.domain.AuthorMapper.updateAuthor, original);
+
+  updated = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  Assert.assertEquals(original.getEmail(), updated.getEmail());
+  session.commit();
+} finally {
+  session.close();
+}
+try {
+  session = sqlMapper.openSession();
+  updated = (Author) 
session.selectOne(com.domain.AuthorMapper.selectAuthor, 101);
+  Assert.assertEquals(original.getEmail(), updated.getEmail());
+} finally {
+  session.close();
+}
+  }
+
+  @Test
   public void shouldDeleteAuthor() throws Exception {
 SqlSession session = sqlMapper.openSession();
 try {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml?rev=729779r1=729778r2=729779view=diff
==
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml
 Sun Dec 28 13:46:40 2008
@@ -34,6 +34,13 @@
 values (#{id},#{username},#{password},#{email},#{bio})
   /insert
 
+  update id=updateAuthor
+  parameterType=domain.blog.Author
+update Author
+set username=#{username},password=#{password},email=#{email},bio=#{bio}
+where id=#{id}
+  /update
+
   delete id=deleteAuthor
   parameterType=int
 delete from Author where id = #{id}




svn commit: r729795 - in /ibatis/trunk/java/tools/ibator/core: build/ src/org/apache/ibatis/ibator/api/ src/org/apache/ibatis/ibator/internal/rules/

2008-12-28 Thread jgbutler
Author: jgbutler
Date: Sun Dec 28 14:29:10 2008
New Revision: 729795

URL: http://svn.apache.org/viewvc?rev=729795view=rev
Log:
Changes for IBATIS-569 - provide a method of overriding IbatorRules

Added:

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/IbatorRulesDelegate.java
Modified:
ibatis/trunk/java/tools/ibator/core/build/version.properties

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/ConditionalModelRules.java

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/FlatModelRules.java

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/HierarchicalModelRules.java

ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/IbatorRules.java

Modified: ibatis/trunk/java/tools/ibator/core/build/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/version.properties?rev=729795r1=729794r2=729795view=diff
==
--- ibatis/trunk/java/tools/ibator/core/build/version.properties (original)
+++ ibatis/trunk/java/tools/ibator/core/build/version.properties Sun Dec 28 
14:29:10 2008
@@ -1,4 +1,4 @@
 #Ibator build version info
-#Mon Dec 22 15:32:20 CST 2008
+#Sun Dec 28 16:25:29 CST 2008
 version=1.2.1
-buildNum=681
+buildNum=683

Modified: 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java?rev=729795r1=729794r2=729795view=diff
==
--- 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java
 (original)
+++ 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java
 Sun Dec 28 14:29:10 2008
@@ -491,11 +491,11 @@
 calculateSqlMapFileName();
 
 if (tableConfiguration.getModelType() == ModelType.HIERARCHICAL) {
-rules = new HierarchicalModelRules(tableConfiguration, this);
+rules = new HierarchicalModelRules(this);
 } else if (tableConfiguration.getModelType() == ModelType.FLAT) {
-rules = new FlatModelRules(tableConfiguration, this);
+rules = new FlatModelRules(this);
 } else {
-rules = new ConditionalModelRules(tableConfiguration, this);
+rules = new ConditionalModelRules(this);
 }
 
 ibatorContext.getPlugins().initialized(this);
@@ -686,4 +686,8 @@
 public void setRules(IbatorRules rules) {
 this.rules = rules;
 }
+
+public TableConfiguration getTableConfiguration() {
+return tableConfiguration;
+}
 }

Added: 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java?rev=729795view=auto
==
--- 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java
 (added)
+++ 
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java
 Sun Dec 28 14:29:10 2008
@@ -0,0 +1,299 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the License);
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an AS IS BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.ibatis.ibator.internal.rules;
+
+import org.apache.ibatis.ibator.api.IntrospectedTable;
+import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType;
+import org.apache.ibatis.ibator.config.TableConfiguration;
+
+/**
+ * This class centralizes all the rules related to code generation - including
+ * the methods and objects to create, and certain attributes related to those
+ * objects.
+ * 
+ * See package JavaDoc for more information.
+ * 
+ * @author Jeff Butler
+ */
+public abstract class BaseIbatorRules implements IbatorRules {
+
+protected TableConfiguration tableConfiguration;
+protected IntrospectedTable