Skip to content

Commit

Permalink
Merge pull request #21 from yisraelU/main
Browse files Browse the repository at this point in the history
Introduce type alias for Sql[ZResultSet]
  • Loading branch information
jdegoes authored Feb 16, 2022
2 parents 3cded0f + e2da8e6 commit 5f1654b
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 9 deletions.
2 changes: 1 addition & 1 deletion core/src/main/scala/zio/jdbc/JdbcEncoder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ package zio.jdbc
* a fragment of SQL. This is useful for forming SQL insert statements.
*/
trait JdbcEncoder[-A] {
def encode(value: A): Sql[ZResultSet]
def encode(value: A): SqlFragment

final def contramap[B](f: B => A): JdbcEncoder[B] = (value) => encode(f(value))
}
Expand Down
27 changes: 20 additions & 7 deletions core/src/main/scala/zio/jdbc/Sql.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package zio.jdbc

import zio.jdbc.Sql.intersperse
import zio.{ Chunk, ChunkBuilder }

/**
Expand All @@ -32,7 +33,7 @@ final class Sql[+A](
val decode: ZResultSet => A
) { self =>

def ++(that: Sql[ZResultSet])(implicit ev: A <:< ZResultSet): Sql[ZResultSet] =
def ++(that: SqlFragment)(implicit ev: A <:< ZResultSet): SqlFragment =
new Sql(builder => { self.build(builder); that.build(builder) }, that.decode)

def as[B](implicit decode: JdbcDecoder[B]): Sql[B] =
Expand Down Expand Up @@ -79,7 +80,7 @@ final class Sql[+A](

def values[B](
iterator: Iterator[B]
)(implicit encode: JdbcEncoder[B], ev: A <:< ZResultSet): Sql[ZResultSet] =
)(implicit encode: JdbcEncoder[B], ev: A <:< ZResultSet): SqlFragment =
this ++
Sql.values ++
Sql.intersperse(
Expand All @@ -89,13 +90,20 @@ final class Sql[+A](

def values[B](
bs: B*
)(implicit encode: JdbcEncoder[B], ev: A <:< ZResultSet): Sql[ZResultSet] = values(bs.iterator)
)(implicit encode: JdbcEncoder[B], ev: A <:< ZResultSet): SqlFragment = values(bs.iterator)

def withDecode[B](f: ZResultSet => B): Sql[B] =
Sql(segments, f)

def and(right: SqlFragment*)(implicit ev: A <:< ZResultSet): SqlFragment =
self ++ intersperse(Sql.and, right)

def or(right: SqlFragment*)(implicit ev: A <:< ZResultSet): SqlFragment =
self ++ intersperse(Sql.or, right)
}

object Sql {
val empty: Sql[ZResultSet] = Sql(Chunk.empty, identity(_))
val empty: SqlFragment = Sql(Chunk.empty, identity(_))

def apply[A](segments: Chunk[Sql.Segment], decode: ZResultSet => A): Sql[A] =
new Sql(builder => builder ++= segments, decode)
Expand All @@ -107,9 +115,9 @@ object Sql {
}

private[jdbc] def intersperse(
sep: Sql[ZResultSet],
elements: Iterable[Sql[ZResultSet]]
): Sql[ZResultSet] = {
sep: SqlFragment,
elements: Iterable[SqlFragment]
): SqlFragment = {

var first = true

Expand All @@ -128,4 +136,9 @@ object Sql {
private[jdbc] val rparen = sql""")"""
private[jdbc] val comma = sql""","""
private[jdbc] val nullLiteral = sql"""NULL"""
private[jdbc] val and = sql"""AND"""
private[jdbc] val or = sql"""OR"""
private[jdbc] val not = sql"""NOT"""
private[jdbc] val in = sql"""IN"""

}
2 changes: 1 addition & 1 deletion core/src/main/scala/zio/jdbc/SqlInterpolator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package zio.jdbc
* @param context The `StringContext` on which the string interpolator is added.
*/
final class SqlInterpolator(val context: StringContext) extends AnyVal {
def sql(params: Any*): Sql[ZResultSet] = new Sql(
def sql(params: Any*): SqlFragment = new Sql(
chunkBuilder => {
import Sql.Segment

Expand Down
6 changes: 6 additions & 0 deletions core/src/main/scala/zio/jdbc/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ import zio.stream._
import scala.language.implicitConversions

package object jdbc {

/**
* A special purpose type Alias representing a sql fragment that is not yet fully formed,nor mapped to concrete data type
*/
type SqlFragment = Sql[ZResultSet]

implicit def sqlInterpolator(sc: StringContext): SqlInterpolator = new SqlInterpolator(sc)

/**
Expand Down

0 comments on commit 5f1654b

Please sign in to comment.