Skip to content

Commit 99c3c9a

Browse files
committed
ArangoSearchProperties storedValues
1 parent 262568f commit 99c3c9a

File tree

8 files changed

+119
-3
lines changed

8 files changed

+119
-3
lines changed

ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
66

77
## [Unreleased]
88

9+
- support for `ArangoSearchProperties` value `storedValues` (ArangoDB v3.7)
910
- support for `ArangoSearchProperties` value `primarySortCompression` (ArangoDB v3.7)
1011
- support for `overwriteMode` values `ignore` and `conflict` (ArangoDB v3.7)
1112

src/main/java/com/arangodb/entity/arangosearch/ArangoSearchProperties.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ public class ArangoSearchProperties {
3737
private final Collection<PrimarySort> primarySorts;
3838
private final Collection<CollectionLink> links;
3939
private ArangoSearchCompression primarySortCompression;
40+
private final Collection<StoredValue> storedValues;
4041

4142
public ArangoSearchProperties() {
4243
super();
4344
links = new ArrayList<>();
4445
primarySorts = new ArrayList<>();
46+
storedValues = new ArrayList<>();
4547
}
4648

4749
public Long getCommitIntervalMsec() {
@@ -100,4 +102,12 @@ public void setPrimarySortCompression(ArangoSearchCompression primarySortCompres
100102
this.primarySortCompression = primarySortCompression;
101103
}
102104

105+
public Collection<StoredValue> getStoredValues() {
106+
return storedValues;
107+
}
108+
109+
public void addStoredValues(final StoredValue... storedValues) {
110+
this.storedValues.addAll(Arrays.asList(storedValues));
111+
}
112+
103113
}

src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,8 @@ public ArangoSearchCompression getPrimarySortCompression() {
102102
return properties.getPrimarySortCompression();
103103
}
104104

105+
public Collection<StoredValue> getStoredValues() {
106+
return properties.getStoredValues();
107+
}
108+
105109
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* DISCLAIMER
3+
*
4+
* Copyright 2016 ArangoDB GmbH, Cologne, Germany
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*
18+
* Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
*/
20+
21+
package com.arangodb.entity.arangosearch;
22+
23+
24+
import java.util.List;
25+
26+
/**
27+
* @author Michele Rastelli
28+
*/
29+
public class StoredValue {
30+
31+
private final List<String> fields;
32+
private final ArangoSearchCompression compression;
33+
34+
public StoredValue(List<String> fields, ArangoSearchCompression compression) {
35+
this.fields = fields;
36+
this.compression = compression;
37+
}
38+
39+
public StoredValue(List<String> fields) {
40+
this(fields, null);
41+
}
42+
43+
public List<String> getFields() {
44+
return fields;
45+
}
46+
47+
public ArangoSearchCompression getCompression() {
48+
return compression;
49+
}
50+
51+
}

src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@
3333

3434
import java.text.ParseException;
3535
import java.text.SimpleDateFormat;
36-
import java.util.Date;
37-
import java.util.Iterator;
38-
import java.util.Map;
36+
import java.util.*;
3937
import java.util.Map.Entry;
4038

4139
/**
@@ -205,6 +203,24 @@ public class VPackDeserializers {
205203
properties.setPrimarySortCompression(ArangoSearchCompression.valueOf(primarySortCompression.getAsString()));
206204
}
207205

206+
final VPackSlice storedValues = vpack.get("storedValues");
207+
if (storedValues.isArray()) {
208+
final Iterator<VPackSlice> storedValueIterator = storedValues.arrayIterator();
209+
for (; storedValueIterator.hasNext(); ) {
210+
final VPackSlice entry = storedValueIterator.next();
211+
if (entry.isObject()) {
212+
VPackSlice fields = entry.get("fields");
213+
VPackSlice compression = entry.get("compression");
214+
if (fields.isArray() && compression.isString()) {
215+
final Iterator<VPackSlice> fieldsIterator = fields.arrayIterator();
216+
List<String> fieldsList = new ArrayList<>();
217+
fieldsIterator.forEachRemaining(it -> fieldsList.add(it.getAsString()));
218+
properties.addStoredValues(new StoredValue(fieldsList, ArangoSearchCompression.valueOf(compression.getAsString())));
219+
}
220+
}
221+
}
222+
}
223+
208224
return properties;
209225
};
210226

src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,23 @@ public class VPackSerializers {
193193
builder.add("primarySortCompression", primarySortCompression.getValue());
194194
}
195195

196+
final Collection<StoredValue> storedValues = value.getStoredValues();
197+
if (!storedValues.isEmpty()) {
198+
builder.add("storedValues", ValueType.ARRAY); // open array
199+
for (final StoredValue storedValue : storedValues) {
200+
builder.add(ValueType.OBJECT); // open object
201+
builder.add("fields", ValueType.ARRAY);
202+
for (final String field : storedValue.getFields()) {
203+
builder.add(field);
204+
}
205+
builder.close();
206+
builder.add("compression", storedValue.getCompression().getValue());
207+
builder.close(); // close object
208+
}
209+
builder.close(); // close array
210+
}
211+
212+
196213
};
197214

198215
private static void serializeFieldLinks(final VPackBuilder builder, final Collection<FieldLink> links) {

src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,12 @@ public ArangoSearchCreateOptions primarySortCompression(final ArangoSearchCompre
126126
return this;
127127
}
128128

129+
/**
130+
* @return options
131+
*/
132+
public ArangoSearchCreateOptions storedValues(final StoredValue... storedValues) {
133+
properties.addStoredValues(storedValues);
134+
return this;
135+
}
136+
129137
}

src/test/java/com/arangodb/ArangoSearchTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ public void createWithPrimarySort() {
135135
options.primarySort(primarySort);
136136
options.primarySortCompression(ArangoSearchCompression.none);
137137
options.consolidationIntervalMsec(666666L);
138+
StoredValue storedValue = new StoredValue(Arrays.asList("a", "b"), ArangoSearchCompression.none);
139+
options.storedValues(storedValue);
138140

139141
final ArangoSearch view = db.arangoSearch(viewName);
140142
final ViewEntity info = view.create(options);
@@ -146,6 +148,13 @@ public void createWithPrimarySort() {
146148

147149
final ArangoSearchPropertiesEntity properties = view.getProperties();
148150
assertThat(properties.getPrimarySortCompression(), is(ArangoSearchCompression.none));
151+
Collection<StoredValue> retrievedStoredValues = properties.getStoredValues();
152+
assertThat(retrievedStoredValues, is(notNullValue()));
153+
assertThat(retrievedStoredValues.size(), is(1));
154+
StoredValue retrievedStoredValue = retrievedStoredValues.iterator().next();
155+
assertThat(retrievedStoredValue, is(notNullValue()));
156+
assertThat(retrievedStoredValue.getFields(), is(storedValue.getFields()));
157+
assertThat(retrievedStoredValue.getCompression(), is(storedValue.getCompression()));
149158
}
150159

151160
@Test

0 commit comments

Comments
 (0)