Skip to content

Commit

Permalink
PGType for zio-jdbc
Browse files Browse the repository at this point in the history
  • Loading branch information
oyvindberg committed May 20, 2024
1 parent fa64e29 commit 008c08a
Show file tree
Hide file tree
Showing 93 changed files with 419 additions and 460 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package myschema
import java.sql.ResultSet
import java.sql.Types
import testdb.hardcoded.Text
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcDecoderError
import zio.jdbc.JdbcEncoder
Expand Down Expand Up @@ -65,7 +65,7 @@ object Number {
implicit lazy val jsonDecoder: JsonDecoder[Number] = JsonDecoder.string.mapOrFail(Number.apply)
implicit lazy val jsonEncoder: JsonEncoder[Number] = JsonEncoder.string.contramap(_.value)
implicit lazy val ordering: Ordering[Number] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[Number] = ParameterMetaData.instance[Number]("myschema.number", Types.OTHER)
implicit lazy val pgType: PGType[Number] = PGType.instance[Number]("myschema.number", Types.OTHER)
implicit lazy val setter: Setter[Number] = Setter.stringSetter.contramap(_.value)
implicit lazy val text: Text[Number] = new Text[Number] {
override def unsafeEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package myschema
import java.sql.ResultSet
import java.sql.Types
import testdb.hardcoded.Text
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcDecoderError
import zio.jdbc.JdbcEncoder
Expand Down Expand Up @@ -65,7 +65,7 @@ object Sector {
implicit lazy val jsonDecoder: JsonDecoder[Sector] = JsonDecoder.string.mapOrFail(Sector.apply)
implicit lazy val jsonEncoder: JsonEncoder[Sector] = JsonEncoder.string.contramap(_.value)
implicit lazy val ordering: Ordering[Sector] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[Sector] = ParameterMetaData.instance[Sector]("myschema.sector", Types.OTHER)
implicit lazy val pgType: PGType[Sector] = PGType.instance[Sector]("myschema.sector", Types.OTHER)
implicit lazy val setter: Setter[Sector] = Setter.stringSetter.contramap(_.value)
implicit lazy val text: Text[Sector] = new Text[Sector] {
override def unsafeEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package football_club

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object FootballClubId {
implicit lazy val jsonDecoder: JsonDecoder[FootballClubId] = JsonDecoder.long.map(FootballClubId.apply)
implicit lazy val jsonEncoder: JsonEncoder[FootballClubId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[FootballClubId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[FootballClubId] = ParameterMetaData.instance[FootballClubId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[FootballClubId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[FootballClubId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[FootballClubId] = new Text[FootballClubId] {
override def unsafeEncode(v: FootballClubId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package marital_status

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object MaritalStatusId {
implicit lazy val jsonDecoder: JsonDecoder[MaritalStatusId] = JsonDecoder.long.map(MaritalStatusId.apply)
implicit lazy val jsonEncoder: JsonEncoder[MaritalStatusId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[MaritalStatusId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[MaritalStatusId] = ParameterMetaData.instance[MaritalStatusId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[MaritalStatusId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[MaritalStatusId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[MaritalStatusId] = new Text[MaritalStatusId] {
override def unsafeEncode(v: MaritalStatusId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package person

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object PersonId {
implicit lazy val jsonDecoder: JsonDecoder[PersonId] = JsonDecoder.long.map(PersonId.apply)
implicit lazy val jsonEncoder: JsonEncoder[PersonId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[PersonId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[PersonId] = ParameterMetaData.instance[PersonId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[PersonId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[PersonId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[PersonId] = new Text[PersonId] {
override def unsafeEncode(v: PersonId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package myschema
import java.sql.ResultSet
import java.sql.Types
import testdb.hardcoded.Text
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcDecoderError
import zio.jdbc.JdbcEncoder
Expand Down Expand Up @@ -65,7 +65,7 @@ object Number {
implicit lazy val jsonDecoder: JsonDecoder[Number] = JsonDecoder.string.mapOrFail(Number.apply)
implicit lazy val jsonEncoder: JsonEncoder[Number] = JsonEncoder.string.contramap(_.value)
implicit lazy val ordering: Ordering[Number] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[Number] = ParameterMetaData.instance[Number]("myschema.number", Types.OTHER)
implicit lazy val pgType: PGType[Number] = PGType.instance[Number]("myschema.number", Types.OTHER)
implicit lazy val setter: Setter[Number] = Setter.stringSetter.contramap(_.value)
implicit lazy val text: Text[Number] = new Text[Number] {
override def unsafeEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package myschema
import java.sql.ResultSet
import java.sql.Types
import testdb.hardcoded.Text
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcDecoderError
import zio.jdbc.JdbcEncoder
Expand Down Expand Up @@ -65,7 +65,7 @@ object Sector {
implicit lazy val jsonDecoder: JsonDecoder[Sector] = JsonDecoder.string.mapOrFail(Sector.apply)
implicit lazy val jsonEncoder: JsonEncoder[Sector] = JsonEncoder.string.contramap(_.value)
implicit lazy val ordering: Ordering[Sector] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[Sector] = ParameterMetaData.instance[Sector]("myschema.sector", Types.OTHER)
implicit lazy val pgType: PGType[Sector] = PGType.instance[Sector]("myschema.sector", Types.OTHER)
implicit lazy val setter: Setter[Sector] = Setter.stringSetter.contramap(_.value)
implicit lazy val text: Text[Sector] = new Text[Sector] {
override def unsafeEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package football_club

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object FootballClubId {
implicit lazy val jsonDecoder: JsonDecoder[FootballClubId] = JsonDecoder.long.map(FootballClubId.apply)
implicit lazy val jsonEncoder: JsonEncoder[FootballClubId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[FootballClubId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[FootballClubId] = ParameterMetaData.instance[FootballClubId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[FootballClubId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[FootballClubId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[FootballClubId] = new Text[FootballClubId] {
override def unsafeEncode(v: FootballClubId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package marital_status

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object MaritalStatusId {
implicit lazy val jsonDecoder: JsonDecoder[MaritalStatusId] = JsonDecoder.long.map(MaritalStatusId.apply)
implicit lazy val jsonEncoder: JsonEncoder[MaritalStatusId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[MaritalStatusId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[MaritalStatusId] = ParameterMetaData.instance[MaritalStatusId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[MaritalStatusId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[MaritalStatusId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[MaritalStatusId] = new Text[MaritalStatusId] {
override def unsafeEncode(v: MaritalStatusId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package person

import testdb.hardcoded.Text
import typo.dsl.Bijection
import typo.dsl.ParameterMetaData
import typo.dsl.PGType
import zio.jdbc.JdbcDecoder
import zio.jdbc.JdbcEncoder
import zio.jdbc.SqlFragment.Setter
Expand All @@ -27,7 +27,7 @@ object PersonId {
implicit lazy val jsonDecoder: JsonDecoder[PersonId] = JsonDecoder.long.map(PersonId.apply)
implicit lazy val jsonEncoder: JsonEncoder[PersonId] = JsonEncoder.long.contramap(_.value)
implicit lazy val ordering: Ordering[PersonId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[PersonId] = ParameterMetaData.instance[PersonId](ParameterMetaData.LongParameterMetaData.sqlType, ParameterMetaData.LongParameterMetaData.jdbcType)
implicit lazy val pgType: PGType[PersonId] = PGType.PGTypeLong.as
implicit lazy val setter: Setter[PersonId] = Setter.longSetter.contramap(_.value)
implicit lazy val text: Text[PersonId] = new Text[PersonId] {
override def unsafeEncode(v: PersonId, sb: StringBuilder) = Text.longInstance.unsafeEncode(v.value, sb)
Expand Down
52 changes: 52 additions & 0 deletions typo-dsl-zio-jdbc/src/scala/typo/dsl/PGType.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package typo.dsl

import java.sql.Types

/** ** Copied from anorm**
*
* Parameter meta data for type `T`
*/
trait PGType[T] {
def sqlType: String
def jdbcType: Int
final def as[U]: PGType[U] = PGType.instance(sqlType, jdbcType)
}

object PGType {
def instance[T](sqlType: String, jdbcType: Int): PGType[T] = {
val _sqlType = sqlType
val _jdbcType = jdbcType
new PGType[T] {
val sqlType = _sqlType
val jdbcType = _jdbcType
}
}

implicit def forArray[T](implicit T: PGType[T]): PGType[Array[T]] = new PGType[Array[T]] {
override def sqlType: java.lang.String =
T.sqlType.split('.') match {
case Array(schema, name) => s"$schema._$name"
case _ => s"_${T.sqlType}"
}
override def jdbcType: scala.Int = java.sql.Types.ARRAY
}

implicit val PGTypeBigDecimal: PGType[BigDecimal] = instance(sqlType = "numeric", jdbcType = Types.DECIMAL)
implicit val PGTypeByteArray: PGType[Array[Byte]] = instance(sqlType = "bytea", jdbcType = Types.ARRAY)
implicit val PGTypeBigDecimalJava: PGType[java.math.BigDecimal] = instance(sqlType = PGTypeBigDecimal.sqlType, jdbcType = PGTypeBigDecimal.jdbcType)
implicit val PGTypeBoolean: PGType[Boolean] = instance(sqlType = "boolean", jdbcType = Types.BOOLEAN)
implicit val PGTypeDouble: PGType[Double] = instance(sqlType = "float8", jdbcType = Types.DOUBLE)
implicit val PGTypeFloat: PGType[Float] = instance(sqlType = "float4", jdbcType = Types.FLOAT)
implicit val PGTypeInt: PGType[Int] = instance(sqlType = "int4", jdbcType = Types.INTEGER)
implicit val PGTypeLong: PGType[Long] = instance(sqlType = "int8", jdbcType = Types.BIGINT)
implicit val PGTypeShort: PGType[Short] = instance(sqlType = "int2", jdbcType = Types.SMALLINT)
implicit val PGTypeString: PGType[String] = instance(sqlType = "text", jdbcType = Types.VARCHAR)
implicit val PGTypeUUID: PGType[java.util.UUID] = instance(sqlType = "uuid", jdbcType = Types.OTHER)

implicit val PGTypeJBool: PGType[java.lang.Boolean] = instance(sqlType = PGTypeBoolean.sqlType, jdbcType = PGTypeBoolean.jdbcType)
implicit val PGTypeJDouble: PGType[java.lang.Double] = instance(sqlType = PGTypeDouble.sqlType, jdbcType = PGTypeDouble.jdbcType)
implicit val PGTypeJInteger: PGType[java.lang.Integer] = instance(sqlType = PGTypeInt.sqlType, jdbcType = PGTypeInt.jdbcType)
implicit val PGTypeJFloat: PGType[java.lang.Float] = instance(sqlType = PGTypeFloat.sqlType, jdbcType = PGTypeFloat.jdbcType)
implicit val PGTypeJLong: PGType[java.lang.Long] = instance(sqlType = PGTypeLong.sqlType, jdbcType = PGTypeLong.jdbcType)
implicit val PGTypeJShort: PGType[java.lang.Short] = instance(sqlType = PGTypeShort.sqlType, jdbcType = PGTypeShort.jdbcType)
}
Loading

0 comments on commit 008c08a

Please sign in to comment.