sql - 我应该使用 ANTLR 来转换简单的 SQL 选择语句吗?

标签 sql antlr

我需要编写一个程序来接受基本的 SQL 选择语句并输出一个 XML 文件,该文件将语句分解成它的组成部分(输出列、输入表、连接、分组依据、聚合等) .我至少需要在 from 语句中支持 2 个表、不同的连接类型、where 子句、group by 和 having。如果可以支持更复杂的 sql(例如子查询),那是一种奖励,但不是必需的。

我检查了 ANTLR,它看起来像一个陡峭的学习曲线。鉴于我有能力要求 SQL 相当简单,我应该尝试手工编写代码还是应该踏上 ANTLR 的世界?

最佳答案

我认为您不需要使用 ANTLR 重新发明这样的 sql 解析器。下面是一个将 select SQL 语句解码为元数据的示例:

SELECT e.last_name      AS name,
   e.commission_pct comm,
   e.salary * 12    "Annual Salary"
FROM   scott.employees AS e
WHERE  e.salary > 1000
ORDER  BY
  e.first_name,
  e.last_name;

元信息:

            Select statement:
                Select set type: none

            select clause:
                Columns
                    Fullname:e.last_name
                    Prefix:e    Column:last_name    alias:name
                    Fullname:e.commission_pct
                    Prefix:e    Column:commission_pct   alias:comm
                    Fullname:e.salary * 12
                    Prefix: Column:e.salary * 12    alias:"Annual Salary"

            from clause:
                scott.employees as e
                tableowner: scott
                tablename:  employees
                tablealias: e

            where clause:
                e.salary > 1000

            order by clause:
                e.first_name,
            e.last_name

如果这是你需要的,那么你可以检查this article说明如何使用 sql parser实现这一目标。

关于sql - 我应该使用 ANTLR 来转换简单的 SQL 选择语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098518/

相关文章:

sql - 如何显示 DB2 SQL UDF 的源代码

mysql - 在子查询中使用 in 运算符

domain-driven-design - Antlr 是 DSL 生成器还是有意编程的替代品?

c# - 如何为单独的 ANTLR 词法分析器和解析器添加虚构标记?

java - 如何将 GUNIT 与 MAVEN 一起使用?

java - 实体对象集合状态不一致

mysql - 在不使用类型的情况下删除 SQL 查询中的查询

mysql - 调整数据库结构或 SQL 查询以允许特定输出

error-handling - 在丢失的 token 上输出适合上下文的错误消息

python - 在antlr4 python目标中重用词法分析器对象