Skip to content

Commit

Permalink
Remove initial Literal in Where clause in SQL Server module (#712)
Browse files Browse the repository at this point in the history
  • Loading branch information
jczuchnowski committed Jul 3, 2022
1 parent 72353a2 commit edda2a3
Showing 1 changed file with 28 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
render(" FROM ")
buildTable(t)
}
whereExpr match {
case Expr.Literal(true) => ()
case _ =>
render(" WHERE ")
buildExpr(whereExpr)
}
buildWhereExpr(whereExpr)
groupByExprs match {
case Read.ExprSet.ExprCons(_, _) =>
render(" GROUP BT ")
Expand Down Expand Up @@ -96,7 +91,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
render(" (", values.mkString(","), ") ") // todo fix needs escaping
}

def buildExpr[A, B](expr: self.Expr[_, A, B])(implicit render: Renderer): Unit = expr match {
private def buildExpr[A, B](expr: self.Expr[_, A, B])(implicit render: Renderer): Unit = expr match {
case Expr.Subselect(subselect) =>
render(" (")
render(renderRead(subselect))
Expand Down Expand Up @@ -126,7 +121,11 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
case Expr.Relational(left, right, op) =>
buildExpr(left)
render(" ", op.symbol, " ")
buildExpr(right)
right.asInstanceOf[Expr[_, A, B]] match {
case Expr.Literal(true) => val _ = render("1")
case Expr.Literal(false) => val _ = render("0")
case otherValue => buildExpr(otherValue)
}
case Expr.In(value, set) =>
buildExpr(value)
renderReadImpl(set)
Expand Down Expand Up @@ -247,7 +246,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
render(")")
}

def buildExprList(expr: Read.ExprSet[_])(implicit render: Renderer): Unit =
private def buildExprList(expr: Read.ExprSet[_])(implicit render: Renderer): Unit =
expr match {
case Read.ExprSet.ExprCons(head, tail) =>
buildExpr(head)
Expand All @@ -259,7 +258,8 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
}
case Read.ExprSet.NoExpr => ()
}
def buildOrderingList(expr: List[Ordering[Expr[_, _, _]]])(implicit render: Renderer): Unit =

private def buildOrderingList(expr: List[Ordering[Expr[_, _, _]]])(implicit render: Renderer): Unit =
expr match {
case head :: tail =>
head match {
Expand All @@ -277,7 +277,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
case Nil => ()
}

def buildSelection(selectionSet: SelectionSet[_])(implicit render: Renderer): Unit =
private def buildSelection(selectionSet: SelectionSet[_])(implicit render: Renderer): Unit =
selectionSet match {
case cons0 @ SelectionSet.Cons(_, _) =>
object Dummy {
Expand All @@ -295,7 +295,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
case SelectionSet.Empty => ()
}

def buildColumnSelection[A, B](columnSelection: ColumnSelection[A, B])(implicit render: Renderer): Unit =
private def buildColumnSelection[A, B](columnSelection: ColumnSelection[A, B])(implicit render: Renderer): Unit =
columnSelection match {
case ColumnSelection.Constant(value, name) =>
render(value.toString()) // todo fix escaping
Expand All @@ -317,7 +317,7 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
}
}

def buildTable(table: Table)(implicit render: Renderer): Unit =
private def buildTable(table: Table)(implicit render: Renderer): Unit =
table match {

case Table.DerivedTable(read, name) =>
Expand Down Expand Up @@ -356,15 +356,24 @@ trait SqlServerRenderModule extends SqlServerSqlModule { self =>
render(" ")
}

/**
* Drops the initial Litaral(true) present at the start of every WHERE expressions by default
* and proceeds to the rest of Expr's.
*/
private def buildWhereExpr[A, B](expr: self.Expr[_, A, B])(implicit render: Renderer): Unit = expr match {
case Expr.Literal(true) => ()
case Expr.Binary(_, b, _) =>
render(" WHERE ")
buildExpr(b)
case _ =>
render(" WHERE ")
buildExpr(expr)
}

def renderDeleteImpl(delete: Delete[_])(implicit render: Renderer) = {
render("DELETE FROM ")
buildTable(delete.table)
delete.whereExpr match {
case Expr.Literal(true) => ()
case _ =>
render(" WHERE ")
buildExpr(delete.whereExpr)
}
buildWhereExpr(delete.whereExpr)
}

// TODO https://github.com/zio/zio-sql/issues/160
Expand Down

0 comments on commit edda2a3

Please sign in to comment.