尝试用haskell编写一个SQL解释器,做了一个初步的后端
代码:
module Funs where
import Data.List
import Monad
import System.Directory
import System.FilePath
import System.IO
import Text.Regex.PCRE
data Store t p = Text p
| Csv p
| Bin p
| File p
selectFrom (Text store) = do
content <- readFile store
return$lines content
unionIt :: IO [[String]] -> IO[String]
unionIt = liftM concat
select :: IO [FilePath] -> IO [String]
select paths = paths
>>= /ps -> unionIt(filterM doesFileExist ps
>>= mapM (/p -> selectFrom (Text p)))
from :: FilePath -> IO [FilePath]
from path = let (dir, files) = splitFileName path
in liftM(/lines->[dir++line | line <- lines, line=~files])
((getDirectoryContents.takeDirectory) dir)
whereLines :: String -> [String] -> IO [String]
whereLines reg lines = return $filter (/line -> line =~ reg :: Bool) lines
这段代码已经包含了基本的 select from where 模式,甚至可以说已经是一个实 用的实现,但是对于我来说,期待它有进一步的功能:
- 有真正的前端脚本
- 可以在 select 后设定输出字段,如匹配文件字和行号,以及进一步用正则对行 文件分组
- 将 where 嵌入 select 过程,真正实现流式过滤
- 支持 limit offset
- 支持CSV
- 支持 group by … having
- 支持 order by
本文介绍了一款基于Haskell的简易SQL解释器,实现了select、from和where等基本功能,并探讨了进一步增强功能的可能性,如支持CSV、group by及流式处理。
1730

被折叠的 条评论
为什么被折叠?



