{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.Internal.Name.Qualified
( Qualified
, qualifyTable
, qualifySequence
, qualifyColumn
)
where
import Orville.PostgreSQL.Expr.Internal.Name.ColumnName (ColumnName)
import Orville.PostgreSQL.Expr.Internal.Name.Identifier (IdentifierExpression (toIdentifier))
import Orville.PostgreSQL.Expr.Internal.Name.SchemaName (SchemaName)
import Orville.PostgreSQL.Expr.Internal.Name.SequenceName (SequenceName)
import Orville.PostgreSQL.Expr.Internal.Name.TableName (TableName)
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
newtype Qualified name
= Qualified RawSql.RawSql
deriving
(
RawSql -> Qualified name
Qualified name -> RawSql
(Qualified name -> RawSql)
-> (RawSql -> Qualified name) -> SqlExpression (Qualified name)
forall name. RawSql -> Qualified name
forall name. Qualified name -> RawSql
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: forall name. Qualified name -> RawSql
toRawSql :: Qualified name -> RawSql
$cunsafeFromRawSql :: forall name. RawSql -> Qualified name
unsafeFromRawSql :: RawSql -> Qualified name
RawSql.SqlExpression
)
qualifyTable ::
Maybe SchemaName ->
TableName ->
Qualified TableName
qualifyTable :: Maybe SchemaName -> TableName -> Qualified TableName
qualifyTable = Maybe SchemaName -> TableName -> Qualified TableName
forall name.
IdentifierExpression name =>
Maybe SchemaName -> name -> Qualified name
unsafeSchemaQualify
qualifySequence ::
Maybe SchemaName ->
SequenceName ->
Qualified SequenceName
qualifySequence :: Maybe SchemaName -> SequenceName -> Qualified SequenceName
qualifySequence = Maybe SchemaName -> SequenceName -> Qualified SequenceName
forall name.
IdentifierExpression name =>
Maybe SchemaName -> name -> Qualified name
unsafeSchemaQualify
qualifyColumn :: Maybe SchemaName -> TableName -> ColumnName -> Qualified ColumnName
qualifyColumn :: Maybe SchemaName -> TableName -> ColumnName -> Qualified ColumnName
qualifyColumn Maybe SchemaName
mbSchemaName TableName
tableName ColumnName
unqualifiedName =
Maybe SchemaName -> ColumnName -> Qualified ColumnName
forall name.
IdentifierExpression name =>
Maybe SchemaName -> name -> Qualified name
unsafeSchemaQualify Maybe SchemaName
mbSchemaName
(ColumnName -> Qualified ColumnName)
-> (RawSql -> ColumnName) -> RawSql -> Qualified ColumnName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawSql -> ColumnName
forall a. SqlExpression a => RawSql -> a
RawSql.unsafeFromRawSql
(RawSql -> Qualified ColumnName) -> RawSql -> Qualified ColumnName
forall a b. (a -> b) -> a -> b
$ Identifier -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql (TableName -> Identifier
forall name. IdentifierExpression name => name -> Identifier
toIdentifier TableName
tableName) RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.dot RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> Identifier -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql (ColumnName -> Identifier
forall name. IdentifierExpression name => name -> Identifier
toIdentifier ColumnName
unqualifiedName)
unsafeSchemaQualify ::
IdentifierExpression name =>
Maybe SchemaName ->
name ->
Qualified name
unsafeSchemaQualify :: forall name.
IdentifierExpression name =>
Maybe SchemaName -> name -> Qualified name
unsafeSchemaQualify Maybe SchemaName
mbSchemaName name
unqualifiedName =
case Maybe SchemaName
mbSchemaName of
Maybe SchemaName
Nothing ->
RawSql -> Qualified name
forall name. RawSql -> Qualified name
Qualified (RawSql -> Qualified name)
-> (name -> RawSql) -> name -> Qualified name
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identifier -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql (Identifier -> RawSql) -> (name -> Identifier) -> name -> RawSql
forall b c a. (b -> c) -> (a -> b) -> a -> c
. name -> Identifier
forall name. IdentifierExpression name => name -> Identifier
toIdentifier (name -> Qualified name) -> name -> Qualified name
forall a b. (a -> b) -> a -> b
$ name
unqualifiedName
Just SchemaName
schemaName ->
RawSql -> Qualified name
forall name. RawSql -> Qualified name
Qualified
( SchemaName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql SchemaName
schemaName
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> RawSql
RawSql.dot
RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> Identifier -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql (name -> Identifier
forall name. IdentifierExpression name => name -> Identifier
toIdentifier name
unqualifiedName)
)