验证多表JOIN的SQL语句解析树是否正确
关于多表JOIN解析树正确性的疑问
我编写了一个简化示例,用于验证SQL FROM子句的解析树是否正确,尤其关注tbl1 JOIN tbl2 JOIN tbl3 JOIN ...这类多表JOIN的解析逻辑。以下是当前使用的ANTLR语法规则:
grammar Associativity1; root: (select ';')* EOF; select : 'SELECT' expr (',' expr)* ('FROM' tblExpr)? ; expr : '(' expr ')' | subSelect | expr '=' expr | Atom ; tblExpr : subSelect | tblExpr 'JOIN' tblExpr 'ON' expr | Atom ; subSelect: '(' select ')' ; Atom: [a-zA-Z]+ | [0-9]+; WHITESPACE: [ \t\r\n] -> skip;
针对如下SQL语句生成了解析树(用重复字符便于识别):
SELECT 1 FROM (SELECT AAAAAAAAAA) JOIN (SELECT BBBBBBBBBB) ON (1=2) JOIN (SELECT CCCCCCCCCC) ON (2=3) JOIN (SELECT DDDDDDDDDD) ON (4=3);
根据生成的解析树,我理解它是按左结合方式依次执行JOIN:
# 先将AAA与BBB JOIN # 将结果与CCC JOIN # 将结果与DDD JOIN JOIN( JOIN( JOIN( TblExpr(AAA), TblExpr(BBB)), TblExpr(CCC)), TblExpr(DDD) )
请问该解析树是否正确?
内容的提问来源于stack exchange,提问作者carl.hiass
相关产品推荐
相关产品推荐

