module Database.Relational.Query.Internal.SQL (
StringSQL, stringSQL, showStringSQL,
rowStringSQL, rowPlaceHolderStringSQL,
rowListStringSQL, rowListStringString
) where
import Language.SQL.Keyword (Keyword, word, wordShow, fold, (|*|), paren)
type StringSQL = Keyword
stringSQL :: String -> StringSQL
stringSQL = word
showStringSQL :: StringSQL -> String
showStringSQL = wordShow
rowStringSQL :: [StringSQL] -> StringSQL
rowStringSQL = d where
d [] = error "Projection: no columns."
d [c] = c
d cs = paren $ fold (|*|) cs
rowPlaceHolderStringSQL :: Int -> StringSQL
rowPlaceHolderStringSQL = rowStringSQL . (`replicate` stringSQL "?")
rowListStringSQL :: [StringSQL] -> StringSQL
rowListStringSQL = paren . fold (|*|)
rowListStringString :: [String] -> String
rowListStringString = wordShow . rowListStringSQL . map word