Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
SQLite implementations of the Beam SQL syntax classes
The SQLite command syntax is implemented by SQLiteCommandSyntax
.
Synopsis
- data SqliteSyntax = SqliteSyntax ((SQLData -> Builder) -> Builder) (DList SQLData)
- data SqliteCommandSyntax
- newtype SqliteSelectSyntax = SqliteSelectSyntax {}
- data SqliteInsertSyntax = SqliteInsertSyntax {}
- newtype SqliteUpdateSyntax = SqliteUpdateSyntax {}
- newtype SqliteDeleteSyntax = SqliteDeleteSyntax {}
- newtype SqliteOnConflictSyntax = SqliteOnConflictSyntax {}
- data SqliteInsertValuesSyntax
- data SqliteColumnSchemaSyntax = SqliteColumnSchemaSyntax {}
- data SqliteExpressionSyntax
- newtype SqliteValueSyntax = SqliteValueSyntax {}
- newtype SqliteTableNameSyntax = SqliteTableNameSyntax {}
- newtype SqliteFieldNameSyntax = SqliteFieldNameSyntax {}
- newtype SqliteAggregationSetQuantifierSyntax = SqliteAggregationSetQuantifierSyntax {}
- fromSqliteExpression :: SqliteExpressionSyntax -> SqliteSyntax
- data SqliteDataTypeSyntax = SqliteDataTypeSyntax {}
- sqliteTextType :: SqliteDataTypeSyntax
- sqliteBlobType :: SqliteDataTypeSyntax
- sqliteBigIntType :: SqliteDataTypeSyntax
- sqliteSerialType :: SqliteDataTypeSyntax
- fromSqliteCommand :: SqliteCommandSyntax -> SqliteSyntax
- formatSqliteInsert :: SqliteTableNameSyntax -> [Text] -> SqliteInsertValuesSyntax -> SqliteSyntax
- formatSqliteInsertOnConflict :: SqliteTableNameSyntax -> [Text] -> SqliteInsertValuesSyntax -> Maybe SqliteOnConflictSyntax -> SqliteSyntax
- emit :: ByteString -> SqliteSyntax
- emitValue :: SQLData -> SqliteSyntax
- parens :: SqliteSyntax -> SqliteSyntax
- commas :: [SqliteSyntax] -> SqliteSyntax
- quotedIdentifier :: Text -> SqliteSyntax
- sqliteEscape :: Text -> Text
- withPlaceholders :: ((SQLData -> Builder) -> Builder) -> Builder
- sqliteRenderSyntaxScript :: SqliteSyntax -> ByteString
SQLite syntaxes
data SqliteSyntax Source #
The syntax for SQLite is stored as a Builder
along with a list of data
that hasn't been serialized yet.
The first argument is a function that receives a builder for SQLData
and
returns the concrete syntax to embed into the query. For queries sent to the
backend, this is simply a function that returns "?"
. 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.
Instances
data SqliteCommandSyntax Source #
A SQLite command. INSERT
is special cased to handle AUTO INCREMENT
columns. The fromSqliteCommand
function will take an SqliteCommandSyntax
and convert it into the correct SqliteSyntax
.
Instances
newtype SqliteSelectSyntax Source #
SQLite SELECT
syntax
Instances
data SqliteInsertSyntax Source #
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
.
newtype SqliteUpdateSyntax Source #
SQLite UPDATE
syntax
Instances
newtype SqliteDeleteSyntax Source #
SQLite DELETE
syntax
newtype SqliteOnConflictSyntax Source #
SQLite ON CONFLICT
syntax
data SqliteInsertValuesSyntax Source #
SQLite VALUES
clause in INSERT
. Expressions need to be handled
explicitly in order to deal with DEFAULT
values and AUTO INCREMENT
columns.
Instances
data SqliteColumnSchemaSyntax Source #
SQLite syntax for column schemas in CREATE TABLE
or ALTER COLUMN ... ADD
COLUMN
statements
Instances
data SqliteExpressionSyntax Source #
Implements beam SQL expression syntaxes
Instances
newtype SqliteValueSyntax Source #
SQLite syntax for values that can be embedded in SqliteSyntax
Instances
newtype SqliteTableNameSyntax Source #
Instances
newtype SqliteFieldNameSyntax Source #
Instances
SQLite data type syntax
data SqliteDataTypeSyntax Source #
SQLite syntax that implements IsSql92DataTypeSyntax
and a good portion of
IsSql99DataTypeSyntax
, except for array and row types.
Instances
Building and consuming SqliteSyntax
fromSqliteCommand :: SqliteCommandSyntax -> SqliteSyntax Source #
Convert a SqliteCommandSyntax
into a renderable SqliteSyntax
formatSqliteInsert :: SqliteTableNameSyntax -> [Text] -> SqliteInsertValuesSyntax -> SqliteSyntax Source #
Format a SQLite INSERT
expression for the given table name, fields, and values.
formatSqliteInsertOnConflict :: SqliteTableNameSyntax -> [Text] -> SqliteInsertValuesSyntax -> Maybe SqliteOnConflictSyntax -> SqliteSyntax Source #
Format a SQLite INSERT
expression for the given table name, fields,
values, and optionally an ON CONFLICT
clause.
emit :: ByteString -> SqliteSyntax Source #
Embed a ByteString
directly in the syntax
emitValue :: SQLData -> SqliteSyntax Source #
Emit a properly escaped value into the syntax
This causes a literal ?
3
parens :: SqliteSyntax -> SqliteSyntax Source #
commas :: [SqliteSyntax] -> SqliteSyntax Source #
quotedIdentifier :: Text -> SqliteSyntax Source #
sqliteEscape :: Text -> Text Source #
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.
withPlaceholders :: ((SQLData -> Builder) -> Builder) -> Builder Source #
Convert the first argument of SQLiteSyntax
to a ByteString
Builder
,
where all the data has been replaced by "?"
placeholders.
sqliteRenderSyntaxScript :: SqliteSyntax -> ByteString Source #
Render a SqliteSyntax
as a lazy ByteString
, for purposes of
displaying to a user. Embedded SQLData
is directly embedded into the
concrete syntax, with a best effort made to escape strings.