orville-postgresql-1.1.0.0: src/Orville/PostgreSQL/Marshall/AliasName.hs
{- |
Copyright : Flipstone Technology Partners 2024-2025
License : MIT
Stability : Stable
@since 1.1.0.0
-}
module Orville.PostgreSQL.Marshall.AliasName
( AliasName
, stringToAliasName
, aliasNameToString
, aliasNameToAliasExpr
, aliasNameAndFieldNameToColumnName
, aliasNameToByteString
, byteStringToAliasName
) where
import qualified Data.ByteString.Char8 as B8
import qualified Orville.PostgreSQL.Expr as Expr
import Orville.PostgreSQL.Internal.FieldName (FieldName, fieldNameToColumnName)
{- | A simple type to represent the name of a field.
@since 1.1.0.0
-}
newtype AliasName
= AliasName B8.ByteString
deriving
( -- | @since 1.1.0.0
Eq
, -- | @since 1.1.0.0
Ord
, -- | @since 1.1.0.0
Show
)
{- | Convert an 'AliasName' and a 'FieldName' to a 'Expr.ColumnName' for usage in SQL expressions.
The result will be properly quoted and escaped.
@since 1.1.0.0
-}
aliasNameAndFieldNameToColumnName :: AliasName -> FieldName -> Expr.Qualified Expr.ColumnName
aliasNameAndFieldNameToColumnName aliasName =
Expr.aliasQualifyColumn
(aliasNameToAliasExpr aliasName)
. fieldNameToColumnName
{- | Constructs a 'AliasName' from a 'String'.
@since 1.1.0.0
-}
stringToAliasName :: String -> AliasName
stringToAliasName =
AliasName . B8.pack
{- | Converts a 'AliasName' to an 'AliasExpr'.
@since 1.1.0.0
-}
aliasNameToAliasExpr :: AliasName -> Expr.AliasExpr
aliasNameToAliasExpr =
Expr.fromIdentifier . Expr.identifierFromBytes . aliasNameToByteString
{- | Converts a 'AliasName' back to a 'String'.
@since 1.1.0.0
-}
aliasNameToString :: AliasName -> String
aliasNameToString =
B8.unpack . aliasNameToByteString
{- | Converts a 'AliasName' back to a 'B8.ByteString'.
@since 1.1.0.0
-}
aliasNameToByteString :: AliasName -> B8.ByteString
aliasNameToByteString (AliasName name) =
name
{- | Constructs a 'AliasName' from a 'B8.ByteString'.
@since 1.1.0.0
-}
byteStringToAliasName :: B8.ByteString -> AliasName
byteStringToAliasName = AliasName