1 {-# LANGUAGE TemplateHaskell #-} 2 module Databrary.Model.Funding.SQL 3 ( selectFunder 4 , selectVolumeFunding 5 ) where 6 7 import Data.Maybe (fromMaybe) 8 import qualified Data.Text as T 9 10 import Databrary.Model.SQL.Select 11 import Databrary.Model.Funding.Types 12 13 funderRow :: Selector -- ^ @'Funder'@ 14 funderRow = selectColumns 'Funder "funder" ["fundref_id", "name"] 15 16 selectFunder :: Selector -- ^ @'Funder'@ 17 selectFunder = funderRow 18 19 makeFunding :: [Maybe T.Text] -> Funder -> Funding 20 makeFunding a f = Funding f (map (fromMaybe (error "NULL funding.award")) a) 21 22 fundingRow :: Selector -- ^ @'Funder' -> 'Funding'@ 23 fundingRow = selectColumns 'makeFunding "volume_funding" ["awards"] 24 25 selectVolumeFunding :: Selector -- ^ @'Funding'@ 26 selectVolumeFunding = selectJoin '($) 27 [ fundingRow 28 , joinOn "volume_funding.funder = funder.fundref_id" selectFunder 29 ]