Skip to content

Commit 416c921

Browse files
committed
Modify PutObject API to add delete functionality
1 parent a6379f9 commit 416c921

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

app/src/main/java/org/vss/impl/postgres/PostgresBackendImpl.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,31 @@ public PutObjectResponse put(PutObjectRequest request) {
6666

6767
String storeId = request.getStoreId();
6868

69-
List<VssDbRecord> vssRecords = new ArrayList<>(request.getTransactionItemsList().stream()
69+
List<VssDbRecord> vssPutRecords = new ArrayList<>(request.getTransactionItemsList().stream()
70+
.map(kv -> buildVssRecord(storeId, kv)).toList());
71+
72+
List<VssDbRecord> vssDeleteRecords = new ArrayList<>(request.getDeleteItemsList().stream()
7073
.map(kv -> buildVssRecord(storeId, kv)).toList());
7174

7275
if (request.hasGlobalVersion()) {
7376
VssDbRecord globalVersionRecord = buildVssRecord(storeId,
7477
KeyValue.newBuilder()
7578
.setKey(GLOBAL_VERSION_KEY)
7679
.setVersion(request.getGlobalVersion())
80+
.setValue(ByteString.EMPTY)
7781
.build());
7882

79-
vssRecords.add(globalVersionRecord);
83+
vssPutRecords.add(globalVersionRecord);
8084
}
8185

8286
context.transaction((ctx) -> {
8387
DSLContext dsl = ctx.dsl();
84-
List<Query> batchQueries = vssRecords.stream()
85-
.map(vssRecord -> buildPutObjectQuery(dsl, vssRecord)).toList();
88+
List<Query> batchQueries = new ArrayList<>();
89+
90+
batchQueries.addAll(vssPutRecords.stream()
91+
.map(vssRecord -> buildPutObjectQuery(dsl, vssRecord)).toList());
92+
batchQueries.addAll(vssDeleteRecords.stream()
93+
.map(vssRecord -> buildDeleteObjectQuery(dsl, vssRecord)).toList());
8694

8795
int[] batchResult = dsl.batch(batchQueries).execute();
8896

@@ -97,6 +105,12 @@ public PutObjectResponse put(PutObjectRequest request) {
97105
return PutObjectResponse.newBuilder().build();
98106
}
99107

108+
private Query buildDeleteObjectQuery(DSLContext dsl, VssDbRecord vssRecord) {
109+
return dsl.deleteFrom(VSS_DB).where(VSS_DB.STORE_ID.eq(vssRecord.getStoreId())
110+
.and(VSS_DB.KEY.eq(vssRecord.getKey()))
111+
.and(VSS_DB.VERSION.eq(vssRecord.getVersion())));
112+
}
113+
100114
private Query buildPutObjectQuery(DSLContext dsl, VssDbRecord vssRecord) {
101115
return vssRecord.getVersion() == 0 ? buildInsertRecordQuery(dsl, vssRecord)
102116
: buildUpdateRecordQuery(dsl, vssRecord);

0 commit comments

Comments
 (0)