Files
ChuBlog/chusql-engine/src/ChuSQL/Syntax/AST.hs
T

53 lines
1.4 KiB
Haskell
Raw Normal View History

2026-09-22 21:26:54 +08:00
module ChuSQL.Syntax.AST (Query (..), FromClause (..), Expr (..), SortDir (..), makeSelect) where
2026-09-19 19:22:50 +08:00
-- SQL 语法树:四类语句(SELECT / INSERT / DELETE / UPDATE)+ 表达式、FROM 从句、排序方向。
2026-09-19 19:22:50 +08:00
-- 查询语句
data Query
= Select
{ selectCols :: [String]
, selectFrom :: FromClause
2026-09-19 19:22:50 +08:00
, selectWhere :: Maybe Expr
, selectOrderBy :: [(String, SortDir)]
, selectLimit :: Maybe Int
}
| Insert String [String] [Expr]
| Delete String (Maybe Expr)
| Update String [(String, Expr)] (Maybe Expr)
deriving (Show, Eq)
-- FROM 从句:单表或 JOIN。
data FromClause
= FromTable (Maybe String) String
| FromJoin FromClause (Maybe String) String Expr
deriving (Show, Eq)
2026-09-19 19:22:50 +08:00
-- 条件表达式
data Expr
= Col String
| LitInt Int
| LitStr String
| LitBool Bool
2026-09-19 19:22:50 +08:00
| Gt Expr Expr
| Lt Expr Expr
| Eq Expr Expr
| And Expr Expr
| Or Expr Expr
deriving (Show, Eq)
-- 排序方向
2026-09-19 19:22:50 +08:00
data SortDir
= Asc
| Desc
deriving (Show, Eq)
-- 便捷构造:造一条最简单的 SELECT(给测试和演示用)。
2026-09-19 19:22:50 +08:00
makeSelect :: [String] -> String -> Maybe Expr -> Query
makeSelect cols tbl w =
Select
{ selectCols = cols
, selectFrom = FromTable Nothing tbl
2026-09-19 19:22:50 +08:00
, selectWhere = w
, selectOrderBy = []
, selectLimit = Nothing
}