From 25997ff4f19b98fe50c6490f0ae06e56c63056c7 Mon Sep 17 00:00:00 2001 From: cwgroppe Date: Tue, 27 Jul 2021 17:43:42 -0400 Subject: [PATCH] Adding Unsigned Long Field Type (#2482) * local test / inital idea for unsigned long field type * removed range - not actual type and added unsigned long string * needed to update NumberFieldBuilderFn with string * fixed compilation errors from typos like elastic4s somehow got changed to elastic5s * typos, typos everywhere... double trippled checked with the tests --- .../com/sksamuel/elastic4s/api/TypesApi.scala | 21 ++++++++++--------- .../elastic4s/fields/UnsignedLongField.scala | 14 +++++++++++++ .../fields/UnsignedLongStringField.scala | 14 +++++++++++++ .../fields/NumberFieldBuilderFn.scala | 1 + project/metals.sbt | 4 ++++ 5 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongField.scala create mode 100644 elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongStringField.scala create mode 100644 project/metals.sbt diff --git a/elastic4s-core/src/main/scala/com/sksamuel/elastic4s/api/TypesApi.scala b/elastic4s-core/src/main/scala/com/sksamuel/elastic4s/api/TypesApi.scala index 2816721b5..e97af53c9 100644 --- a/elastic4s-core/src/main/scala/com/sksamuel/elastic4s/api/TypesApi.scala +++ b/elastic4s-core/src/main/scala/com/sksamuel/elastic4s/api/TypesApi.scala @@ -1,6 +1,6 @@ package com.sksamuel.elastic4s.api -import com.sksamuel.elastic4s.fields.{BinaryField, BooleanField, ByteField, CompletionField, DateField, DoubleField, FloatField, GeoPointField, GeoShapeField, HalfFloatField, IntegerField, IpField, JoinField, KeywordField, LongField, NestedField, ObjectField, ScaledFloatField, SearchAsYouTypeField, ShortField, TextField, WildcardField} +import com.sksamuel.elastic4s.fields.{BinaryField, BooleanField, ByteField, CompletionField, DateField, DoubleField, FloatField, GeoPointField, GeoShapeField, HalfFloatField, IntegerField, IpField, JoinField, KeywordField, LongField, NestedField, ObjectField, ScaledFloatField, SearchAsYouTypeField, ShortField, TextField, UnsignedLongField, WildcardField} import com.sksamuel.elastic4s.requests.script.{Script, ScriptField} trait TypesApi { @@ -10,15 +10,16 @@ trait TypesApi { def wildcardField(name: String): WildcardField = WildcardField(name) def searchAsYouType(name: String): SearchAsYouTypeField = SearchAsYouTypeField(name) - def byteField(name: String) = ByteField(name) - def doubleField(name: String) = DoubleField(name) - def floatField(name: String) = FloatField(name) - def halfFloatField(name: String) = HalfFloatField(name) - def intField(name: String) = IntegerField(name) - def longField(name: String) = LongField(name) - def booleanField(name: String) = BooleanField(name) - def scaledFloatField(name: String) = ScaledFloatField(name) - def shortField(name: String) = ShortField(name) + def byteField(name: String) = ByteField(name) + def doubleField(name: String) = DoubleField(name) + def floatField(name: String) = FloatField(name) + def halfFloatField(name: String) = HalfFloatField(name) + def intField(name: String) = IntegerField(name) + def unsignedLongfield(name: String) = UnsignedLongField(name) + def longField(name: String) = LongField(name) + def booleanField(name: String) = BooleanField(name) + def scaledFloatField(name: String) = ScaledFloatField(name) + def shortField(name: String) = ShortField(name) def dateField(name: String) = DateField(name) def geopointField(name: String) = GeoPointField(name) diff --git a/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongField.scala b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongField.scala new file mode 100644 index 000000000..b85a6fbd7 --- /dev/null +++ b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongField.scala @@ -0,0 +1,14 @@ +package com.sksamuel.elastic4s.fields + +case class UnsignedLongField(name: String, + boost: Option[Double] = None, + coerce: Option[Boolean] = None, + copyTo: Seq[String] = Nil, + docValues: Option[Boolean] = None, + ignoreMalformed: Option[Boolean] = None, + index: Option[Boolean] = None, + store: Option[Boolean] = None, + nullValue: Option[Long] = None, + meta: Map[String, Any] = Map.empty) extends NumberField[Long] { + override def `type`: String = "unsigned_long" +} diff --git a/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongStringField.scala b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongStringField.scala new file mode 100644 index 000000000..157d970fa --- /dev/null +++ b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/fields/UnsignedLongStringField.scala @@ -0,0 +1,14 @@ +package com.sksamuel.elastic4s.fields + +case class UnsignedLongStringField(name: String, + boost: Option[Double] = None, + coerce: Option[Boolean] = None, + copyTo: Seq[String] = Nil, + docValues: Option[Boolean] = None, + ignoreMalformed: Option[Boolean] = None, + index: Option[Boolean] = None, + store: Option[Boolean] = None, + nullValue: Option[String] = None, + meta: Map[String, Any] = Map.empty) extends NumberField[String] { + override def `type`: String = "unsigned_long" +} diff --git a/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/fields/NumberFieldBuilderFn.scala b/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/fields/NumberFieldBuilderFn.scala index a8a266b1e..d69729d38 100644 --- a/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/fields/NumberFieldBuilderFn.scala +++ b/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/fields/NumberFieldBuilderFn.scala @@ -23,6 +23,7 @@ object NumberFieldBuilderFn { case v: Int => builder.field("null_value", v) case v: Byte => builder.field("null_value", v) case v: Short => builder.field("null_value", v) + case v: String => builder.field("null_value", v) } field.store.foreach(builder.field("store", _)) field.coerce.foreach(builder.field("coerce", _)) diff --git a/project/metals.sbt b/project/metals.sbt new file mode 100644 index 000000000..343a26a63 --- /dev/null +++ b/project/metals.sbt @@ -0,0 +1,4 @@ +// DO NOT EDIT! This file is auto-generated. +// This file enables sbt-bloop to create bloop config files. + +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.3")