Author: cbegin
Date: Sat Mar 21 06:30:03 2009
New Revision: 756882
URL: http://svn.apache.org/viewvc?rev=756882&view=rev
Log:
Hooked in SqlProvider and SelectBuilder
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
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=756882&r1=756881&r2=756882&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
Sat Mar 21 06:30:03 2009
@@ -150,10 +150,9 @@
}
private void parseStatement(Method method) {
- Class annotationType = getSqlAnnotationType(method);
- Options options = method.getAnnotation(Options.class);
- if (annotationType != null) {
- final SqlSource sqlSource = getSqlAnnotationValue(method,
annotationType);
+ SqlSource sqlSource = getSqlSourceFromAnnotations(method);
+ if (sqlSource != null) {
+ Options options = method.getAnnotation(Options.class);
final String mappedStatementId = method.getDeclaringClass().getName() +
"." + method.getName();
boolean isSelect = method.getAnnotation(Select.class) != null;
boolean flushCache = false;
@@ -215,13 +214,17 @@
return returnType;
}
- private SqlSource getSqlAnnotationValue(Method method, Class annotationType)
{
- Annotation annotation = method.getAnnotation(annotationType);
- if (annotation != null) {
+ private SqlSource getSqlSourceFromAnnotations(Method method) {
+ Class annotationType = getSqlAnnotationType(method);
+ if (annotationType != null) {
try {
+ Annotation annotation = method.getAnnotation(annotationType);
final String[] strings = (String[])
annotation.getClass().getMethod("value").invoke(annotation);
final SqlProvider provider = (SqlProvider)
annotation.getClass().getMethod("sqlProvider").invoke(annotation);
if (strings != null && strings.length > 0) {
+ if (provider.type() != void.class) {
+ throw new BindingException("You cannot supply both a static SQL
and SqlProvider to method named " + method.getName());
+ }
StringBuilder sql = new StringBuilder();
for (String fragment : strings) {
sql.append(fragment);
@@ -229,14 +232,14 @@
}
SqlSourceParser parser = new
SqlSourceParser(configurator.getConfiguration());
return parser.parse(sql.toString());
- } else if (provider != null) {
+ } else if (provider.type() != void.class) {
return new DynamicInlineSqlSource(configurator.getConfiguration(),
provider);
}
} catch (Exception e) {
throw new RuntimeException("Could not find value method on SQL
annotation. Cause: " + e, e);
}
}
- throw new BindingException("Requested value from annotation that does not
exist: " + annotationType);
+ return null;
}
private Class getSqlAnnotationType(Method method) {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
Sat Mar 21 06:30:03 2009
@@ -94,7 +94,7 @@
try {
config.getMappedStatement(commandName);
} catch (Exception e) {
- throw new BindingException("Invalid bound statement (not found): " +
commandName);
+ throw new BindingException("Invalid bound statement (not found): " +
commandName,e);
}
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
Sat Mar 21 06:30:03 2009
@@ -10,10 +10,6 @@
private static final ThreadLocal<SelectSQL> localSQL = new
ThreadLocal<SelectSQL>();
- static {
- RESET();
- }
-
public static void RESET() {
localSQL.set(new SelectSQL());
}
@@ -112,7 +108,12 @@
}
private static SelectSQL sql() {
- return localSQL.get();
+ SelectSQL selectSQL = localSQL.get();
+ if (selectSQL == null) {
+ RESET();
+ selectSQL = localSQL.get();
+ }
+ return selectSQL;
}
private static class SelectSQL {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
Sat Mar 21 06:30:03 2009
@@ -28,6 +28,18 @@
}
@Test
+ public void shouldExecuteBoundSelectListOfBlogsStatementUsingProvider() {
+ SqlSession session = sqlSessionFactory.openSession();
+ try {
+ BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+ List<Blog> blogs = mapper.selectBlogsUsingProvider();
+ assertEquals(2, blogs.size());
+ } finally {
+ session.close();
+ }
+ }
+
+ @Test
public void shouldExecuteBoundSelectListOfBlogsAsMaps() {
SqlSession session = sqlSessionFactory.openSession();
try {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
Sat Mar 21 06:30:03 2009
@@ -26,6 +26,12 @@
//======================================================
+ @Select(
+ sqlProvider = @SqlProvider(type = BoundBlogSql.class, method =
"selectBlogsSql"))
+ List<Blog> selectBlogsUsingProvider();
+
+ //======================================================
+
@Select("SELECT * FROM post ORDER BY id")
@TypeDiscriminator(
column = "draft",
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java?rev=756882&view=auto
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
(added)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
Sat Mar 21 06:30:03 2009
@@ -0,0 +1,14 @@
+package org.apache.ibatis.binding;
+
+import static org.apache.ibatis.jdbc.SelectBuilder.*;
+
+public class BoundBlogSql {
+
+ public String selectBlogsSql() {
+ RESET();
+ SELECT("*");
+ FROM("BLOG");
+ return SQL();
+ }
+
+}