22
33import 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 ;
58import com .scalar .db .api .OperationBuilder .ClearClusteringKey ;
69import com .scalar .db .api .OperationBuilder .ClearCondition ;
710import com .scalar .db .api .OperationBuilder .ClearNamespace ;
1114import com .scalar .db .api .OperationBuilder .PartitionKeyBuilder ;
1215import com .scalar .db .api .OperationBuilder .TableBuilder ;
1316import com .scalar .db .io .Key ;
17+ import java .util .HashMap ;
18+ import java .util .Map ;
1419import javax .annotation .Nullable ;
1520
1621public 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}
0 commit comments