2016-05-18 4 views
2

Haskellデータベース接続でregex() SQLite関数の実装を作成して、 "REGEX"演算子をクエリ。HaskellでRegexp()SQLite関数を挿入する(Database.SQLite3、 "direct-sqlite")

さて、私は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関数?? createFunction createFunction API docs ため

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

docsは限り私は関数はコンテキストおよびいくつかの引数を取るようにする必要がありますが、それらのデータの参照文献はすべてで私を助けていないことを理解することなど私に役立ちます! FuncContext and FuncArgs API docs

私の機能をどのようにしてFuncContextFuncArgsにする必要がありますか?

答えて

1

の例では、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 

あなたはfuncResult...のような引数と関数は、それらを返すために取得する機能funcArg...を使用しています。ドキュメントへ

リンク:

+0

素晴らしいです!非常に役立ちます!ありがとう! –

関連する問題