aboutsummaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-12-14 11:28:18 +0100
committerJon Bratseth <bratseth@oath.com>2018-12-14 11:28:18 +0100
commitb4e3917d746fcf4be76d353be7c3b4ae9b229973 (patch)
tree9bbc8f32467adbc022ff1464e0e3514076c79a36 /document
parent7b8bb9e7e84c43240457e24bd846291c24221747 (diff)
Support for configuring and feeding float16 and bool field types
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/DataType.java7
-rw-r--r--document/src/main/java/com/yahoo/document/NumericDataType.java4
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/BoolFieldValue.java120
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/ByteFieldValue.java12
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/CollectionFieldValue.java5
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/CompositeFieldValue.java2
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/DoubleFieldValue.java6
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java4
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/FieldValue.java1
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/Float16FieldValue.java137
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/FloatFieldValue.java11
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/IntegerFieldValue.java4
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/LongFieldValue.java6
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/Raw.java2
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/ReferenceFieldValue.java13
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/Struct.java4
-rw-r--r--document/src/main/java/com/yahoo/document/datatypes/UriFieldValue.java7
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java9
-rw-r--r--document/src/test/java/com/yahoo/document/datatypes/StringTestCase.java118
-rw-r--r--document/src/test/java/com/yahoo/document/json/JsonReaderTestCase.java145
20 files changed, 405 insertions, 212 deletions
diff --git a/document/src/main/java/com/yahoo/document/DataType.java b/document/src/main/java/com/yahoo/document/DataType.java
index dfe55f5229c..fa5dffd042a 100644
--- a/document/src/main/java/com/yahoo/document/DataType.java
+++ b/document/src/main/java/com/yahoo/document/DataType.java
@@ -3,6 +3,7 @@ package com.yahoo.document;
import com.yahoo.collections.Pair;
import com.yahoo.concurrent.CopyOnWriteHashMap;
+import com.yahoo.document.datatypes.BoolFieldValue;
import com.yahoo.document.datatypes.ByteFieldValue;
import com.yahoo.document.datatypes.DoubleFieldValue;
import com.yahoo.document.datatypes.FieldValue;
@@ -11,8 +12,8 @@ import com.yahoo.document.datatypes.IntegerFieldValue;
import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.PredicateFieldValue;
import com.yahoo.document.datatypes.Raw;
+import com.yahoo.document.datatypes.Float16FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
-import com.yahoo.document.datatypes.TensorFieldValue;
import com.yahoo.document.datatypes.UriFieldValue;
import com.yahoo.tensor.TensorType;
import com.yahoo.vespa.objects.Identifiable;
@@ -39,7 +40,6 @@ public abstract class DataType extends Identifiable implements Serializable, Com
// NOTE: These types are also defined in
// document/src/vespa/document/datatype/datatype.h
// Changes here must also be done there
-
public final static NumericDataType NONE = new NumericDataType("none", -1, IntegerFieldValue.class, IntegerFieldValue.getFactory());
public final static NumericDataType INT = new NumericDataType("int", 0, IntegerFieldValue.class, IntegerFieldValue.getFactory());
public final static NumericDataType FLOAT = new NumericDataType("float", 1, FloatFieldValue.class, FloatFieldValue.getFactory());
@@ -47,6 +47,8 @@ public abstract class DataType extends Identifiable implements Serializable, Com
public final static PrimitiveDataType RAW = new PrimitiveDataType("raw", 3, Raw.class, Raw.getFactory());
public final static NumericDataType LONG = new NumericDataType("long", 4, LongFieldValue.class, LongFieldValue.getFactory());
public final static NumericDataType DOUBLE = new NumericDataType("double", 5, DoubleFieldValue.class, DoubleFieldValue.getFactory());
+ public final static PrimitiveDataType BOOL = new PrimitiveDataType("bool", 6, BoolFieldValue.class, BoolFieldValue.getFactory());
+ public final static NumericDataType FLOAT16 = new NumericDataType("float16", 7, Float16FieldValue.class, Float16FieldValue.getFactory());
public final static DocumentType DOCUMENT = new DocumentType("document");
public final static PrimitiveDataType URI = new PrimitiveDataType("uri", 10, UriFieldValue.class, new UriFieldValue.Factory());
public final static NumericDataType BYTE = new NumericDataType("byte", 16, ByteFieldValue.class, ByteFieldValue.getFactory());
@@ -82,7 +84,6 @@ public abstract class DataType extends Identifiable implements Serializable, Com
this.dataTypeId = dataTypeId;
}
- @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
public DataType clone() {
return (DataType)super.clone();
}
diff --git a/document/src/main/java/com/yahoo/document/NumericDataType.java b/document/src/main/java/com/yahoo/document/NumericDataType.java
index f4a92eca5a1..26da90a709c 100644
--- a/document/src/main/java/com/yahoo/document/NumericDataType.java
+++ b/document/src/main/java/com/yahoo/document/NumericDataType.java
@@ -4,9 +4,10 @@ package com.yahoo.document;
import com.yahoo.vespa.objects.Ids;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class NumericDataType extends PrimitiveDataType {
+
// The global class identifier shared with C++.
public static int classId = registerClass(Ids.document + 52, NumericDataType.class);
/**
@@ -24,4 +25,5 @@ public class NumericDataType extends PrimitiveDataType {
public NumericDataType clone() {
return (NumericDataType) super.clone();
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/BoolFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/BoolFieldValue.java
new file mode 100644
index 00000000000..2a48b550658
--- /dev/null
+++ b/document/src/main/java/com/yahoo/document/datatypes/BoolFieldValue.java
@@ -0,0 +1,120 @@
+// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document.datatypes;
+
+import com.yahoo.document.DataType;
+import com.yahoo.document.Field;
+import com.yahoo.document.PrimitiveDataType;
+import com.yahoo.document.serialization.FieldReader;
+import com.yahoo.document.serialization.FieldWriter;
+import com.yahoo.document.serialization.XmlSerializationHelper;
+import com.yahoo.document.serialization.XmlStream;
+import com.yahoo.vespa.objects.Ids;
+
+/**
+ * A boolean field value
+ *
+ * @author bratseth
+ */
+public class BoolFieldValue extends FieldValue {
+
+ private static class Factory extends PrimitiveDataType.Factory {
+ public FieldValue create() {
+ return new BoolFieldValue();
+ }
+ }
+
+ public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
+ public static final int classId = registerClass(Ids.document + 17, BoolFieldValue.class);
+ private boolean value;
+
+ public BoolFieldValue() {
+ this(false);
+ }
+
+ public BoolFieldValue(boolean value) {
+ this.value = value;
+ }
+
+ public BoolFieldValue(String s) { value = Boolean.parseBoolean(s); }
+
+ @Override
+ public BoolFieldValue clone() {
+ return (BoolFieldValue)super.clone();
+ }
+
+ @Override
+ public void clear() {
+ value = false;
+ }
+
+ @Override
+ public void assign(Object o) {
+ if ( ! checkAssign(o)) return;
+ if (o instanceof String || o instanceof StringFieldValue) {
+ value = Boolean.parseBoolean(o.toString());
+ } else {
+ throw new IllegalArgumentException("Class " + o.getClass() + " not applicable to an " + this.getClass() + " instance.");
+ }
+ }
+
+ public boolean getBoolean() {
+ return value;
+ }
+
+ @Override
+ public Object getWrappedValue() {
+ return value;
+ }
+
+ @Override
+ public DataType getDataType() {
+ return DataType.BOOL;
+ }
+
+ @Override
+ public void printXml(XmlStream xml) {
+ XmlSerializationHelper.printBoolXml(this, xml);
+ }
+
+ @Override
+ public String toString() {
+ return "" + value;
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode() + ( value ? 3 : 0);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if ( ! (o instanceof BoolFieldValue)) return false;
+ if ( ! super.equals(o)) return false;
+
+ BoolFieldValue that = (BoolFieldValue) o;
+ if (value != that.value) return false;
+ return true;
+ }
+
+ @Override
+ public void serialize(Field field, FieldWriter writer) {
+ writer.write(field, this);
+ }
+
+ /* (non-Javadoc)
+ * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
+ */
+ @Override
+ public void deserialize(Field field, FieldReader reader) {
+ reader.read(field, this);
+ }
+
+ @Override
+ public int compareTo(FieldValue other) {
+ int comp = super.compareTo(other);
+ if (comp != 0) return comp;
+ return Boolean.compare(value, ((BoolFieldValue)other).value);
+ }
+
+}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/ByteFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/ByteFieldValue.java
index 4aa4c29db48..2f8cb96219c 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/ByteFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/ByteFieldValue.java
@@ -11,16 +11,18 @@ import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
- * FieldValue which encapsulates a byte.
+ * A byte field value
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class ByteFieldValue extends NumericFieldValue {
+
private static class Factory extends PrimitiveDataType.Factory {
public FieldValue create() {
return new ByteFieldValue();
}
}
+
public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
public static final int classId = registerClass(Ids.document + 10, ByteFieldValue.class);
private byte value;
@@ -125,9 +127,8 @@ public class ByteFieldValue extends NumericFieldValue {
}
/* (non-Javadoc)
- * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
- */
-
+ * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
+ */
@Override
public void deserialize(Field field, FieldReader reader) {
reader.read(field, this);
@@ -151,4 +152,5 @@ public class ByteFieldValue extends NumericFieldValue {
return 0;
}
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/CollectionFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/CollectionFieldValue.java
index fe135ccfd05..ad6d329cbae 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/CollectionFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/CollectionFieldValue.java
@@ -7,9 +7,9 @@ import java.util.Collection;
import java.util.Iterator;
/**
- * Date: Apr 16, 2008
+ * Superclass of multivalue field values
*
- * @author <a href="mailto:humbe@yahoo-inc.com">H&aring;kon Humberset</a>
+ * @author Håkon Humberset
*/
public abstract class CollectionFieldValue<T extends FieldValue> extends CompositeFieldValue {
@@ -79,4 +79,5 @@ public abstract class CollectionFieldValue<T extends FieldValue> extends Composi
}
public abstract int size();
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/CompositeFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/CompositeFieldValue.java
index 3202c6b40af..6efd5a86f75 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/CompositeFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/CompositeFieldValue.java
@@ -4,6 +4,7 @@ package com.yahoo.document.datatypes;
import com.yahoo.document.DataType;
public abstract class CompositeFieldValue extends FieldValue {
+
private DataType dataType;
public CompositeFieldValue(DataType dataType) {
@@ -36,4 +37,5 @@ public abstract class CompositeFieldValue extends FieldValue {
result = 31 * result + (dataType != null ? dataType.hashCode() : 0);
return result;
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/DoubleFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/DoubleFieldValue.java
index 0f1fe50818b..99bac017b78 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/DoubleFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/DoubleFieldValue.java
@@ -11,16 +11,18 @@ import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
- * FieldValue which encapsulates a double.
+ * A 64-bit float field value
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public final class DoubleFieldValue extends NumericFieldValue {
+
private static class Factory extends PrimitiveDataType.Factory {
public FieldValue create() {
return new DoubleFieldValue();
}
}
+
public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
public static final int classId = registerClass(Ids.document + 14, DoubleFieldValue.class);
private double value;
diff --git a/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java b/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java
index de645aff297..9189a97dbf6 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/FieldPathIteratorHandler.java
@@ -1,12 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.document.datatypes;
-import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
- * @author <a href="mailto:thomasg@yahoo-inc.com">Thomas Gundersen</a>
+ * @author Thomas Gundersen
*/
public abstract class FieldPathIteratorHandler {
@@ -110,4 +109,5 @@ public abstract class FieldPathIteratorHandler {
public VariableMap getVariables() {
return variables;
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java
index 0460e303426..dc3fd36b367 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/FieldValue.java
@@ -31,6 +31,7 @@ public abstract class FieldValue extends Identifiable implements Comparable<Fiel
/**
* Get XML representation of a single field and all its children, if any.
+ *
* @return XML representation of field in a &lt;value&gt; element
*/
public String toXml() {
diff --git a/document/src/main/java/com/yahoo/document/datatypes/Float16FieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/Float16FieldValue.java
new file mode 100644
index 00000000000..013f656b7b5
--- /dev/null
+++ b/document/src/main/java/com/yahoo/document/datatypes/Float16FieldValue.java
@@ -0,0 +1,137 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document.datatypes;
+
+import com.yahoo.document.DataType;
+import com.yahoo.document.Field;
+import com.yahoo.document.PrimitiveDataType;
+import com.yahoo.document.serialization.FieldReader;
+import com.yahoo.document.serialization.FieldWriter;
+import com.yahoo.document.serialization.XmlSerializationHelper;
+import com.yahoo.document.serialization.XmlStream;
+import com.yahoo.vespa.objects.Ids;
+
+/**
+ * A 16-bit float field value
+ *
+ * @author bratseth
+ */
+public final class Float16FieldValue extends NumericFieldValue {
+
+ private static class Factory extends PrimitiveDataType.Factory {
+ public FieldValue create() {
+ return new Float16FieldValue();
+ }
+ }
+
+ public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
+ public static final int classId = registerClass(Ids.document + 18, Float16FieldValue.class);
+ private float value; // 16-bit not supported in Java yet
+
+ public Float16FieldValue() {
+ this((float) 0);
+ }
+
+ public Float16FieldValue(float value) {
+ this.value = value;
+ }
+
+ public Float16FieldValue(Float value) {
+ this.value = value;
+ }
+
+ public Float16FieldValue(String s) { value = Float.parseFloat(s); }
+
+ @Override
+ public Float16FieldValue clone() {
+ Float16FieldValue val = (Float16FieldValue) super.clone();
+ val.value = value;
+ return val;
+ }
+
+ @Override
+ public Number getNumber() {
+ return value;
+ }
+
+ @Override
+ public void clear() {
+ value = 0.0f;
+ }
+
+ @Override
+ public void assign(Object obj) {
+ if (!checkAssign(obj)) return;
+
+ if (obj instanceof Number)
+ value = ((Number) obj).floatValue();
+ else if (obj instanceof NumericFieldValue)
+ value = (((NumericFieldValue) obj).getNumber().floatValue());
+ else if (obj instanceof String || obj instanceof StringFieldValue)
+ value = Float.parseFloat(obj.toString());
+ else
+ throw new IllegalArgumentException("Class " + obj.getClass() + " not applicable to an " + this.getClass() + " instance.");
+ }
+
+ public float getFloat() {
+ return value;
+ }
+
+ @Override
+ public Object getWrappedValue() {
+ return value;
+ }
+
+ @Override
+ public DataType getDataType() {
+ return DataType.FLOAT16;
+ }
+
+ @Override
+ public void printXml(XmlStream xml) {
+ XmlSerializationHelper.printShortfloatXml(this, xml);
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (value != +0.0f ? Float.floatToIntBits(value) : 0);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Float16FieldValue)) return false;
+ if (!super.equals(o)) return false;
+
+ Float16FieldValue that = (Float16FieldValue) o;
+ if (Float.compare(that.value, value) != 0) return false;
+ return true;
+ }
+
+ @Override
+ public void serialize(Field field, FieldWriter writer) {
+ writer.write(field, this);
+ }
+
+ /* (non-Javadoc)
+ * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
+ */
+ @Override
+ public void deserialize(Field field, FieldReader reader) {
+ reader.read(field, this);
+ }
+
+ @Override
+ public int compareTo(FieldValue fieldValue) {
+ int comp = super.compareTo(fieldValue);
+ if (comp != 0) return comp;
+ return Float.compare(value, ((Float16FieldValue) fieldValue).value);
+ }
+
+}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/FloatFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/FloatFieldValue.java
index 5a94bb43a77..e09cbea861c 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/FloatFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/FloatFieldValue.java
@@ -11,16 +11,18 @@ import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
- * FieldValue which encapsulates a float.
+ * A 32-bit float field value
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public final class FloatFieldValue extends NumericFieldValue {
+
private static class Factory extends PrimitiveDataType.Factory {
public FieldValue create() {
return new FloatFieldValue();
}
}
+
public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
public static final int classId = registerClass(Ids.document + 13, FloatFieldValue.class);
private float value;
@@ -120,9 +122,8 @@ public final class FloatFieldValue extends NumericFieldValue {
}
/* (non-Javadoc)
- * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
- */
-
+ * @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
+ */
@Override
public void deserialize(Field field, FieldReader reader) {
reader.read(field, this);
diff --git a/document/src/main/java/com/yahoo/document/datatypes/IntegerFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/IntegerFieldValue.java
index 19f34acde9a..62090bab8cb 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/IntegerFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/IntegerFieldValue.java
@@ -11,9 +11,9 @@ import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
- * FieldValue which encapsulates an int.
+ * A 32-bit integer field value
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public final class IntegerFieldValue extends NumericFieldValue {
diff --git a/document/src/main/java/com/yahoo/document/datatypes/LongFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/LongFieldValue.java
index 2d3797f6735..45d044bcb9a 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/LongFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/LongFieldValue.java
@@ -11,11 +11,12 @@ import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
- * FieldValue which encapsulates a long.
+ * A 64-bit integer field value
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public final class LongFieldValue extends NumericFieldValue {
+
private static class Factory extends PrimitiveDataType.Factory {
public FieldValue create() {
return new LongFieldValue();
@@ -148,4 +149,5 @@ public final class LongFieldValue extends NumericFieldValue {
return 0;
}
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/datatypes/Raw.java b/document/src/main/java/com/yahoo/document/datatypes/Raw.java
index 23ed0cee23e..7900615aa93 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/Raw.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/Raw.java
@@ -15,7 +15,7 @@ import java.nio.ByteBuffer;
import java.util.Arrays;
/**
- * FieldValue which encapsulates a Raw value
+ * A field value which is an array of byte data
*
* @author Einar M R Rosenvinge
*/
diff --git a/document/src/main/java/com/yahoo/document/datatypes/ReferenceFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/ReferenceFieldValue.java
index 0097e5c93d0..034167b1121 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/ReferenceFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/ReferenceFieldValue.java
@@ -14,21 +14,20 @@ import java.util.Objects;
import java.util.Optional;
/**
- * A reference field value allows search queries to access fields in other document instances
+ * <p>A reference field value allows search queries to access fields in other document instances
* as if they were fields natively stored within the searched document. This allows modelling
* one-to-many relations such as a parent document with many children containing references
- * back to the parent.
+ * back to the parent.</p>
*
- * Each <code>ReferenceFieldValue</code> may contain a single document ID which specifies the
+ * <p>Each <code>ReferenceFieldValue</code> may contain a single document ID which specifies the
* instance the field should refer to. This document ID must have a type matching that of the
- * reference data type of the field itself.
+ * reference data type of the field itself.</p>
*
- * Note that references are not polymorphic. This means that if you have a document type
+ * <p>Note that references are not polymorphic. This means that if you have a document type
* "foo" inheriting "bar", you cannot have a <code>reference&lt;bar&gt;</code> field containing
- * a document ID for a "foo" document.
+ * a document ID for a "foo" document.</p>
*
* @author vekterli
- * @since 6.65
*/
public class ReferenceFieldValue extends FieldValue {
diff --git a/document/src/main/java/com/yahoo/document/datatypes/Struct.java b/document/src/main/java/com/yahoo/document/datatypes/Struct.java
index 7d4e615b27b..fc75870bb94 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/Struct.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/Struct.java
@@ -12,9 +12,7 @@ import com.yahoo.vespa.objects.Ids;
import java.util.*;
/**
- * Date: Apr 15, 2008
- *
- * @author humbe
+ * @author Håkon Humberset
*/
public class Struct extends StructuredFieldValue {
diff --git a/document/src/main/java/com/yahoo/document/datatypes/UriFieldValue.java b/document/src/main/java/com/yahoo/document/datatypes/UriFieldValue.java
index 13688c8e311..1b51d6625e2 100644
--- a/document/src/main/java/com/yahoo/document/datatypes/UriFieldValue.java
+++ b/document/src/main/java/com/yahoo/document/datatypes/UriFieldValue.java
@@ -10,12 +10,10 @@ import com.yahoo.net.Url;
import java.net.URI;
/**
- * Created with IntelliJ IDEA.
- * User: magnarn
- * Date: 11/2/12
- * Time: 2:37 PM
+ * @author Magnar Nedland
*/
public class UriFieldValue extends StringFieldValue {
+
public static class Factory extends PrimitiveDataType.Factory {
public FieldValue create() {
return new UriFieldValue();
@@ -46,4 +44,5 @@ public class UriFieldValue extends StringFieldValue {
super.deserialize(field, reader);
Url.fromString(toString()); // Throws if value is invalid.
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java b/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
index 941dbc8d406..a0e7f81ea73 100644
--- a/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
+++ b/document/src/main/java/com/yahoo/document/serialization/XmlSerializationHelper.java
@@ -7,7 +7,6 @@ import com.yahoo.document.datatypes.*;
import com.yahoo.text.Utf8;
import org.apache.commons.codec.binary.Base64;
-import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -67,6 +66,14 @@ public class XmlSerializationHelper {
xml.addContent(f.toString());
}
+ public static void printShortfloatXml(Float16FieldValue f, XmlStream xml) {
+ xml.addContent(f.toString());
+ }
+
+ public static void printBoolXml(BoolFieldValue f, XmlStream xml) {
+ xml.addContent(f.toString());
+ }
+
public static void printIntegerXml(IntegerFieldValue f, XmlStream xml) {
xml.addContent(f.toString());
}
diff --git a/document/src/test/java/com/yahoo/document/datatypes/StringTestCase.java b/document/src/test/java/com/yahoo/document/datatypes/StringTestCase.java
index ffc372d4851..e9fce35ed01 100644
--- a/document/src/test/java/com/yahoo/document/datatypes/StringTestCase.java
+++ b/document/src/test/java/com/yahoo/document/datatypes/StringTestCase.java
@@ -20,9 +20,6 @@ import com.yahoo.io.GrowableByteBuffer;
import com.yahoo.vespa.objects.BufferSerializer;
import org.junit.Test;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.ListIterator;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@@ -31,12 +28,12 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class StringTestCase extends AbstractTypesTest {
@Test
- public void testDeserialize() throws Exception {
+ public void testDeserialize() {
byte[] buf = new byte[1500];
GrowableByteBuffer data = GrowableByteBuffer.wrap(buf);
//short string
@@ -122,17 +119,8 @@ public class StringTestCase extends AbstractTypesTest {
assertTrue(blah.equals(blah2));
}
-/* public void testSpanTree() {
- StringFieldValue annotatedText = new StringFieldValue("banana airlines");
- SpanList lingTree = new SpanList();
- annotatedText.setSpanTree("linguistics", lingTree);
- for (Annotation anAnnotation : annotatedText.getSpanTree("linguistics")) {
- System.err.println(anAnnotation);
- }
- }*/
-
@Test
- public void testSerializeDeserialize() throws Exception {
+ public void testSerializeDeserialize() {
java.lang.String test = "Hello hello";
BufferSerializer data = new BufferSerializer(new GrowableByteBuffer(100, 2.0f));
StringFieldValue value = new StringFieldValue(test);
@@ -171,7 +159,7 @@ public class StringTestCase extends AbstractTypesTest {
}
@Test
- public void testNestedSpanTreeBug4187377() {
+ public void testNestedSpanTree() {
AnnotationType type = new AnnotationType("ann", DataType.STRING);
StringFieldValue outerString = new StringFieldValue("Ballooo");
@@ -224,8 +212,6 @@ public class StringTestCase extends AbstractTypesTest {
doc = annotate(doc, manager);
doc = serializeAndDeserialize(doc, manager);
- doc = consume(doc, manager);
- System.err.println(doc);
}
private Document serializeAndDeserialize(Document doc, DocumentTypeManager manager) {
@@ -247,11 +233,6 @@ public class StringTestCase extends AbstractTypesTest {
AnnotationType location = registry.getType("location");
Map<String, AnnotationType> m = registry.getTypes();
- for (String key : m.keySet()) {
- System.out.println("Key: " + key);
- AnnotationType val = m.get(key);
- parseAnnotationType(val);
- }
SpanTree tree = new SpanTree("testannotations");
SpanList root = (SpanList)tree.getRoot();
@@ -335,7 +316,7 @@ public class StringTestCase extends AbstractTypesTest {
root.remove(branch);
tree.cleanup();
- System.out.println("No. Of Annotations: " + tree.numAnnotations());
+ assertEquals(5, tree.numAnnotations());
body.setSpanTree(tree);
document.setFieldValue(document.getField("body"), body);
@@ -343,93 +324,4 @@ public class StringTestCase extends AbstractTypesTest {
return document;
}
- @SuppressWarnings("deprecation")
- public Document consume(Document document, DocumentTypeManager docTypeMgr) {
- DocumentType type = docTypeMgr.getDocumentType("blog");
- Collection<Field> fc = type.getFields();
- for (Field f : fc) {
- System.out.println("\n\nField Name: " + f.getName());
- System.out.println("DataType: " + f.getDataType());
- System.out.println("isHeader? " + f.isHeader());
-
- FieldValue val = document.getFieldValue(f);
- if (val instanceof StringFieldValue) {
- StringFieldValue sfv = (StringFieldValue)val;
- System.out.println(f.getName() + " is a StringField. Field Value: " + sfv.getString());
- Collection<SpanTree> c = sfv.getSpanTrees();
- for (SpanTree tree : c) {
- System.out.println(f.getName() + " has annotations");
- consumeAnnotations(tree, (SpanList)tree.getRoot());
- }
- }
- }
-
- return document;
- }
-
- public void consumeAnnotations(SpanTree tree, SpanList root) {
- System.out.println("\n\nSpanList: " + root + " num Children: " + root.numChildren());
- System.out.println("-------------------");
- Iterator<SpanNode> childIterator = root.childIterator();
- while (childIterator.hasNext()) {
- SpanNode node = childIterator.next();
- System.out.println("Span Node: " + node); // + " Span Text: " + node.getText(fieldValStr));
- if (node instanceof SpanList) {
- System.out.println("Encountered another span list");
- SpanList spl = (SpanList)node;
- ListIterator<SpanNode> lli = spl.childIterator();
- while (lli.hasNext()) {
- System.out.print(" " + lli.next() + " ");
- }
- consumeAnnotations(tree, (SpanList)node);
- } else {
- System.out.println("\nGetting annotations for this span node: " + node);
- getAnnotationsForNode(tree, node);
- }
- }
- System.out.println("\nGetting annotations for the SpanList itself : " + root);
- getAnnotationsForNode(tree, root);
- }
-
- public void getAnnotationsForNode(SpanTree tree, SpanNode node) {
- Iterator<Annotation> iter = tree.iterator(node);
- boolean annotationPresent = false;
- while (iter.hasNext()) {
- annotationPresent = true;
- Annotation xx = iter.next();
- Struct fValue = (Struct)xx.getFieldValue();
- System.out.println("Annotation: " + xx);
- if (fValue == null) {
- System.out.println("Field Value is null");
- return;
- }
- Iterator fieldIter = fValue.iterator();
- while (fieldIter.hasNext()) {
- Map.Entry m = (Map.Entry)fieldIter.next();
- Field f = (Field)m.getKey();
- FieldValue val = (FieldValue)m.getValue();
- System.out.println("Field : " + f + " Value: " + val);
- }
- }
- if (!annotationPresent) {
- System.out.println("****No annotations found for the span node: " + node);
- }
- }
-
- public void parseAnnotationType(AnnotationType t) {
- System.out.println("Type Name: " + t.getName());
- System.out.println("Type ID: " + t.getId());
- DataType dt = t.getDataType();
- String dataTypeStr;
- if (dt == DataType.STRING) {
- dataTypeStr = "String";
- } else if (dt == DataType.INT) {
- dataTypeStr = "Integer";
- } else if (dt == DataType.URI) {
- dataTypeStr = "URL";
- } else {
- dataTypeStr = "UNKNOWN";
- }
- System.out.println("Type DataType: " + dataTypeStr);
- }
}
diff --git a/document/src/test/java/com/yahoo/document/json/JsonReaderTestCase.java b/document/src/test/java/com/yahoo/document/json/JsonReaderTestCase.java
index 32f63e6c0b3..b3d502ea56f 100644
--- a/document/src/test/java/com/yahoo/document/json/JsonReaderTestCase.java
+++ b/document/src/test/java/com/yahoo/document/json/JsonReaderTestCase.java
@@ -22,6 +22,7 @@ import com.yahoo.document.StructDataType;
import com.yahoo.document.TensorDataType;
import com.yahoo.document.WeightedSetDataType;
import com.yahoo.document.datatypes.Array;
+import com.yahoo.document.datatypes.BoolFieldValue;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.IntegerFieldValue;
import com.yahoo.document.datatypes.MapFieldValue;
@@ -97,6 +98,7 @@ public class JsonReaderTestCase {
x.addField(new Field("something", DataType.STRING));
x.addField(new Field("nalle", DataType.STRING));
x.addField(new Field("int1", DataType.INT));
+ x.addField(new Field("flag", DataType.BOOL));
types.registerDocumentType(x);
}
{
@@ -172,13 +174,20 @@ public class JsonReaderTestCase {
}
@Test
- public final void readSingleDocumentPut() {
- InputStream rawDoc = new ByteArrayInputStream(
- Utf8.toBytes("{\"put\": \"id:unittest:smoke::whee\","
- + " \"fields\": { \"something\": \"smoketest\","
- + " \"nalle\": \"bamse\"}}"));
+ public void readSingleDocumentPut() {
+ String doc =
+ "{ \"put\": \"id:unittest:smoke::doc1\"," +
+ " \"fields\": { " +
+ " \"something\": \"smoketest\"," +
+ " \"flag\": true," +
+ " \"nalle\": \"bamse\"" +
+ " } " +
+ "}";
+
+ InputStream rawDoc = new ByteArrayInputStream(Utf8.toBytes(doc));
JsonReader r = new JsonReader(types, rawDoc, parserFactory);
- DocumentPut put = (DocumentPut) r.readSingleDocument(DocumentParser.SupportedOperation.PUT, "id:unittest:smoke::whee");
+ DocumentPut put = (DocumentPut) r.readSingleDocument(DocumentParser.SupportedOperation.PUT,
+ "id:unittest:smoke::doc1");
smokeTestDoc(put.getDocument());
}
@@ -196,7 +205,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void readClearField() {
+ public void readClearField() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"update\": \"id:unittest:smoke::whee\","
+ " \"fields\": { \"int1\": {"
@@ -211,11 +220,17 @@ public class JsonReaderTestCase {
@Test
- public final void smokeTest() throws IOException {
- InputStream rawDoc = new ByteArrayInputStream(
- Utf8.toBytes("{\"put\": \"id:unittest:smoke::whee\","
- + " \"fields\": { \"something\": \"smoketest\","
- + " \"nalle\": \"bamse\"}}"));
+ public void smokeTest() throws IOException {
+ String doc =
+ "{ \"put\": \"id:unittest:smoke::doc1\"," +
+ " \"fields\": { " +
+ " \"something\": \"smoketest\"," +
+ " \"flag\": true," +
+ " \"nalle\": \"bamse\"" +
+ " } " +
+ "}";
+
+ InputStream rawDoc = new ByteArrayInputStream(Utf8.toBytes(doc));
JsonReader r = new JsonReader(types, rawDoc, parserFactory);
DocumentParseInfo parseInfo = r.parseDocument().get();
DocumentType docType = r.readDocumentType(parseInfo.documentId);
@@ -225,13 +240,18 @@ public class JsonReaderTestCase {
}
@Test
- public final void docIdLookaheadTest() throws IOException {
- InputStream rawDoc = new ByteArrayInputStream(
- Utf8.toBytes("{"
- + " \"fields\": { \"something\": \"smoketest\","
- + " \"nalle\": \"bamse\"},"
- + "\"put\": \"id:unittest:smoke::whee\""
- + "}"));
+ public void docIdLookaheadTest() throws IOException {
+ String doc =
+ "{ \"fields\": { " +
+ " \"something\": \"smoketest\"," +
+ " \"flag\": true," +
+ " \"nalle\": \"bamse\"" +
+ " }," +
+ " \"put\": \"id:unittest:smoke::doc1\"" +
+ " } " +
+ "}";
+
+ InputStream rawDoc = new ByteArrayInputStream(Utf8.toBytes(doc));
JsonReader r = new JsonReader(types, rawDoc, parserFactory);
DocumentParseInfo parseInfo = r.parseDocument().get();
DocumentType docType = r.readDocumentType(parseInfo.documentId);
@@ -242,10 +262,10 @@ public class JsonReaderTestCase {
@Test
- public final void emptyDocTest() throws IOException {
+ public void emptyDocTest() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
- Utf8.toBytes("{\"put\": \"id:unittest:smoke::whee\","
- + " \"fields\": {}}"));
+ Utf8.toBytes("{\"put\": \"id:unittest:smoke::whee\"," +
+ " \"fields\": {}}"));
JsonReader r = new JsonReader(types, rawDoc, parserFactory);
DocumentParseInfo parseInfo = r.parseDocument().get();
DocumentType docType = r.readDocumentType(parseInfo.documentId);
@@ -255,7 +275,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testStruct() throws IOException {
+ public void testStruct() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:mirrors::whee\","
+ " \"fields\": { "
@@ -285,7 +305,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testStructUpdate() throws IOException {
+ public void testStructUpdate() throws IOException {
DocumentUpdate put = parseUpdate("{\"update\": \"id:unittest:mirrors:g=test:whee\","
+ "\"create\": true,"
+ " \"fields\": { "
@@ -331,7 +351,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testUpdateArray() throws IOException {
+ public void testUpdateArray() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testarray::whee\","
+ " \"fields\": { " + "\"actualarray\": {"
+ " \"add\": ["
@@ -341,7 +361,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testUpdateWeighted() throws IOException {
+ public void testUpdateWeighted() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testset::whee\","
+ " \"fields\": { " + "\"actualset\": {"
+ " \"add\": {"
@@ -365,7 +385,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testUpdateMatch() throws IOException {
+ public void testUpdateMatch() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testset::whee\","
+ " \"fields\": { " + "\"actualset\": {"
+ " \"match\": {"
@@ -391,7 +411,7 @@ public class JsonReaderTestCase {
@SuppressWarnings({ "cast", "unchecked", "rawtypes" })
@Test
- public final void testArithmeticOperators() throws IOException {
+ public void testArithmeticOperators() throws IOException {
Tuple2[] operations = new Tuple2[] {
new Tuple2<String, Operator>(UPDATE_DECREMENT,
ArithmeticValueUpdate.Operator.SUB),
@@ -428,7 +448,7 @@ public class JsonReaderTestCase {
@SuppressWarnings("rawtypes")
@Test
- public final void testArrayIndexing() throws IOException {
+ public void testArrayIndexing() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testarray::whee\","
+ " \"fields\": { " + "\"actualarray\": {"
+ " \"match\": {"
@@ -451,7 +471,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testDocumentRemove() {
+ public void testDocumentRemove() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"remove\": \"id:unittest:smoke::whee\""
+ " }}"));
@@ -461,7 +481,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testWeightedSet() throws IOException {
+ public void testWeightedSet() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testset::whee\","
+ " \"fields\": { \"actualset\": {"
@@ -482,7 +502,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testArray() throws IOException {
+ public void testArray() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testarray::whee\","
+ " \"fields\": { \"actualarray\": ["
@@ -503,7 +523,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testMap() throws IOException {
+ public void testMap() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testmap::whee\","
+ " \"fields\": { \"actualmap\": {"
@@ -523,7 +543,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testOldMap() throws IOException {
+ public void testOldMap() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testmap::whee\","
+ " \"fields\": { \"actualmap\": ["
@@ -544,7 +564,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testPositionPositive() throws IOException {
+ public void testPositionPositive() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testsinglepos::bamf\","
+ " \"fields\": { \"singlepos\": \"N63.429722;E10.393333\" }}"));
@@ -561,7 +581,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testPositionNegative() throws IOException {
+ public void testPositionNegative() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testsinglepos::bamf\","
+ " \"fields\": { \"singlepos\": \"W46.63;S23.55\" }}"));
@@ -578,7 +598,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testRaw() throws IOException {
+ public void testRaw() throws IOException {
String stuff = new String(new JsonStringEncoder().quoteAsString(new Base64().encodeToString(Utf8.toBytes("smoketest"))));
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testraw::whee\","
@@ -600,7 +620,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testMapStringToArrayOfInt() throws IOException {
+ public void testMapStringToArrayOfInt() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testMapStringToArrayOfInt::whee\","
+ " \"fields\": { \"actualMapStringToArrayOfInt\": { \"bamse\": [1, 2, 3] }}}"));
@@ -621,7 +641,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testOldMapStringToArrayOfInt() throws IOException {
+ public void testOldMapStringToArrayOfInt() throws IOException {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("{\"put\": \"id:unittest:testMapStringToArrayOfInt::whee\","
+ " \"fields\": { \"actualMapStringToArrayOfInt\": ["
@@ -644,7 +664,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testAssignToString() throws IOException {
+ public void testAssignToString() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:smoke::whee\","
+ " \"fields\": { \"something\": {"
+ " \"assign\": \"orOther\" }}" + " }");
@@ -655,7 +675,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testAssignToArray() throws IOException {
+ public void testAssignToArray() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testMapStringToArrayOfInt::whee\","
+ " \"fields\": { \"actualMapStringToArrayOfInt\": {"
+ " \"assign\": { \"bamse\": [1, 2, 3] }}}}");
@@ -671,7 +691,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testOldAssignToArray() throws IOException {
+ public void testOldAssignToArray() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testMapStringToArrayOfInt::whee\","
+ " \"fields\": { \"actualMapStringToArrayOfInt\": {"
+ " \"assign\": ["
@@ -689,7 +709,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testAssignToWeightedSet() throws IOException {
+ public void testAssignToWeightedSet() throws IOException {
DocumentUpdate doc = parseUpdate("{\"update\": \"id:unittest:testset::whee\","
+ " \"fields\": { " + "\"actualset\": {"
+ " \"assign\": {"
@@ -706,10 +726,11 @@ public class JsonReaderTestCase {
@Test
- public final void testCompleteFeed() {
+ public void testCompleteFeed() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("[{\"put\": \"id:unittest:smoke::whee\","
+ " \"fields\": { \"something\": \"smoketest\","
+ + " \"flag\": true,"
+ " \"nalle\": \"bamse\"}}" + ", "
+ "{\"update\": \"id:unittest:testarray::whee\","
+ " \"fields\": { " + "\"actualarray\": {"
@@ -722,10 +743,11 @@ public class JsonReaderTestCase {
}
@Test
- public final void testCompleteFeedWithCreateAndCondition() {
+ public void testCompleteFeedWithCreateAndCondition() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("[{\"put\": \"id:unittest:smoke::whee\","
+ " \"fields\": { \"something\": \"smoketest\","
+ + " \"flag\": true,"
+ " \"nalle\": \"bamse\"}}" + ", "
+ "{"
+ "\"condition\":\"bla\","
@@ -755,14 +777,14 @@ public class JsonReaderTestCase {
}
@Test
- public final void testUpdateWithConditionAndCreateInDifferentOrdering() {
- final int documentsCreated = 106;
+ public void testUpdateWithConditionAndCreateInDifferentOrdering() {
+ int documentsCreated = 106;
List<String> parts = Arrays.asList(
"\"condition\":\"bla\"",
"\"update\": \"id:unittest:testarray::whee\"",
" \"fields\": { " + "\"actualarray\": { \"add\": [" + " \"person\",\"another person\"]}}",
" \"create\":true");
- final Random random = new Random(42);
+ Random random = new Random(42);
StringBuilder documents = new StringBuilder("[");
for (int x = 0; x < documentsCreated; x++) {
Collections.shuffle(parts, random);
@@ -790,7 +812,7 @@ public class JsonReaderTestCase {
@Test(expected=RuntimeException.class)
- public final void testCreateIfNonExistentInPut() {
+ public void testCreateIfNonExistentInPut() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("[{"
+ " \"create\":true,"
@@ -803,10 +825,11 @@ public class JsonReaderTestCase {
}
@Test
- public final void testCompleteFeedWithIdAfterFields() {
+ public void testCompleteFeedWithIdAfterFields() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("[{"
+ " \"fields\": { \"something\": \"smoketest\","
+ + " \"flag\": true,"
+ " \"nalle\": \"bamse\"},"
+ "\"put\": \"id:unittest:smoke::whee\""
+ "}" + ", "
@@ -840,7 +863,7 @@ public class JsonReaderTestCase {
@Test
- public final void testCompleteFeedWithEmptyDoc() {
+ public void testCompleteFeedWithEmptyDoc() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("[{\"put\": \"id:unittest:smoke::whee\","
+ " \"fields\": {}}" + ", "
@@ -879,10 +902,13 @@ public class JsonReaderTestCase {
}
private void smokeTestDoc(Document doc) {
- FieldValue f = doc.getFieldValue(doc.getField("nalle"));
- assertSame(StringFieldValue.class, f.getClass());
- StringFieldValue s = (StringFieldValue) f;
- assertEquals("bamse", s.getString());
+ FieldValue boolField = doc.getFieldValue(doc.getField("flag"));
+ assertSame(BoolFieldValue.class, boolField.getClass());
+ assertTrue((Boolean)boolField.getWrappedValue());
+
+ FieldValue stringField = doc.getFieldValue(doc.getField("nalle"));
+ assertSame(StringFieldValue.class, stringField.getClass());
+ assertEquals("bamse", ((StringFieldValue) stringField).getString());
}
@Test
@@ -901,7 +927,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void feedWithBasicErrorTest() {
+ public void feedWithBasicErrorTest() {
InputStream rawDoc = new ByteArrayInputStream(
Utf8.toBytes("["
+ " { \"put\": \"id:test:smoke::0\", \"fields\": { \"something\": \"foo\" } },"
@@ -915,10 +941,11 @@ public class JsonReaderTestCase {
}
@Test
- public final void idAsAliasForPutTest() throws IOException{
+ public void idAsAliasForPutTest() throws IOException{
InputStream rawDoc = new ByteArrayInputStream(
- Utf8.toBytes("{\"id\": \"id:unittest:smoke::whee\","
+ Utf8.toBytes("{\"id\": \"id:unittest:smoke::doc1\","
+ " \"fields\": { \"something\": \"smoketest\","
+ + " \"flag\": true,"
+ " \"nalle\": \"bamse\"}}"));
JsonReader r = new JsonReader(types, rawDoc, parserFactory);
DocumentParseInfo parseInfo = r.parseDocument().get();
@@ -948,7 +975,7 @@ public class JsonReaderTestCase {
}
@Test
- public final void testFeedWithTestAndSetConditionOrderingOne() {
+ public void testFeedWithTestAndSetConditionOrderingOne() {
testFeedWithTestAndSetCondition(
inputJson("[",
" {",