在sqlite和Haskell中进行全文搜索的转义字符

时间:2018-08-21 18:41:53

标签: sqlite haskell

我有以下程序:

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Lib
import Control.Applicative
import Database.SQLite.Simple
import Database.SQLite.Simple.FromRow

data EmailField = EmailField String String String deriving (Show)

instance FromRow EmailField where

fromRow = EmailField <$> field <*> field <*> field
main :: IO ()
main = do
  conn <- open "test.db"
  r <- query conn "SELECT * from email where email match ?" (Only ("in.gr"::String)) :: IO [EmailField]
mapM_ print r
close conn

该表是使用fts5的虚拟sqlite表,其以下各列 (发件人,标题,正文) 如果我如上所述进行查询,则在执行程序时会收到以下消息:

SQLite3尝试执行s时返回ErrorError tep:fts5:“。”附近的语法错误。

在命令行的sqlite客户端中,我可以解决以下问题

select * from email where email match '"in.gr"'

我使用引号和双引号。如何使用sqlite-simple完成此操作?有没有更好的支持sqlite全文搜索的解决方案?如果我使用来自用户的输入,并且用户发送带有禁止字符的字符串,也会出现此消息。因此,我认为必须有一种通用的方式来编码或转义这些字符或其他字符。谢谢

0 个答案:

没有答案