Ich muss eine Implementierung der regex()
SQLite-Funktion in einer Haskell-Datenbankverbindung erstellen, damit ich den Operator "REGEX" verwenden kann Abfragen.Einfügen einer regexp() SQLite-Funktion in Haskell (Database.SQLite3, "direct-sqlite")
Nun, ich habe eine Implementierung einer Funktion Regex Matching, die PCRE verwendet:
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
, die gut funktioniert (bitte sehr expliziten Anrufe entschuldigen)
> sqlRegex (Data.ByteString.Char8.pack ".*") (Data.ByteString.Char8.pack "hello")
True
> sqlRegex (Data.ByteString.Char8.pack "H.*") (Data.ByteString.Char8.pack "hello")
False
Nun, wie erstelle ich die SQLite-Funktion ??
conn <- open $ pack dbFile
createFunction conn "regexp" (Just 2) True [..... and what should go here?]
Die docs für createFunction
hilft mir, so weit wie mich verständlich zu machen, dass ich die Funktion einen Kontext vornehmen müssen und einige Argumente nehmen, aber die Schiedsrichter für diese Daten nicht mir nicht helfen!
Wie sollte meine Funktion nehmen eine FuncContext
und FuncArgs
?
Excellent! Sehr hilfreich! Vielen Dank! –