Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions app/src/main/java/org/vss/impl/postgres/PostgresBackendImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import com.google.inject.Inject;
import com.google.protobuf.ByteString;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -151,36 +154,41 @@ private Query buildPutObjectQuery(DSLContext dsl, VssDbRecord vssRecord) {
private Query buildNonConditionalUpsertRecordQuery(DSLContext dsl, VssDbRecord vssRecord) {
return dsl.insertInto(VSS_DB)
.values(vssRecord.getStoreId(), vssRecord.getKey(),
vssRecord.getValue(), 1)
vssRecord.getValue(), 1, vssRecord.getCreatedAt(), vssRecord.getLastUpdatedAt())
.onConflict(VSS_DB.STORE_ID, VSS_DB.KEY)
.doUpdate()
.set(VSS_DB.VALUE, vssRecord.getValue())
.set(VSS_DB.VERSION, 1L);
.set(VSS_DB.VERSION, 1L)
.set(VSS_DB.LAST_UPDATED_AT, vssRecord.getLastUpdatedAt());
}

private Insert<VssDbRecord> buildConditionalInsertRecordQuery(DSLContext dsl,
VssDbRecord vssRecord) {
return dsl.insertInto(VSS_DB)
.values(vssRecord.getStoreId(), vssRecord.getKey(),
vssRecord.getValue(), 1)
vssRecord.getValue(), 1, vssRecord.getCreatedAt(), vssRecord.getLastUpdatedAt())
.onDuplicateKeyIgnore();
}

private Update<VssDbRecord> buildConditionalUpdateRecordQuery(DSLContext dsl, VssDbRecord vssRecord) {
return dsl.update(VSS_DB)
.set(Map.of(VSS_DB.VALUE, vssRecord.getValue(),
VSS_DB.VERSION, vssRecord.getVersion() + 1))
VSS_DB.VERSION, vssRecord.getVersion() + 1,
VSS_DB.LAST_UPDATED_AT, vssRecord.getLastUpdatedAt()))
.where(VSS_DB.STORE_ID.eq(vssRecord.getStoreId())
.and(VSS_DB.KEY.eq(vssRecord.getKey()))
.and(VSS_DB.VERSION.eq(vssRecord.getVersion())));
}

private VssDbRecord buildVssRecord(String storeId, KeyValue kv) {
OffsetDateTime today = OffsetDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.DAYS);
return new VssDbRecord()
.setStoreId(storeId)
.setKey(kv.getKey())
.setValue(kv.getValue().toByteArray())
.setVersion(kv.getVersion());
.setVersion(kv.getVersion())
.setCreatedAt(today)
.setLastUpdatedAt(today);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ CREATE TABLE vss_db (
key character varying(600) NOT NULL,
value bytea NULL,
version bigint NOT NULL,
created_at TIMESTAMP WITH TIME ZONE,
last_updated_at TIMESTAMP WITH TIME ZONE,
PRIMARY KEY (store_id, key)
);
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,11 @@ void destroy() throws Exception {
private void createTable(DSLContext dslContext) {
dslContext.execute("CREATE TABLE vss_db ("
+ "store_id character varying(120) NOT NULL CHECK (store_id <> ''),"
+ "key character varying(120) NOT NULL,"
+ "key character varying(600) NOT NULL,"
+ "value bytea NULL,"
+ "version bigint NOT NULL,"
+ "created_at TIMESTAMP WITH TIME ZONE,"
+ "last_updated_at TIMESTAMP WITH TIME ZONE,"
+ "PRIMARY KEY (store_id, key)"
+ ");");
}
Expand Down