beam-core 0.7.2.1 → 0.7.2.2
raw patch · 7 files changed
+212/−45 lines, 7 filesdep ~aesondep ~freePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson, free
API changes (from Hackage documentation)
- Database.Beam.Backend.SQL.Builder: instance Data.Semigroup.Semigroup Database.Beam.Backend.SQL.Builder.SqlSyntaxBuilder
- Database.Beam.Backend.SQL.SQL2003: covarPopE, covarSampE, corrE, regrSlopeE, regrInterceptE, regrCountE, regrRSquaredE, regrAvgXE, regrAvgYE, regrSXXE, regrSXYE, regrSYYE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
- Database.Beam.Backend.SQL.SQL2003: firstValueE, lastValueE :: IsSql2003FirstValueAndLastValueExpressionSyntax agg => agg -> agg
- Database.Beam.Backend.SQL.SQL2003: leadE, lagE :: IsSql2003LeadAndLagExpressionSyntax agg => agg -> Maybe agg -> Maybe agg -> agg
- Database.Beam.Backend.SQL.SQL2003: lnE, expE, sqrtE, ceilE, floorE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
- Database.Beam.Backend.SQL.SQL2003: nullsFirstOrdering, nullsLastOrdering :: IsSql2003OrderingElementaryOLAPOperationsSyntax ord => ord -> ord
- Database.Beam.Backend.SQL.SQL2003: stddevPopE, stddevSampE, varPopE, varSampE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg
- Database.Beam.Backend.SQL.SQL99: everyE, someE, anyE :: IsSql99AggregationExpressionSyntax expr => Maybe (Sql92AggregationSetQuantifierSyntax expr) -> expr -> expr
- Database.Beam.Backend.URI: instance Data.Semigroup.Semigroup (Database.Beam.Backend.URI.BeamURIOpeners c)
- Database.Beam.Query: (<*., >*., <=*., >=*.) :: SqlOrdQuantified expr quantified e => e -> quantified -> expr Bool
- Database.Beam.Query: (<., >., <=., >=.) :: SqlOrd expr e => e -> e -> expr Bool
- Database.Beam.Query: (==*., /=*.) :: SqlEqQuantified expr quantified a => a -> quantified -> expr SqlBool
- Database.Beam.Query: sqlEqE, sqlNeqE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
- Database.Beam.Query: sqlEqTriE, sqlNeqTriE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
- Database.Beam.Query: sqlQEqE, sqlQNeqE :: HasSqlQuantifiedEqualityCheck syntax a => Proxy a -> Maybe (Sql92ExpressionQuantifierSyntax syntax) -> syntax -> syntax -> syntax
- Database.Beam.Query.CustomSQL: instance Data.Semigroup.Semigroup (Database.Beam.Query.CustomSQL.CustomSqlSyntax Database.Beam.Backend.SQL.Builder.SqlSyntaxBuilder)
- Database.Beam.Query.CustomSQL: instance Database.Beam.Query.CustomSQL.IsCustomSqlSyntax syntax => Data.Semigroup.Semigroup (Database.Beam.Query.CustomSQL.CustomSqlSnippet syntax)
- Database.Beam.Query.Internal: instance (GHC.Classes.Eq expr, GHC.Classes.Eq fieldName) => GHC.Classes.Eq (Database.Beam.Query.Internal.QAssignment fieldName expr s)
- Database.Beam.Query.Internal: instance (GHC.Classes.Ord expr, GHC.Classes.Ord fieldName) => GHC.Classes.Ord (Database.Beam.Query.Internal.QAssignment fieldName expr s)
- Database.Beam.Query.Internal: instance (GHC.Show.Show expr, GHC.Show.Show fieldName) => GHC.Show.Show (Database.Beam.Query.Internal.QAssignment fieldName expr s)
- Database.Beam.Query.Internal: instance Data.Semigroup.Semigroup (Database.Beam.Query.Internal.QAssignment fieldName expr s)
- Database.Beam.Schema.Tables: data (:*:) k (f :: k -> *) (g :: k -> *) (p :: k) :: forall k. () => (k -> *) -> (k -> *) -> k -> *
- Database.Beam.Schema.Tables: instance (GHC.Generics.Generic (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Schema.Tables.Ignored)), Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.Rep (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Schema.Tables.Ignored)))) => Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Schema.Tables.Ignored)))
- Database.Beam.Schema.Tables: instance (GHC.Generics.Generic (tbl (Database.Beam.Backend.Types.Nullable f)), GHC.Generics.Generic (tbl (Database.Beam.Backend.Types.Nullable g)), GHC.Generics.Generic (tbl (Database.Beam.Backend.Types.Nullable h)), Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.Rep (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Backend.Types.Exposed))) (GHC.Generics.Rep (tbl (Database.Beam.Backend.Types.Nullable f))) (GHC.Generics.Rep (tbl (Database.Beam.Backend.Types.Nullable g))) (GHC.Generics.Rep (tbl (Database.Beam.Backend.Types.Nullable h)))) => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Backend.Types.Exposed))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable f))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable g))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable h)))
- Database.Beam.Schema.Tables: instance (GHC.Generics.Generic (tbl Database.Beam.Schema.Tables.Ignored), Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.Rep (tbl Database.Beam.Schema.Tables.Ignored))) => Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.K1 GHC.Generics.R (tbl Database.Beam.Schema.Tables.Ignored))
- Database.Beam.Schema.Tables: instance (GHC.Generics.Generic (tbl f), GHC.Generics.Generic (tbl g), GHC.Generics.Generic (tbl h), Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.Rep (tbl Database.Beam.Backend.Types.Exposed)) (GHC.Generics.Rep (tbl f)) (GHC.Generics.Rep (tbl g)) (GHC.Generics.Rep (tbl h))) => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (tbl Database.Beam.Backend.Types.Exposed)) (GHC.Generics.K1 GHC.Generics.R (tbl f)) (GHC.Generics.K1 GHC.Generics.R (tbl g)) (GHC.Generics.K1 GHC.Generics.R (tbl h))
- Database.Beam.Schema.Tables: instance (fa ~ Database.Beam.Schema.Tables.Columnar f a, ga ~ Database.Beam.Schema.Tables.Columnar g a, ha ~ Database.Beam.Schema.Tables.Columnar h a) => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (Database.Beam.Backend.Types.Exposed a)) (GHC.Generics.K1 GHC.Generics.R fa) (GHC.Generics.K1 GHC.Generics.R ga) (GHC.Generics.K1 GHC.Generics.R ha)
+ Database.Beam.Backend.SQL.AST: [deleteAlias] :: Delete -> Maybe Text
+ Database.Beam.Backend.SQL.Builder: instance GHC.Base.Semigroup Database.Beam.Backend.SQL.Builder.SqlSyntaxBuilder
+ Database.Beam.Backend.SQL.SQL2003: ceilE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
+ Database.Beam.Backend.SQL.SQL2003: corrE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: covarPopE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: covarSampE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: expE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
+ Database.Beam.Backend.SQL.SQL2003: firstValueE :: IsSql2003FirstValueAndLastValueExpressionSyntax agg => agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: floorE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
+ Database.Beam.Backend.SQL.SQL2003: lagE :: IsSql2003LeadAndLagExpressionSyntax agg => agg -> Maybe agg -> Maybe agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: lastValueE :: IsSql2003FirstValueAndLastValueExpressionSyntax agg => agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: leadE :: IsSql2003LeadAndLagExpressionSyntax agg => agg -> Maybe agg -> Maybe agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: lnE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
+ Database.Beam.Backend.SQL.SQL2003: nullsFirstOrdering :: IsSql2003OrderingElementaryOLAPOperationsSyntax ord => ord -> ord
+ Database.Beam.Backend.SQL.SQL2003: nullsLastOrdering :: IsSql2003OrderingElementaryOLAPOperationsSyntax ord => ord -> ord
+ Database.Beam.Backend.SQL.SQL2003: regrAvgXE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrAvgYE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrCountE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrInterceptE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrRSquaredE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrSXXE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrSXYE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrSYYE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: regrSlopeE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: sqrtE :: IsSql2003EnhancedNumericFunctionsExpressionSyntax expr => expr -> expr
+ Database.Beam.Backend.SQL.SQL2003: stddevPopE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: stddevSampE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: varPopE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg
+ Database.Beam.Backend.SQL.SQL2003: varSampE :: IsSql2003EnhancedNumericFunctionsAggregationExpressionSyntax agg => Maybe (Sql92AggregationSetQuantifierSyntax agg) -> agg -> agg
+ Database.Beam.Backend.SQL.SQL92: deleteSupportsAlias :: IsSql92DeleteSyntax delete => Proxy delete -> Bool
+ Database.Beam.Backend.SQL.SQL99: anyE :: IsSql99AggregationExpressionSyntax expr => Maybe (Sql92AggregationSetQuantifierSyntax expr) -> expr -> expr
+ Database.Beam.Backend.SQL.SQL99: everyE :: IsSql99AggregationExpressionSyntax expr => Maybe (Sql92AggregationSetQuantifierSyntax expr) -> expr -> expr
+ Database.Beam.Backend.SQL.SQL99: someE :: IsSql99AggregationExpressionSyntax expr => Maybe (Sql92AggregationSetQuantifierSyntax expr) -> expr -> expr
+ Database.Beam.Backend.URI: instance GHC.Base.Semigroup (Database.Beam.Backend.URI.BeamURIOpeners c)
+ Database.Beam.Query: (/=*.) :: SqlEqQuantified expr quantified a => a -> quantified -> expr SqlBool
+ Database.Beam.Query: (<*.) :: SqlOrdQuantified expr quantified e => e -> quantified -> expr Bool
+ Database.Beam.Query: (<.) :: SqlOrd expr e => e -> e -> expr Bool
+ Database.Beam.Query: (<=*.) :: SqlOrdQuantified expr quantified e => e -> quantified -> expr Bool
+ Database.Beam.Query: (<=.) :: SqlOrd expr e => e -> e -> expr Bool
+ Database.Beam.Query: (==*.) :: SqlEqQuantified expr quantified a => a -> quantified -> expr SqlBool
+ Database.Beam.Query: (>*.) :: SqlOrdQuantified expr quantified e => e -> quantified -> expr Bool
+ Database.Beam.Query: (>.) :: SqlOrd expr e => e -> e -> expr Bool
+ Database.Beam.Query: (>=*.) :: SqlOrdQuantified expr quantified e => e -> quantified -> expr Bool
+ Database.Beam.Query: (>=.) :: SqlOrd expr e => e -> e -> expr Bool
+ Database.Beam.Query: QExpr :: (TablePrefix -> syntax) -> QGenExpr context syntax s t
+ Database.Beam.Query: buildSqlQuery :: (HasQBuilder selectSyntax, Projectible (Sql92SelectExpressionSyntax selectSyntax) a) => TablePrefix -> Q selectSyntax db s a -> selectSyntax
+ Database.Beam.Query: class IsSql92SelectSyntax selectSyntax => HasQBuilder selectSyntax
+ Database.Beam.Query: data Aggregation syntax s a
+ Database.Beam.Query: data Q syntax (db :: (* -> *) -> *) s a
+ Database.Beam.Query: data QWindow syntax s
+ Database.Beam.Query: newtype QGenExpr context syntax s t
+ Database.Beam.Query: sqlEqE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
+ Database.Beam.Query: sqlEqTriE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
+ Database.Beam.Query: sqlNeqE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
+ Database.Beam.Query: sqlNeqTriE :: HasSqlEqualityCheck syntax a => Proxy a -> syntax -> syntax -> syntax
+ Database.Beam.Query: sqlQEqE :: HasSqlQuantifiedEqualityCheck syntax a => Proxy a -> Maybe (Sql92ExpressionQuantifierSyntax syntax) -> syntax -> syntax -> syntax
+ Database.Beam.Query: sqlQNeqE :: HasSqlQuantifiedEqualityCheck syntax a => Proxy a -> Maybe (Sql92ExpressionQuantifierSyntax syntax) -> syntax -> syntax -> syntax
+ Database.Beam.Query: type Projectible = ProjectibleWithPredicate AnyType
+ Database.Beam.Query: type QExpr = QGenExpr QValueContext
+ Database.Beam.Query: type QWindowFrame = QGenExpr QWindowFrameContext
+ Database.Beam.Query.CustomSQL: instance Database.Beam.Query.CustomSQL.IsCustomSqlSyntax syntax => GHC.Base.Semigroup (Database.Beam.Query.CustomSQL.CustomSqlSnippet syntax)
+ Database.Beam.Query.CustomSQL: instance GHC.Base.Semigroup (Database.Beam.Query.CustomSQL.CustomSqlSyntax Database.Beam.Backend.SQL.Builder.SqlSyntaxBuilder)
+ Database.Beam.Query.Internal: instance (GHC.Classes.Eq fieldName, GHC.Classes.Eq expr) => GHC.Classes.Eq (Database.Beam.Query.Internal.QAssignment fieldName expr s)
+ Database.Beam.Query.Internal: instance (GHC.Classes.Ord fieldName, GHC.Classes.Ord expr) => GHC.Classes.Ord (Database.Beam.Query.Internal.QAssignment fieldName expr s)
+ Database.Beam.Query.Internal: instance (GHC.Show.Show fieldName, GHC.Show.Show expr) => GHC.Show.Show (Database.Beam.Query.Internal.QAssignment fieldName expr s)
+ Database.Beam.Query.Internal: instance GHC.Base.Semigroup (Database.Beam.Query.Internal.QAssignment fieldName expr s)
+ Database.Beam.Schema.Tables: data (:*:) (f :: k -> *) (g :: k -> *) (p :: k) :: forall k. () => k -> * -> k -> * -> k -> *
+ Database.Beam.Schema.Tables: instance (fa ~ Database.Beam.Schema.Tables.Columnar f a, ga ~ Database.Beam.Schema.Tables.Columnar g a, ha ~ Database.Beam.Schema.Tables.Columnar h a, ha ~ Database.Beam.Schema.Tables.Columnar h a) => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (Database.Beam.Backend.Types.Exposed a)) (GHC.Generics.K1 GHC.Generics.R fa) (GHC.Generics.K1 GHC.Generics.R ga) (GHC.Generics.K1 GHC.Generics.R ha)
+ Database.Beam.Schema.Tables: instance Database.Beam.Schema.Tables.Beamable tbl => Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Schema.Tables.Ignored)))
+ Database.Beam.Schema.Tables: instance Database.Beam.Schema.Tables.Beamable tbl => Database.Beam.Schema.Tables.GTableSkeleton (GHC.Generics.K1 GHC.Generics.R (tbl Database.Beam.Schema.Tables.Ignored))
+ Database.Beam.Schema.Tables: instance Database.Beam.Schema.Tables.Beamable tbl => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable Database.Beam.Backend.Types.Exposed))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable f))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable g))) (GHC.Generics.K1 GHC.Generics.R (tbl (Database.Beam.Backend.Types.Nullable h)))
+ Database.Beam.Schema.Tables: instance Database.Beam.Schema.Tables.Beamable tbl => Database.Beam.Schema.Tables.GZipTables f g h (GHC.Generics.K1 GHC.Generics.R (tbl Database.Beam.Backend.Types.Exposed)) (GHC.Generics.K1 GHC.Generics.R (tbl f)) (GHC.Generics.K1 GHC.Generics.R (tbl g)) (GHC.Generics.K1 GHC.Generics.R (tbl h))
- Database.Beam: class Typeable k (a :: k)
+ Database.Beam: class Typeable (a :: k)
- Database.Beam: data Identity a :: * -> *
+ Database.Beam: data Identity a
- Database.Beam.Backend.SQL.AST: Delete :: Text -> Maybe Expression -> Delete
+ Database.Beam.Backend.SQL.AST: Delete :: Text -> Maybe Text -> Maybe Expression -> Delete
- Database.Beam.Backend.SQL.SQL92: deleteStmt :: IsSql92DeleteSyntax delete => Text -> Maybe (Sql92DeleteExpressionSyntax delete) -> delete
+ Database.Beam.Backend.SQL.SQL92: deleteStmt :: IsSql92DeleteSyntax delete => Text -> Maybe Text -> Maybe (Sql92DeleteExpressionSyntax delete) -> delete
- Database.Beam.Query: delete :: IsSql92DeleteSyntax delete => DatabaseEntity be db (TableEntity table) -> (forall s. (forall s'. table (QExpr (Sql92DeleteExpressionSyntax delete) s')) -> QExpr (Sql92DeleteExpressionSyntax delete) s Bool) -> SqlDelete delete table
+ Database.Beam.Query: delete :: forall be db delete table. IsSql92DeleteSyntax delete => DatabaseEntity be db (TableEntity table) -> (forall s. (forall s'. table (QExpr (Sql92DeleteExpressionSyntax delete) s')) -> QExpr (Sql92DeleteExpressionSyntax delete) s Bool) -> SqlDelete delete table
- Database.Beam.Schema.Tables: (:*:) :: f p -> g p -> (:*:) k
+ Database.Beam.Schema.Tables: (:*:) :: f p -> g p -> (:*:)
- Database.Beam.Schema.Tables: FieldRenamer :: (entity -> entity) -> FieldRenamer entity
+ Database.Beam.Schema.Tables: FieldRenamer :: entity -> entity -> FieldRenamer entity
Files
- Database/Beam/Backend/SQL/AST.hs +2/−0
- Database/Beam/Backend/SQL/Builder.hs +4/−1
- Database/Beam/Backend/SQL/SQL92.hs +5/−1
- Database/Beam/Query.hs +10/−3
- Database/Beam/Schema/Tables.hs +80/−32
- beam-core.cabal +2/−3
- test/Database/Beam/Test/Schema.hs +109/−5
Database/Beam/Backend/SQL/AST.hs view
@@ -117,6 +117,7 @@ data Delete = Delete { deleteTable :: Text+ , deleteAlias :: Maybe Text , deleteWhere :: Maybe Expression } deriving (Show, Eq) @@ -124,6 +125,7 @@ type Sql92DeleteExpressionSyntax Delete = Expression deleteStmt = Delete+ deleteSupportsAlias _ = True data FieldName = QualifiedField Text Text
Database/Beam/Backend/SQL/Builder.hs view
@@ -162,10 +162,13 @@ instance IsSql92DeleteSyntax SqlSyntaxBuilder where type Sql92DeleteExpressionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder - deleteStmt tbl where_ =+ deleteStmt tbl alias where_ = SqlSyntaxBuilder $ byteString "DELETE FROM " <> quoteSql tbl <>+ maybe mempty (\alias_ -> byteString " AS " <> quoteSql alias_) alias <> maybe mempty (\where_ -> byteString " WHERE " <> buildSql where_) where_++ deleteSupportsAlias _ = True instance IsSql92FieldNameSyntax SqlSyntaxBuilder where qualifiedField a b =
Database/Beam/Backend/SQL/SQL92.hs view
@@ -151,9 +151,13 @@ IsSql92DeleteSyntax delete where type Sql92DeleteExpressionSyntax delete :: * - deleteStmt :: Text+ deleteStmt :: Text -> Maybe Text -> Maybe (Sql92DeleteExpressionSyntax delete) -> delete++ -- | Whether or not the @DELETE@ command supports aliases+ deleteSupportsAlias :: Proxy delete -> Bool+ deleteSupportsAlias _ = False -- Delete aliases are a non-standard feature class IsSql92FieldNameSyntax fn where qualifiedField :: Text -> Text -> fn
Database/Beam/Query.hs view
@@ -352,16 +352,23 @@ newtype SqlDelete syntax (table :: (* -> *) -> *) = SqlDelete syntax -- | Build a 'SqlDelete' from a table and a way to build a @WHERE@ clause-delete :: IsSql92DeleteSyntax delete+delete :: forall be db delete table+ . IsSql92DeleteSyntax delete => DatabaseEntity be db (TableEntity table) -- ^ Table to delete from -> (forall s. (forall s'. table (QExpr (Sql92DeleteExpressionSyntax delete) s')) -> QExpr (Sql92DeleteExpressionSyntax delete) s Bool) -- ^ Build a @WHERE@ clause given a table containing expressions -> SqlDelete delete table delete (DatabaseEntity (DatabaseTable tblNm tblSettings)) mkWhere =- SqlDelete (deleteStmt tblNm (Just (where_ "t")))+ SqlDelete (deleteStmt tblNm alias (Just (where_ "t"))) where- QExpr where_ = mkWhere (changeBeamRep (\(Columnar' (TableField name)) -> Columnar' (QExpr (pure (fieldE (unqualifiedField name))))) tblSettings)+ supportsAlias = deleteSupportsAlias (Proxy @delete)++ tgtName = "delete_target"+ alias = if supportsAlias then Just tgtName else Nothing+ mkField = if supportsAlias then qualifiedField tgtName else unqualifiedField++ QExpr where_ = mkWhere (changeBeamRep (\(Columnar' (TableField name)) -> Columnar' (QExpr (pure (fieldE (mkField name))))) tblSettings) -- | Run a 'SqlDelete' in a 'MonadBeam' runDelete :: (IsSql92Syntax cmd, MonadBeam cmd be hdl m)
Database/Beam/Schema/Tables.hs view
@@ -477,9 +477,16 @@ to' :: Generic x => Rep x () -> x to' = to -type HasBeamFields table f g h = ( GZipTables f g h (Rep (table Exposed)) (Rep (table f)) (Rep (table g)) (Rep (table h))- , Generic (table f), Generic (table g), Generic (table h) )+type HasBeamFields table f g h = ( GZipTables f g h (Rep (table Exposed))+ (Rep (table f))+ (Rep (table g))+ (Rep (table h)) + , Generic (table f)+ , Generic (table g)+ , Generic (table h)+ )+ -- | The big Kahuna! All beam tables implement this class. -- -- The kind of all table types is '(* -> *) -> *'. This is because all table types are actually /table type constructors/.@@ -531,15 +538,24 @@ class Beamable table where zipBeamFieldsM :: Applicative m => (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> table f -> table g -> m (table h)+ default zipBeamFieldsM :: ( HasBeamFields table f g h- , Applicative m ) =>- (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> table f -> table g -> m (table h)+ , Applicative m++ ) => (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a))+ -> table f+ -> table g+ -> m (table h)+ zipBeamFieldsM combine (f :: table f) g = to' <$> gZipTables (Proxy :: Proxy (Rep (table Exposed))) combine (from' f) (from' g) tblSkeleton :: TableSkeleton table+ default tblSkeleton :: ( Generic (TableSkeleton table)- , GTableSkeleton (Rep (TableSkeleton table)) ) => TableSkeleton table+ , GTableSkeleton (Rep (TableSkeleton table))+ ) => TableSkeleton table+ tblSkeleton = withProxy $ \proxy -> to' (gTblSkeleton proxy) where withProxy :: (Proxy (Rep (TableSkeleton table)) -> TableSkeleton table) -> TableSkeleton table withProxy f = f Proxy@@ -700,45 +716,62 @@ withProxy f = f Proxy class GZipTables f g h (exposedRep :: * -> *) fRep gRep hRep where- gZipTables :: Applicative m => Proxy exposedRep -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> fRep () -> gRep () -> m (hRep ())+ gZipTables :: Applicative m => Proxy exposedRep+ -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a))+ -> fRep ()+ -> gRep ()+ -> m (hRep ())+ instance ( GZipTables f g h exp1 f1 g1 h1- , GZipTables f g h exp2 f2 g2 h2) =>- GZipTables f g h (exp1 :*: exp2) (f1 :*: f2) (g1 :*: g2) (h1 :*: h2) where+ , GZipTables f g h exp2 f2 g2 h2+ ) => GZipTables f g h (exp1 :*: exp2) (f1 :*: f2) (g1 :*: g2) (h1 :*: h2)+ where gZipTables _ combine ~(f1 :*: f2) ~(g1 :*: g2) = (:*:) <$> gZipTables (Proxy :: Proxy exp1) combine f1 g1 <*> gZipTables (Proxy :: Proxy exp2) combine f2 g2+ instance GZipTables f g h exp fRep gRep hRep => GZipTables f g h (M1 x y exp) (M1 x y fRep) (M1 x y gRep) (M1 x y hRep) where gZipTables _ combine ~(M1 f) ~(M1 g) = M1 <$> gZipTables (Proxy :: Proxy exp) combine f g+ instance ( fa ~ Columnar f a , ga ~ Columnar g a+ , ha ~ Columnar h a , ha ~ Columnar h a) => GZipTables f g h (K1 Generic.R (Exposed a)) (K1 Generic.R fa) (K1 Generic.R ga) (K1 Generic.R ha) where gZipTables _ combine ~(K1 f) ~(K1 g) = (\(Columnar' h) -> K1 h) <$> combine (Columnar' f :: Columnar' f a) (Columnar' g :: Columnar' g a)-instance ( Generic (tbl f)- , Generic (tbl g)- , Generic (tbl h) - , GZipTables f g h (Rep (tbl Exposed)) (Rep (tbl f)) (Rep (tbl g)) (Rep (tbl h))) =>- GZipTables f g h (K1 Generic.R (tbl Exposed)) (K1 Generic.R (tbl f)) (K1 Generic.R (tbl g)) (K1 Generic.R (tbl h)) where- gZipTables _ combine ~(K1 f) ~(K1 g) = K1 . to' <$> gZipTables (Proxy :: Proxy (Rep (tbl Exposed))) combine (from' f) (from' g)+instance ( Beamable tbl+ ) => GZipTables f g h (K1 Generic.R (tbl Exposed)) (K1 Generic.R (tbl f))+ (K1 Generic.R (tbl g))+ (K1 Generic.R (tbl h))+ where+ gZipTables _ combine ~(K1 f) ~(K1 g) = K1 <$> zipBeamFieldsM combine f g + instance GZipTables f g h U1 U1 U1 U1 where gZipTables _ _ _ _ = pure U1 -instance ( Generic (tbl (Nullable f))- , Generic (tbl (Nullable g))- , Generic (tbl (Nullable h))+instance ( Beamable tbl+ ) => GZipTables f g h (K1 Generic.R (tbl (Nullable Exposed)))+ (K1 Generic.R (tbl (Nullable f)))+ (K1 Generic.R (tbl (Nullable g)))+ (K1 Generic.R (tbl (Nullable h)))+ where - , GZipTables f g h (Rep (tbl (Nullable Exposed))) (Rep (tbl (Nullable f))) (Rep (tbl (Nullable g))) (Rep (tbl (Nullable h)))) =>- GZipTables f g h- (K1 Generic.R (tbl (Nullable Exposed)))- (K1 Generic.R (tbl (Nullable f)))- (K1 Generic.R (tbl (Nullable g)))- (K1 Generic.R (tbl (Nullable h))) where- gZipTables _ combine ~(K1 f) ~(K1 g) = K1 . to' <$> gZipTables (Proxy :: Proxy (Rep (tbl (Nullable Exposed)))) combine (from' f) (from' g)+ gZipTables _ combine ~(K1 f) ~(K1 g) = K1 <$> zipBeamFieldsM (adapt combine) f g+ where+ adapt :: Applicative m => (forall a . Columnar' f a -> Columnar' g a -> m (Columnar' h a) )+ -> (forall a . Columnar' (Nullable f) a -> Columnar' (Nullable g) a -> m (Columnar' (Nullable h) a))+ adapt func x y = toNullable <$> func ( fromNullable x ) ( fromNullable y ) + fromNullable :: Columnar' (Nullable w) a -> Columnar' w (Maybe a)+ fromNullable ~(Columnar' x) = Columnar' x++ toNullable :: Columnar' w (Maybe a) -> Columnar' (Nullable w) a+ toNullable ~(Columnar' x) = Columnar' x+ class GDefaultTableFieldSettings x where gDefTblFieldSettings :: Proxy x -> x instance GDefaultTableFieldSettings (p x) => GDefaultTableFieldSettings (D1 f p x) where@@ -836,23 +869,38 @@ class GTableSkeleton x where gTblSkeleton :: Proxy x -> x ()+ instance GTableSkeleton p => GTableSkeleton (M1 t f p) where gTblSkeleton (_ :: Proxy (M1 t f p)) = M1 (gTblSkeleton (Proxy :: Proxy p))+ instance GTableSkeleton U1 where gTblSkeleton _ = U1+ instance (GTableSkeleton a, GTableSkeleton b) => GTableSkeleton (a :*: b) where gTblSkeleton _ = gTblSkeleton (Proxy :: Proxy a) :*: gTblSkeleton (Proxy :: Proxy b)+ instance GTableSkeleton (K1 Generic.R (Ignored field)) where gTblSkeleton _ = K1 Ignored-instance ( Generic (tbl Ignored)- , GTableSkeleton (Rep (tbl Ignored)) ) =>- GTableSkeleton (K1 Generic.R (tbl Ignored)) where- gTblSkeleton _ = K1 (to' (gTblSkeleton (Proxy :: Proxy (Rep (tbl Ignored)))))-instance ( Generic (tbl (Nullable Ignored))- , GTableSkeleton (Rep (tbl (Nullable Ignored))) ) =>- GTableSkeleton (K1 Generic.R (tbl (Nullable Ignored))) where- gTblSkeleton _ = K1 (to' (gTblSkeleton (Proxy :: Proxy (Rep (tbl (Nullable Ignored))))))++instance ( Beamable tbl+ ) => GTableSkeleton (K1 Generic.R (tbl Ignored))+ where+ gTblSkeleton _ = K1 (tblSkeleton :: TableSkeleton tbl)++instance ( Beamable tbl+ ) => GTableSkeleton (K1 Generic.R (tbl (Nullable Ignored)))+ where+ gTblSkeleton _ = K1 . runIdentity+ $ zipBeamFieldsM transform+ (tblSkeleton :: TableSkeleton tbl)+ (tblSkeleton :: TableSkeleton tbl)+ where+ transform :: Columnar' Ignored a+ -> Columnar' Ignored a+ -> Identity (Columnar' (Nullable Ignored) a)+ transform _ _ = Identity (Columnar' Ignored)+ -- * Internal functions
beam-core.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: beam-core-version: 0.7.2.1+version: 0.7.2.2 synopsis: Type-safe, feature-complete SQL query and manipulation interface for Haskell description: Beam is a Haskell library for type-safe querying and manipulation of SQL databases. Beam is modular and supports various backends. In order to use beam, you will need to use@@ -52,7 +52,7 @@ Database.Beam.Schema.Lenses build-depends: base >=4.7 && <5.0,- aeson >=0.11 && <1.4,+ aeson >=0.11 && <1.5, text >=1.0 && <1.3, bytestring >=0.10 && <0.11, mtl >=2.1 && <2.3,@@ -95,4 +95,3 @@ type: git location: https://github.com/tathougies/beam.git subdir: beam-core-
test/Database/Beam/Test/Schema.hs view
@@ -31,6 +31,8 @@ tests = testGroup "Schema Tests" [ basicSchemaGeneration , ruleBasedRenaming+ , parametricBeamSchemaGeneration+ , parametricAndFixedNestedBeamsAreEquivalent -- , automaticNestedFieldsAreUnset -- , nullableForeignKeysGivenMaybeType , underscoresAreHandledGracefully ]@@ -192,15 +194,117 @@ deptFieldNames @?= [ "name", "head__first_name", "head__last_name", "head__created" ] +-- * Ensure it is possible to use nested paremetric beams+parametricBeamSchemaGeneration :: TestTree+parametricBeamSchemaGeneration =+ testCase "Parametric schema generation" $+ do let (DatabaseEntity (DatabaseTable _ deptVehiculesA)) = _departmentVehiculesA employeeDbSettings+ deptVehiculesFieldNamesA = allBeamValues (\(Columnar' f) -> _fieldName f) deptVehiculesA++ deptVehiculesFieldNamesA @?= [ "departament__name"+ , "relates_to__id"+ , "relates_to__type"+ , "relates_to__of_wheels"+ , "meta_info__price"+ ]++-- * Ensure it doesn't matter whether we abstract over a beam's parameters, or if we them fixed.+parametricAndFixedNestedBeamsAreEquivalent :: TestTree+parametricAndFixedNestedBeamsAreEquivalent =+ testCase "Parametric and fixed nested beams are equivalent" $+ do let (DatabaseEntity (DatabaseTable _ deptVehiculesA)) = _departmentVehiculesA employeeDbSettings+ (DatabaseEntity (DatabaseTable _ deptVehiculesB)) = _departmentVehiculesB employeeDbSettings+ deptVehiculesFieldNamesA = allBeamValues (\(Columnar' f) -> _fieldName f) deptVehiculesA+ deptVehiculesFieldNamesB = allBeamValues (\(Columnar' f) -> _fieldName f) deptVehiculesB+ + deptVehiculesFieldNamesB @?= deptVehiculesFieldNamesA+++-- `ADepartmentVehiculeT` and `BDepartmentVehiculeT` are equivalent, but one was using params while+-- the other had its sub-beams fixed.++type ADepartmentVehicule = ADepartmentVehiculeT Identity+type ADepartmentVehiculeT = DepartamentRelatedT VehiculeInformationT VehiculeT+data DepartamentRelatedT metaInfo prop f = DepartamentProperty+ { _aDepartament :: PrimaryKey DepartmentT f+ , _aRelatesTo :: prop f -- checking we can nest both, nullable and non-nullable beams.+ , _aMetaInfo :: metaInfo (Nullable f)+ } deriving Generic++type BDepartmentVehicule = BDepartmentVehiculeT Identity+data BDepartmentVehiculeT f = BDepartmentVehicule+ { _bDepartament :: PrimaryKey DepartmentT f+ , _bRelatesTo :: VehiculeT f + , _bMetaInfo :: VehiculeInformationT (Nullable f)+ } deriving Generic+-- +-- ["departament__name","relates_to__id","relates_to__type","relates_to__of_wheels","meta_info__price"]++++instance (Beamable metaInfo, Beamable prop) => Beamable (DepartamentRelatedT metaInfo prop)+++instance (Table metaInfo, Table prop) => Table (DepartamentRelatedT metaInfo prop) where+ data PrimaryKey (DepartamentRelatedT metaInfo prop) f = DepReKeyA (PrimaryKey DepartmentT f) + (PrimaryKey prop f) + deriving(Generic)+ primaryKey = DepReKeyA <$> _aDepartament <*> (primaryKey._aRelatesTo)++instance (Table metaInfo, Table prop) => Beamable (PrimaryKey (DepartamentRelatedT metaInfo prop))++++data VehiculeT f = VehiculeT+ { _vehiculeId :: C f Text+ , _vehiculeType :: C f Text+ , _numberOfWheels :: C f Int+ } deriving Generic++instance Beamable VehiculeT+instance Beamable (PrimaryKey VehiculeT)++instance Table VehiculeT where+ data PrimaryKey VehiculeT f = VehiculeId (C f Text) deriving(Generic)+ primaryKey = VehiculeId <$> _vehiculeId++data VehiculeInformationT f = VehiculeInformationT+ { _price :: C f Double+ } deriving Generic+++instance Beamable VehiculeInformationT+instance Beamable (PrimaryKey VehiculeInformationT)++instance Table VehiculeInformationT where+ data PrimaryKey VehiculeInformationT f = VehiculeInformationKey deriving(Generic)+ primaryKey _ = VehiculeInformationKey++++++instance Beamable BDepartmentVehiculeT +instance Beamable (PrimaryKey BDepartmentVehiculeT)+instance Table BDepartmentVehiculeT where+ data PrimaryKey BDepartmentVehiculeT f = DepReKeyB (PrimaryKey DepartmentT f) + (PrimaryKey VehiculeT f) + deriving(Generic)+ primaryKey = DepReKeyB <$> _bDepartament <*> (primaryKey._bRelatesTo)+++ -- * Database schema is derived correctly data EmployeeDb f = EmployeeDb- { _employees :: f (TableEntity EmployeeT)- , _departments :: f (TableEntity DepartmentT)- , _roles :: f (TableEntity RoleT)- , _funny :: f (TableEntity FunnyT) }- deriving Generic+ { _employees :: f (TableEntity EmployeeT)+ , _departments :: f (TableEntity DepartmentT)+ , _roles :: f (TableEntity RoleT)+ , _funny :: f (TableEntity FunnyT) + , _departmentVehiculesA :: f (TableEntity ADepartmentVehiculeT)+ , _departmentVehiculesB :: f (TableEntity BDepartmentVehiculeT)+ } deriving Generic instance Database be EmployeeDb employeeDbSettings :: DatabaseSettings be EmployeeDb