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}|]