Skip to content
Closed
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/
package adventureworks

import adventureworks.frontpage.Email
import adventureworks.public.AccountNumber
import adventureworks.public.Flag
import adventureworks.public.Mydomain
Expand All @@ -16,6 +17,10 @@ import adventureworks.public.ShortText
import scala.util.Random

trait TestDomainInsert {
/** Domain `frontpage.email`
* Constraint: CHECK ((VALUE ~ '^[^@]+@[^@]+\.[^@]+$'::text))
*/
def frontpageEmail(random: Random): Email
/** Domain `public.AccountNumber`
* No constraint
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage

import anorm.Column
import anorm.ParameterMetaData
import anorm.ToStatement
import java.sql.Types
import play.api.libs.json.Reads
import play.api.libs.json.Writes
import typo.dsl.Bijection

/** Domain `frontpage.email`
* Constraint: CHECK ((VALUE ~ '^[^@]+@[^@]+\.[^@]+$'::text))
*/
case class Email(value: String)
object Email {
implicit lazy val arrayColumn: Column[Array[Email]] = Column.columnToArray(column, implicitly)
implicit lazy val arrayToStatement: ToStatement[Array[Email]] = ToStatement.arrayToParameter(ParameterMetaData.StringParameterMetaData).contramap(_.map(_.value))
implicit lazy val bijection: Bijection[Email, String] = Bijection[Email, String](_.value)(Email.apply)
implicit lazy val column: Column[Email] = Column.columnToString.map(Email.apply)
implicit lazy val ordering: Ordering[Email] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[Email] = new ParameterMetaData[Email] {
override def sqlType: String = """"frontpage"."email""""
override def jdbcType: Int = Types.OTHER
}
implicit lazy val reads: Reads[Email] = Reads.StringReads.map(Email.apply)
implicit lazy val text: Text[Email] = new Text[Email] {
override def unsafeEncode(v: Email, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
override def unsafeArrayEncode(v: Email, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb)
}
implicit lazy val toStatement: ToStatement[Email] = ToStatement.stringToStatement.contramap(_.value)
implicit lazy val writes: Writes[Email] = Writes.StringWrites.contramap(_.value)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage

import anorm.Column
import anorm.ParameterMetaData
import anorm.SqlMappingError
import anorm.ToStatement
import java.sql.Types
import play.api.libs.json.JsError
import play.api.libs.json.JsSuccess
import play.api.libs.json.JsValue
import play.api.libs.json.Reads
import play.api.libs.json.Writes

/** Enum `frontpage.order_status`
* - pending
* - active
* - shipped
* - cancelled
*/
sealed abstract class OrderStatus(val value: String)

object OrderStatus {
def apply(str: String): Either[String, OrderStatus] =
ByName.get(str).toRight(s"'$str' does not match any of the following legal values: $Names")
def force(str: String): OrderStatus =
apply(str) match {
case Left(msg) => sys.error(msg)
case Right(value) => value
}
case object pending extends OrderStatus("pending")
case object active extends OrderStatus("active")
case object shipped extends OrderStatus("shipped")
case object cancelled extends OrderStatus("cancelled")
val All: List[OrderStatus] = List(pending, active, shipped, cancelled)
val Names: String = All.map(_.value).mkString(", ")
val ByName: Map[String, OrderStatus] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayColumn: Column[Array[OrderStatus]] = Column.columnToArray[String](Column.columnToString, implicitly).map(_.map(OrderStatus.force))
implicit lazy val arrayToStatement: ToStatement[Array[OrderStatus]] = ToStatement[Array[OrderStatus]]((ps, i, arr) => ps.setArray(i, ps.getConnection.createArrayOf("frontpage.order_status", arr.map[AnyRef](_.value))))
implicit lazy val column: Column[OrderStatus] = Column.columnToString.mapResult(str => OrderStatus(str).left.map(SqlMappingError.apply))
implicit lazy val ordering: Ordering[OrderStatus] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[OrderStatus] = new ParameterMetaData[OrderStatus] {
override def sqlType: String = "frontpage.order_status"
override def jdbcType: Int = Types.OTHER
}
implicit lazy val reads: Reads[OrderStatus] = Reads[OrderStatus]{(value: JsValue) => value.validate(Reads.StringReads).flatMap(str => OrderStatus(str).fold(JsError.apply, JsSuccess(_)))}
implicit lazy val text: Text[OrderStatus] = new Text[OrderStatus] {
override def unsafeEncode(v: OrderStatus, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
override def unsafeArrayEncode(v: OrderStatus, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb)
}
implicit lazy val toStatement: ToStatement[OrderStatus] = ToStatement.stringToStatement.contramap(_.value)
implicit lazy val writes: Writes[OrderStatus] = Writes[OrderStatus](value => Writes.StringWrites.writes(value.value))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage

import anorm.Column
import anorm.ParameterMetaData
import anorm.SqlMappingError
import anorm.ToStatement
import java.sql.Types
import play.api.libs.json.JsError
import play.api.libs.json.JsSuccess
import play.api.libs.json.JsValue
import play.api.libs.json.Reads
import play.api.libs.json.Writes

/** Enum `frontpage.user_role`
* - admin
* - manager
* - employee
*/
sealed abstract class UserRole(val value: String)

object UserRole {
def apply(str: String): Either[String, UserRole] =
ByName.get(str).toRight(s"'$str' does not match any of the following legal values: $Names")
def force(str: String): UserRole =
apply(str) match {
case Left(msg) => sys.error(msg)
case Right(value) => value
}
case object admin extends UserRole("admin")
case object manager extends UserRole("manager")
case object employee extends UserRole("employee")
val All: List[UserRole] = List(admin, manager, employee)
val Names: String = All.map(_.value).mkString(", ")
val ByName: Map[String, UserRole] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayColumn: Column[Array[UserRole]] = Column.columnToArray[String](Column.columnToString, implicitly).map(_.map(UserRole.force))
implicit lazy val arrayToStatement: ToStatement[Array[UserRole]] = ToStatement[Array[UserRole]]((ps, i, arr) => ps.setArray(i, ps.getConnection.createArrayOf("frontpage.user_role", arr.map[AnyRef](_.value))))
implicit lazy val column: Column[UserRole] = Column.columnToString.mapResult(str => UserRole(str).left.map(SqlMappingError.apply))
implicit lazy val ordering: Ordering[UserRole] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[UserRole] = new ParameterMetaData[UserRole] {
override def sqlType: String = "frontpage.user_role"
override def jdbcType: Int = Types.OTHER
}
implicit lazy val reads: Reads[UserRole] = Reads[UserRole]{(value: JsValue) => value.validate(Reads.StringReads).flatMap(str => UserRole(str).fold(JsError.apply, JsSuccess(_)))}
implicit lazy val text: Text[UserRole] = new Text[UserRole] {
override def unsafeEncode(v: UserRole, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
override def unsafeArrayEncode(v: UserRole, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb)
}
implicit lazy val toStatement: ToStatement[UserRole] = ToStatement.stringToStatement.contramap(_.value)
implicit lazy val writes: Writes[UserRole] = Writes[UserRole](value => Writes.StringWrites.writes(value.value))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage

import anorm.Column
import anorm.ParameterMetaData
import anorm.SqlMappingError
import anorm.ToStatement
import java.sql.Types
import play.api.libs.json.JsError
import play.api.libs.json.JsSuccess
import play.api.libs.json.JsValue
import play.api.libs.json.Reads
import play.api.libs.json.Writes

/** Enum `frontpage.user_status`
* - active
* - inactive
* - suspended
*/
sealed abstract class UserStatus(val value: String)

object UserStatus {
def apply(str: String): Either[String, UserStatus] =
ByName.get(str).toRight(s"'$str' does not match any of the following legal values: $Names")
def force(str: String): UserStatus =
apply(str) match {
case Left(msg) => sys.error(msg)
case Right(value) => value
}
case object active extends UserStatus("active")
case object inactive extends UserStatus("inactive")
case object suspended extends UserStatus("suspended")
val All: List[UserStatus] = List(active, inactive, suspended)
val Names: String = All.map(_.value).mkString(", ")
val ByName: Map[String, UserStatus] = All.map(x => (x.value, x)).toMap

implicit lazy val arrayColumn: Column[Array[UserStatus]] = Column.columnToArray[String](Column.columnToString, implicitly).map(_.map(UserStatus.force))
implicit lazy val arrayToStatement: ToStatement[Array[UserStatus]] = ToStatement[Array[UserStatus]]((ps, i, arr) => ps.setArray(i, ps.getConnection.createArrayOf("frontpage.user_status", arr.map[AnyRef](_.value))))
implicit lazy val column: Column[UserStatus] = Column.columnToString.mapResult(str => UserStatus(str).left.map(SqlMappingError.apply))
implicit lazy val ordering: Ordering[UserStatus] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[UserStatus] = new ParameterMetaData[UserStatus] {
override def sqlType: String = "frontpage.user_status"
override def jdbcType: Int = Types.OTHER
}
implicit lazy val reads: Reads[UserStatus] = Reads[UserStatus]{(value: JsValue) => value.validate(Reads.StringReads).flatMap(str => UserStatus(str).fold(JsError.apply, JsSuccess(_)))}
implicit lazy val text: Text[UserStatus] = new Text[UserStatus] {
override def unsafeEncode(v: UserStatus, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb)
override def unsafeArrayEncode(v: UserStatus, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb)
}
implicit lazy val toStatement: ToStatement[UserStatus] = ToStatement.stringToStatement.contramap(_.value)
implicit lazy val writes: Writes[UserStatus] = Writes[UserStatus](value => Writes.StringWrites.writes(value.value))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage
package address

import typo.dsl.Path
import typo.dsl.SqlExpr.Field
import typo.dsl.SqlExpr.FieldLikeNoHkt
import typo.dsl.SqlExpr.IdField
import typo.dsl.Structure.Relation

trait AddressFields {
def id: IdField[AddressId, AddressRow]
def city: Field[String, AddressRow]
def country: Field[String, AddressRow]
}

object AddressFields {
lazy val structure: Relation[AddressFields, AddressRow] =
new Impl(Nil)

private final class Impl(val _path: List[Path])
extends Relation[AddressFields, AddressRow] {

override lazy val fields: AddressFields = new AddressFields {
override def id = IdField[AddressId, AddressRow](_path, "id", None, Some("uuid"), x => x.id, (row, value) => row.copy(id = value))
override def city = Field[String, AddressRow](_path, "city", None, None, x => x.city, (row, value) => row.copy(city = value))
override def country = Field[String, AddressRow](_path, "country", None, None, x => x.country, (row, value) => row.copy(country = value))
}

override lazy val columns: List[FieldLikeNoHkt[?, AddressRow]] =
List[FieldLikeNoHkt[?, AddressRow]](fields.id, fields.city, fields.country)

override def copy(path: List[Path]): Impl =
new Impl(path)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage
package address

import adventureworks.customtypes.TypoUUID
import anorm.Column
import anorm.ParameterMetaData
import anorm.ToStatement
import play.api.libs.json.Reads
import play.api.libs.json.Writes
import typo.dsl.Bijection

/** Type for the primary key of table `frontpage.address` */
case class AddressId(value: TypoUUID) extends AnyVal
object AddressId {
implicit lazy val arrayColumn: Column[Array[AddressId]] = Column.columnToArray(column, implicitly)
implicit lazy val arrayToStatement: ToStatement[Array[AddressId]] = TypoUUID.arrayToStatement.contramap(_.map(_.value))
implicit lazy val bijection: Bijection[AddressId, TypoUUID] = Bijection[AddressId, TypoUUID](_.value)(AddressId.apply)
implicit lazy val column: Column[AddressId] = TypoUUID.column.map(AddressId.apply)
implicit def ordering(implicit O0: Ordering[TypoUUID]): Ordering[AddressId] = Ordering.by(_.value)
implicit lazy val parameterMetadata: ParameterMetaData[AddressId] = new ParameterMetaData[AddressId] {
override def sqlType: String = TypoUUID.parameterMetadata.sqlType
override def jdbcType: Int = TypoUUID.parameterMetadata.jdbcType
}
implicit lazy val reads: Reads[AddressId] = TypoUUID.reads.map(AddressId.apply)
implicit lazy val text: Text[AddressId] = new Text[AddressId] {
override def unsafeEncode(v: AddressId, sb: StringBuilder) = TypoUUID.text.unsafeEncode(v.value, sb)
override def unsafeArrayEncode(v: AddressId, sb: StringBuilder) = TypoUUID.text.unsafeArrayEncode(v.value, sb)
}
implicit lazy val toStatement: ToStatement[AddressId] = TypoUUID.toStatement.contramap(_.value)
implicit lazy val writes: Writes[AddressId] = TypoUUID.writes.contramap(_.value)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* File has been automatically generated by `typo`.
*
* IF YOU CHANGE THIS FILE YOUR CHANGES WILL BE OVERWRITTEN.
*/
package adventureworks
package frontpage
package address

import java.sql.Connection
import typo.dsl.DeleteBuilder
import typo.dsl.SelectBuilder
import typo.dsl.UpdateBuilder

trait AddressRepo {
def delete: DeleteBuilder[AddressFields, AddressRow]
def deleteById(id: AddressId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[AddressId])(implicit c: Connection): Int
def insert(unsaved: AddressRow)(implicit c: Connection): AddressRow
def insert(unsaved: AddressRowUnsaved)(implicit c: Connection): AddressRow
def insertStreaming(unsaved: Iterator[AddressRow], batchSize: Int = 10000)(implicit c: Connection): Long
/* NOTE: this functionality requires PostgreSQL 16 or later! */
def insertUnsavedStreaming(unsaved: Iterator[AddressRowUnsaved], batchSize: Int = 10000)(implicit c: Connection): Long
def select: SelectBuilder[AddressFields, AddressRow]
def selectAll(implicit c: Connection): List[AddressRow]
def selectById(id: AddressId)(implicit c: Connection): Option[AddressRow]
def selectByIds(ids: Array[AddressId])(implicit c: Connection): List[AddressRow]
def selectByIdsTracked(ids: Array[AddressId])(implicit c: Connection): Map[AddressId, AddressRow]
def update: UpdateBuilder[AddressFields, AddressRow]
def update(row: AddressRow)(implicit c: Connection): Boolean
def upsert(unsaved: AddressRow)(implicit c: Connection): AddressRow
def upsertBatch(unsaved: Iterable[AddressRow])(implicit c: Connection): List[AddressRow]
/* NOTE: this functionality is not safe if you use auto-commit mode! it runs 3 SQL statements */
def upsertStreaming(unsaved: Iterator[AddressRow], batchSize: Int = 10000)(implicit c: Connection): Int
}
Loading
Loading