{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.BinaryOperator
( BinaryOperator
, binaryOperator
, binaryOpExpression
, equalsOp
, notEqualsOp
, greaterThanOp
, lessThanOp
, greaterThanOrEqualsOp
, lessThanOrEqualsOp
, likeOp
, iLikeOp
, orOp
, andOp
, plusOp
, minusOp
, multiplicationOp
, divisionOp
, moduloOp
, exponentiationOp
, bitwiseAndOp
, bitwiseOrOp
, bitwiseXorOp
, bitwiseShiftLeftOp
, bitwiseShiftRightOp
)
where
import Orville.PostgreSQL.Expr.ValueExpression (ValueExpression)
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
newtype BinaryOperator
= BinaryOperator RawSql.RawSql
deriving
(
RawSql -> BinaryOperator
BinaryOperator -> RawSql
(BinaryOperator -> RawSql)
-> (RawSql -> BinaryOperator) -> SqlExpression BinaryOperator
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: BinaryOperator -> RawSql
toRawSql :: BinaryOperator -> RawSql
$cunsafeFromRawSql :: RawSql -> BinaryOperator
unsafeFromRawSql :: RawSql -> BinaryOperator
RawSql.SqlExpression
)
binaryOperator :: String -> BinaryOperator
binaryOperator :: String -> BinaryOperator
binaryOperator =
RawSql -> BinaryOperator
BinaryOperator (RawSql -> BinaryOperator)
-> (String -> RawSql) -> String -> BinaryOperator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> RawSql
RawSql.fromString
equalsOp :: BinaryOperator
equalsOp :: BinaryOperator
equalsOp =
String -> BinaryOperator
binaryOperator String
"="
notEqualsOp :: BinaryOperator
notEqualsOp :: BinaryOperator
notEqualsOp =
String -> BinaryOperator
binaryOperator String
"<>"
greaterThanOp :: BinaryOperator
greaterThanOp :: BinaryOperator
greaterThanOp =
String -> BinaryOperator
binaryOperator String
">"
lessThanOp :: BinaryOperator
lessThanOp :: BinaryOperator
lessThanOp =
String -> BinaryOperator
binaryOperator String
"<"
greaterThanOrEqualsOp :: BinaryOperator
greaterThanOrEqualsOp :: BinaryOperator
greaterThanOrEqualsOp =
String -> BinaryOperator
binaryOperator String
">="
lessThanOrEqualsOp :: BinaryOperator
lessThanOrEqualsOp :: BinaryOperator
lessThanOrEqualsOp =
String -> BinaryOperator
binaryOperator String
"<="
likeOp :: BinaryOperator
likeOp :: BinaryOperator
likeOp =
String -> BinaryOperator
binaryOperator String
"LIKE"
iLikeOp :: BinaryOperator
iLikeOp :: BinaryOperator
iLikeOp =
String -> BinaryOperator
binaryOperator String
"ILIKE"
orOp :: BinaryOperator
orOp :: BinaryOperator
orOp =
String -> BinaryOperator
binaryOperator String
"OR"
andOp :: BinaryOperator
andOp :: BinaryOperator
andOp =
String -> BinaryOperator
binaryOperator String
"AND"
plusOp :: BinaryOperator
plusOp :: BinaryOperator
plusOp =
String -> BinaryOperator
binaryOperator String
"+"
minusOp :: BinaryOperator
minusOp :: BinaryOperator
minusOp =
String -> BinaryOperator
binaryOperator String
"-"
multiplicationOp :: BinaryOperator
multiplicationOp :: BinaryOperator
multiplicationOp =
String -> BinaryOperator
binaryOperator String
"*"
divisionOp :: BinaryOperator
divisionOp :: BinaryOperator
divisionOp =
String -> BinaryOperator
binaryOperator String
"/"
moduloOp :: BinaryOperator
moduloOp :: BinaryOperator
moduloOp =
String -> BinaryOperator
binaryOperator String
"%"
exponentiationOp :: BinaryOperator
exponentiationOp :: BinaryOperator
exponentiationOp =
String -> BinaryOperator
binaryOperator String
"^"
bitwiseAndOp :: BinaryOperator
bitwiseAndOp :: BinaryOperator
bitwiseAndOp =
String -> BinaryOperator
binaryOperator String
"&"
bitwiseOrOp :: BinaryOperator
bitwiseOrOp :: BinaryOperator
bitwiseOrOp =
String -> BinaryOperator
binaryOperator String
"|"
bitwiseXorOp :: BinaryOperator
bitwiseXorOp :: BinaryOperator
bitwiseXorOp =
String -> BinaryOperator
binaryOperator String
"#"
bitwiseShiftLeftOp :: BinaryOperator
bitwiseShiftLeftOp :: BinaryOperator
bitwiseShiftLeftOp =
String -> BinaryOperator
binaryOperator String
"<<"
bitwiseShiftRightOp :: BinaryOperator
bitwiseShiftRightOp :: BinaryOperator
bitwiseShiftRightOp =
String -> BinaryOperator
binaryOperator String
">>"
binaryOpExpression ::
RawSql.SqlExpression sql =>
BinaryOperator ->
ValueExpression ->
ValueExpression ->
sql
binaryOpExpression :: forall sql.
SqlExpression sql =>
BinaryOperator -> ValueExpression -> ValueExpression -> sql
binaryOpExpression BinaryOperator
op ValueExpression
left ValueExpression
right =
BinaryOperator -> ValueExpression -> ValueExpression -> sql
forall sql.
SqlExpression sql =>
BinaryOperator -> ValueExpression -> ValueExpression -> sql
binaryOpExpressionUnparenthenizedArguments
BinaryOperator
op
(RawSql -> ValueExpression
forall a. SqlExpression a => RawSql -> a
RawSql.unsafeFromRawSql (RawSql
RawSql.leftParen RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> ValueExpression -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql ValueExpression
left RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.rightParen))
(RawSql -> ValueExpression
forall a. SqlExpression a => RawSql -> a
RawSql.unsafeFromRawSql (RawSql
RawSql.leftParen RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> ValueExpression -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql ValueExpression
right RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.rightParen))
binaryOpExpressionUnparenthenizedArguments ::
RawSql.SqlExpression sql =>
BinaryOperator ->
ValueExpression ->
ValueExpression ->
sql
binaryOpExpressionUnparenthenizedArguments :: forall sql.
SqlExpression sql =>
BinaryOperator -> ValueExpression -> ValueExpression -> sql
binaryOpExpressionUnparenthenizedArguments BinaryOperator
op ValueExpression
left ValueExpression
right =
RawSql -> sql
forall a. SqlExpression a => RawSql -> a
RawSql.unsafeFromRawSql (RawSql -> sql) -> RawSql -> sql
forall a b. (a -> b) -> a -> b
$
ValueExpression -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql ValueExpression
left
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.space
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> BinaryOperator -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql BinaryOperator
op
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.space
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> ValueExpression -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql ValueExpression
right