beam-sqlite 0.3.2.4 → 0.4.0.0
raw patch · 5 files changed
+257/−194 lines, 5 filesdep ~beam-coredep ~beam-migratePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: beam-core, beam-migrate
API changes (from Hackage documentation)
- Database.Beam.Sqlite.Connection: data SqliteInsertReturning (table :: (* -> *) -> *)
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.BeamExtensions.MonadBeamInsertReturning Database.Beam.Sqlite.Syntax.SqliteCommandSyntax Database.Beam.Sqlite.Connection.Sqlite Database.SQLite.Simple.Internal.Connection Database.Beam.Sqlite.Connection.SqliteM
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.MonadBeam Database.Beam.Sqlite.Syntax.SqliteCommandSyntax Database.Beam.Sqlite.Connection.Sqlite Database.SQLite.Simple.Internal.Connection Database.Beam.Sqlite.Connection.SqliteM
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.SQL92.BeamSql92Backend Database.Beam.Sqlite.Connection.Sqlite
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Types.BeamSqlBackend Database.Beam.Sqlite.Connection.Sqlite
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Lazy.Internal.ByteString
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Scientific.Scientific
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Lazy.Text
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Calendar.Days.Day
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Clock.Internal.UTCTime.UTCTime
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Backend.SQL.Types.SqlNull
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Sqlite.Connection.SqliteScientific
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.SQLite.Simple.Types.Null
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int16
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int32
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int64
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int8
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Integer.Type.Integer
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Bool
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Char
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Double
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Float
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Int
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Word
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word16
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word32
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word64
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word8
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite a => Database.SQLite.Simple.FromRow.FromRow (Database.Beam.Sqlite.Connection.BeamSqliteRow a)
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.IsSqlExpressionSyntaxStringType Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.IsSqlExpressionSyntaxStringType Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax (Database.Beam.Backend.SQL.Types.SqlSerial GHC.Types.Int)
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax (Database.Beam.Backend.SQL.Types.SqlSerial GHC.Types.Int)
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.BeamExtensions.IsBeamSerialColumnSchemaSyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteSyntax
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.SQL.Tables.FieldReturnType 'GHC.Types.True 'GHC.Types.False Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax resTy a => Database.Beam.Migrate.SQL.Tables.FieldReturnType 'GHC.Types.False 'GHC.Types.False Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax resTy (Database.Beam.Sqlite.Syntax.SqliteHasDefault -> a)
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Lazy.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Scientific.Scientific
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Lazy.Text
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int16
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int32
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int64
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int8
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Integer.Type.Integer
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Bool
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Char
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Double
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Float
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Int
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Word
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word16
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word32
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word64
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word8
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Lazy.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Scientific.Scientific
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Lazy.Text
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int16
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int32
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int64
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int8
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Integer.Type.Integer
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Bool
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Char
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Double
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Float
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Int
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Word
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word16
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word32
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word64
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word8
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Query.Types.HasQBuilder Database.Beam.Sqlite.Syntax.SqliteSelectSyntax
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.BeamExtensions.MonadBeamInsertReturning Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Sqlite.Connection.SqliteM
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.BeamSqlBackend Database.Beam.Sqlite.Connection.Sqlite
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.BeamSqlBackendIsString Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.BeamSqlBackendIsString Database.Beam.Sqlite.Connection.Sqlite GHC.Base.String
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.MonadBeam Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Sqlite.Connection.SqliteM
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Lazy.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Scientific.Scientific
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Lazy.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Calendar.Days.Day
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Clock.Internal.UTCTime.UTCTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Backend.SQL.Types.SqlNull
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Sqlite.Connection.SqliteScientific
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.SQLite.Simple.Types.Null
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Integer.Type.Integer
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Bool
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Char
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Double
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Float
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Int
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Word
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite a => Database.SQLite.Simple.FromRow.FromRow (Database.Beam.Sqlite.Connection.BeamSqliteRow a)
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Connection.Sqlite (Database.Beam.Backend.SQL.Types.SqlSerial GHC.Types.Int)
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.SQL.BeamExtensions.BeamSqlBackendHasSerial Database.Beam.Sqlite.Connection.Sqlite
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.SQL.Tables.FieldReturnType 'GHC.Types.True 'GHC.Types.False Database.Beam.Sqlite.Connection.Sqlite resTy a => Database.Beam.Migrate.SQL.Tables.FieldReturnType 'GHC.Types.False 'GHC.Types.False Database.Beam.Sqlite.Connection.Sqlite resTy (Database.Beam.Sqlite.Connection.SqliteHasDefault -> a)
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.SQL.Types.BeamMigrateOnlySqlBackend Database.Beam.Sqlite.Connection.Sqlite
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Lazy.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Scientific.Scientific
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Lazy.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.Clock.Internal.UTCTime.UTCTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Base.String
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Integer.Type.Integer
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Bool
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Char
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Double
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Float
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Int
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Word
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Lazy.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Scientific.Scientific
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Lazy.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.Clock.Internal.UTCTime.UTCTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Base.String
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Integer.Type.Integer
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Bool
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Char
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Double
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Float
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Int
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Word
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word16
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word32
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word64
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word8
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Types.HasQBuilder Database.Beam.Sqlite.Connection.Sqlite
+ Database.Beam.Sqlite.Migrate: data SqliteCommandSyntax
+ Database.Beam.Sqlite.Syntax: SqliteTableNameSyntax :: SqliteSyntax -> SqliteTableNameSyntax
+ Database.Beam.Sqlite.Syntax: [fromSqliteTableName] :: SqliteTableNameSyntax -> SqliteSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.IsSql92TableNameSyntax Database.Beam.Sqlite.Syntax.SqliteTableNameSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL99.IsSql99FunctionExpressionSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Migrate.Checks.HasDataTypeCreatedCheck Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
+ Database.Beam.Sqlite.Syntax: newtype SqliteTableNameSyntax
- Database.Beam.Sqlite: sqliteBigInt :: DataType SqliteDataTypeSyntax Int64
+ Database.Beam.Sqlite: sqliteBigInt :: DataType Sqlite Int64
- Database.Beam.Sqlite: sqliteBlob :: DataType SqliteDataTypeSyntax ByteString
+ Database.Beam.Sqlite: sqliteBlob :: DataType Sqlite ByteString
- Database.Beam.Sqlite: sqliteGroupConcat :: (HasSqlValueSyntax SqliteValueSyntax a, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str2) => QExpr SqliteExpressionSyntax s a -> QExpr SqliteExpressionSyntax s str -> QAgg SqliteExpressionSyntax s (Maybe str2)
+ Database.Beam.Sqlite: sqliteGroupConcat :: (BeamSqlBackendCanSerialize Sqlite a, BeamSqlBackendIsString Sqlite str, BeamSqlBackendIsString Sqlite str2) => QExpr Sqlite s a -> QExpr Sqlite s str -> QAgg Sqlite s (Maybe str2)
- Database.Beam.Sqlite: sqliteGroupConcatOver :: (HasSqlValueSyntax SqliteValueSyntax a, IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str) => Maybe SqliteAggregationSetQuantifierSyntax -> QExpr SqliteExpressionSyntax s a -> QAgg SqliteExpressionSyntax s (Maybe str)
+ Database.Beam.Sqlite: sqliteGroupConcatOver :: (BeamSqlBackendCanSerialize Sqlite a, BeamSqlBackendIsString Sqlite str) => Maybe SqliteAggregationSetQuantifierSyntax -> QExpr Sqlite s a -> QAgg Sqlite s (Maybe str)
- Database.Beam.Sqlite: sqliteText :: DataType SqliteDataTypeSyntax Text
+ Database.Beam.Sqlite: sqliteText :: DataType Sqlite Text
- Database.Beam.Sqlite.Connection: insertReturning :: DatabaseEntity be db (TableEntity table) -> SqlInsertValues SqliteInsertValuesSyntax (table (QExpr SqliteExpressionSyntax s)) -> SqliteInsertReturning table
+ Database.Beam.Sqlite.Connection: insertReturning :: Beamable table => DatabaseEntity Sqlite db (TableEntity table) -> SqlInsertValues Sqlite (table (QExpr Sqlite s)) -> SqlInsert Sqlite table
- Database.Beam.Sqlite.Connection: runInsertReturningList :: FromBackendRow Sqlite (table Identity) => SqliteInsertReturning table -> SqliteM [table Identity]
+ Database.Beam.Sqlite.Connection: runInsertReturningList :: FromBackendRow Sqlite (table Identity) => SqlInsert Sqlite table -> SqliteM [table Identity]
- Database.Beam.Sqlite.Connection: sqliteUriSyntax :: c SqliteCommandSyntax Sqlite Connection SqliteM -> BeamURIOpeners c
+ Database.Beam.Sqlite.Connection: sqliteUriSyntax :: c Sqlite Connection SqliteM -> BeamURIOpeners c
- Database.Beam.Sqlite.Migrate: migrateScript :: MigrationSteps SqliteCommandSyntax () a -> [ByteString]
+ Database.Beam.Sqlite.Migrate: migrateScript :: MigrationSteps Sqlite () a -> [ByteString]
- Database.Beam.Sqlite.Migrate: migrationBackend :: BeamMigrationBackend SqliteCommandSyntax Sqlite Connection SqliteM
+ Database.Beam.Sqlite.Migrate: migrationBackend :: BeamMigrationBackend Sqlite SqliteM
- Database.Beam.Sqlite.Migrate: sqliteBigInt :: DataType SqliteDataTypeSyntax Int64
+ Database.Beam.Sqlite.Migrate: sqliteBigInt :: DataType Sqlite Int64
- Database.Beam.Sqlite.Migrate: sqliteBlob :: DataType SqliteDataTypeSyntax ByteString
+ Database.Beam.Sqlite.Migrate: sqliteBlob :: DataType Sqlite ByteString
- Database.Beam.Sqlite.Migrate: sqliteText :: DataType SqliteDataTypeSyntax Text
+ Database.Beam.Sqlite.Migrate: sqliteText :: DataType Sqlite Text
- Database.Beam.Sqlite.Migrate: writeMigrationScript :: FilePath -> MigrationSteps SqliteCommandSyntax () a -> IO ()
+ Database.Beam.Sqlite.Migrate: writeMigrationScript :: FilePath -> MigrationSteps Sqlite () a -> IO ()
- Database.Beam.Sqlite.Syntax: SqliteInsertSyntax :: Text -> [Text] -> SqliteInsertValuesSyntax -> SqliteInsertSyntax
+ Database.Beam.Sqlite.Syntax: SqliteInsertSyntax :: !SqliteTableNameSyntax -> [Text] -> !SqliteInsertValuesSyntax -> SqliteInsertSyntax
- Database.Beam.Sqlite.Syntax: [sqliteInsertTable] :: SqliteInsertSyntax -> Text
+ Database.Beam.Sqlite.Syntax: [sqliteInsertTable] :: SqliteInsertSyntax -> !SqliteTableNameSyntax
- Database.Beam.Sqlite.Syntax: [sqliteInsertValues] :: SqliteInsertSyntax -> SqliteInsertValuesSyntax
+ Database.Beam.Sqlite.Syntax: [sqliteInsertValues] :: SqliteInsertSyntax -> !SqliteInsertValuesSyntax
- Database.Beam.Sqlite.Syntax: formatSqliteInsert :: Text -> [Text] -> SqliteInsertValuesSyntax -> SqliteSyntax
+ Database.Beam.Sqlite.Syntax: formatSqliteInsert :: SqliteTableNameSyntax -> [Text] -> SqliteInsertValuesSyntax -> SqliteSyntax
Files
- Database/Beam/Sqlite/Connection.hs +145/−65
- Database/Beam/Sqlite/Migrate.hs +19/−18
- Database/Beam/Sqlite/SqliteSpecific.hs +20/−22
- Database/Beam/Sqlite/Syntax.hs +70/−85
- beam-sqlite.cabal +3/−4
Database/Beam/Sqlite/Connection.hs view
@@ -1,5 +1,7 @@ {-# OPTIONS_GHC -fno-warn-orphans #-}+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -10,17 +12,24 @@ , runBeamSqlite, runBeamSqliteDebug -- * Emulated @INSERT RETURNING@ support- , SqliteInsertReturning , insertReturning, runInsertReturningList ) where import Database.Beam.Backend-import Database.Beam.Backend.SQL import qualified Database.Beam.Backend.SQL.BeamExtensions as Beam import Database.Beam.Backend.URI-import Database.Beam.Query (QExpr, SqlInsert(..), SqlInsertValues(..), insert)-import Database.Beam.Schema.Tables ( DatabaseEntity(..)- , DatabaseEntityDescriptor(..)+import Database.Beam.Migrate.Generics+import Database.Beam.Migrate.SQL ( BeamMigrateOnlySqlBackend, FieldReturnType(..) )+import qualified Database.Beam.Migrate.SQL as Beam+import Database.Beam.Migrate.SQL.BeamExtensions+import Database.Beam.Query ( QExpr, SqlInsert(..), SqlInsertValues(..)+ , HasQBuilder(..), HasSqlEqualityCheck+ , HasSqlQuantifiedEqualityCheck+ , DataType(..)+ , insert )+import Database.Beam.Query.SQL92+import Database.Beam.Schema.Tables ( Beamable+ , DatabaseEntity(..) , TableEntity) import Database.Beam.Sqlite.Syntax @@ -35,26 +44,31 @@ import Database.SQLite.Simple.Ok (Ok(..)) import Database.SQLite.Simple.Types (Null) -import Control.Exception (bracket_, onException, mask)-import Control.Monad (forM_, replicateM_)+import Control.Exception (SomeException(..), bracket_, onException, mask)+import Control.Monad (forM_) import Control.Monad.Fail (MonadFail) import Control.Monad.Free.Church import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Identity (Identity)-import Control.Monad.Reader (ReaderT, MonadReader(..), runReaderT)-import Control.Monad.State.Strict (MonadState(..), runStateT)+import Control.Monad.Reader (ReaderT(..), MonadReader(..), runReaderT)+import Control.Monad.State.Strict (MonadState(..), StateT(..), runStateT)+import Control.Monad.Trans (lift) -import qualified Data.ByteString.Char8 as BS import Data.ByteString.Builder (toLazyByteString)+import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.DList as D import Data.Int+import Data.Maybe (mapMaybe)+import Data.Proxy (Proxy(..)) import Data.Scientific (Scientific) import Data.String (fromString) import qualified Data.Text as T+import qualified Data.Text.Encoding as T (decodeUtf8) import qualified Data.Text.Lazy as TL import Data.Time ( LocalTime, UTCTime, Day- , utc, utcToLocalTime )+ , ZonedTime, utc, utcToLocalTime )+import Data.Typeable (cast) import Data.Word #if !MIN_VERSION_base(4,11,0) import Data.Semigroup@@ -81,6 +95,12 @@ instance BeamBackend Sqlite where type BackendFromField Sqlite = FromField +instance HasQBuilder Sqlite where+ buildSqlQuery = buildSql92Query' False -- SQLite does not support arbitrarily nesting UNION, INTERSECT, and EXCEPT++instance BeamSqlBackendIsString Sqlite T.Text+instance BeamSqlBackendIsString Sqlite String+ instance FromBackendRow Sqlite Bool instance FromBackendRow Sqlite Double instance FromBackendRow Sqlite Float@@ -135,8 +155,18 @@ Just s' -> pure s' instance BeamSqlBackend Sqlite-instance BeamSql92Backend Sqlite+instance BeamMigrateOnlySqlBackend Sqlite+type instance BeamSqlBackendSyntax Sqlite = SqliteCommandSyntax +data SqliteHasDefault = SqliteHasDefault+instance FieldReturnType 'True 'False Sqlite resTy a =>+ FieldReturnType 'False 'False Sqlite resTy (SqliteHasDefault -> a) where+ field' _ _ nm ty _ collation constraints SqliteHasDefault =+ field' (Proxy @'True) (Proxy @'False) nm ty Nothing collation constraints++instance BeamSqlBackendHasSerial Sqlite where+ genericSerial nm = Beam.field nm (DataType sqliteSerialType) SqliteHasDefault+ -- | 'MonadBeam' instance inside whiche SQLite queries are run. See the -- <https://tathougies.github.io/beam/ user guide> for more information newtype SqliteM a@@ -152,36 +182,100 @@ newtype BeamSqliteRow a = BeamSqliteRow a instance FromBackendRow Sqlite a => FromRow (BeamSqliteRow a) where- fromRow = BeamSqliteRow <$> runF (fromBackendRow :: FromBackendRowM Sqlite a) finish step+ fromRow = BeamSqliteRow <$> runF fromBackendRow' finish step where+ FromBackendRowM fromBackendRow' = fromBackendRow :: FromBackendRowM Sqlite a++ translateErrors :: Maybe Int -> SomeException -> Maybe SomeException+ translateErrors col (SomeException e) =+ case cast e of+ Just (ConversionFailed { errSQLType = typeString+ , errHaskellType = hsString+ , errMessage = msg }) ->+ Just (SomeException (BeamRowReadError col (ColumnTypeMismatch hsString typeString ("conversion failed: " ++ msg))))+ Just (UnexpectedNull {}) ->+ Just (SomeException (BeamRowReadError col ColumnUnexpectedNull))+ Just (Incompatible { errSQLType = typeString+ , errHaskellType = hsString+ , errMessage = msg }) ->+ Just (SomeException (BeamRowReadError col (ColumnTypeMismatch hsString typeString ("incompatible: " ++ msg))))+ Nothing -> Nothing+ finish = pure - step :: FromBackendRowF Sqlite (RowParser a) -> RowParser a+ step :: forall a'. FromBackendRowF Sqlite (RowParser a') -> RowParser a' step (ParseOneField next) =- field >>= next- step (PeekField next) =- RP $ do- ro <- ask- st <- get- case runStateT (runReaderT (unRP field) ro) st of- Ok (a, _) -> unRP (next (Just a))- _ -> unRP (next Nothing)- step (CheckNextNNull n next) =- RP $ do- ro <- ask- st <- get- case runStateT (runReaderT (unRP (replicateM_ n (field :: RowParser Null))) ro) st of- Ok ((), st') ->- do put st'- unRP (next True)- _ -> unRP (next False)+ RP $ ReaderT $ \ro -> StateT $ \st@(col, _) ->+ case runStateT (runReaderT (unRP field) ro) st of+ Ok (x, st') -> runStateT (runReaderT (unRP (next x)) ro) st'+ Errors errs -> Errors (mapMaybe (translateErrors (Just col)) errs)+ step (Alt (FromBackendRowM a) (FromBackendRowM b) next) = do+ RP $ do+ let RP a' = runF a finish step+ RP b' = runF b finish step + st <- get+ ro <- ask+ case runStateT (runReaderT a' ro) st of+ Ok (ra, st') -> do+ put st'+ unRP (next ra)+ Errors aErrs ->+ case runStateT (runReaderT b' ro) st of+ Ok (rb, st') -> do+ put st'+ unRP (next rb)+ Errors bErrs ->+ lift (lift (Errors (aErrs ++ bErrs)))+ step (FailParseWith err) = RP (lift (lift (Errors [SomeException err])))++-- * Equality checks+#define HAS_SQLITE_EQUALITY_CHECK(ty) \+ instance HasSqlEqualityCheck Sqlite (ty); \+ instance HasSqlQuantifiedEqualityCheck Sqlite (ty);++HAS_SQLITE_EQUALITY_CHECK(Int)+HAS_SQLITE_EQUALITY_CHECK(Int8)+HAS_SQLITE_EQUALITY_CHECK(Int16)+HAS_SQLITE_EQUALITY_CHECK(Int32)+HAS_SQLITE_EQUALITY_CHECK(Int64)+HAS_SQLITE_EQUALITY_CHECK(Word)+HAS_SQLITE_EQUALITY_CHECK(Word8)+HAS_SQLITE_EQUALITY_CHECK(Word16)+HAS_SQLITE_EQUALITY_CHECK(Word32)+HAS_SQLITE_EQUALITY_CHECK(Word64)+HAS_SQLITE_EQUALITY_CHECK(Double)+HAS_SQLITE_EQUALITY_CHECK(Float)+HAS_SQLITE_EQUALITY_CHECK(Bool)+HAS_SQLITE_EQUALITY_CHECK(String)+HAS_SQLITE_EQUALITY_CHECK(T.Text)+HAS_SQLITE_EQUALITY_CHECK(TL.Text)+HAS_SQLITE_EQUALITY_CHECK(BS.ByteString)+HAS_SQLITE_EQUALITY_CHECK(BL.ByteString)+HAS_SQLITE_EQUALITY_CHECK(UTCTime)+HAS_SQLITE_EQUALITY_CHECK(LocalTime)+HAS_SQLITE_EQUALITY_CHECK(ZonedTime)+HAS_SQLITE_EQUALITY_CHECK(Char)+HAS_SQLITE_EQUALITY_CHECK(Integer)+HAS_SQLITE_EQUALITY_CHECK(Scientific)++instance HasDefaultSqlDataType Sqlite (SqlSerial Int) where+ defaultSqlDataType _ _ False = sqliteSerialType+ defaultSqlDataType _ _ True = intType++instance HasDefaultSqlDataType Sqlite BS.ByteString where+ -- TODO we should somehow allow contsraints based on backend+ defaultSqlDataType _ _ _ = sqliteBlobType++instance HasDefaultSqlDataType Sqlite LocalTime where+ defaultSqlDataType _ _ _ = timestampType Nothing False+ -- | URI syntax for use with 'withDbConnection'. See documentation for -- 'BeamURIOpeners' for more information.-sqliteUriSyntax :: c SqliteCommandSyntax Sqlite Connection SqliteM+sqliteUriSyntax :: c Sqlite Connection SqliteM -> BeamURIOpeners c sqliteUriSyntax =- mkUriOpener "sqlite:"+ mkUriOpener runBeamSqlite "sqlite:" (\uri -> do let sqliteName = if null (uriPath uri) then ":memory:" else uriPath uri hdl <- open sqliteName@@ -193,10 +287,7 @@ runBeamSqlite :: Connection -> SqliteM a -> IO a runBeamSqlite = runBeamSqliteDebug (\_ -> pure ()) -instance MonadBeam SqliteCommandSyntax Sqlite Connection SqliteM where- withDatabase = runBeamSqlite- withDatabaseDebug = runBeamSqliteDebug-+instance MonadBeam Sqlite SqliteM where runNoReturn (SqliteCommandSyntax (SqliteSyntax cmd vals)) = SqliteM $ do (logger, conn) <- ask@@ -227,14 +318,13 @@ , "rows from an insert, use Database.Beam.Sqlite.insertReturning " , "for emulation" ] -instance Beam.MonadBeamInsertReturning SqliteCommandSyntax Sqlite Connection SqliteM where- runInsertReturningList tbl values =- runInsertReturningList (insertReturning tbl values)+instance Beam.MonadBeamInsertReturning Sqlite SqliteM where+ runInsertReturningList = runInsertReturningList runSqliteInsert :: (String -> IO ()) -> Connection -> SqliteInsertSyntax -> IO () runSqliteInsert logger conn (SqliteInsertSyntax tbl fields vs) -- If all expressions are simple expressions (no default), then just- -- run the INSERT normally+ | SqliteInsertExpressions es <- vs, any (any (== SqliteExpressionDefault)) es = forM_ es $ \row -> do let (fields', row') = unzip $ filter ((/= SqliteExpressionDefault) . snd) $ zip fields row@@ -250,33 +340,21 @@ -- * emulated INSERT returning support --- | Represents an @INSERT@ statement, from which we can retrieve inserted rows.--- Beam also offers a backend-agnostic way of using this functionality in the--- 'MonadBeamInsertReturning' extension. This functionality is emulated in--- SQLite using a temporary table and a trigger.-data SqliteInsertReturning (table :: (* -> *) -> *)- = SqliteInsertReturning T.Text SqliteInsertSyntax- | SqliteInsertReturningNoRows- -- | Build a 'SqliteInsertReturning' representing inserting the given values -- into the given table. Use 'runInsertReturningList'-insertReturning :: DatabaseEntity be db (TableEntity table)- -> SqlInsertValues SqliteInsertValuesSyntax (table (QExpr SqliteExpressionSyntax s))- -> SqliteInsertReturning table-insertReturning tbl@(DatabaseEntity (DatabaseTable tblNm _)) vs =- case insert tbl vs of- SqlInsert s ->- SqliteInsertReturning tblNm s- SqlInsertNoRows ->- SqliteInsertReturningNoRows+insertReturning :: Beamable table+ => DatabaseEntity Sqlite db (TableEntity table)+ -> SqlInsertValues Sqlite (table (QExpr Sqlite s))+ -> SqlInsert Sqlite table+insertReturning = insert -- | Runs a 'SqliteInsertReturning' statement and returns a result for each -- inserted row. runInsertReturningList :: FromBackendRow Sqlite (table Identity)- => SqliteInsertReturning table+ => SqlInsert Sqlite table -> SqliteM [ table Identity ]-runInsertReturningList SqliteInsertReturningNoRows = pure []-runInsertReturningList (SqliteInsertReturning nm insertStmt_) =+runInsertReturningList SqlInsertNoRows = pure []+runInsertReturningList (SqlInsert _ insertStmt_@(SqliteInsertSyntax nm _ _)) = do (logger, conn) <- SqliteM ask SqliteM . liftIO $ do @@ -288,7 +366,9 @@ #error Need either POSIX or Win32 API for MonadBeamInsertReturning #endif - let startSavepoint =+ let tableNameTxt = T.decodeUtf8 (BL.toStrict (sqliteRenderSyntaxScript (fromSqliteTableName nm)))++ startSavepoint = execute_ conn (Query ("SAVEPOINT insert_savepoint_" <> processId)) rollbackToSavepoint = execute_ conn (Query ("ROLLBACK TRANSACTION TO SAVEPOINT insert_savepoint_" <> processId))@@ -296,13 +376,13 @@ execute_ conn (Query ("RELEASE SAVEPOINT insert_savepoint_" <> processId)) createInsertedValuesTable =- execute_ conn (Query ("CREATE TEMPORARY TABLE inserted_values_" <> processId <> " AS SELECT * FROM \"" <> sqliteEscape nm <> "\" LIMIT 0"))+ execute_ conn (Query ("CREATE TEMPORARY TABLE inserted_values_" <> processId <> " AS SELECT * FROM " <> tableNameTxt <> " LIMIT 0")) dropInsertedValuesTable = execute_ conn (Query ("DROP TABLE inserted_values_" <> processId)) createInsertTrigger =- execute_ conn (Query ("CREATE TEMPORARY TRIGGER insert_trigger_" <> processId <> " AFTER INSERT ON \"" <> sqliteEscape nm <> "\" BEGIN " <>- "INSERT INTO inserted_values_" <> processId <> " SELECT * FROM \"" <> sqliteEscape nm <> "\" WHERE ROWID=last_insert_rowid(); END" ))+ execute_ conn (Query ("CREATE TEMPORARY TRIGGER insert_trigger_" <> processId <> " AFTER INSERT ON " <> tableNameTxt <> " BEGIN " <>+ "INSERT INTO inserted_values_" <> processId <> " SELECT * FROM " <> tableNameTxt <> " WHERE ROWID=last_insert_rowid(); END" )) dropInsertTrigger = execute_ conn (Query ("DROP TRIGGER insert_trigger_" <> processId))
Database/Beam/Sqlite/Migrate.hs view
@@ -4,7 +4,7 @@ -- | Migrations support for SQLite databases module Database.Beam.Sqlite.Migrate ( -- * @beam-migrate@ CLI support- migrationBackend+ migrationBackend, SqliteCommandSyntax -- * @beam-migrate@ utility functions , migrateScript, writeMigrationScript@@ -18,6 +18,8 @@ import qualified Database.Beam.Migrate as Db import qualified Database.Beam.Migrate.Backend as Tool import qualified Database.Beam.Migrate.Serialization as Db+import Database.Beam.Migrate.Types (QualifiedName(..))+import qualified Database.Beam.Query.DataTypes as Db import Database.Beam.Backend.SQL import Database.Beam.Haskell.Syntax@@ -28,8 +30,7 @@ import Control.Exception import Control.Monad.Reader -import Database.SQLite.Simple- ( Connection, open, close, query_ )+import Database.SQLite.Simple (open, close, query_) import Data.Aeson import Data.Attoparsec.Text (asciiCI, skipSpace)@@ -48,11 +49,10 @@ -- | Top-level 'Tool.BeamMigrationBackend' loaded dynamically by the -- @beam-migrate@ CLI tool.-migrationBackend :: Tool.BeamMigrationBackend SqliteCommandSyntax Sqlite Connection SqliteM+migrationBackend :: Tool.BeamMigrationBackend Sqlite SqliteM migrationBackend = Tool.BeamMigrationBackend "sqlite" "For beam-sqlite, this is the path to a sqlite3 file"- (BL.concat . migrateScript) getDbConstraints (Db.sql92Deserializers <> sqliteDataTypeDeserializers <> Db.beamCheckDeserializers)@@ -69,7 +69,7 @@ -- 'sqliteBlob', 'sqliteText', and 'sqliteBigInt'. These are compatible with the -- "typical" serialized versions of the standard 'Db.binaryLargeObject', -- 'Db.characterLargeObject', and 'Db.bigint' types.-sqliteDataTypeDeserializers :: Db.BeamDeserializers SqliteCommandSyntax+sqliteDataTypeDeserializers :: Db.BeamDeserializers Sqlite sqliteDataTypeDeserializers = Db.beamDeserializer $ \_ v -> fmap (id @SqliteDataTypeSyntax) $@@ -86,7 +86,7 @@ -- line-by-line list of lazy 'BL'ByteString's. The output is suitable for -- inclusion in a migration script. Comments are generated giving a description -- of each migration step.-migrateScript :: Db.MigrationSteps SqliteCommandSyntax () a -> [BL.ByteString]+migrateScript :: Db.MigrationSteps Sqlite () a -> [BL.ByteString] migrateScript steps = "-- Generated by beam-sqlite beam-migrate backend\n" : "\n" :@@ -98,7 +98,7 @@ Endo ((sqliteRenderSyntaxScript (fromSqliteCommand cmd) <> ";\n"):) -- | Write the output of 'migrateScript' to a file-writeMigrationScript :: FilePath -> Db.MigrationSteps SqliteCommandSyntax () a -> IO ()+writeMigrationScript :: FilePath -> Db.MigrationSteps Sqlite () a -> IO () writeMigrationScript fp steps = let stepBs = migrateScript steps in BL.writeFile fp (BL.concat stepBs)@@ -107,14 +107,14 @@ -- by 'getDbConstaints' into their equivalent in the @beam-migrate@ haskell -- syntax. Suitable for auto-generation of a haskell migration. sqlitePredConverter :: Tool.HaskellPredicateConverter-sqlitePredConverter = Tool.sql92HsPredicateConverters @SqliteColumnSchemaSyntax sqliteTypeToHs <>+sqlitePredConverter = Tool.sql92HsPredicateConverters @Sqlite sqliteTypeToHs <> Tool.hsPredicateConverter sqliteHasColumnConstraint where sqliteHasColumnConstraint (Db.TableColumnHasConstraint tblNm colNm c ::- Db.TableColumnHasConstraint SqliteColumnSchemaSyntax)+ Db.TableColumnHasConstraint Sqlite) | c == Db.constraintDefinitionSyntax Nothing Db.notNullConstraintSyntax Nothing = Just (Db.SomeDatabasePredicate (Db.TableColumnHasConstraint tblNm colNm (Db.constraintDefinitionSyntax Nothing Db.notNullConstraintSyntax Nothing) ::- Db.TableColumnHasConstraint HsColumnSchema))+ Db.TableColumnHasConstraint HsMigrateBackend)) | otherwise = Nothing -- | Convert a SQLite data type to the corresponding Haskell one@@ -238,9 +238,10 @@ SqliteM . ReaderT $ \(_, conn) -> do tblNames <- query_ conn "SELECT name, sql from sqlite_master where type='table'" tblPreds <-- fmap mconcat . forM tblNames $ \(tblName, sql) -> do+ fmap mconcat . forM tblNames $ \(tblNameStr, sql) -> do+ let tblName = QualifiedName Nothing tblNameStr columns <- fmap (sortBy (comparing (\(cid, _, _, _, _, _) -> cid :: Int))) $- query_ conn (fromString ("PRAGMA table_info('" <> T.unpack tblName <> "')"))+ query_ conn (fromString ("PRAGMA table_info('" <> T.unpack tblNameStr <> "')")) let columnPreds = foldMap@@ -267,12 +268,12 @@ then [ Db.SomeDatabasePredicate (Db.TableColumnHasConstraint tblName nm (Db.constraintDefinitionSyntax Nothing Db.notNullConstraintSyntax Nothing)- :: Db.TableColumnHasConstraint SqliteColumnSchemaSyntax) ]+ :: Db.TableColumnHasConstraint Sqlite) ] else [] in [ Db.SomeDatabasePredicate (Db.TableHasColumn tblName nm dtType ::- Db.TableHasColumn SqliteColumnSchemaSyntax) ] +++ Db.TableHasColumn Sqlite) ] ++ notNullPred ) columns@@ -288,12 +289,12 @@ pure tblPreds -sqliteText :: Db.DataType SqliteDataTypeSyntax T.Text+sqliteText :: Db.DataType Sqlite T.Text sqliteText = Db.DataType sqliteTextType -sqliteBlob :: Db.DataType SqliteDataTypeSyntax ByteString+sqliteBlob :: Db.DataType Sqlite ByteString sqliteBlob = Db.DataType sqliteBlobType -sqliteBigInt :: Db.DataType SqliteDataTypeSyntax Int64+sqliteBigInt :: Db.DataType Sqlite Int64 sqliteBigInt = Db.DataType sqliteBigIntType
Database/Beam/Sqlite/SqliteSpecific.hs view
@@ -11,6 +11,7 @@ import Database.Beam import Database.Beam.Backend.SQL import Database.Beam.Query.Internal+import Database.Beam.Sqlite.Connection import Database.Beam.Sqlite.Syntax #if !MIN_VERSION_base(4, 11, 0) import Data.Semigroup@@ -20,14 +21,13 @@ -- Joins the value in each row of the first argument, using the second -- argument as a delimiter. See 'sqliteGroupConcatOver' if you want to provide -- explicit quantification.-sqliteGroupConcat - :: ( HasSqlValueSyntax SqliteValueSyntax a- , IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str - , IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str2- )- => QExpr SqliteExpressionSyntax s a- -> QExpr SqliteExpressionSyntax s str- -> QAgg SqliteExpressionSyntax s (Maybe str2)+sqliteGroupConcat+ :: ( BeamSqlBackendCanSerialize Sqlite a+ , BeamSqlBackendIsString Sqlite str+ , BeamSqlBackendIsString Sqlite str2 )+ => QExpr Sqlite s a+ -> QExpr Sqlite s str+ -> QAgg Sqlite s (Maybe str2) sqliteGroupConcat v delim = _sqliteGroupConcatOver allInGroup_ v (Just delim) @@ -35,27 +35,25 @@ -- Joins the value in each row of the first argument using ','. -- See 'sqliteGroupConcat' if you want to change the delimiter. -- Choosing a custom delimiter and quantification isn't allowed by SQLite.-sqliteGroupConcatOver - :: ( HasSqlValueSyntax SqliteValueSyntax a- , IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str - )+sqliteGroupConcatOver+ :: ( BeamSqlBackendCanSerialize Sqlite a+ , BeamSqlBackendIsString Sqlite str ) => Maybe SqliteAggregationSetQuantifierSyntax- -> QExpr SqliteExpressionSyntax s a- -> QAgg SqliteExpressionSyntax s (Maybe str)+ -> QExpr Sqlite s a+ -> QAgg Sqlite s (Maybe str) sqliteGroupConcatOver quantifier v = _sqliteGroupConcatOver quantifier v Nothing -- SQLite doesn't allow DISTINCT and a custom delimiter-_sqliteGroupConcatOver - :: ( HasSqlValueSyntax SqliteValueSyntax a- , IsSqlExpressionSyntaxStringType SqliteExpressionSyntax str- )+_sqliteGroupConcatOver+ :: ( BeamSqlBackendCanSerialize Sqlite a+ , BeamSqlBackendIsString Sqlite str ) => Maybe SqliteAggregationSetQuantifierSyntax- -> QExpr SqliteExpressionSyntax s a- -> Maybe (QExpr SqliteExpressionSyntax s str2)- -> QAgg SqliteExpressionSyntax s (Maybe str)+ -> QExpr Sqlite s a+ -> Maybe (QExpr Sqlite s str2)+ -> QAgg Sqlite s (Maybe str) _sqliteGroupConcatOver quantifier (QExpr v) delim = QExpr $ \tbl -> SqliteExpressionSyntax $ emit "group_concat" <> parens ( maybe mempty (\q -> fromSqliteAggregationSetQuantifier q <> emit " ") quantifier <>- fromSqliteExpression (v tbl) <> + fromSqliteExpression (v tbl) <> maybe mempty (\(QExpr d) -> emit ", " <> fromSqliteExpression (d tbl)) delim)
Database/Beam/Sqlite/Syntax.hs view
@@ -1,4 +1,5 @@ {-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-name-shadowing#-}+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -21,6 +22,7 @@ , SqliteInsertValuesSyntax(..) , SqliteColumnSchemaSyntax(..) , SqliteExpressionSyntax(..), SqliteValueSyntax(..)+ , SqliteTableNameSyntax(..) , SqliteAggregationSetQuantifierSyntax(..) , fromSqliteExpression@@ -40,15 +42,13 @@ ) where import Database.Beam.Backend.SQL+import Database.Beam.Backend.SQL.AST (ExtractField(..)) import Database.Beam.Haskell.Syntax-import Database.Beam.Migrate.Generics+import Database.Beam.Migrate.Checks (HasDataTypeCreatedCheck(..)) import Database.Beam.Migrate.SQL.Builder hiding (fromSqlConstraintAttributes) import Database.Beam.Migrate.SQL.SQL92-import Database.Beam.Migrate.SQL (DataType(..), FieldReturnType(..), field)-import Database.Beam.Migrate.SQL.BeamExtensions import Database.Beam.Migrate.Serialization-import Database.Beam.Query-import Database.Beam.Query.SQL92+import Database.Beam.Query hiding (ExtractField(..)) import Data.ByteString (ByteString) import qualified Data.ByteString as B@@ -59,7 +59,6 @@ import Data.Hashable import Data.Int import Data.Maybe-import Data.Proxy (Proxy(..)) import Data.Scientific import Data.String import qualified Data.Text as T@@ -182,19 +181,16 @@ -- | SQLite @SELECT@ syntax newtype SqliteSelectSyntax = SqliteSelectSyntax { fromSqliteSelect :: SqliteSyntax }-instance HasQBuilder SqliteSelectSyntax where- buildSqlQuery = buildSql92Query' False -- SQLite does not support arbitrarily nesting UNION, INTERSECT, and EXCEPT - -- | SQLite @INSERT@ syntax. This doesn't directly wrap 'SqliteSyntax' because -- we need to do some processing on @INSERT@ statements to deal with @AUTO -- INCREMENT@ columns. Use 'formatSqliteInsert' to turn 'SqliteInsertSyntax' -- into 'SqliteSyntax'. data SqliteInsertSyntax = SqliteInsertSyntax- { sqliteInsertTable :: T.Text+ { sqliteInsertTable :: !SqliteTableNameSyntax , sqliteInsertFields :: [ T.Text ]- , sqliteInsertValues :: SqliteInsertValuesSyntax+ , sqliteInsertValues :: !SqliteInsertValuesSyntax } -- | SQLite @UPDATE@ syntax@@ -212,7 +208,6 @@ instance Hashable SqliteExpressionSyntax newtype SqliteFromSyntax = SqliteFromSyntax { fromSqliteFromSyntax :: SqliteSyntax } newtype SqliteComparisonQuantifierSyntax = SqliteComparisonQuantifierSyntax { fromSqliteComparisonQuantifier :: SqliteSyntax }-newtype SqliteExtractFieldSyntax = SqliteExtractFieldSyntax { fromSqliteExtractField :: SqliteSyntax } newtype SqliteAggregationSetQuantifierSyntax = SqliteAggregationSetQuantifierSyntax { fromSqliteAggregationSetQuantifier :: SqliteSyntax } newtype SqliteProjectionSyntax = SqliteProjectionSyntax { fromSqliteProjection :: SqliteSyntax } newtype SqliteGroupingSyntax = SqliteGroupingSyntax { fromSqliteGrouping :: SqliteSyntax }@@ -287,6 +282,7 @@ newtype SqliteAlterTableActionSyntax = SqliteAlterTableActionSyntax { fromSqliteAlterTableAction :: Maybe SqliteSyntax } newtype SqliteAlterColumnActionSyntax = SqliteAlterColumnActionSyntax { fromSqliteAlterColumnAction :: Maybe SqliteSyntax } newtype SqliteDropTableSyntax = SqliteDropTableSyntax { fromSqliteDropTable :: SqliteSyntax }+newtype SqliteTableNameSyntax = SqliteTableNameSyntax { fromSqliteTableName :: SqliteSyntax } fromSqliteExpression :: SqliteExpressionSyntax -> SqliteSyntax fromSqliteExpression (SqliteExpressionSyntax s) = s@@ -297,9 +293,9 @@ sqliteRenderSyntaxScript . fromSqliteExpression -- | Format a SQLite @INSERT@ expression for the given table name, fields, and values.-formatSqliteInsert :: T.Text -> [ T.Text ] -> SqliteInsertValuesSyntax -> SqliteSyntax+formatSqliteInsert :: SqliteTableNameSyntax -> [ T.Text ] -> SqliteInsertValuesSyntax -> SqliteSyntax formatSqliteInsert tblNm fields values =- emit "INSERT INTO " <> quotedIdentifier tblNm <> parens (commas (map quotedIdentifier fields)) <> emit " " <>+ emit "INSERT INTO " <> fromSqliteTableName tblNm <> parens (commas (map quotedIdentifier fields)) <> emit " " <> case values of SqliteInsertFromSql (SqliteSelectSyntax select) -> select SqliteInsertExpressions es ->@@ -325,17 +321,25 @@ alterTableCmd = SqliteCommandSyntax . fromSqliteAlterTable dropTableCmd = SqliteCommandSyntax . fromSqliteDropTable +instance IsSql92TableNameSyntax SqliteTableNameSyntax where+ -- SQLite doesn't have schemas proper, but it does have attached databases, which is what we use here+ tableName Nothing tbl = SqliteTableNameSyntax (quotedIdentifier tbl)+ tableName (Just sch) tbl = SqliteTableNameSyntax (quotedIdentifier sch <> emit "." <> quotedIdentifier tbl)+ instance IsSql92DropTableSyntax SqliteDropTableSyntax where- dropTableSyntax nm = SqliteDropTableSyntax (emit "DROP TABLE " <> quotedIdentifier nm)+ type Sql92DropTableTableNameSyntax SqliteDropTableSyntax = SqliteTableNameSyntax + dropTableSyntax nm = SqliteDropTableSyntax (emit "DROP TABLE " <> fromSqliteTableName nm)+ instance IsSql92AlterTableSyntax SqliteAlterTableSyntax where type Sql92AlterTableAlterTableActionSyntax SqliteAlterTableSyntax = SqliteAlterTableActionSyntax+ type Sql92AlterTableTableNameSyntax SqliteAlterTableSyntax = SqliteTableNameSyntax alterTableSyntax nm action = SqliteAlterTableSyntax $ case fromSqliteAlterTableAction action of Just alterTable ->- emit "ALTER TABLE " <> quotedIdentifier nm <> emit " " <> alterTable+ emit "ALTER TABLE " <> fromSqliteTableName nm <> emit " " <> alterTable Nothing -> emit "SELECT 1" @@ -447,6 +451,7 @@ type Sql92CreateTableColumnSchemaSyntax SqliteCreateTableSyntax = SqliteColumnSchemaSyntax type Sql92CreateTableTableConstraintSyntax SqliteCreateTableSyntax = SqliteTableConstraintSyntax type Sql92CreateTableOptionsSyntax SqliteCreateTableSyntax = SqliteTableOptionsSyntax+ type Sql92CreateTableTableNameSyntax SqliteCreateTableSyntax = SqliteTableNameSyntax createTableSyntax _ nm fields constraints = let fieldDefs = map mkFieldDef fields@@ -462,7 +467,7 @@ createWithConstraints constraintDefs' = SqliteCreateTableSyntax $- emit "CREATE TABLE " <> quotedIdentifier nm <> parens (commas (fieldDefs <> constraintDefs'))+ emit "CREATE TABLE " <> fromSqliteTableName nm <> parens (commas (fieldDefs <> constraintDefs')) normalCreateTable = createWithConstraints constraintDefs createTableNoPkConstraint = createWithConstraints noPkConstraintDefs @@ -611,8 +616,9 @@ type Sql92FromTableSourceSyntax SqliteFromSyntax = SqliteTableSourceSyntax fromTable tableSrc Nothing = SqliteFromSyntax (fromSqliteTableSource tableSrc)- fromTable tableSrc (Just nm) =- SqliteFromSyntax (fromSqliteTableSource tableSrc <> emit " AS " <> quotedIdentifier nm)+ fromTable tableSrc (Just (nm, colNms)) =+ SqliteFromSyntax (fromSqliteTableSource tableSrc <> emit " AS " <> quotedIdentifier nm <>+ maybe mempty (\colNms' -> parens (commas (map quotedIdentifier colNms'))) colNms) innerJoin = _join "INNER JOIN" leftJoin = _join "LEFT JOIN"@@ -641,11 +647,16 @@ quotedIdentifier a instance IsSql92TableSourceSyntax SqliteTableSourceSyntax where+ type Sql92TableSourceTableNameSyntax SqliteTableSourceSyntax = SqliteTableNameSyntax type Sql92TableSourceSelectSyntax SqliteTableSourceSyntax = SqliteSelectSyntax+ type Sql92TableSourceExpressionSyntax SqliteTableSourceSyntax = SqliteExpressionSyntax - tableNamed = SqliteTableSourceSyntax . quotedIdentifier+ tableNamed = SqliteTableSourceSyntax . fromSqliteTableName tableFromSubSelect s = SqliteTableSourceSyntax (parens (fromSqliteSelect s))+ tableFromValues vss = SqliteTableSourceSyntax . parens $+ emit "VALUES " <>+ commas (map (\vs -> parens (commas (map fromSqliteExpression vs))) vss) instance IsSql92GroupingSyntax SqliteGroupingSyntax where type Sql92GroupingExpressionSyntax SqliteGroupingSyntax = SqliteExpressionSyntax@@ -660,8 +671,6 @@ ascOrdering e = SqliteOrderingSyntax (fromSqliteExpression e <> emit " ASC") descOrdering e = SqliteOrderingSyntax (fromSqliteExpression e <> emit " DESC") -instance IsSqlExpressionSyntaxStringType SqliteExpressionSyntax T.Text-instance IsSqlExpressionSyntaxStringType SqliteExpressionSyntax String instance HasSqlValueSyntax SqliteValueSyntax Int where sqlValueSyntax i = SqliteValueSyntax (emitValue (SQLInteger (fromIntegral i))) instance HasSqlValueSyntax SqliteValueSyntax Int8 where@@ -723,7 +732,7 @@ type Sql92ExpressionFieldNameSyntax SqliteExpressionSyntax = SqliteFieldNameSyntax type Sql92ExpressionQuantifierSyntax SqliteExpressionSyntax = SqliteComparisonQuantifierSyntax type Sql92ExpressionCastTargetSyntax SqliteExpressionSyntax = SqliteDataTypeSyntax- type Sql92ExpressionExtractFieldSyntax SqliteExpressionSyntax = SqliteExtractFieldSyntax+ type Sql92ExpressionExtractFieldSyntax SqliteExpressionSyntax = ExtractField addE = binOp "+"; subE = binOp "-"; mulE = binOp "*"; divE = binOp "/" modE = binOp "%"; orE = binOp "OR"; andE = binOp "AND"; likeE = binOp "LIKE"@@ -771,9 +780,7 @@ upperE x = SqliteExpressionSyntax (emit "UPPER" <> parens (fromSqliteExpression x)) trimE x = SqliteExpressionSyntax (emit "TRIM" <> parens (fromSqliteExpression x)) coalesceE es = SqliteExpressionSyntax (emit "COALESCE" <> parens (commas (map fromSqliteExpression es)))- extractE field from =- SqliteExpressionSyntax $- emit "EXTRACT" <> parens (fromSqliteExtractField field <> emit " FROM " <> parens (fromSqliteExpression from))+ extractE = sqliteExtract castE e t = SqliteExpressionSyntax (emit "CAST" <> parens (parens (fromSqliteExpression e) <> emit " AS " <> fromSqliteDataType t)) caseE cases else_ = SqliteExpressionSyntax $@@ -792,6 +799,12 @@ SqliteExpressionSyntax $ parens $ foldl (\a b -> a <> emit " || " <> parens (fromSqliteExpression b)) (fromSqliteExpression x) xs +instance IsSql99FunctionExpressionSyntax SqliteExpressionSyntax where+ functionCallE fn args =+ SqliteExpressionSyntax $+ fromSqliteExpression fn <> parens (commas (fmap fromSqliteExpression args))+ functionNameE nm = SqliteExpressionSyntax (emit (TE.encodeUtf8 nm))+ binOp :: ByteString -> SqliteExpressionSyntax -> SqliteExpressionSyntax -> SqliteExpressionSyntax binOp op a b = SqliteExpressionSyntax $@@ -835,6 +848,7 @@ setQuantifierAll = SqliteAggregationSetQuantifierSyntax (emit "ALL") instance IsSql92InsertSyntax SqliteInsertSyntax where+ type Sql92InsertTableNameSyntax SqliteInsertSyntax = SqliteTableNameSyntax type Sql92InsertValuesSyntax SqliteInsertSyntax = SqliteInsertValuesSyntax insertStmt = SqliteInsertSyntax@@ -847,12 +861,13 @@ insertFromSql = SqliteInsertFromSql instance IsSql92UpdateSyntax SqliteUpdateSyntax where+ type Sql92UpdateTableNameSyntax SqliteUpdateSyntax = SqliteTableNameSyntax type Sql92UpdateFieldNameSyntax SqliteUpdateSyntax = SqliteFieldNameSyntax type Sql92UpdateExpressionSyntax SqliteUpdateSyntax = SqliteExpressionSyntax updateStmt tbl fields where_ = SqliteUpdateSyntax $- emit "UPDATE " <> quotedIdentifier tbl <>+ emit "UPDATE " <> fromSqliteTableName tbl <> (case fields of [] -> mempty _ -> emit " SET " <>@@ -860,11 +875,12 @@ maybe mempty (\where_ -> emit " WHERE " <> fromSqliteExpression where_) where_ instance IsSql92DeleteSyntax SqliteDeleteSyntax where+ type Sql92DeleteTableNameSyntax SqliteDeleteSyntax = SqliteTableNameSyntax type Sql92DeleteExpressionSyntax SqliteDeleteSyntax = SqliteExpressionSyntax deleteStmt tbl Nothing where_ = SqliteDeleteSyntax $- emit "DELETE FROM " <> quotedIdentifier tbl <>+ emit "DELETE FROM " <> fromSqliteTableName tbl <> maybe mempty (\where_ -> emit " WHERE " <> fromSqliteExpression where_) where_ deleteStmt _ (Just _) _ = error "beam-sqlite: invariant failed: DELETE must not have a table alias"@@ -878,40 +894,36 @@ commas [x] = x commas (x:xs) = x <> foldMap (emit ", " <>) xs +strftimeSyntax :: SqliteExpressionSyntax -> SqliteExpressionSyntax -> [ SqliteExpressionSyntax ] -> SqliteExpressionSyntax+strftimeSyntax fmt ts mods =+ functionCallE (SqliteExpressionSyntax (emit "strftime"))+ (fmt:ts:mods)++-- | SQLite does not support @EXTRACT@ directly, but we can emulate+-- the behavior if we know which field we want.+sqliteExtract :: ExtractField -> SqliteExpressionSyntax -> SqliteExpressionSyntax+sqliteExtract field from =+ case field of+ ExtractFieldTimeZoneHour -> error "sqliteExtract: TODO ExtractFieldTimeZoneHour"+ ExtractFieldTimeZoneMinute -> error "sqliteExtract: TODO ExtractFieldTimeZoneMinute"++ ExtractFieldDateTimeYear -> extractStrftime "%Y"+ ExtractFieldDateTimeMonth -> extractStrftime "%m"+ ExtractFieldDateTimeDay -> extractStrftime "%d"+ ExtractFieldDateTimeHour -> extractStrftime "%H"+ ExtractFieldDateTimeMinute -> extractStrftime "%M"+ ExtractFieldDateTimeSecond -> extractStrftime "%S"++ where+ extractStrftime :: String -> SqliteExpressionSyntax+ extractStrftime fmt = strftimeSyntax (valueE (sqlValueSyntax fmt)) from []+ sqliteSerialType :: SqliteDataTypeSyntax sqliteSerialType = SqliteDataTypeSyntax (emit "INTEGER PRIMARY KEY AUTOINCREMENT") intType (BeamSerializedDataType (beamSerializeJSON "sqlite" "serial")) True -data SqliteHasDefault = SqliteHasDefault-instance FieldReturnType 'True 'False SqliteColumnSchemaSyntax resTy a =>- FieldReturnType 'False 'False SqliteColumnSchemaSyntax resTy (SqliteHasDefault -> a) where- field' _ _ nm ty _ collation constraints SqliteHasDefault =- field' (Proxy @'True) (Proxy @'False) nm ty Nothing collation constraints--instance IsBeamSerialColumnSchemaSyntax SqliteColumnSchemaSyntax where- genericSerial nm = field nm (DataType sqliteSerialType) SqliteHasDefault--instance HasDefaultSqlDataType SqliteDataTypeSyntax (SqlSerial Int) where- defaultSqlDataType _ False = sqliteSerialType- defaultSqlDataType _ True = intType-instance HasDefaultSqlDataTypeConstraints SqliteColumnSchemaSyntax (SqlSerial Int) where- defaultSqlDataTypeConstraints _ _ _ = []--instance HasDefaultSqlDataType SqliteDataTypeSyntax ByteString where- -- TODO we should somehow allow contsraints based on backend- defaultSqlDataType _ _ = sqliteBlobType-instance HasDefaultSqlDataTypeConstraints SqliteColumnSchemaSyntax ByteString--instance HasDefaultSqlDataType SqliteDataTypeSyntax UTCTime where- defaultSqlDataType _ _ = timestampType Nothing False-instance HasDefaultSqlDataTypeConstraints SqliteColumnSchemaSyntax UTCTime--instance HasDefaultSqlDataType SqliteDataTypeSyntax LocalTime where- defaultSqlDataType _ _ = timestampType Nothing False-instance HasDefaultSqlDataTypeConstraints SqliteColumnSchemaSyntax LocalTime- instance HasSqlValueSyntax SqliteValueSyntax ByteString where sqlValueSyntax bs = SqliteValueSyntax (emitValue (SQLBlob bs)) @@ -927,32 +939,5 @@ sqlValueSyntax tm = SqliteValueSyntax (emitValue (SQLText (fromString tmStr))) where tmStr = formatTime defaultTimeLocale (iso8601DateFormat Nothing) tm --- * Equality checks-#define HAS_SQLITE_EQUALITY_CHECK(ty) \- instance HasSqlEqualityCheck SqliteExpressionSyntax (ty); \- instance HasSqlQuantifiedEqualityCheck SqliteExpressionSyntax (ty);--HAS_SQLITE_EQUALITY_CHECK(Int)-HAS_SQLITE_EQUALITY_CHECK(Int8)-HAS_SQLITE_EQUALITY_CHECK(Int16)-HAS_SQLITE_EQUALITY_CHECK(Int32)-HAS_SQLITE_EQUALITY_CHECK(Int64)-HAS_SQLITE_EQUALITY_CHECK(Word)-HAS_SQLITE_EQUALITY_CHECK(Word8)-HAS_SQLITE_EQUALITY_CHECK(Word16)-HAS_SQLITE_EQUALITY_CHECK(Word32)-HAS_SQLITE_EQUALITY_CHECK(Word64)-HAS_SQLITE_EQUALITY_CHECK(Double)-HAS_SQLITE_EQUALITY_CHECK(Float)-HAS_SQLITE_EQUALITY_CHECK(Bool)-HAS_SQLITE_EQUALITY_CHECK(String)-HAS_SQLITE_EQUALITY_CHECK(T.Text)-HAS_SQLITE_EQUALITY_CHECK(TL.Text)-HAS_SQLITE_EQUALITY_CHECK(B.ByteString)-HAS_SQLITE_EQUALITY_CHECK(BL.ByteString)-HAS_SQLITE_EQUALITY_CHECK(UTCTime)-HAS_SQLITE_EQUALITY_CHECK(LocalTime)-HAS_SQLITE_EQUALITY_CHECK(ZonedTime)-HAS_SQLITE_EQUALITY_CHECK(Char)-HAS_SQLITE_EQUALITY_CHECK(Integer)-HAS_SQLITE_EQUALITY_CHECK(Scientific)+instance HasDataTypeCreatedCheck SqliteDataTypeSyntax where+ dataTypeHasBeenCreated _ _ = True
beam-sqlite.cabal view
@@ -1,6 +1,5 @@- name: beam-sqlite-version: 0.3.2.4+version: 0.4.0.0 synopsis: Beam driver for SQLite description: Beam driver for the <https://sqlite.org/ SQLite> embedded database. See <http://tathougies.github.io/beam/user-guide/backends/beam-sqlite/ here>@@ -26,8 +25,8 @@ other-modules: Database.Beam.Sqlite.SqliteSpecific build-depends: base >=4.7 && <5, - beam-core >=0.7 && <0.8,- beam-migrate >=0.3 && <0.4,+ beam-core >=0.8 && <0.9,+ beam-migrate >=0.4 && <0.5, sqlite-simple >=0.4 && <0.5, text >=1.0 && <1.3,