module Query.Type ( module Query.Field, module Query.Record, Collection, Comparison (..), EmbedClause (..), EmbedClauses, FieldSelector (..), JoinClause (..), JoinClauses, JoinType (..), Query (..), WhereClause (..), ) where import Data.List.NonEmpty qualified as N import Query.Field import Query.Record data Query = Select FieldSelector Collection (JoinClauses FilePath) (EmbedClauses FilePath) (Maybe WhereClause) data FieldSelector = All | Only (N.NonEmpty Field) deriving (Show) type Collection = FilePath type JoinClauses a = [JoinClause a] data JoinClause a = JoinClause JoinType a (Maybe WhereClause) deriving (Show) data JoinType = JoinLeft | JoinRight | JoinFull deriving (Show) type EmbedClauses a = [EmbedClause a] data EmbedClause a = EmbedClause a (Maybe WhereClause) deriving (Show) data WhereClause = And [WhereClause] | Or [WhereClause] | Where Comparison deriving (Show) data Comparison = Eq Field Field deriving (Show)