orville-postgresql-1.0.0.0: src/Orville/PostgreSQL/Internal/FieldName.hs
{- |
Copyright : Flipstone Technology Partners 2023
License : MIT
Stability : Stable
@since 1.0.0.0
-}
module Orville.PostgreSQL.Internal.FieldName
( FieldName
, stringToFieldName
, fieldNameToString
, fieldNameToColumnName
, fieldNameToByteString
, byteStringToFieldName
) where
import qualified Data.ByteString.Char8 as B8
import qualified Orville.PostgreSQL.Expr as Expr
{- |
A simple type to represent the name of a field.
@since 1.0.0.0
-}
newtype FieldName
= FieldName B8.ByteString
deriving (Eq, Ord, Show)
{- |
Convert a field name to a 'Expr.ColumnName' for usage in SQL expressions.
The field name will be properly quoted and escaped.
@since 1.0.0.0
-}
fieldNameToColumnName :: FieldName -> Expr.ColumnName
fieldNameToColumnName (FieldName name) =
Expr.fromIdentifier (Expr.identifierFromBytes name)
{- |
Constructs a 'FieldName' from a 'String'.
@since 1.0.0.0
-}
stringToFieldName :: String -> FieldName
stringToFieldName =
FieldName . B8.pack
{- |
Converts a 'FieldName' back to a 'String'.
@since 1.0.0.0
-}
fieldNameToString :: FieldName -> String
fieldNameToString =
B8.unpack . fieldNameToByteString
{- |
Converts a 'FieldName' back to a 'B8.ByteString'.
@since 1.0.0.0
-}
fieldNameToByteString :: FieldName -> B8.ByteString
fieldNameToByteString (FieldName name) =
name
{- |
Constructs a 'FieldName' from a 'B8.ByteString'.
@since 1.0.0.0
-}
byteStringToFieldName :: B8.ByteString -> FieldName
byteStringToFieldName = FieldName