Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] [feature]: add sql binder #29

Open
fansehep opened this issue Sep 24, 2023 · 0 comments
Open

[WIP] [feature]: add sql binder #29

fansehep opened this issue Sep 24, 2023 · 0 comments

Comments

@fansehep
Copy link
Collaborator

fansehep commented Sep 24, 2023

Parser 产生的是一颗简单的没有经过太多检查的 AST, 参考 duckdb 加入 binder 组件, 在 parser 之后, 验证并且简单重写的 AST. 此外 duckdb 有 gen_planner, 将 AST 转化为 LogicalPlan (scan, filter, project 等等).

  • [1]. 验证函数是否存在, 验证函数参数合法性, 例如 COUNT(expression_list), expression_list 只能是 * 或者表中的列名称.
  • [2]. 验证表达式是否合法
     SELECT 1 + '123';
    这是一个非法表达式, 在 binder 阶段就应该被阻止.
    此外, 一些具体check, 包括不限于 数值范围检查, 数值溢出检查, 类型操作检查, 表达式语义合法性检查.
  • [3]. 验证表是否存在
    SELECT * FROM table_name;
    在 binder 阶段验证 table_name 是否存在于数据库中.
  • [4]. 验证 table.column_name 是否存在.
    SELECT * FROM table_name ORDER BY table_name.column_name;
  • [5]. 一些 SQL 语句合法性操作.
    • 例如, 只读事务中禁止使用 写操作.
    • 权限验证 ? (TODO)
  • [6]. binder 检查完之后, 由 LogicalPlanner 生成 LogicalPlan. (或许使用火山模型)

计划:

加入 CataLog, 来记录数据库元数据信息.

Binder 这里直接把 AST 转化为 LogicalPlan.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant