Skip to content

Commit e4aad81

Browse files
committed
クエリビルダのgetSql()の呼び出しでエラーが発生しないように修正
fix #113
1 parent 165b21b commit e4aad81

File tree

10 files changed

+119
-25
lines changed

10 files changed

+119
-25
lines changed

src/main/java/org/seasar/doma/jdbc/builder/DeleteBuilder.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,20 @@ public int execute() {
159159
if (query.getMethodName() == null) {
160160
query.setCallerMethodName("execute");
161161
}
162+
prepare();
163+
DeleteCommand command = new DeleteCommand(query);
164+
int result = command.execute();
165+
query.complete();
166+
return result;
167+
}
168+
169+
private void prepare() {
170+
query.clearParameters();
162171
for (Param p : helper.getParams()) {
163172
query.addParameter(p.name, p.paramClass, p.param);
164173
}
165174
query.setSqlNode(helper.getSqlNode());
166175
query.prepare();
167-
DeleteCommand command = new DeleteCommand(query);
168-
int result = command.execute();
169-
query.complete();
170-
return result;
171176
}
172177

173178
/**
@@ -239,8 +244,7 @@ public Sql<?> getSql() {
239244
if (query.getMethodName() == null) {
240245
query.setCallerMethodName("getSql");
241246
}
242-
query.setSqlNode(helper.getSqlNode());
243-
query.prepare();
247+
prepare();
244248
return query.getSql();
245249
}
246250

src/main/java/org/seasar/doma/jdbc/builder/InsertBuilder.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,20 @@ public int execute() {
160160
if (query.getMethodName() == null) {
161161
query.setCallerMethodName("execute");
162162
}
163+
prepare();
164+
InsertCommand command = new InsertCommand(query);
165+
int result = command.execute();
166+
query.complete();
167+
return result;
168+
}
169+
170+
private void prepare() {
171+
query.clearParameters();
163172
for (Param p : helper.getParams()) {
164173
query.addParameter(p.name, p.paramClass, p.param);
165174
}
166175
query.setSqlNode(helper.getSqlNode());
167176
query.prepare();
168-
InsertCommand command = new InsertCommand(query);
169-
int result = command.execute();
170-
query.complete();
171-
return result;
172177
}
173178

174179
/**
@@ -240,8 +245,7 @@ public Sql<?> getSql() {
240245
if (query.getMethodName() == null) {
241246
query.setCallerMethodName("getSql");
242247
}
243-
query.setSqlNode(helper.getSqlNode());
244-
query.prepare();
248+
prepare();
245249
return query.getSql();
246250
}
247251

src/main/java/org/seasar/doma/jdbc/builder/SelectBuilder.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -780,18 +780,23 @@ public <RESULT> RESULT streamMap(MapKeyNamingType mapKeyNamingType,
780780
}
781781

782782
private <RESULT> RESULT execute(ResultSetHandler<RESULT> resultSetHandler) {
783-
for (Param p : helper.getParams()) {
784-
query.addParameter(p.name, p.paramClass, p.param);
785-
}
786-
query.setSqlNode(helper.getSqlNode());
787-
query.prepare();
783+
prepare();
788784
SelectCommand<RESULT> command = new SelectCommand<RESULT>(query,
789785
resultSetHandler);
790786
RESULT result = command.execute();
791787
query.complete();
792788
return result;
793789
}
794790

791+
private void prepare() {
792+
query.clearParameters();
793+
for (Param p : helper.getParams()) {
794+
query.addParameter(p.name, p.paramClass, p.param);
795+
}
796+
query.setSqlNode(helper.getSqlNode());
797+
query.prepare();
798+
}
799+
795800
/**
796801
* 結果が少なくとも1件以上存在することを保証します。
797802
*
@@ -932,8 +937,7 @@ public Sql<?> getSql() {
932937
if (query.getMethodName() == null) {
933938
query.setCallerMethodName("getSql");
934939
}
935-
query.setSqlNode(helper.getSqlNode());
936-
query.prepare();
940+
prepare();
937941
return query.getSql();
938942
}
939943

src/main/java/org/seasar/doma/jdbc/builder/UpdateBuilder.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,20 @@ public int execute() {
164164
if (query.getMethodName() == null) {
165165
query.setCallerMethodName("execute");
166166
}
167+
prepare();
168+
UpdateCommand command = new UpdateCommand(query);
169+
int result = command.execute();
170+
query.complete();
171+
return result;
172+
}
173+
174+
private void prepare() {
175+
query.clearParameters();
167176
for (Param p : helper.getParams()) {
168177
query.addParameter(p.name, p.paramClass, p.param);
169178
}
170179
query.setSqlNode(helper.getSqlNode());
171180
query.prepare();
172-
UpdateCommand command = new UpdateCommand(query);
173-
int result = command.execute();
174-
query.complete();
175-
return result;
176181
}
177182

178183
/**
@@ -244,8 +249,7 @@ public Sql<?> getSql() {
244249
if (query.getMethodName() == null) {
245250
query.setCallerMethodName("getSql");
246251
}
247-
query.setSqlNode(helper.getSqlNode());
248-
query.prepare();
252+
prepare();
249253
return query.getSql();
250254
}
251255

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ public void addParameters(Map<String, Value> parameters) {
157157
this.parameters.putAll(parameters);
158158
}
159159

160+
public void clearParameters() {
161+
this.parameters.clear();
162+
}
163+
160164
@Override
161165
public boolean isResultEnsured() {
162166
return resultEnsured;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ public void addParameter(String name, Class<?> type, Object value) {
9090
parameters.put(name, new Value(type, value));
9191
}
9292

93+
public void clearParameters() {
94+
parameters.clear();
95+
}
96+
9397
public void setSqlLogType(SqlLogType sqlLogType) {
9498
this.sqlLogType = sqlLogType;
9599
}

src/test/java/org/seasar/doma/jdbc/builder/DeleteBuilderTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,20 @@ public void test() throws Exception {
3434
builder.sql("salary = ").param(int.class, 10);
3535
builder.execute();
3636
}
37+
38+
public void testGetSql() throws Exception {
39+
DeleteBuilder builder = DeleteBuilder.newInstance(new MockConfig());
40+
builder.sql("delete from Emp");
41+
builder.sql("where");
42+
builder.sql("name = ").param(String.class, "aaa");
43+
builder.sql("and");
44+
builder.sql("salary = ").param(int.class, 10);
45+
46+
String sql = String.format("delete from Emp%n" + "where%n"
47+
+ "name = ?%n" + "and%n" + "salary = ?");
48+
assertEquals(sql, builder.getSql().getRawSql());
49+
50+
builder.execute();
51+
}
52+
3753
}

src/test/java/org/seasar/doma/jdbc/builder/InsertBuilderTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,20 @@ public void test() throws Exception {
3434
builder.param(int.class, 100).sql(")");
3535
builder.execute();
3636
}
37+
38+
public void testGetSql() throws Exception {
39+
InsertBuilder builder = InsertBuilder.newInstance(new MockConfig());
40+
builder.sql("insert into Emp");
41+
builder.sql("(name, salary)");
42+
builder.sql("values (");
43+
builder.param(String.class, "SMITH").sql(", ");
44+
builder.param(int.class, 100).sql(")");
45+
46+
String sql = String.format("insert into Emp%n" + "(name, salary)%n"
47+
+ "values (?, ?)");
48+
assertEquals(sql, builder.getSql().getRawSql());
49+
50+
builder.execute();
51+
}
52+
3753
}

src/test/java/org/seasar/doma/jdbc/builder/SelectBuilderTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,27 @@
3333
*/
3434
public class SelectBuilderTest extends TestCase {
3535

36+
public void testGetSql() throws Exception {
37+
SelectBuilder builder = SelectBuilder.newInstance(new MockConfig());
38+
builder.sql("select");
39+
builder.sql("id").sql(",");
40+
builder.sql("name").sql(",");
41+
builder.sql("salary");
42+
builder.sql("from Emp");
43+
builder.sql("where");
44+
builder.sql("name like ").param(String.class, "S%");
45+
builder.sql("and");
46+
builder.sql("age > ").param(int.class, 20);
47+
48+
String sql = String.format("select%n" + "id,%n" + "name,%n"
49+
+ "salary%n" + "from Emp%n" + "where%n" + "name like ?%n"
50+
+ "and%n" + "age > ?");
51+
assertEquals(sql, builder.getSql().getRawSql());
52+
53+
Emp emp = builder.getEntitySingleResult(Emp.class);
54+
assertNull(emp);
55+
}
56+
3657
public void testRmoveLast() throws Exception {
3758
SelectBuilder builder = SelectBuilder.newInstance(new MockConfig());
3859
builder.sql("aaa").sql("bbb");

src/test/java/org/seasar/doma/jdbc/builder/UpdateBuilderTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,21 @@ public void test() throws Exception {
3838
builder.sql("ID = ").param(int.class, 10);
3939
builder.execute();
4040
}
41+
42+
public void testGetSql() throws Exception {
43+
UpdateBuilder builder = UpdateBuilder.newInstance(new MockConfig());
44+
builder.sql("update Emp");
45+
builder.sql("set");
46+
builder.sql("name = ").param(String.class, "SMIHT").sql(",");
47+
builder.sql("salary = ")
48+
.param(BigDecimal.class, new BigDecimal("1000"));
49+
builder.sql("where");
50+
builder.sql("ID = ").param(int.class, 10);
51+
52+
String sql = String.format("update Emp%n" + "set%n" + "name = ?,%n"
53+
+ "salary = ?%n" + "where%n" + "ID = ?");
54+
assertEquals(sql, builder.getSql().getRawSql());
55+
56+
builder.execute();
57+
}
4158
}

0 commit comments

Comments
 (0)