-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
decoder: implement missing num/array/int decoders
- Loading branch information
Showing
22 changed files
with
187 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package io.findify.clickhouse.format | ||
|
||
import org.joda.time.{LocalDate, LocalDateTime} | ||
|
||
sealed trait Scalar[T] | ||
|
||
object Scalar { | ||
implicit def intScalar = new Scalar[Int] {} | ||
implicit def longScalar = new Scalar[Long] {} | ||
implicit def floatScalar = new Scalar[Float] {} | ||
implicit def doubleScalar = new Scalar[Double] {} | ||
implicit def byteScalar = new Scalar[Byte] {} | ||
implicit def booleanScalar = new Scalar[Boolean] {} | ||
implicit def stringScalar = new Scalar[String] {} | ||
implicit def dateScalar = new Scalar[LocalDate] {} | ||
implicit def dateTimeScalar = new Scalar[LocalDateTime] {} | ||
} |
4 changes: 2 additions & 2 deletions
4
src/main/scala/io/findify/clickhouse/format/decoder/ArrayDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/BooleanDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.{ByteNumber, Int8, UInt8} | ||
|
||
class BooleanDecoder extends Decoder[Boolean, ByteNumber] { | ||
override def decodeValue: PartialFunction[Field, Boolean] = { | ||
case Int8(value) => value == 1 | ||
case UInt8(value) => value == 1 | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/ByteDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field._ | ||
|
||
class ByteDecoder extends Decoder[Byte, ByteNumber] { | ||
override def decodeValue: PartialFunction[Field, Byte] = { | ||
case UInt8(i) => i | ||
case Int8(i) => i | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/DateDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.CDate | ||
import org.joda.time.LocalDate | ||
|
||
class DateDecoder extends Decoder[LocalDate, CDate] { | ||
override def decodeValue: PartialFunction[Field, LocalDate] = { | ||
case CDate(value) => value | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/DateTimeDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.CDateTime | ||
import org.joda.time.LocalDateTime | ||
|
||
class DateTimeDecoder extends Decoder[LocalDateTime, CDateTime] { | ||
override def decodeValue: PartialFunction[Field, LocalDateTime] = { | ||
case CDateTime(value) => value | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/scala/io/findify/clickhouse/format/decoder/DoubleDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.Float64 | ||
|
||
class DoubleDecoder extends Decoder[Double, Float64] { | ||
override def decodeValue: PartialFunction[Field, Double] = { | ||
case Float64(i) => i | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/scala/io/findify/clickhouse/format/decoder/FloatDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.Float32 | ||
|
||
class FloatDecoder extends Decoder[Float, Float32] { | ||
override def decodeValue: PartialFunction[Field, Float] = { | ||
case Float32(i) => i | ||
} | ||
} |
18 changes: 6 additions & 12 deletions
18
src/main/scala/io/findify/clickhouse/format/decoder/IntDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.{Int32, UInt32} | ||
import io.findify.clickhouse.format.Field.{Int32, IntNumber, UInt32} | ||
|
||
object IntDecoder { | ||
class Int32Decoder extends Decoder[Int, Int32] { | ||
override def decodeValue: PartialFunction[Field, Int] = { | ||
case Int32(i) => i | ||
} | ||
class IntDecoder extends Decoder[Int, IntNumber] { | ||
override def decodeValue: PartialFunction[Field, Int] = { | ||
case Int32(i) => i | ||
case UInt32(i) => i | ||
} | ||
class UInt32Decoder extends Decoder[Int, UInt32] { | ||
override def decodeValue: PartialFunction[Field, Int] = { | ||
case UInt32(i) => i | ||
} | ||
} | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/LongDecoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.Field.{Int64, LongNumber, UInt64} | ||
|
||
class LongDecoder extends Decoder[Long, LongNumber] { | ||
override def decodeValue: PartialFunction[Field, Long] = { | ||
case UInt64(i) => i | ||
case Int64(i) => i | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/scala/io/findify/clickhouse/format/decoder/OptionEncoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import io.findify.clickhouse.format.{Field, Scalar} | ||
import io.findify.clickhouse.format.Field.{Nullable, ScalarField} | ||
|
||
class OptionEncoder[T, F <: ScalarField](implicit dec: Decoder[T, F], s: Scalar[T]) extends Decoder[Option[T], Nullable[F]] { | ||
override def decodeValue: PartialFunction[Field, Option[T]] = { | ||
case Nullable(Some(in)) => dec.decodeValue.lift(in) | ||
case Nullable(None) => None | ||
} | ||
} |
19 changes: 14 additions & 5 deletions
19
src/main/scala/io/findify/clickhouse/format/decoder/generic.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
src/main/scala/io/findify/clickhouse/format/encoder/ArrayEncoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
package io.findify.clickhouse.format.encoder | ||
import io.findify.clickhouse.format.Field | ||
import io.findify.clickhouse.format.{Field, Scalar} | ||
import io.findify.clickhouse.format.Field.{CArray, ScalarField} | ||
|
||
class ArrayEncoder[T <: AnyVal, F <: ScalarField](implicit enc: ScalarEncoder[T,F]) extends ScalarEncoder[Seq[T], CArray[F]] { | ||
class ArrayEncoder[T, F <: ScalarField](implicit enc: ScalarEncoder[T,F], s: Scalar[T]) extends ScalarEncoder[Seq[T], CArray[F]] { | ||
override def encode(value: Seq[T]): CArray[F] = CArray(value.map(enc.encode)) | ||
} |
4 changes: 2 additions & 2 deletions
4
src/main/scala/io/findify/clickhouse/format/encoder/OptionEncoder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 6 additions & 4 deletions
10
src/main/scala/io/findify/clickhouse/format/encoder/generic.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
src/test/scala/io/findify/clickhouse/format/decoder/OptionDecoderTest.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package io.findify.clickhouse.format.decoder | ||
|
||
import org.scalatest.{FlatSpec, Matchers} | ||
|
||
class OptionDecoderTest extends FlatSpec with Matchers { | ||
import io.findify.clickhouse.format.decoder.generic._ | ||
import io.findify.clickhouse.format.decoder.generic.auto._ | ||
|
||
it should "decode simple options" in { | ||
case class Hello(a: Option[Int]) | ||
val dec = deriveDecoder[Hello] | ||
} | ||
|
||
it should "decode options of non-value classes" in { | ||
case class Hello(a: Option[String]) | ||
val dec = deriveDecoder[Hello] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters