Skip to content

Commit 69b2c11

Browse files
Backport to branch(3) : Introduce operation attributes (#2339)
Co-authored-by: Toshihiro Suzuki <[email protected]>
1 parent 87180d7 commit 69b2c11

35 files changed

+1454
-238
lines changed

core/src/main/java/com/scalar/db/api/Delete.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.google.common.base.Preconditions.checkNotNull;
44

55
import com.google.common.base.MoreObjects;
6+
import com.google.common.collect.ImmutableMap;
67
import com.scalar.db.api.DeleteBuilder.BuildableFromExisting;
78
import com.scalar.db.api.DeleteBuilder.Namespace;
89
import com.scalar.db.io.Key;
@@ -25,8 +26,9 @@ public class Delete extends Mutation {
2526
Key partitionKey,
2627
@Nullable Key clusteringKey,
2728
@Nullable Consistency consistency,
29+
ImmutableMap<String, String> attributes,
2830
@Nullable MutationCondition condition) {
29-
super(namespace, tableName, partitionKey, clusteringKey, consistency, condition);
31+
super(namespace, tableName, partitionKey, clusteringKey, consistency, attributes, condition);
3032
}
3133

3234
/**
@@ -172,6 +174,7 @@ public String toString() {
172174
.add("partitionKey", getPartitionKey())
173175
.add("clusteringKey", getClusteringKey())
174176
.add("consistency", getConsistency())
177+
.add("attributes", getAttributes())
175178
.add("condition", getCondition())
176179
.toString();
177180
}

core/src/main/java/com/scalar/db/api/DeleteBuilder.java

+59-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import static com.google.common.base.Preconditions.checkNotNull;
44

5+
import com.google.common.collect.ImmutableMap;
6+
import com.scalar.db.api.OperationBuilder.Attribute;
7+
import com.scalar.db.api.OperationBuilder.ClearAttribute;
58
import com.scalar.db.api.OperationBuilder.ClearClusteringKey;
69
import com.scalar.db.api.OperationBuilder.ClearCondition;
710
import com.scalar.db.api.OperationBuilder.ClearNamespace;
@@ -11,6 +14,8 @@
1114
import com.scalar.db.api.OperationBuilder.PartitionKeyBuilder;
1215
import com.scalar.db.api.OperationBuilder.TableBuilder;
1316
import com.scalar.db.io.Key;
17+
import java.util.HashMap;
18+
import java.util.Map;
1419
import javax.annotation.Nullable;
1520

1621
public class DeleteBuilder {
@@ -60,10 +65,14 @@ public Buildable partitionKey(Key partitionKey) {
6065
}
6166

6267
public static class Buildable extends OperationBuilder.Buildable<Delete>
63-
implements ClusteringKey<Buildable>, Consistency<Buildable>, Condition<Buildable> {
68+
implements ClusteringKey<Buildable>,
69+
Consistency<Buildable>,
70+
Condition<Buildable>,
71+
Attribute<Buildable> {
6472
@Nullable Key clusteringKey;
6573
@Nullable com.scalar.db.api.Consistency consistency;
6674
@Nullable MutationCondition condition;
75+
final Map<String, String> attributes = new HashMap<>();
6776

6877
private Buildable(@Nullable String namespace, String table, Key partitionKey) {
6978
super(namespace, table, partitionKey);
@@ -90,10 +99,31 @@ public Buildable consistency(com.scalar.db.api.Consistency consistency) {
9099
return this;
91100
}
92101

102+
@Override
103+
public Buildable attribute(String name, String value) {
104+
checkNotNull(name);
105+
checkNotNull(value);
106+
attributes.put(name, value);
107+
return this;
108+
}
109+
110+
@Override
111+
public Buildable attributes(Map<String, String> attributes) {
112+
checkNotNull(attributes);
113+
this.attributes.putAll(attributes);
114+
return this;
115+
}
116+
93117
@Override
94118
public Delete build() {
95119
return new Delete(
96-
namespaceName, tableName, partitionKey, clusteringKey, consistency, condition);
120+
namespaceName,
121+
tableName,
122+
partitionKey,
123+
clusteringKey,
124+
consistency,
125+
ImmutableMap.copyOf(attributes),
126+
condition);
97127
}
98128
}
99129

@@ -103,17 +133,18 @@ public static class BuildableFromExisting extends Buildable
103133
OperationBuilder.PartitionKey<BuildableFromExisting>,
104134
ClearCondition<BuildableFromExisting>,
105135
ClearClusteringKey<BuildableFromExisting>,
106-
ClearNamespace<BuildableFromExisting> {
136+
ClearNamespace<BuildableFromExisting>,
137+
ClearAttribute<BuildableFromExisting> {
107138

108139
BuildableFromExisting(Delete delete) {
109140
super(
110141
delete.forNamespace().orElse(null),
111142
delete.forTable().orElse(null),
112143
delete.getPartitionKey());
113-
114144
this.clusteringKey = delete.getClusteringKey().orElse(null);
115145
this.consistency = delete.getConsistency();
116146
this.condition = delete.getCondition().orElse(null);
147+
this.attributes.putAll(delete.getAttributes());
117148
}
118149

119150
@Override
@@ -149,6 +180,18 @@ public BuildableFromExisting consistency(com.scalar.db.api.Consistency consisten
149180
return this;
150181
}
151182

183+
@Override
184+
public BuildableFromExisting attribute(String name, String value) {
185+
super.attribute(name, value);
186+
return this;
187+
}
188+
189+
@Override
190+
public BuildableFromExisting attributes(Map<String, String> attributes) {
191+
super.attributes(attributes);
192+
return this;
193+
}
194+
152195
@Override
153196
public BuildableFromExisting condition(MutationCondition condition) {
154197
super.condition(condition);
@@ -172,5 +215,17 @@ public BuildableFromExisting clearNamespace() {
172215
this.namespaceName = null;
173216
return this;
174217
}
218+
219+
@Override
220+
public BuildableFromExisting clearAttributes() {
221+
this.attributes.clear();
222+
return this;
223+
}
224+
225+
@Override
226+
public BuildableFromExisting clearAttribute(String name) {
227+
this.attributes.remove(name);
228+
return this;
229+
}
175230
}
176231
}

core/src/main/java/com/scalar/db/api/Get.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.google.common.base.Preconditions.checkNotNull;
44

55
import com.google.common.base.MoreObjects;
6+
import com.google.common.collect.ImmutableMap;
67
import com.google.common.collect.ImmutableSet;
78
import com.scalar.db.api.GetBuilder.BuildableGetOrGetWithIndexFromExisting;
89
import com.scalar.db.api.GetBuilder.Namespace;
@@ -26,10 +27,18 @@ public class Get extends Selection {
2627
Key partitionKey,
2728
@Nullable Key clusteringKey,
2829
@Nullable Consistency consistency,
30+
ImmutableMap<String, String> attributes,
2931
List<String> projections,
3032
ImmutableSet<Conjunction> conjunctions) {
3133
super(
32-
namespace, tableName, partitionKey, clusteringKey, consistency, projections, conjunctions);
34+
namespace,
35+
tableName,
36+
partitionKey,
37+
clusteringKey,
38+
consistency,
39+
attributes,
40+
projections,
41+
conjunctions);
3342
}
3443

3544
/**
@@ -178,9 +187,10 @@ public String toString() {
178187
.add("table", forTable())
179188
.add("partitionKey", getPartitionKey())
180189
.add("clusteringKey", getClusteringKey())
190+
.add("consistency", getConsistency())
191+
.add("attributes", getAttributes())
181192
.add("projections", getProjections())
182193
.add("conjunctions", getConjunctions())
183-
.add("consistency", getConsistency())
184194
.toString();
185195
}
186196
}

0 commit comments

Comments
 (0)