{-# OPTIONS_GHC -fno-warn-dodgy-exports #-}

-- | Finally tagless extension of SQL92 syntaxes for SQL99
module Database.Beam.Backend.SQL.SQL99
  ( module Database.Beam.Backend.SQL.SQL92
  , IsSql99ExpressionSyntax(..)
  , IsSql99ConcatExpressionSyntax(..)
  , IsSql99AggregationExpressionSyntax(..)
  , IsSql99SelectSyntax(..)
  , IsSql99DataTypeSyntax(..) ) where

import Database.Beam.Backend.SQL.SQL92

import Data.Text ( Text )

class IsSql92SelectSyntax select =>
  IsSql99SelectSyntax select

class IsSql92ExpressionSyntax expr =>
  IsSql99ExpressionSyntax expr where

  distinctE :: Sql92ExpressionSelectSyntax expr -> expr
  similarToE :: expr -> expr -> expr

  functionCallE :: expr -> [ expr ] -> expr

  instanceFieldE :: expr -> Text -> expr
  refFieldE :: expr -> Text -> expr

class IsSql92ExpressionSyntax expr =>
  IsSql99ConcatExpressionSyntax expr where
  concatE :: [ expr ] -> expr

class IsSql92AggregationExpressionSyntax expr =>
  IsSql99AggregationExpressionSyntax expr where
  everyE, someE, anyE :: Maybe (Sql92AggregationSetQuantifierSyntax expr) -> expr -> expr

class IsSql92DataTypeSyntax dataType =>
  IsSql99DataTypeSyntax dataType where
  characterLargeObjectType :: dataType
  binaryLargeObjectType :: dataType
  booleanType :: dataType
  arrayType :: dataType -> Int -> dataType
  rowType :: [ (Text, dataType) ] -> dataType