Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix usage of array types in DSL #103

Merged
merged 5 commits into from
May 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,16 @@ package object hardcoded {
implicit lazy val OffsetTimeWrites: play.api.libs.json.Writes[java.time.OffsetTime] = play.api.libs.json.Writes.StringWrites.contramap(_.toString)
implicit lazy val ShortArrayToStatement: anorm.ToStatement[Array[scala.Short]] = anorm.ToStatement[Array[scala.Short]]((ps, index, v) => ps.setArray(index, ps.getConnection.createArrayOf("int2", v.map(v => v: java.lang.Short))))
implicit def arrayParameterMetaData[T](implicit T: anorm.ParameterMetaData[T]): anorm.ParameterMetaData[Array[T]] = new anorm.ParameterMetaData[Array[T]] {
override def sqlType: java.lang.String = "_" + T.sqlType
override def sqlType: java.lang.String =
T.sqlType match {
case "INTEGER" => "int4[]"
case "FLOAT" => "float4[]"
case "DOUBLE PRECISION" => "float8[]"
case "DECIMAL" => "float8[]"
case "VARCHAR" => "text[]"
case other => s"${other}[]"
}

override def jdbcType: scala.Int = java.sql.Types.ARRAY
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,16 @@ package object hardcoded {
implicit lazy val OffsetTimeWrites: play.api.libs.json.Writes[java.time.OffsetTime] = play.api.libs.json.Writes.StringWrites.contramap(_.toString)
implicit lazy val ShortArrayToStatement: anorm.ToStatement[Array[scala.Short]] = anorm.ToStatement[Array[scala.Short]]((ps, index, v) => ps.setArray(index, ps.getConnection.createArrayOf("int2", v.map(v => v: java.lang.Short))))
implicit def arrayParameterMetaData[T](implicit T: anorm.ParameterMetaData[T]): anorm.ParameterMetaData[Array[T]] = new anorm.ParameterMetaData[Array[T]] {
override def sqlType: java.lang.String = "_" + T.sqlType
override def sqlType: java.lang.String =
T.sqlType match {
case "INTEGER" => "int4[]"
case "FLOAT" => "float4[]"
case "DOUBLE PRECISION" => "float8[]"
case "DECIMAL" => "float8[]"
case "VARCHAR" => "text[]"
case other => s"${other}[]"
}

override def jdbcType: scala.Int = java.sql.Types.ARRAY
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object Number {
val ByName: Map[String, Number] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayGet: Get[Array[Number]] = testdb.hardcoded.StringArrayMeta.get.map(_.map(force))
implicit lazy val arrayPut: Put[Array[Number]] = Put.Advanced.array[AnyRef](NonEmptyList.one("_myschema.number"), "myschema.number").contramap(_.map(_.value))
implicit lazy val arrayPut: Put[Array[Number]] = Put.Advanced.array[AnyRef](NonEmptyList.one("myschema.number[]"), "myschema.number").contramap(_.map(_.value))
implicit lazy val decoder: Decoder[Number] = Decoder.decodeString.emap(Number.apply)
implicit lazy val encoder: Encoder[Number] = Encoder.encodeString.contramap(_.value)
implicit lazy val get: Get[Number] = Meta.StringMeta.get.temap(Number.apply)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object Sector {
val ByName: Map[String, Sector] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayGet: Get[Array[Sector]] = testdb.hardcoded.StringArrayMeta.get.map(_.map(force))
implicit lazy val arrayPut: Put[Array[Sector]] = Put.Advanced.array[AnyRef](NonEmptyList.one("_myschema.sector"), "myschema.sector").contramap(_.map(_.value))
implicit lazy val arrayPut: Put[Array[Sector]] = Put.Advanced.array[AnyRef](NonEmptyList.one("myschema.sector[]"), "myschema.sector").contramap(_.map(_.value))
implicit lazy val decoder: Decoder[Sector] = Decoder.decodeString.emap(Sector.apply)
implicit lazy val encoder: Encoder[Sector] = Encoder.encodeString.contramap(_.value)
implicit lazy val get: Get[Sector] = Meta.StringMeta.get.temap(Sector.apply)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object Number {
val ByName: Map[String, Number] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayGet: Get[Array[Number]] = testdb.hardcoded.StringArrayMeta.get.map(_.map(force))
implicit lazy val arrayPut: Put[Array[Number]] = Put.Advanced.array[AnyRef](NonEmptyList.one("_myschema.number"), "myschema.number").contramap(_.map(_.value))
implicit lazy val arrayPut: Put[Array[Number]] = Put.Advanced.array[AnyRef](NonEmptyList.one("myschema.number[]"), "myschema.number").contramap(_.map(_.value))
implicit lazy val decoder: Decoder[Number] = Decoder.decodeString.emap(Number.apply)
implicit lazy val encoder: Encoder[Number] = Encoder.encodeString.contramap(_.value)
implicit lazy val get: Get[Number] = Meta.StringMeta.get.temap(Number.apply)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object Sector {
val ByName: Map[String, Sector] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayGet: Get[Array[Sector]] = testdb.hardcoded.StringArrayMeta.get.map(_.map(force))
implicit lazy val arrayPut: Put[Array[Sector]] = Put.Advanced.array[AnyRef](NonEmptyList.one("_myschema.sector"), "myschema.sector").contramap(_.map(_.value))
implicit lazy val arrayPut: Put[Array[Sector]] = Put.Advanced.array[AnyRef](NonEmptyList.one("myschema.sector[]"), "myschema.sector").contramap(_.map(_.value))
implicit lazy val decoder: Decoder[Sector] = Decoder.decodeString.emap(Sector.apply)
implicit lazy val encoder: Encoder[Sector] = Encoder.encodeString.contramap(_.value)
implicit lazy val get: Get[Sector] = Meta.StringMeta.get.temap(Sector.apply)
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
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
48 changes: 48 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,48 @@
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 + "[]"
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 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 PGTypeJBigDecimal: PGType[java.math.BigDecimal] = instance(sqlType = PGTypeBigDecimal.sqlType, jdbcType = PGTypeBigDecimal.jdbcType)
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
Loading