{-# LANGUAGE GeneralizedNewtypeDeriving #-}

{- |
Copyright : Flipstone Technology Partners 2023
License   : MIT
Stability : Stable

@since 1.0.0.0
-}
module Orville.PostgreSQL.Expr.TableReferenceList
  ( TableReferenceList
  , referencesTable
  )
where

import Orville.PostgreSQL.Expr.Name (Qualified, TableName)
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql

{- |
Type to represent the table's references in the @FROM@ clause of a @SELECT
statement. E.G. just the

> foo

in

> FROM foo

'TableReferenceList' provides a 'RawSql.SqlExpression' instance. See
'RawSql.unsafeSqlExpression' for how to construct a value with your own custom
SQL.

@since 1.0.0.0
-}
newtype TableReferenceList
  = TableReferenceList RawSql.RawSql
  deriving (RawSql -> TableReferenceList
TableReferenceList -> RawSql
(TableReferenceList -> RawSql)
-> (RawSql -> TableReferenceList)
-> SqlExpression TableReferenceList
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: TableReferenceList -> RawSql
toRawSql :: TableReferenceList -> RawSql
$cunsafeFromRawSql :: RawSql -> TableReferenceList
unsafeFromRawSql :: RawSql -> TableReferenceList
RawSql.SqlExpression)

{- |
  Constructs a 'TableReferenceList' consisting of just the specified table
  name.

  @since 1.0.0.0
-}
referencesTable :: Qualified TableName -> TableReferenceList
referencesTable :: Qualified TableName -> TableReferenceList
referencesTable Qualified TableName
qualifiedTableName =
  RawSql -> TableReferenceList
TableReferenceList (RawSql -> TableReferenceList) -> RawSql -> TableReferenceList
forall a b. (a -> b) -> a -> b
$
    Qualified TableName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql Qualified TableName
qualifiedTableName