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

49 lines
1.1 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
-- 查询语句
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)
-- 从句
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)
data SortDir
= Asc
| Desc
deriving (Show, Eq)
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
}