Files
ChuSQL/chusql-engine/app/Main.hs
T

52 lines
1.4 KiB
Haskell
Raw Normal View History

2026-09-19 19:22:50 +08:00
module Main where
import ChuSQL.SQLSyntax.Executor
2026-09-19 19:22:50 +08:00
import ChuSQL.Model
import ChuSQL.SQLSyntax.AST
import ChuSQL.SQLSyntax.Parser
2026-09-19 19:22:50 +08:00
users :: Table
users =
Table
{ tableName = "users"
, tableCols = ["name", "age"]
, tableRows =
[ [("name", VStr "Alice"), ("age", VInt 25)]
, [("name", VStr "Bob"), ("age", VInt 17)]
, [("name", VStr "Carol"), ("age", VInt 30)]
]
}
db :: Database
db = [("users", users)]
-- runQuery 返回 (更新后的数据库, 结果行);演示只关心结果行
rowsOf :: Either String (Database, [Row]) -> Either String [Row]
rowsOf = fmap snd
main :: IO ()
main = do
let q1 = makeSelect ["name"] "users" (Just (Gt (Col "age") (LitInt 18)))
print (rowsOf (runQuery db q1))
let q2 = makeSelect ["*"] "users" Nothing
print (rowsOf (runQuery db q2))
let q3 = makeSelect ["name"] "nonexistent" Nothing
print (rowsOf (runQuery db q3))
let q4 =
makeSelect
["name"]
"users"
( Just
( Or
(Lt (Col "age") (LitInt 18))
(Gt (Col "age") (LitInt 30))
)
)
print (rowsOf (runQuery db q4))
-- 解析 SQL 文本,再交给执行引擎
let parsed = parseQuery "SELECT name FROM users WHERE age > 18 AND name = 'Alice'"
print (rowsOf (parsed >>= runQuery db))