Skip to content

Commit edfa3bd

Browse files
committed
SQLファイルを使った更新がスキップされる問題を修正 fix #78
以下のような、Daoメソッドの一番目のパラメータが非エンティティクラスの場合にのみ発生する不具合でした。 ```java @update(sqlFile = true) int update(String name); ```
1 parent df459a9 commit edfa3bd

File tree

5 files changed

+67
-10
lines changed

5 files changed

+67
-10
lines changed

src/main/java/org/seasar/doma/jdbc/query/SqlFileDeleteQuery.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ public SqlFileDeleteQuery() {
4747
public void prepare() {
4848
super.prepare();
4949
assertNotNull(method, sqlFilePath);
50-
executable = true;
5150
preDelete();
5251
prepareOptions();
5352
prepareOptimisticLock();
53+
prepareExecutable();
5454
prepareSql();
5555
assertNotNull(sql);
5656
}
@@ -67,6 +67,11 @@ protected void prepareOptimisticLock() {
6767
}
6868
}
6969

70+
protected void prepareExecutable() {
71+
executable = true;
72+
sqlExecutionSkipCause = null;
73+
}
74+
7075
@Override
7176
public void complete() {
7277
if (entityHandler != null) {

src/main/java/org/seasar/doma/jdbc/query/SqlFileInsertQuery.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ public SqlFileInsertQuery() {
4545
public void prepare() {
4646
super.prepare();
4747
assertNotNull(method, sqlFilePath);
48-
executable = true;
4948
preInsert();
5049
prepareOptions();
50+
prepareExecutable();
5151
prepareSql();
5252
assertNotNull(sql);
5353
}
@@ -58,6 +58,11 @@ protected void preInsert() {
5858
}
5959
}
6060

61+
protected void prepareExecutable() {
62+
executable = true;
63+
sqlExecutionSkipCause = null;
64+
}
65+
6166
@Override
6267
public void generateId(Statement statement) {
6368
}

src/main/java/org/seasar/doma/jdbc/query/SqlFileUpdateQuery.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public void prepare() {
6060
prepareOptimisticLock();
6161
prepareOptions();
6262
prepareTargetPropertyTypes();
63+
prepareExecutable();
6364
prepareSql();
6465
assertNotNull(sql);
6566
}
@@ -82,6 +83,13 @@ protected void prepareTargetPropertyTypes() {
8283
}
8384
}
8485

86+
protected void prepareExecutable() {
87+
if (entityHandler == null || entityHandler.hasTargetPropertyTypes()) {
88+
executable = true;
89+
sqlExecutionSkipCause = null;
90+
}
91+
}
92+
8593
@Override
8694
protected void populateValues(PopulateNode node, SqlContext context) {
8795
if (entityHandler == null) {
@@ -183,10 +191,11 @@ protected void preUpdate() {
183191

184192
protected void prepareTargetPropertyTypes() {
185193
targetPropertyTypes = helper.getTargetPropertyTypes(entity);
186-
if (!targetPropertyTypes.isEmpty()) {
187-
executable = true;
188-
sqlExecutionSkipCause = null;
189-
}
194+
}
195+
196+
protected boolean hasTargetPropertyTypes() {
197+
return targetPropertyTypes != null
198+
&& !targetPropertyTypes.isEmpty();
190199
}
191200

192201
protected void postUpdate() {

src/test/java/org/seasar/doma/jdbc/query/SqlFileUpdateQueryTest.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public void testPopulate() throws Exception {
8282
assertEquals(null, parameters.get(1).getWrapper().get());
8383
assertEquals(new Integer(100), parameters.get(2).getWrapper().get());
8484
assertEquals(new Integer(10), parameters.get(3).getWrapper().get());
85+
assertTrue(query.isExecutable());
8586
}
8687

8788
public void testPopulate_states() throws Exception {
@@ -111,11 +112,13 @@ public void testPopulate_states() throws Exception {
111112
assertEquals("aaa", parameters.get(0).getWrapper().get());
112113
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
113114
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
115+
assertTrue(query.isExecutable());
114116
}
115117

116118
public void testPopulate_excludeNull() throws Exception {
117119
Emp emp = new Emp();
118120
emp.setId(10);
121+
emp.setName("hoge");
119122
emp.setVersion(100);
120123

121124
SqlFileUpdateQuery query = new SqlFileUpdateQuery();
@@ -131,12 +134,14 @@ public void testPopulate_excludeNull() throws Exception {
131134
query.prepare();
132135

133136
PreparedSql sql = query.getSql();
134-
assertEquals("update aaa set VERSION = ? + 1 where id = ?",
137+
assertEquals("update aaa set NAME = ?, VERSION = ? + 1 where id = ?",
135138
sql.getRawSql());
136139
List<InParameter<?>> parameters = sql.getParameters();
137-
assertEquals(2, parameters.size());
138-
assertEquals(new Integer(100), parameters.get(0).getWrapper().get());
139-
assertEquals(new Integer(10), parameters.get(1).getWrapper().get());
140+
assertEquals(3, parameters.size());
141+
assertEquals("hoge", parameters.get(0).getWrapper().get());
142+
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
143+
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
144+
assertTrue(query.isExecutable());
140145
}
141146

142147
public void testPopulate_excludeNull_updateNullableInPreUpdate()
@@ -166,6 +171,7 @@ public void testPopulate_excludeNull_updateNullableInPreUpdate()
166171
assertEquals("hoge", parameters.get(0).getWrapper().get());
167172
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
168173
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
174+
assertTrue(query.isExecutable());
169175
}
170176

171177
public void testPopulate_ignoreVersion() throws Exception {
@@ -195,6 +201,7 @@ public void testPopulate_ignoreVersion() throws Exception {
195201
assertEquals("aaa", parameters.get(0).getWrapper().get());
196202
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
197203
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
204+
assertTrue(query.isExecutable());
198205
}
199206

200207
public void testPopulate_include() throws Exception {
@@ -224,6 +231,7 @@ public void testPopulate_include() throws Exception {
224231
assertEquals("aaa", parameters.get(0).getWrapper().get());
225232
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
226233
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
234+
assertTrue(query.isExecutable());
227235
}
228236

229237
public void testPopulate_exclude() throws Exception {
@@ -254,6 +262,7 @@ public void testPopulate_exclude() throws Exception {
254262
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
255263
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
256264
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
265+
assertTrue(query.isExecutable());
257266
}
258267

259268
public void testPopulate_IsExecutable() throws Exception {
@@ -274,6 +283,34 @@ public void testPopulate_IsExecutable() throws Exception {
274283
assertFalse(query.isExecutable());
275284
}
276285

286+
public void testNonEntity() throws Exception {
287+
SqlFileUpdateQuery query = new SqlFileUpdateQuery();
288+
query.setMethod(getClass().getDeclaredMethod(getName()));
289+
query.setSqlFilePath("META-INF/org/seasar/doma/jdbc/query/SqlFileUpdateQueryTest/testNonEntity.sql");
290+
query.setConfig(runtimeConfig);
291+
query.setCallerClassName("aaa");
292+
query.setCallerMethodName("bbb");
293+
query.setSqlLogType(SqlLogType.FORMATTED);
294+
query.addParameter("id", Integer.class, Integer.valueOf(10));
295+
query.addParameter("name", String.class, "aaa");
296+
query.addParameter("version", Integer.class, Integer.valueOf(100));
297+
query.prepare();
298+
299+
UpdateQuery updateQuery = query;
300+
PreparedSql sql = updateQuery.getSql();
301+
assertEquals("update aaa set NAME = ?, VERSION = ? + 1 where id = ?",
302+
sql.getRawSql());
303+
assertEquals(
304+
"update aaa set NAME = 'aaa', VERSION = 100 + 1 where id = 10",
305+
sql.getFormattedSql());
306+
List<? extends InParameter<?>> parameters = sql.getParameters();
307+
assertEquals(3, parameters.size());
308+
assertEquals("aaa", parameters.get(0).getWrapper().get());
309+
assertEquals(new Integer(100), parameters.get(1).getWrapper().get());
310+
assertEquals(new Integer(10), parameters.get(2).getWrapper().get());
311+
assertTrue(query.isExecutable());
312+
}
313+
277314
public static class PreUpdate implements EntityType<Emp> {
278315

279316
protected final _Emp emp;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
update aaa set NAME = /* name */'hoge', VERSION = /* version */0 + 1 where id = /* id */0

0 commit comments

Comments
 (0)