Skip to content

Commit 26981b7

Browse files
Added compactDesign and getRevsLimit()
1 parent 74927f4 commit 26981b7

File tree

7 files changed

+130
-9
lines changed

7 files changed

+130
-9
lines changed

couchdb/src/main/java/me/retrodaredevil/couchdbjava/CouchDbDatabase.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,20 @@ default String getCurrentRevision(String id) throws CouchDbException {
132132
}
133133

134134
void compact() throws CouchDbException;
135+
void compactDesign(String designDocument) throws CouchDbException;
136+
137+
/**
138+
* Note: Not supported on PouchDB
139+
* @throws CouchDbException
140+
* @throws me.retrodaredevil.couchdbjava.exception.CouchDbNotFoundException Only on PouchDB
141+
*/
142+
int getRevsLimit() throws CouchDbException;
143+
/**
144+
* Note: Not supported on PouchDB
145+
* @throws CouchDbException
146+
* @throws me.retrodaredevil.couchdbjava.exception.CouchDbNotFoundException Only on PouchDB
147+
*/
148+
void setRevsLimit(int revsLimit) throws CouchDbException;
135149

136150
// TODO implement:
137151
// _local_docs: https://docs.couchdb.org/en/stable/api/local.html#db-local-docs

couchdb/src/main/java/me/retrodaredevil/couchdbjava/okhttp/CouchDbDatabaseService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,15 @@ Call<DocumentResponse.Body> deleteAttachment(
123123
@POST("_compact")
124124
Call<SimpleStatus> compact();
125125

126+
@Headers({"Content-Type: application/json"})
127+
@POST("_compact/{design-doc}")
128+
Call<SimpleStatus> compactDesign(@Path("design-doc") String designDocument);
129+
130+
@GET("_revs_limit")
131+
Call<Integer> getRevsLimit();
132+
@PUT("_revs_limit")
133+
Call<SimpleStatus> setRevsLimit(@Body int revsLimit);
134+
126135

127136
// TODO active tasks: https://docs.couchdb.org/en/stable/api/server/common.html#api-server-active-tasks
128137
}

couchdb/src/main/java/me/retrodaredevil/couchdbjava/okhttp/OkHttpCouchDbDatabase.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,14 +478,32 @@ public boolean isOneShot() {
478478
String batchString = batch ? "ok" : null;
479479
return instance.executeAndHandle(service.deleteAttachment(documentId, attachmentName, documentRevision, batchString), OkHttpCouchDbDatabase::transformDocumentResponseOptionalETag);
480480
}
481+
// endregion
481482

482483
@Override
483484
public void compact() throws CouchDbException {
484485
instance.preAuthorize();
485486
instance.executeAndHandle(service.compact());
486487
}
487488

488-
// endregion
489+
@Override
490+
public void compactDesign(String designDocument) throws CouchDbException {
491+
requireNonNull(designDocument);
492+
instance.preAuthorize();
493+
instance.executeAndHandle(service.compactDesign(designDocument));
494+
}
495+
496+
@Override
497+
public int getRevsLimit() throws CouchDbException {
498+
instance.preAuthorize();
499+
return instance.executeAndHandle(service.getRevsLimit());
500+
}
501+
502+
@Override
503+
public void setRevsLimit(int revsLimit) throws CouchDbException {
504+
instance.preAuthorize();
505+
instance.executeAndHandle(service.setRevsLimit(revsLimit));
506+
}
489507

490508
private class OkHttpCouchDbShared implements CouchDbShared {
491509
private final String prefix;

couchdb/src/main/java/me/retrodaredevil/couchdbjava/option/DatabaseCreationOption.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class DatabaseCreationOption {
44

5-
private static final DatabaseCreationOption DEFAULT_OPTION = new DatabaseCreationOption(null, null, null);
5+
private static final DatabaseCreationOption DEFAULT_OPTION = builder().build();
66

77
private final Integer shards;
88
private final Integer replicas;
@@ -16,6 +16,9 @@ public DatabaseCreationOption(Integer shards, Integer replicas, Boolean partitio
1616
public static DatabaseCreationOption createDefault() {
1717
return DEFAULT_OPTION;
1818
}
19+
public static DatabaseCreationOption.Builder builder() {
20+
return new DatabaseCreationOption.Builder();
21+
}
1922

2023
public Integer getShards() {
2124
return shards;
@@ -28,4 +31,34 @@ public Integer getReplicas() {
2831
public Boolean getPartitioned() {
2932
return partitioned;
3033
}
34+
35+
36+
public static final class Builder {
37+
private Integer shards;
38+
private Integer replicas;
39+
private Boolean partitioned;
40+
41+
private Builder() {
42+
}
43+
44+
public Builder shards(Integer shards) {
45+
this.shards = shards;
46+
return this;
47+
}
48+
public Builder replicas(Integer replicas) {
49+
this.replicas = replicas;
50+
return this;
51+
}
52+
public Builder partitioned(Boolean partitioned) {
53+
this.partitioned = partitioned;
54+
return this;
55+
}
56+
public Builder partitioned() {
57+
return partitioned(true);
58+
}
59+
60+
public DatabaseCreationOption build() {
61+
return new DatabaseCreationOption(shards, replicas, partitioned);
62+
}
63+
}
3164
}

couchdb/src/test/java/me/retrodaredevil/couchdbjava/integration/test/IncludeDocsViewTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import me.retrodaredevil.couchdbjava.CouchDbDatabase;
77
import me.retrodaredevil.couchdbjava.CouchDbInstance;
88
import me.retrodaredevil.couchdbjava.TestConstants;
9+
import me.retrodaredevil.couchdbjava.exception.CouchDbBadRequestException;
910
import me.retrodaredevil.couchdbjava.exception.CouchDbException;
11+
import me.retrodaredevil.couchdbjava.exception.CouchDbNotFoundException;
1012
import me.retrodaredevil.couchdbjava.integration.DatabaseService;
1113
import me.retrodaredevil.couchdbjava.integration.TestUtil;
1214
import me.retrodaredevil.couchdbjava.json.JsonData;
@@ -16,13 +18,10 @@
1618
import me.retrodaredevil.couchdbjava.response.DocumentResponse;
1719
import me.retrodaredevil.couchdbjava.response.ViewResponse;
1820
import org.junit.jupiter.api.Tag;
19-
import org.junit.jupiter.api.Test;
2021
import org.junit.jupiter.params.ParameterizedTest;
2122
import org.junit.jupiter.params.provider.MethodSource;
2223

23-
24-
import static org.junit.jupiter.api.Assertions.assertEquals;
25-
import static org.junit.jupiter.api.Assertions.assertTrue;
24+
import static org.junit.jupiter.api.Assertions.*;
2625

2726
@Tag(TestConstants.INTEGRATION_TEST)
2827
public class IncludeDocsViewTest {
@@ -67,5 +66,13 @@ void test(DatabaseService databaseService) throws CouchDbException, JsonProcessi
6766
assertEquals(documentId, objectNode.get("_id").asText());
6867
assertEquals(revision, objectNode.get("_rev").asText());
6968
assertEquals(43, objectNode.get("test").asInt());
69+
70+
if (databaseService == DatabaseService.COUCHDB) {
71+
database.compactDesign("test_design"); // confirm that compact endpoint can be reached
72+
assertThrows(CouchDbNotFoundException.class, () -> database.compactDesign("non-existent-design"));
73+
} else if (databaseService == DatabaseService.POUCHDB) {
74+
// PouchDB does not support compacting a design
75+
assertThrows(CouchDbBadRequestException.class, () -> database.compactDesign("test_design"));
76+
}
7077
}
7178
}

couchdb/src/test/java/me/retrodaredevil/couchdbjava/integration/test/PartitionedDatabaseTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
import me.retrodaredevil.couchdbjava.response.ViewResponse;
1818
import org.junit.jupiter.api.Tag;
1919
import org.junit.jupiter.api.Test;
20-
import org.junit.jupiter.params.ParameterizedTest;
21-
import org.junit.jupiter.params.provider.MethodSource;
2220

2321
import java.util.List;
2422

@@ -34,7 +32,7 @@ void test() throws CouchDbException, JsonProcessingException {
3432
// partitioned databases not available on PouchDB, so only test on CouchDB
3533
CouchDbInstance instance = TestUtil.createInstance(DatabaseService.COUCHDB);
3634
CouchDbDatabase database = instance.getDatabase(DATABASE);
37-
database.create(new DatabaseCreationOption(null, null, true));
35+
database.create(DatabaseCreationOption.builder().partitioned().build());
3836
assertTrue(database.getDatabaseInfo().getProperties().isPartitioned());
3937

4038
try {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package me.retrodaredevil.couchdbjava.integration.test;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import me.retrodaredevil.couchdbjava.CouchDbDatabase;
5+
import me.retrodaredevil.couchdbjava.CouchDbInstance;
6+
import me.retrodaredevil.couchdbjava.TestConstants;
7+
import me.retrodaredevil.couchdbjava.exception.CouchDbBadRequestException;
8+
import me.retrodaredevil.couchdbjava.exception.CouchDbException;
9+
import me.retrodaredevil.couchdbjava.exception.CouchDbNotFoundException;
10+
import me.retrodaredevil.couchdbjava.integration.DatabaseService;
11+
import me.retrodaredevil.couchdbjava.integration.TestUtil;
12+
import me.retrodaredevil.couchdbjava.option.DatabaseCreationOption;
13+
import org.junit.jupiter.api.Tag;
14+
import org.junit.jupiter.params.ParameterizedTest;
15+
import org.junit.jupiter.params.provider.MethodSource;
16+
17+
import static org.junit.jupiter.api.Assertions.*;
18+
19+
@Tag(TestConstants.INTEGRATION_TEST)
20+
public class RevsLimitTest {
21+
22+
private static final String DATABASE = "test_revs_limit";
23+
24+
@ParameterizedTest
25+
@MethodSource("me.retrodaredevil.couchdbjava.integration.DatabaseService#values")
26+
void test(DatabaseService databaseService) throws CouchDbException {
27+
CouchDbInstance instance = TestUtil.createDebugInstance(databaseService);
28+
CouchDbDatabase database = instance.getDatabase(DATABASE);
29+
30+
if (databaseService == DatabaseService.COUCHDB) {
31+
database.create(DatabaseCreationOption.builder().build());
32+
assertEquals(1000, database.getRevsLimit()); // expect default value to be configured
33+
database.getRevsLimit();
34+
database.setRevsLimit(5);
35+
assertEquals(5, database.getRevsLimit());
36+
} else if (databaseService == DatabaseService.POUCHDB) {
37+
database.create(DatabaseCreationOption.builder().build());
38+
assertThrows(CouchDbNotFoundException.class, () -> database.getRevsLimit());
39+
}
40+
database.getDatabaseInfo();
41+
}
42+
}

0 commit comments

Comments
 (0)