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 2009/03/15 01:34:09 UTC

svn commit: r754572 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis: annotations/Annotations.java binding/MapperAnnotationParser.java

Author: cbegin
Date: Sun Mar 15 00:34:09 2009
New Revision: 754572

URL: http://svn.apache.org/viewvc?rev=754572&view=rev
Log:
Added support for nested select reference via One or Many

Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java?rev=754572&r1=754571&r2=754572&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java Sun Mar 15 00:34:09 2009
@@ -81,25 +81,36 @@
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Insert {
-    String[] value();
+    String[] value() default {};
+    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Update {
-    String[] value();
+    String[] value() default {};
+    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Delete {
-    String[] value();
+    String[] value() default {};
+    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Select {
-    String[] value();
+    String[] value() default {};
+    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Target(ElementType.METHOD)
+  public @interface SqlProvider {
+    Class type();
+    String method();
   }
 
   @Retention(RetentionPolicy.RUNTIME)

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java?rev=754572&r1=754571&r2=754572&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java Sun Mar 15 00:34:09 2009
@@ -193,7 +193,7 @@
             result.column(),
             result.javaType() == void.class ? null : result.javaType(),
             result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
-            null,
+            hasNestedSelect(result) ? nestedSelectId(result) : null,
             hasCollectionOrAssociation(result) ? nestedResultMapId(resultMapId, result) : null,
             result.typeHandler() == void.class ? null : result.typeHandler(),
             flags);
@@ -201,6 +201,22 @@
     }
   }
 
+  private String nestedSelectId(Result result) {
+    String nestedSelect = result.one().select();
+    if (nestedSelect.length() < 1) {
+      nestedSelect = result.many().select();
+    }
+    if (!nestedSelect.contains(".")) {
+      nestedSelect = type.getName() + "." + nestedSelect;
+    }
+    return nestedSelect;
+  }
+
+  private boolean hasNestedSelect(Result result) {
+    return result.one().select().length() > 0
+        || result.many().select().length() > 0;
+  }
+
   private void applyConstructorArgs(Arg[] args) {
     if (args.length > 0) {
       for (Arg arg : args) {