gpt4 book ai didi

regex - 在 Haskell 中插入 regexp() SQLite 函数 (Database.SQLite3 ,"direct-sqlite")

转载 作者:行者123 更新时间:2023-12-02 04:16:47 27 4
gpt4 key购买 nike

我需要在 Haskell 数据库连接中创建 regex() SQLite 函数的实现,以便我可以在查询中使用“REGEX”运算符。

现在,我有了一个使用 PCRE 的正则表达式匹配函数的实现:

import Text.Regex.Base.RegexLike
import qualified Text.Regex.PCRE.ByteString as PCRE
import qualified Data.ByteString as BS

sqlRegex :: BS.ByteString -> BS.ByteString -> IO Bool
sqlRegex reg b = do
reC <- pcreCompile reg
re <- case reC of
(Right r) -> return r
reE <- PCRE.execute re b
case reE of
(Right (Just _)) -> return True
(Right (Nothing)) -> return False
where pcreCompile = PCRE.compile defaultCompOpt defaultExecOpt

效果很好(请原谅非常明确的调用)

> sqlRegex (Data.ByteString.Char8.pack ".*") (Data.ByteString.Char8.pack "hello")
True
> sqlRegex (Data.ByteString.Char8.pack "H.*") (Data.ByteString.Char8.pack "hello")
False

现在,我该如何创建 SQLite 函数?

conn <- open $ pack dbFile
createFunction conn "regexp" (Just 2) True [..... and what should go here?]

docs对于createFunction createFunction API docs帮助我让我明白我需要让函数接受上下文和一些参数,但这些数据的引用对我根本没有帮助! FuncContext and FuncArgs API docs

如何让我的函数采用 FuncContextFuncArgs??

最佳答案

github 存储库中有一个示例:

https://github.com/IreneKnapp/direct-sqlite/blob/master/test/Main.hs#L743-757

-- implements repeat(n,str)
repeatString ctx args = do
n <- funcArgInt64 args 0
s <- funcArgText args 1
funcResultText ctx $ T.concat $ replicate (fromIntegral n) s

您可以使用函数 funcArg... 来获取参数,并使用 funcResult... 等函数来返回它们。

文档链接:

关于regex - 在 Haskell 中插入 regexp() SQLite 函数 (Database.SQLite3 ,"direct-sqlite"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com