我需要在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?]
createFunction
的{{3}}
docs
帮助我,只要让我明白我需要使函数采取上下文和一些参数,但这些数据的参考对我没有帮助!
如何使我的函数采用FuncContext
和FuncArgs
??
答案 0 :(得分:1)
github repo中有一个例子:
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...
之类的参数和函数以返回它们。
指向文档的链接: