{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Frames.SQL.Beam.Postgres.Query where
import Data.Vinyl.TypeLevel
import Database.Beam
import Database.Beam.Postgres
import Database.Beam.Postgres.Syntax
import Frames.Frame
import Frames.InCore
import Frames.SQL.Beam.Postgres.Vinylize
type PostgresTable a b =
DatabaseSettings Postgres b -> DatabaseEntity Postgres b (TableEntity a)
type PostgresDB b = DatabaseSettings Postgres b
type PostgresFilterLambda a s =
(a (QExpr PgExpressionSyntax s)) -> QExpr PgExpressionSyntax s Bool
type JoinQueryResults a b = [(a Identity, b Identity)]
allRows :: (Database Postgres b, Table a) =>
PostgresTable a b
-> PostgresDB b
-> Q PgSelectSyntax b s (a (QExpr PgExpressionSyntax s))
allRows tbl db = all_ (tbl db)
allRowsWhere :: (Database Postgres b, Table a) =>
PostgresTable a b
-> PostgresDB b
-> PostgresFilterLambda a s
-> Q PgSelectSyntax b s (a (QExpr PgExpressionSyntax s))
allRowsWhere tbl db filterLambda =
filter_ (filterLambda) (allRows tbl db)
join2 :: (Table a, Table b, GenericVinyl (a Identity) a_names a_rs,
GenericVinyl (b Identity) b_names b_rs, RecVec (ZipTypes a_names a_rs),
RecVec (ZipTypes b_names b_rs)) =>
JoinQueryResults a b ->
FrameRec (ZipTypes a_names a_rs ++ ZipTypes b_names b_rs)
join2 joinQueryResults =
zipFrames aFrame bFrame
where
(aQRes, bQRes) = unzip joinQueryResults
aRecs = map createRecId aQRes
bRecs = map createRecId bQRes
aFrame = toFrame aRecs
bFrame = toFrame bRecs