module Database.HaskellDB.Sql.MySQL (generator) where
import Database.HaskellDB.Sql
import Database.HaskellDB.Sql.Default
import Database.HaskellDB.Sql.Generate
import Database.HaskellDB.PrimQuery
generator :: SqlGenerator
generator = (mkSqlGenerator generator) {
sqlBinary = mySqlBinary
}
mySqlBinary :: RelOp -> SqlSelect -> SqlSelect -> SqlSelect
mySqlBinary Difference = mySqlDifference
mySqlBinary op = defaultSqlBinary generator op
mySqlDifference :: SqlSelect -> SqlSelect -> SqlSelect
mySqlDifference sel1 sel2
= (toSqlSelect sel1) { criteria = [PrefixSqlExpr "NOT" $ ExistsSqlExpr existsSql] }
where existsSql = (toSqlSelect ((toSqlSelect sel2) { attrs = zipWith mkAttr names renames }))
{ criteria = zipWith mkCond names renames }
names = map fst $ attrs sel2
renames = map (++"_local") names
mkAttr name rename = (rename, ColumnSqlExpr name)
mkCond name rename = BinSqlExpr "=" (ColumnSqlExpr name) (ColumnSqlExpr rename)