-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Beam driver for SQLite
--   
--   Beam driver for the <a>SQLite</a> embedded database. See <a>here</a>
--   for more information
@package beam-sqlite
@version 0.3.2.2


-- | SQLite implementations of the Beam SQL syntax classes
--   
--   The SQLite command syntax is implemented by
--   <tt>SQLiteCommandSyntax</tt>.
module Database.Beam.Sqlite.Syntax

-- | The syntax for SQLite is stored as a <a>Builder</a> along with a list
--   of data that hasn't been serialized yet.
--   
--   The first argument is a function that receives a builder for
--   <a>SQLData</a> and returns the concrete syntax to embed into the
--   query. For queries sent to the backend, this is simply a function that
--   returns <tt>"?"</tt>. Thus, the syntax sent to the backend includes
--   proper placeholders. The list of data is sent to the SQLite library
--   for proper escaping.
--   
--   When the syntax is being serialized for display (for use in beam
--   migrate for example), the data builder attempts to properly format and
--   escape the data. This returns syntax suitable for inclusion in
--   scripts. In this case, the value list is ignored.
data SqliteSyntax
SqliteSyntax :: ((SQLData -> Builder) -> Builder) -> (DList SQLData) -> SqliteSyntax

-- | A SQLite command. <tt>INSERT</tt> is special cased to handle <tt>AUTO
--   INCREMENT</tt> columns. The <a>fromSqliteCommand</a> function will
--   take an <a>SqliteCommandSyntax</a> and convert it into the correct
--   <a>SqliteSyntax</a>.
data SqliteCommandSyntax
SqliteCommandSyntax :: SqliteSyntax -> SqliteCommandSyntax
SqliteCommandInsert :: SqliteInsertSyntax -> SqliteCommandSyntax

-- | SQLite <tt>SELECT</tt> syntax
newtype SqliteSelectSyntax
SqliteSelectSyntax :: SqliteSyntax -> SqliteSelectSyntax
[fromSqliteSelect] :: SqliteSelectSyntax -> SqliteSyntax

-- | SQLite <tt>INSERT</tt> syntax. This doesn't directly wrap
--   <a>SqliteSyntax</a> because we need to do some processing on
--   <tt>INSERT</tt> statements to deal with <tt>AUTO INCREMENT</tt>
--   columns. Use <a>formatSqliteInsert</a> to turn
--   <a>SqliteInsertSyntax</a> into <a>SqliteSyntax</a>.
data SqliteInsertSyntax
SqliteInsertSyntax :: Text -> [Text] -> SqliteInsertValuesSyntax -> SqliteInsertSyntax
[sqliteInsertTable] :: SqliteInsertSyntax -> Text
[sqliteInsertFields] :: SqliteInsertSyntax -> [Text]
[sqliteInsertValues] :: SqliteInsertSyntax -> SqliteInsertValuesSyntax

-- | SQLite <tt>UPDATE</tt> syntax
newtype SqliteUpdateSyntax
SqliteUpdateSyntax :: SqliteSyntax -> SqliteUpdateSyntax
[fromSqliteUpdate] :: SqliteUpdateSyntax -> SqliteSyntax

-- | SQLite <tt>DELETE</tt> syntax
newtype SqliteDeleteSyntax
SqliteDeleteSyntax :: SqliteSyntax -> SqliteDeleteSyntax
[fromSqliteDelete] :: SqliteDeleteSyntax -> SqliteSyntax

-- | SQLite <tt>VALUES</tt> clause in <tt>INSERT</tt>. Expressions need to
--   be handled explicitly in order to deal with <tt>DEFAULT</tt> values
--   and <tt>AUTO INCREMENT</tt> columns.
data SqliteInsertValuesSyntax
SqliteInsertExpressions :: [[SqliteExpressionSyntax]] -> SqliteInsertValuesSyntax
SqliteInsertFromSql :: SqliteSelectSyntax -> SqliteInsertValuesSyntax

-- | SQLite syntax for column schemas in <tt>CREATE TABLE</tt> or <tt>ALTER
--   COLUMN ... ADD COLUMN</tt> statements
data SqliteColumnSchemaSyntax
SqliteColumnSchemaSyntax :: SqliteSyntax -> Bool -> SqliteColumnSchemaSyntax
[fromSqliteColumnSchema] :: SqliteColumnSchemaSyntax -> SqliteSyntax
[sqliteIsSerialColumn] :: SqliteColumnSchemaSyntax -> Bool

-- | Implements beam SQL expression syntaxes
data SqliteExpressionSyntax
SqliteExpressionSyntax :: SqliteSyntax -> SqliteExpressionSyntax
SqliteExpressionDefault :: SqliteExpressionSyntax

-- | SQLite syntax for values that can be embedded in <a>SqliteSyntax</a>
newtype SqliteValueSyntax
SqliteValueSyntax :: SqliteSyntax -> SqliteValueSyntax
[fromSqliteValue] :: SqliteValueSyntax -> SqliteSyntax

-- | SQLite syntax that implements <a>IsSql92DataTypeSyntax</a> and a good
--   portion of <a>IsSql99DataTypeSyntax</a>, except for array and row
--   types.
data SqliteDataTypeSyntax
SqliteDataTypeSyntax :: SqliteSyntax -> HsDataType -> BeamSerializedDataType -> Bool -> SqliteDataTypeSyntax
[fromSqliteDataType] :: SqliteDataTypeSyntax -> SqliteSyntax
[sqliteDataTypeToHs] :: SqliteDataTypeSyntax -> HsDataType
[sqliteDataTypeSerialized] :: SqliteDataTypeSyntax -> BeamSerializedDataType
[sqliteDataTypeSerial] :: SqliteDataTypeSyntax -> Bool
sqliteTextType :: SqliteDataTypeSyntax
sqliteBlobType :: SqliteDataTypeSyntax
sqliteBigIntType :: SqliteDataTypeSyntax
sqliteSerialType :: SqliteDataTypeSyntax

-- | Convert a <a>SqliteCommandSyntax</a> into a renderable
--   <a>SqliteSyntax</a>
fromSqliteCommand :: SqliteCommandSyntax -> SqliteSyntax

-- | Format a SQLite <tt>INSERT</tt> expression for the given table name,
--   fields, and values.
formatSqliteInsert :: Text -> [Text] -> SqliteInsertValuesSyntax -> SqliteSyntax

-- | Embed a <a>ByteString</a> directly in the syntax
emit :: ByteString -> SqliteSyntax

-- | Emit a properly escaped value into the syntax
--   
--   This causes a literal <tt>?</tt> 3
emitValue :: SQLData -> SqliteSyntax

-- | A best effort attempt to implement the escaping rules of SQLite. This
--   is never used to escape data sent to the database; only for emitting
--   scripts or displaying syntax to the user.
sqliteEscape :: Text -> Text

-- | Convert the first argument of <tt>SQLiteSyntax</tt> to a
--   <a>ByteString</a> <a>Builder</a>, where all the data has been replaced
--   by <tt>"?"</tt> placeholders.
withPlaceholders :: ((SQLData -> Builder) -> Builder) -> Builder

-- | Render a <a>SqliteSyntax</a> as a lazy <a>ByteString</a>, for purposes
--   of displaying to a user. Embedded <a>SQLData</a> is directly embedded
--   into the concrete syntax, with a best effort made to escape strings.
sqliteRenderSyntaxScript :: SqliteSyntax -> ByteString
instance GHC.Classes.Eq Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance GHC.Show.Show Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance GHC.Generics.Generic Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance GHC.Classes.Eq Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance GHC.Show.Show Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance GHC.Generics.Generic Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance GHC.Classes.Eq Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance GHC.Show.Show Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance GHC.Generics.Generic Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance GHC.Classes.Eq Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance GHC.Show.Show Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Data.Semigroup.Semigroup (Database.Beam.Query.CustomSQL.CustomSqlSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax)
instance GHC.Base.Monoid (Database.Beam.Query.CustomSQL.CustomSqlSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax)
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)
instance Database.Beam.Migrate.SQL.BeamExtensions.IsBeamSerialColumnSchemaSyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92DdlCommandSyntax Database.Beam.Sqlite.Syntax.SqliteCommandSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92DropTableSyntax Database.Beam.Sqlite.Syntax.SqliteDropTableSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92AlterTableActionSyntax Database.Beam.Sqlite.Syntax.SqliteAlterTableActionSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92AlterColumnActionSyntax Database.Beam.Sqlite.Syntax.SqliteAlterColumnActionSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92AlterTableSyntax Database.Beam.Sqlite.Syntax.SqliteAlterTableSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92ColumnConstraintSyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92ReferentialActionSyntax Database.Beam.Sqlite.Syntax.SqliteReferentialActionSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92MatchTypeSyntax Database.Beam.Sqlite.Syntax.SqliteMatchTypeSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92TableConstraintSyntax Database.Beam.Sqlite.Syntax.SqliteTableConstraintSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92CreateTableSyntax Database.Beam.Sqlite.Syntax.SqliteCreateTableSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92ColumnConstraintDefinitionSyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance Database.Beam.Migrate.SQL.SQL92.IsSql92ColumnSchemaSyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92SerializableConstraintDefinitionSyntax Database.Beam.Sqlite.Syntax.SqliteColumnConstraintDefinitionSyntax
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92DataTypeSyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Backend.SQL.SQL99.IsSql99DataTypeSyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Backend.SQL.SQL2003.IsSql2008BigIntDataTypeSyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92SerializableDataTypeSyntax Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92ExpressionSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax (Database.Beam.Backend.SQL.Types.SqlSerial GHC.Types.Int)
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax Data.ByteString.Internal.ByteString
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Syntax.SqliteDataTypeSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax (Database.Beam.Backend.SQL.Types.SqlSerial GHC.Types.Int)
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax Data.ByteString.Internal.ByteString
instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataTypeConstraints Database.Beam.Sqlite.Syntax.SqliteColumnSchemaSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Database.Beam.Backend.SQL.SQL92.IsSql92Syntax Database.Beam.Sqlite.Syntax.SqliteCommandSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92InsertSyntax Database.Beam.Sqlite.Syntax.SqliteInsertSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92InsertValuesSyntax Database.Beam.Sqlite.Syntax.SqliteInsertValuesSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92FieldNameSyntax Database.Beam.Sqlite.Syntax.SqliteFieldNameSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92UpdateSyntax Database.Beam.Sqlite.Syntax.SqliteUpdateSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92FromSyntax Database.Beam.Sqlite.Syntax.SqliteFromSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92TableSourceSyntax Database.Beam.Sqlite.Syntax.SqliteTableSourceSyntax
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Types.Int
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Int.Int8
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Int.Int16
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Int.Int32
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Int.Int64
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Types.Word
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Word.Word8
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Word.Word16
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Word.Word32
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Word.Word64
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.Scientific.Scientific
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Types.Float
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Types.Double
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Types.Bool
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Database.Beam.Backend.SQL.Types.SqlNull
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax GHC.Base.String
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.Text.Internal.Text
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.Text.Internal.Lazy.Text
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax x => Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax (GHC.Base.Maybe x)
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.ByteString.Internal.ByteString
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.Time.Calendar.Days.Day
instance Database.Beam.Backend.SQL.SQL92.IsSql92SelectSyntax Database.Beam.Sqlite.Syntax.SqliteSelectSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92OrderingSyntax Database.Beam.Sqlite.Syntax.SqliteOrderingSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92SelectTableSyntax Database.Beam.Sqlite.Syntax.SqliteSelectTableSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92GroupingSyntax Database.Beam.Sqlite.Syntax.SqliteGroupingSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92ProjectionSyntax Database.Beam.Sqlite.Syntax.SqliteProjectionSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92AggregationExpressionSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92AggregationSetQuantifierSyntax Database.Beam.Sqlite.Syntax.SqliteAggregationSetQuantifierSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92QuantifierSyntax Database.Beam.Sqlite.Syntax.SqliteComparisonQuantifierSyntax
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSqlExpressionSyntaxStringType Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
instance Database.Beam.Backend.SQL.SQL92.IsSqlExpressionSyntaxStringType Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
instance Database.Beam.Query.CustomSQL.IsCustomSqlSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Data.String.IsString (Database.Beam.Query.CustomSQL.CustomSqlSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax)
instance Database.Beam.Backend.SQL.SQL99.IsSql99ConcatExpressionSyntax Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax
instance Database.Beam.Backend.SQL.SQL92.IsSql92DeleteSyntax Database.Beam.Sqlite.Syntax.SqliteDeleteSyntax
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Int
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Int
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int8
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int8
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int16
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int16
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int32
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int32
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int64
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Int.Int64
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Word
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Word
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word8
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word8
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word16
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word16
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word32
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word32
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word64
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Word.Word64
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Double
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Double
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Float
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Float
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Bool
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Bool
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Base.String
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Text
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Lazy.Text
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Text.Internal.Lazy.Text
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Internal.ByteString
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Internal.ByteString
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Lazy.Internal.ByteString
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.ByteString.Lazy.Internal.ByteString
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.Clock.Internal.UTCTime.UTCTime
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Time.LocalTime.Internal.ZonedTime.ZonedTime
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Char
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Types.Char
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Integer.Type.Integer
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax GHC.Integer.Type.Integer
instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Scientific.Scientific
instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Syntax.SqliteExpressionSyntax Data.Scientific.Scientific
instance Database.Beam.Query.Types.HasQBuilder Database.Beam.Sqlite.Syntax.SqliteSelectSyntax
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteSyntax
instance Data.Hashable.Class.Hashable Database.Beam.Sqlite.Syntax.SqliteData
instance GHC.Show.Show Database.Beam.Sqlite.Syntax.SqliteSyntax
instance Database.Beam.Migrate.SQL.SQL92.Sql92DisplaySyntax Database.Beam.Sqlite.Syntax.SqliteSyntax
instance Data.Semigroup.Semigroup Database.Beam.Sqlite.Syntax.SqliteSyntax
instance GHC.Base.Monoid Database.Beam.Sqlite.Syntax.SqliteSyntax
instance GHC.Classes.Eq Database.Beam.Sqlite.Syntax.SqliteSyntax

module Database.Beam.Sqlite.Connection

-- | The SQLite backend. Used to parameterize <a>MonadBeam</a> and
--   <a>FromBackendRow</a> to provide support for SQLite databases. See the
--   documentation for <a>MonadBeam</a> and the <a>user guide</a> for more
--   information on how to use this backend.
data Sqlite
Sqlite :: Sqlite

-- | <a>MonadBeam</a> instance inside whiche SQLite queries are run. See
--   the <a>user guide</a> for more information
newtype SqliteM a
SqliteM :: ReaderT (String -> IO (), Connection) IO a -> SqliteM a

-- | Run an IO action with access to a SQLite connection and a debug
--   logging function, called or each query submitted on the connection.
[runSqliteM] :: SqliteM a -> ReaderT (String -> IO (), Connection) IO a

-- | URI syntax for use with <a>withDbConnection</a>. See documentation for
--   <a>BeamURIOpeners</a> for more information.
sqliteUriSyntax :: c SqliteCommandSyntax Sqlite Connection SqliteM -> BeamURIOpeners c
runBeamSqlite :: Connection -> SqliteM a -> IO a
runBeamSqliteDebug :: (String -> IO ()) -> Connection -> SqliteM a -> IO a

-- | Represents an <tt>INSERT</tt> statement, from which we can retrieve
--   inserted rows. Beam also offers a backend-agnostic way of using this
--   functionality in the <tt>MonadBeamInsertReturning</tt> extension. This
--   functionality is emulated in SQLite using a temporary table and a
--   trigger.
data SqliteInsertReturning (table :: (* -> *) -> *)

-- | Build a <a>SqliteInsertReturning</a> representing inserting the given
--   values into the given table. Use <a>runInsertReturningList</a>
insertReturning :: DatabaseEntity be db (TableEntity table) -> SqlInsertValues SqliteInsertValuesSyntax (table (QExpr SqliteExpressionSyntax s)) -> SqliteInsertReturning table

-- | Runs a <a>SqliteInsertReturning</a> statement and returns a result for
--   each inserted row.
runInsertReturningList :: FromBackendRow Sqlite (table Identity) => SqliteInsertReturning table -> SqliteM [table Identity]
instance Control.Monad.IO.Class.MonadIO Database.Beam.Sqlite.Connection.SqliteM
instance GHC.Base.Applicative Database.Beam.Sqlite.Connection.SqliteM
instance GHC.Base.Functor Database.Beam.Sqlite.Connection.SqliteM
instance GHC.Base.Monad Database.Beam.Sqlite.Connection.SqliteM
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite a => Database.SQLite.Simple.FromRow.FromRow (Database.Beam.Sqlite.Connection.BeamSqliteRow a)
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
instance Database.SQLite.Simple.ToRow.ToRow Database.Beam.Sqlite.Connection.BeamSqliteParams
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
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Scientific.Scientific
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Sqlite.Connection.SqliteScientific
instance Database.SQLite.Simple.FromField.FromField Database.Beam.Sqlite.Connection.SqliteScientific
instance Database.Beam.Backend.Types.BeamBackend Database.Beam.Sqlite.Connection.Sqlite
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Bool
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Double
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Float
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Int
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int8
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int16
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int32
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Int.Int64
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Integer.Type.Integer
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Word
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word8
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word16
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word32
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Word.Word64
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Lazy.Internal.ByteString
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Text
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Text.Internal.Lazy.Text
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Clock.Internal.UTCTime.UTCTime
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.Calendar.Days.Day
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.SQLite.Simple.Types.Null
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite GHC.Types.Char
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Database.Beam.Backend.SQL.Types.SqlNull
instance Database.Beam.Backend.Types.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.Time.LocalTime.Internal.LocalTime.LocalTime
instance Database.Beam.Backend.SQL.Types.BeamSqlBackend Database.Beam.Sqlite.Connection.Sqlite
instance Database.Beam.Backend.SQL.SQL92.BeamSql92Backend Database.Beam.Sqlite.Connection.Sqlite


-- | Migrations support for SQLite databases
module Database.Beam.Sqlite.Migrate

-- | Top-level <a>BeamMigrationBackend</a> loaded dynamically by the
--   <tt>beam-migrate</tt> CLI tool.
migrationBackend :: BeamMigrationBackend SqliteCommandSyntax Sqlite Connection SqliteM

-- | Render a series of <a>MigrationSteps</a> in the
--   <a>SqliteCommandSyntax</a> into a line-by-line list of lazy
--   <tt>BL'ByteString</tt>s. The output is suitable for inclusion in a
--   migration script. Comments are generated giving a description of each
--   migration step.
migrateScript :: MigrationSteps SqliteCommandSyntax () a -> [ByteString]

-- | Write the output of <a>migrateScript</a> to a file
writeMigrationScript :: FilePath -> MigrationSteps SqliteCommandSyntax () a -> IO ()

-- | <a>HaskellPredicateConverter</a> that can convert all constraints
--   generated by <tt>getDbConstaints</tt> into their equivalent in the
--   <tt>beam-migrate</tt> haskell syntax. Suitable for auto-generation of
--   a haskell migration.
sqlitePredConverter :: HaskellPredicateConverter

-- | Convert a SQLite data type to the corresponding Haskell one
sqliteTypeToHs :: SqliteDataTypeSyntax -> Maybe HsDataType

-- | Get a list of database predicates for the current database. This is
--   beam's best guess at providing a schema for the current database. Note
--   that SQLite type names are not standardized, and the so-called column
--   "affinities" are too broad to be of use. This function attemps to
--   guess a good enough type based on the exact type supplied in the
--   <tt>CREATE TABLE</tt> commands. It will correctly parse any type
--   generated by beam and most SQL compliant types, but it may falter on
--   databases created or managed by tools that do not follow these
--   standards.
getDbConstraints :: SqliteM [SomeDatabasePredicate]
sqliteText :: DataType SqliteDataTypeSyntax Text
sqliteBlob :: DataType SqliteDataTypeSyntax ByteString
sqliteBigInt :: DataType SqliteDataTypeSyntax Int64

module Database.Beam.Sqlite

-- | A SQLite command. <tt>INSERT</tt> is special cased to handle <tt>AUTO
--   INCREMENT</tt> columns. The <a>fromSqliteCommand</a> function will
--   take an <a>SqliteCommandSyntax</a> and convert it into the correct
--   <a>SqliteSyntax</a>.
data SqliteCommandSyntax
SqliteCommandSyntax :: SqliteSyntax -> SqliteCommandSyntax
SqliteCommandInsert :: SqliteInsertSyntax -> SqliteCommandSyntax

-- | The syntax for SQLite is stored as a <a>Builder</a> along with a list
--   of data that hasn't been serialized yet.
--   
--   The first argument is a function that receives a builder for
--   <a>SQLData</a> and returns the concrete syntax to embed into the
--   query. For queries sent to the backend, this is simply a function that
--   returns <tt>"?"</tt>. Thus, the syntax sent to the backend includes
--   proper placeholders. The list of data is sent to the SQLite library
--   for proper escaping.
--   
--   When the syntax is being serialized for display (for use in beam
--   migrate for example), the data builder attempts to properly format and
--   escape the data. This returns syntax suitable for inclusion in
--   scripts. In this case, the value list is ignored.
data SqliteSyntax

-- | SQLite <tt>SELECT</tt> syntax
data SqliteSelectSyntax

-- | SQLite <tt>INSERT</tt> syntax. This doesn't directly wrap
--   <a>SqliteSyntax</a> because we need to do some processing on
--   <tt>INSERT</tt> statements to deal with <tt>AUTO INCREMENT</tt>
--   columns. Use <a>formatSqliteInsert</a> to turn
--   <a>SqliteInsertSyntax</a> into <a>SqliteSyntax</a>.
data SqliteInsertSyntax

-- | SQLite <tt>UPDATE</tt> syntax
data SqliteUpdateSyntax

-- | SQLite <tt>DELETE</tt> syntax
data SqliteDeleteSyntax

-- | Convert a <a>SqliteCommandSyntax</a> into a renderable
--   <a>SqliteSyntax</a>
fromSqliteCommand :: SqliteCommandSyntax -> SqliteSyntax

-- | Render a <a>SqliteSyntax</a> as a lazy <a>ByteString</a>, for purposes
--   of displaying to a user. Embedded <a>SQLData</a> is directly embedded
--   into the concrete syntax, with a best effort made to escape strings.
sqliteRenderSyntaxScript :: SqliteSyntax -> ByteString
