Skip to content

Commit 289f7c4

Browse files
committed
Add the Settings class and throw an exception on update/delete without WHERE clause.
To allow empty WHERE clause, enable the allowEmptyWhere setting.
1 parent 7fde74b commit 289f7c4

33 files changed

+322
-185
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/Entityql.java

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import java.util.Objects;
55
import java.util.function.Consumer;
66
import org.seasar.doma.jdbc.Config;
7-
import org.seasar.doma.jdbc.criteria.context.Options;
7+
import org.seasar.doma.jdbc.criteria.context.DeleteSettings;
8+
import org.seasar.doma.jdbc.criteria.context.InsertSettings;
89
import org.seasar.doma.jdbc.criteria.context.SelectContext;
9-
import org.seasar.doma.jdbc.criteria.context.SelectOptions;
10+
import org.seasar.doma.jdbc.criteria.context.SelectSettings;
11+
import org.seasar.doma.jdbc.criteria.context.UpdateSettings;
1012
import org.seasar.doma.jdbc.criteria.declaration.SelectFromDeclaration;
1113
import org.seasar.doma.jdbc.criteria.def.EntityDef;
1214
import org.seasar.doma.jdbc.criteria.statement.EntityqlBatchDeleteStatement;
@@ -32,11 +34,11 @@ public <ENTITY> EntityqlSelectStatement<ENTITY> from(EntityDef<ENTITY> entityDef
3234
}
3335

3436
public <ENTITY> EntityqlSelectStatement<ENTITY> from(
35-
EntityDef<ENTITY> entityDef, Consumer<SelectOptions> optionsConsumer) {
37+
EntityDef<ENTITY> entityDef, Consumer<SelectSettings> settingsConsumer) {
3638
Objects.requireNonNull(entityDef);
37-
Objects.requireNonNull(optionsConsumer);
39+
Objects.requireNonNull(settingsConsumer);
3840
SelectContext context = new SelectContext(entityDef);
39-
optionsConsumer.accept(context.getOptions());
41+
settingsConsumer.accept(context.getSettings());
4042
SelectFromDeclaration declaration = new SelectFromDeclaration(context);
4143
return new EntityqlSelectStatement<>(config, declaration);
4244
}
@@ -48,13 +50,13 @@ public <ENTITY> Statement<ENTITY> update(EntityDef<ENTITY> entityDef, ENTITY ent
4850
}
4951

5052
public <ENTITY> Statement<ENTITY> update(
51-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<Options> optionsConsumer) {
53+
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<UpdateSettings> settingsConsumer) {
5254
Objects.requireNonNull(entityDef);
5355
Objects.requireNonNull(entity);
54-
Objects.requireNonNull(optionsConsumer);
55-
Options options = new Options();
56-
optionsConsumer.accept(options);
57-
return new EntityqlUpdateStatement<>(config, entityDef, entity, options);
56+
Objects.requireNonNull(settingsConsumer);
57+
UpdateSettings settings = new UpdateSettings();
58+
settingsConsumer.accept(settings);
59+
return new EntityqlUpdateStatement<>(config, entityDef, entity, settings);
5860
}
5961

6062
public <ENTITY> Statement<ENTITY> delete(EntityDef<ENTITY> entityDef, ENTITY entity) {
@@ -64,13 +66,13 @@ public <ENTITY> Statement<ENTITY> delete(EntityDef<ENTITY> entityDef, ENTITY ent
6466
}
6567

6668
public <ENTITY> Statement<ENTITY> delete(
67-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<Options> optionsConsumer) {
69+
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<DeleteSettings> settingsConsumer) {
6870
Objects.requireNonNull(entityDef);
6971
Objects.requireNonNull(entity);
70-
Objects.requireNonNull(optionsConsumer);
71-
Options options = new Options();
72-
optionsConsumer.accept(options);
73-
return new EntityqlDeleteStatement<>(config, entityDef, entity, options);
72+
Objects.requireNonNull(settingsConsumer);
73+
DeleteSettings settings = new DeleteSettings();
74+
settingsConsumer.accept(settings);
75+
return new EntityqlDeleteStatement<>(config, entityDef, entity, settings);
7476
}
7577

7678
public <ENTITY> Statement<ENTITY> insert(EntityDef<ENTITY> entityDef, ENTITY entity) {
@@ -80,13 +82,13 @@ public <ENTITY> Statement<ENTITY> insert(EntityDef<ENTITY> entityDef, ENTITY ent
8082
}
8183

8284
public <ENTITY> Statement<ENTITY> insert(
83-
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<Options> optionsConsumer) {
85+
EntityDef<ENTITY> entityDef, ENTITY entity, Consumer<InsertSettings> settingsConsumer) {
8486
Objects.requireNonNull(entityDef);
8587
Objects.requireNonNull(entity);
86-
Objects.requireNonNull(optionsConsumer);
87-
Options options = new Options();
88-
optionsConsumer.accept(options);
89-
return new EntityqlInsertStatement<>(config, entityDef, entity, options);
88+
Objects.requireNonNull(settingsConsumer);
89+
InsertSettings settings = new InsertSettings();
90+
settingsConsumer.accept(settings);
91+
return new EntityqlInsertStatement<>(config, entityDef, entity, settings);
9092
}
9193

9294
public <ENTITY> Statement<List<ENTITY>> update(
@@ -97,13 +99,15 @@ public <ENTITY> Statement<List<ENTITY>> update(
9799
}
98100

99101
public <ENTITY> Statement<List<ENTITY>> update(
100-
EntityDef<ENTITY> entityDef, List<ENTITY> entities, Consumer<Options> optionsConsumer) {
102+
EntityDef<ENTITY> entityDef,
103+
List<ENTITY> entities,
104+
Consumer<UpdateSettings> settingsConsumer) {
101105
Objects.requireNonNull(entityDef);
102106
Objects.requireNonNull(entities);
103-
Objects.requireNonNull(optionsConsumer);
104-
Options options = new Options();
105-
optionsConsumer.accept(options);
106-
return new EntityqlBatchUpdateStatement<>(config, entityDef, entities, options);
107+
Objects.requireNonNull(settingsConsumer);
108+
UpdateSettings settings = new UpdateSettings();
109+
settingsConsumer.accept(settings);
110+
return new EntityqlBatchUpdateStatement<>(config, entityDef, entities, settings);
107111
}
108112

109113
public <ENTITY> Statement<List<ENTITY>> delete(
@@ -114,13 +118,15 @@ public <ENTITY> Statement<List<ENTITY>> delete(
114118
}
115119

116120
public <ENTITY> Statement<List<ENTITY>> delete(
117-
EntityDef<ENTITY> entityDef, List<ENTITY> entities, Consumer<Options> optionsConsumer) {
121+
EntityDef<ENTITY> entityDef,
122+
List<ENTITY> entities,
123+
Consumer<DeleteSettings> settingsConsumer) {
118124
Objects.requireNonNull(entityDef);
119125
Objects.requireNonNull(entities);
120-
Objects.requireNonNull(optionsConsumer);
121-
Options options = new Options();
122-
optionsConsumer.accept(options);
123-
return new EntityqlBatchDeleteStatement<>(config, entityDef, entities, options);
126+
Objects.requireNonNull(settingsConsumer);
127+
DeleteSettings settings = new DeleteSettings();
128+
settingsConsumer.accept(settings);
129+
return new EntityqlBatchDeleteStatement<>(config, entityDef, entities, settings);
124130
}
125131

126132
public <ENTITY> Statement<List<ENTITY>> insert(
@@ -131,12 +137,14 @@ public <ENTITY> Statement<List<ENTITY>> insert(
131137
}
132138

133139
public <ENTITY> Statement<List<ENTITY>> insert(
134-
EntityDef<ENTITY> entityDef, List<ENTITY> entities, Consumer<Options> optionsConsumer) {
140+
EntityDef<ENTITY> entityDef,
141+
List<ENTITY> entities,
142+
Consumer<InsertSettings> settingsConsumer) {
135143
Objects.requireNonNull(entityDef);
136144
Objects.requireNonNull(entities);
137-
Objects.requireNonNull(optionsConsumer);
138-
Options options = new Options();
139-
optionsConsumer.accept(options);
140-
return new EntityqlBatchInsertStatement<>(config, entityDef, entities, options);
145+
Objects.requireNonNull(settingsConsumer);
146+
InsertSettings settings = new InsertSettings();
147+
settingsConsumer.accept(settings);
148+
return new EntityqlBatchInsertStatement<>(config, entityDef, entities, settings);
141149
}
142150
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/NativeSql.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
import org.seasar.doma.jdbc.Config;
88
import org.seasar.doma.jdbc.ObjectProvider;
99
import org.seasar.doma.jdbc.criteria.context.DeleteContext;
10+
import org.seasar.doma.jdbc.criteria.context.DeleteSettings;
1011
import org.seasar.doma.jdbc.criteria.context.InsertContext;
11-
import org.seasar.doma.jdbc.criteria.context.Options;
12+
import org.seasar.doma.jdbc.criteria.context.InsertSettings;
1213
import org.seasar.doma.jdbc.criteria.context.SelectContext;
14+
import org.seasar.doma.jdbc.criteria.context.SelectSettings;
1315
import org.seasar.doma.jdbc.criteria.context.UpdateContext;
16+
import org.seasar.doma.jdbc.criteria.context.UpdateSettings;
1417
import org.seasar.doma.jdbc.criteria.declaration.DeleteDeclaration;
1518
import org.seasar.doma.jdbc.criteria.declaration.InsertDeclaration;
1619
import org.seasar.doma.jdbc.criteria.declaration.SelectFromDeclaration;
@@ -35,11 +38,11 @@ public <ENTITY> NativeSqlSelectStarting<ENTITY> from(EntityDef<ENTITY> entityDef
3538
}
3639

3740
public <ENTITY> NativeSqlSelectStarting<ENTITY> from(
38-
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
41+
EntityDef<ENTITY> entityDef, Consumer<SelectSettings> settingsConsumer) {
3942
Objects.requireNonNull(entityDef);
40-
Objects.requireNonNull(optionsConsumer);
43+
Objects.requireNonNull(settingsConsumer);
4144
SelectContext context = new SelectContext(entityDef);
42-
optionsConsumer.accept(context.getOptions());
45+
settingsConsumer.accept(context.getSettings());
4346
SelectFromDeclaration declaration = new SelectFromDeclaration(context);
4447
Function<SelectQuery, ObjectProvider<ENTITY>> factory =
4548
query -> new EntityProvider<>(entityDef.asType(), query, false);
@@ -52,11 +55,11 @@ public <ENTITY> NativeSqlUpdateStarting update(EntityDef<ENTITY> entityDef) {
5255
}
5356

5457
public <ENTITY> NativeSqlUpdateStarting update(
55-
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
58+
EntityDef<ENTITY> entityDef, Consumer<UpdateSettings> settingsConsumer) {
5659
Objects.requireNonNull(entityDef);
57-
Objects.requireNonNull(optionsConsumer);
60+
Objects.requireNonNull(settingsConsumer);
5861
UpdateContext context = new UpdateContext(entityDef);
59-
optionsConsumer.accept(context.getOptions());
62+
settingsConsumer.accept(context.getSettings());
6063
UpdateDeclaration declaration = new UpdateDeclaration(context);
6164
return new NativeSqlUpdateStarting(config, declaration);
6265
}
@@ -67,11 +70,11 @@ public <ENTITY> NativeSqlDeleteStarting delete(EntityDef<ENTITY> entityDef) {
6770
}
6871

6972
public <ENTITY> NativeSqlDeleteStarting delete(
70-
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
73+
EntityDef<ENTITY> entityDef, Consumer<DeleteSettings> settingsConsumer) {
7174
Objects.requireNonNull(entityDef);
72-
Objects.requireNonNull(optionsConsumer);
75+
Objects.requireNonNull(settingsConsumer);
7376
DeleteContext context = new DeleteContext(entityDef);
74-
optionsConsumer.accept(context.getOptions());
77+
settingsConsumer.accept(context.getSettings());
7578
DeleteDeclaration declaration = new DeleteDeclaration(context);
7679
return new NativeSqlDeleteStarting(config, declaration);
7780
}
@@ -82,11 +85,11 @@ public <ENTITY> NativeSqlInsertStarting insert(EntityDef<ENTITY> entityDef) {
8285
}
8386

8487
public <ENTITY> NativeSqlInsertStarting insert(
85-
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
88+
EntityDef<ENTITY> entityDef, Consumer<InsertSettings> settingsConsumer) {
8689
Objects.requireNonNull(entityDef);
87-
Objects.requireNonNull(optionsConsumer);
90+
Objects.requireNonNull(settingsConsumer);
8891
InsertContext context = new InsertContext(entityDef);
89-
optionsConsumer.accept(context.getOptions());
92+
settingsConsumer.accept(context.getSettings());
9093
InsertDeclaration declaration = new InsertDeclaration(context);
9194
return new NativeSqlInsertStarting(config, declaration);
9295
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/Context.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ public interface Context {
1111

1212
void setWhere(List<Criterion> where);
1313

14-
Options getOptions();
14+
Settings getSettings();
1515
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/DeleteContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class DeleteContext implements Context {
1010
public final EntityDef<?> entityDef;
1111
public final List<EntityDef<?>> entityDefs;
1212
public List<Criterion> where = new ArrayList<>();
13-
public final Options options = new Options();
13+
public final DeleteSettings options = new DeleteSettings();
1414

1515
public DeleteContext(EntityDef<?> entityDef) {
1616
Objects.requireNonNull(entityDef);
@@ -34,7 +34,7 @@ public void setWhere(List<Criterion> where) {
3434
}
3535

3636
@Override
37-
public Options getOptions() {
37+
public DeleteSettings getSettings() {
3838
return options;
3939
}
4040
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/DeleteOptions.java

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.seasar.doma.jdbc.criteria.context;
2+
3+
public class DeleteSettings extends Settings {
4+
int batchSize = 0;
5+
boolean allowEmptyWhere;
6+
7+
public int getBatchSize() {
8+
return batchSize;
9+
}
10+
11+
public void setBatchSize(int batchSize) {
12+
this.batchSize = batchSize;
13+
}
14+
15+
public boolean getAllowEmptyWhere() {
16+
return allowEmptyWhere;
17+
}
18+
19+
public void setAllowEmptyWhere(boolean allowEmptyWhere) {
20+
this.allowEmptyWhere = allowEmptyWhere;
21+
}
22+
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/InsertContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class InsertContext implements Context {
1111
public final EntityDef<?> entityDef;
1212
public final List<EntityDef<?>> entityDefs;
1313
public Map<Operand.Prop, Operand.Param> values = new LinkedHashMap<>();
14-
public final Options options = new Options();
14+
public final InsertSettings options = new InsertSettings();
1515

1616
public InsertContext(EntityDef<?> entityDef) {
1717
Objects.requireNonNull(entityDef);
@@ -35,7 +35,7 @@ public void setWhere(List<Criterion> where) {
3535
}
3636

3737
@Override
38-
public Options getOptions() {
38+
public InsertSettings getSettings() {
3939
return options;
4040
}
4141
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/InsertOptions.java renamed to doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/InsertSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.seasar.doma.jdbc.criteria.context;
22

3-
public class InsertOptions {
3+
public class InsertSettings extends Settings {
44
int batchSize = 0;
55

66
public int getBatchSize() {

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/SelectContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class SelectContext implements Context {
2727
public ForUpdate forUpdate;
2828
public final Map<Pair<EntityDef<?>, EntityDef<?>>, BiConsumer<Object, Object>> associations =
2929
new LinkedHashMap<>();
30-
public final SelectOptions options = new SelectOptions();
30+
public final SelectSettings options = new SelectSettings();
3131

3232
public SelectContext(EntityDef<?> entityDef) {
3333
this(entityDef, Projection.All);
@@ -60,7 +60,7 @@ public void setWhere(List<Criterion> where) {
6060
}
6161

6262
@Override
63-
public SelectOptions getOptions() {
63+
public SelectSettings getSettings() {
6464
return options;
6565
}
6666

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/SelectOptions.java renamed to doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/SelectSettings.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.seasar.doma.jdbc.criteria.context;
22

3-
public class SelectOptions extends Options {
3+
public class SelectSettings extends Settings {
44
private int fetchSize = 0;
55
private int maxRows = 0;
66

@@ -11,4 +11,12 @@ public int getFetchSize() {
1111
public void setFetchSize(int fetchSize) {
1212
this.fetchSize = fetchSize;
1313
}
14+
15+
public int getMaxRows() {
16+
return maxRows;
17+
}
18+
19+
public void setMaxRows(int maxRows) {
20+
this.maxRows = maxRows;
21+
}
1422
}

0 commit comments

Comments
 (0)