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) {


Reply via email to