Skip to content

Commit 88ac00b

Browse files
committed
Add experimetal Sql annotation
1 parent e64f5f5 commit 88ac00b

File tree

48 files changed

+767
-122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+767
-122
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.seasar.doma.experimental;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* Indicates a SQL template.
10+
*
11+
* <p>This annotation can be combined with following annotations:
12+
*
13+
* <ul>
14+
* <li>{@link org.seasar.doma.BatchDelete}
15+
* <li>{@link org.seasar.doma.BatchInsert}
16+
* <li>{@link org.seasar.doma.BatchUpdate}
17+
* <li>{@link org.seasar.doma.Delete}
18+
* <li>{@link org.seasar.doma.Insert}
19+
* <li>{@link org.seasar.doma.Update}
20+
* <li>{@link org.seasar.doma.Script}
21+
* <li>{@link org.seasar.doma.Select}
22+
* <li>{@link org.seasar.doma.SqlProcessor}
23+
* </ul>
24+
*
25+
* <pre>
26+
* &#064;Dao(config = AppConfig.class)
27+
* public interface EmployeeDao {
28+
*
29+
* &#064;Sql("select name from employee where age = &#047;* age *&#047;0)")
30+
* &#064;Select
31+
* List&lt;String&gt; selectNamesByAge(int age);
32+
*
33+
* &#064;Sql("insert into employee (name) values (&#047;* employee.name *&#047;'test data')")
34+
* &#064;Insert
35+
* int insert(Employee employee);
36+
* }
37+
* </pre>
38+
*/
39+
@Target(ElementType.METHOD)
40+
@Retention(RetentionPolicy.RUNTIME)
41+
public @interface Sql {
42+
43+
/** @return the SQL template */
44+
String value();
45+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* Provides experimental annotations.
3+
*
4+
* <p>All features provided by this package may change without further notice.
5+
*/
6+
package org.seasar.doma.experimental;

src/main/java/org/seasar/doma/internal/apt/annot/AbstractAnnot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import javax.lang.model.element.AnnotationMirror;
44

5-
class AbstractAnnot {
5+
class AbstractAnnot implements Annot {
66

77
private final AnnotationMirror annotationMirror;
88

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.seasar.doma.internal.apt.annot;
2+
3+
import javax.lang.model.element.AnnotationMirror;
4+
5+
public interface Annot {
6+
AnnotationMirror getAnnotationMirror();
7+
}

src/main/java/org/seasar/doma/internal/apt/annot/Annotations.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.function.Function;
99
import javax.lang.model.element.*;
1010
import org.seasar.doma.*;
11+
import org.seasar.doma.experimental.Sql;
1112
import org.seasar.doma.internal.apt.Context;
1213
import org.seasar.doma.internal.apt.util.AnnotationValueUtil;
1314

@@ -177,6 +178,11 @@ public SingletonConfigAnnot newSingletonConfigAnnot(TypeElement typeElement) {
177178
return newInstance(typeElement, SingletonConfig.class, SingletonConfigAnnot::new);
178179
}
179180

181+
public SqlAnnot newSqlAnnot(ExecutableElement method) {
182+
assertNotNull(method);
183+
return newInstance(method, Sql.class, SqlAnnot::new);
184+
}
185+
180186
public SqlProcessorAnnot newSqlProcessorAnnot(ExecutableElement method) {
181187
assertNotNull(method);
182188
return newInstance(method, SqlProcessor.class, SqlProcessorAnnot::new);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package org.seasar.doma.internal.apt.annot;
2+
3+
public interface QueryAnnot {}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.seasar.doma.internal.apt.annot;
2+
3+
import static org.seasar.doma.internal.util.AssertionUtil.assertNonNullValue;
4+
5+
import java.util.Map;
6+
import javax.lang.model.element.AnnotationMirror;
7+
import javax.lang.model.element.AnnotationValue;
8+
import org.seasar.doma.internal.apt.AptIllegalStateException;
9+
import org.seasar.doma.internal.apt.util.AnnotationValueUtil;
10+
11+
public class SqlAnnot extends AbstractAnnot {
12+
private static final String VALUE = "value";
13+
14+
private final AnnotationValue value;
15+
16+
SqlAnnot(AnnotationMirror annotationMirror, Map<String, AnnotationValue> values) {
17+
super(annotationMirror);
18+
this.value = assertNonNullValue(values, VALUE);
19+
}
20+
21+
public AnnotationValue getValue() {
22+
return value;
23+
}
24+
25+
public String getValueValue() {
26+
String sql = AnnotationValueUtil.toString(value);
27+
if (sql == null) {
28+
throw new AptIllegalStateException(VALUE);
29+
}
30+
return sql;
31+
}
32+
}

src/main/java/org/seasar/doma/internal/apt/generator/DaoImplMethodGenerator.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
import org.seasar.doma.internal.apt.meta.query.*;
1717
import org.seasar.doma.internal.jdbc.command.*;
1818
import org.seasar.doma.internal.jdbc.sql.*;
19-
import org.seasar.doma.internal.jdbc.util.ScriptFileUtil;
20-
import org.seasar.doma.internal.jdbc.util.SqlFileUtil;
2119

2220
public class DaoImplMethodGenerator extends AbstractGenerator implements QueryMetaVisitor<Void> {
2321

@@ -101,9 +99,7 @@ public Void visitSqlFileSelectQueryMeta(final SqlFileSelectQueryMeta m) {
10199
m.getQueryClass().getName(), m.getQueryClass().getSimpleName(), methodName);
102100
iprint("__query.setMethod(%1$s);%n", methodName);
103101
iprint("__query.setConfig(__config);%n");
104-
iprint(
105-
"__query.setSqlFilePath(\"%1$s\");%n",
106-
SqlFileUtil.buildPath(daoMeta.getDaoElement().getQualifiedName().toString(), m.getName()));
102+
iprint("__query.setSqlFilePath(\"%1$s\");%n", m.getPath());
107103
if (m.getSelectOptionsCtType() != null) {
108104
iprint("__query.setOptions(%1$s);%n", m.getSelectOptionsParameterName());
109105
}
@@ -182,10 +178,7 @@ public Void visitSqlFileScriptQueryMeta(SqlFileScriptQueryMeta m) {
182178
m.getQueryClass().getName(), m.getQueryClass().getSimpleName(), methodName);
183179
iprint("__query.setMethod(%1$s);%n", methodName);
184180
iprint("__query.setConfig(__config);%n");
185-
iprint(
186-
"__query.setScriptFilePath(\"%1$s\");%n",
187-
ScriptFileUtil.buildPath(
188-
daoMeta.getDaoElement().getQualifiedName().toString(), m.getName()));
181+
iprint("__query.setScriptFilePath(\"%1$s\");%n", m.getPath());
189182
iprint("__query.setCallerClassName(\"%1$s\");%n", className);
190183
iprint("__query.setCallerMethodName(\"%1$s\");%n", m.getName());
191184
iprint("__query.setBlockDelimiter(\"%1$s\");%n", m.getBlockDelimiter());
@@ -296,9 +289,7 @@ public Void visitSqlFileModifyQueryMeta(SqlFileModifyQueryMeta m) {
296289
/* 3 */ methodName);
297290
iprint("__query.setMethod(%1$s);%n", methodName);
298291
iprint("__query.setConfig(__config);%n");
299-
iprint(
300-
"__query.setSqlFilePath(\"%1$s\");%n",
301-
SqlFileUtil.buildPath(daoMeta.getDaoElement().getQualifiedName().toString(), m.getName()));
292+
iprint("__query.setSqlFilePath(\"%1$s\");%n", m.getPath());
302293

303294
printAddParameterStatements(m.getParameterMetas());
304295

@@ -459,9 +450,7 @@ public Void visitSqlFileBatchModifyQueryMeta(SqlFileBatchModifyQueryMeta m) {
459450
iprint("__query.setMethod(%1$s);%n", methodName);
460451
iprint("__query.setConfig(__config);%n");
461452
iprint("__query.setElements(%1$s);%n", m.getElementsParameterName());
462-
iprint(
463-
"__query.setSqlFilePath(\"%1$s\");%n",
464-
SqlFileUtil.buildPath(daoMeta.getDaoElement().getQualifiedName().toString(), m.getName()));
453+
iprint("__query.setSqlFilePath(\"%1$s\");%n", m.getPath());
465454
iprint("__query.setParameterName(\"%1$s\");%n", m.getElementsParameterName());
466455
iprint("__query.setCallerClassName(\"%1$s\");%n", className);
467456
iprint("__query.setCallerMethodName(\"%1$s\");%n", m.getName());
@@ -610,8 +599,8 @@ public Void visitAutoProcedureQueryMeta(AutoProcedureQueryMeta m) {
610599
}
611600

612601
@Override
613-
public Void visitAbstractCreateQueryMeta(AbstractCreateQueryMeta m) {
614-
printEnteringStatements(m);
602+
public Void visitArrayCreateQueryMeta(ArrayCreateQueryMeta m) {
603+
printArrayCreateEnteringStatements(m);
615604
printPrerequisiteStatements(m);
616605

617606
QueryReturnMeta resultMeta = m.getReturnMeta();
@@ -624,11 +613,13 @@ public Void visitAbstractCreateQueryMeta(AbstractCreateQueryMeta m) {
624613
iprint("__query.setConfig(__config);%n");
625614
iprint("__query.setCallerClassName(\"%1$s\");%n", className);
626615
iprint("__query.setCallerMethodName(\"%1$s\");%n", m.getName());
616+
iprint("__query.setTypeName(\"%1$s\");%n", m.getArrayTypeName());
617+
iprint("__query.setElements(%1$s);%n", m.getParameterName());
627618
iprint("__query.prepare();%n");
628619
iprint(
629620
"%1$s<%2$s> __command = getCommandImplementors().create%3$s(%4$s, __query);%n",
630621
/* 1 */ m.getCommandClass().getName(),
631-
/* 2 */ resultMeta.getTypeName(),
622+
/* 2 */ resultMeta.getBoxedTypeName(),
632623
/* 3 */ m.getCommandClass().getSimpleName(),
633624
/* 4 */ methodName);
634625
iprint("%1$s __result = __command.execute();%n", resultMeta.getTypeName());
@@ -641,8 +632,27 @@ public Void visitAbstractCreateQueryMeta(AbstractCreateQueryMeta m) {
641632
}
642633

643634
@Override
644-
public Void visitArrayCreateQueryMeta(ArrayCreateQueryMeta m) {
645-
printArrayCreateEnteringStatements(m);
635+
public Void visitBlobCreateQueryMeta(BlobCreateQueryMeta m) {
636+
return visitAbstractCreateQueryMeta(m);
637+
}
638+
639+
@Override
640+
public Void visitClobCreateQueryMeta(ClobCreateQueryMeta m) {
641+
return visitAbstractCreateQueryMeta(m);
642+
}
643+
644+
@Override
645+
public Void visitNClobCreateQueryMeta(NClobCreateQueryMeta m) {
646+
return visitAbstractCreateQueryMeta(m);
647+
}
648+
649+
@Override
650+
public Void visitSQLXMLCreateQueryMeta(SQLXMLCreateQueryMeta m) {
651+
return visitAbstractCreateQueryMeta(m);
652+
}
653+
654+
private Void visitAbstractCreateQueryMeta(AbstractCreateQueryMeta m) {
655+
printEnteringStatements(m);
646656
printPrerequisiteStatements(m);
647657

648658
QueryReturnMeta resultMeta = m.getReturnMeta();
@@ -655,13 +665,11 @@ public Void visitArrayCreateQueryMeta(ArrayCreateQueryMeta m) {
655665
iprint("__query.setConfig(__config);%n");
656666
iprint("__query.setCallerClassName(\"%1$s\");%n", className);
657667
iprint("__query.setCallerMethodName(\"%1$s\");%n", m.getName());
658-
iprint("__query.setTypeName(\"%1$s\");%n", m.getArrayTypeName());
659-
iprint("__query.setElements(%1$s);%n", m.getParameterName());
660668
iprint("__query.prepare();%n");
661669
iprint(
662670
"%1$s<%2$s> __command = getCommandImplementors().create%3$s(%4$s, __query);%n",
663671
/* 1 */ m.getCommandClass().getName(),
664-
/* 2 */ resultMeta.getBoxedTypeName(),
672+
/* 2 */ resultMeta.getTypeName(),
665673
/* 3 */ m.getCommandClass().getSimpleName(),
666674
/* 4 */ methodName);
667675
iprint("%1$s __result = __command.execute();%n", resultMeta.getTypeName());
@@ -712,9 +720,7 @@ public Void visitSqlProcessorQueryMeta(SqlProcessorQueryMeta m) {
712720
m.getQueryClass().getName(), m.getQueryClass().getSimpleName(), methodName);
713721
iprint("__query.setMethod(%1$s);%n", methodName);
714722
iprint("__query.setConfig(__config);%n");
715-
iprint(
716-
"__query.setSqlFilePath(\"%1$s\");%n",
717-
SqlFileUtil.buildPath(daoMeta.getDaoElement().getQualifiedName().toString(), m.getName()));
723+
iprint("__query.setSqlFilePath(\"%1$s\");%n", m.getPath());
718724

719725
printAddParameterStatements(m.getParameterMetas());
720726

0 commit comments

Comments
 (0)