module Sqel.Sql.Select where

import Sqel.Data.QuerySchema (QuerySchema (QuerySchema))
import Sqel.Data.Sql (Sql, ToSql, sql)
import Sqel.Data.SqlFragment (Select (Select))
import Sqel.Data.TableSchema (TableSchema (TableSchema))

selectWhere ::
   proj q table .
  QuerySchema q table ->
  TableSchema proj ->
  Sql
selectWhere :: forall {k} proj q (table :: k).
QuerySchema q table -> TableSchema proj -> Sql
selectWhere (QuerySchema [SelectFragment]
query Encoder q
_) (TableSchema PgTable proj
proj Row proj
_ Params proj
_) =
  [sql|##{Select proj} ##{query}|]

selectWhereGen ::
   f proj q table .
  ToSql (Select (f proj table)) =>
  QuerySchema q table ->
  f proj table ->
  Sql
selectWhereGen :: forall {k} {k} (f :: k -> k -> *) (proj :: k) q (table :: k).
ToSql (Select (f proj table)) =>
QuerySchema q table -> f proj table -> Sql
selectWhereGen (QuerySchema [SelectFragment]
query Encoder q
_) f proj table
proj =
  [sql|##{Select proj} ##{query}|]