Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions euler.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ dependencies:
branch: master
revision: aa20a46b6ae5d638c23fa009fb1dd9b07727ffa2
beam:
branch: master
revision: 4bfeb46746212c6b54983844a3acd37853430065
branch: Delete-with-limit-support
revision: fec10dfefab932bc2a1a6b5ee24985ac1deca943

overrides:
record-dot-preprocessor:
Expand Down
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/Database/Beam/MySQL/Extra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ analyzeExpr ins e = case go e of
Cast{} -> go e'.expr
-- Field extractions from pure expressions are pure.
Extract{} -> go e'.expr
JSONExtract{} -> go e'.expr <> go e'.key
-- CURRENT_TIMESTAMP is pure within a transaction, which we assume we're
-- in, as runInsertRowReturning is unsafe outside one.
CurrentTimestamp -> Pure
Expand Down
8 changes: 5 additions & 3 deletions src/Database/Beam/MySQL/Syntax/Delete.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import Database.Beam.MySQL.Syntax.Select (MySQLExpressionSyntax,

data MySQLDelete = DeleteStmt {
tableName :: {-# UNPACK #-} !MySQLTableNameSyntax,
wher :: !(Maybe MySQLExpressionSyntax)
wher :: !(Maybe MySQLExpressionSyntax),
limit :: !(Maybe Int)
}
deriving stock (Eq, Show)

Expand All @@ -23,8 +24,9 @@ instance IsSql92DeleteSyntax MySQLDelete where
MySQLTableNameSyntax ->
Maybe Text ->
Maybe MySQLExpressionSyntax ->
Maybe Int ->
MySQLDelete
deleteStmt tableName' _ wher' =
DeleteStmt tableName' wher'
deleteStmt tableName' _ wher' limit' =
DeleteStmt tableName' wher' limit'
{-# INLINABLE deleteSupportsAlias #-}
deleteSupportsAlias = const False
12 changes: 11 additions & 1 deletion src/Database/Beam/MySQL/Syntax/Render.hs
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,12 @@ renderExpr es = case es of
pure $
"EXTRACT" <>
bracketWrap (field' <> " FROM " <> e')
JSONExtract{} -> do
field' <- renderExpr es.expr
e' <- renderExpr es.key
pure $
"JSON_EXTRACT" <>
bracketWrap (field' <> ", " <> e')
CurrentTimestamp -> pure "CURRENT_TIMESTAMP"
Default -> pure "DEFAULT"
In{} -> do
Expand Down Expand Up @@ -412,6 +418,9 @@ renderPrefOp = pure . \case
TUpper -> "UPPER"
TTrim -> "TRIM"
NAbs -> "ABS"
TJSONValid -> "JSON_VALID"



renderCompOp :: CompOp -> RenderM Builder
renderCompOp = pure . \case
Expand Down Expand Up @@ -558,7 +567,8 @@ renderDelete' del = do
pure $
"DELETE FROM " <>
tableName' <>
foldMap (" WHERE " <>) wher'
foldMap (" WHERE " <>) wher' <>
maybe mempty (\l -> " LIMIT " <> textUtf8 (pack $ show l)) del.limit

wrap :: (Semigroup s) => s -> s -> s -> s
wrap l r v = l <> v <> r
Expand Down
15 changes: 14 additions & 1 deletion src/Database/Beam/MySQL/Syntax/Select.hs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ data PrefOp =
TLower |
TUpper |
TTrim |
NAbs
NAbs |
TJSONValid
deriving stock (Eq, Show)

data PostOp =
Expand Down Expand Up @@ -241,6 +242,10 @@ data MySQLExpressionSyntax =
field :: !MySQLExtractFieldSyntax,
expr :: MySQLExpressionSyntax
} |
JSONExtract {
expr :: MySQLExpressionSyntax,
key :: MySQLExpressionSyntax
} |
CurrentTimestamp |
Default |
In {
Expand Down Expand Up @@ -510,6 +515,14 @@ instance IsSql92ExpressionSyntax MySQLExpressionSyntax where
MySQLExpressionSyntax ->
MySQLExpressionSyntax
extractE = Extract
{-# INLINABLE jsonValidE #-}
jsonValidE ::
MySQLExpressionSyntax ->
MySQLExpressionSyntax
jsonValidE = PrefixOperation TJSONValid
{-# INLINABLE jsonExtractE #-}
jsonExtractE :: MySQLExpressionSyntax -> MySQLExpressionSyntax -> MySQLExpressionSyntax
jsonExtractE = JSONExtract
{-# INLINABLE existsE #-}
existsE :: MySQLSelect -> MySQLExpressionSyntax
existsE = Exists
Expand Down