直接切入主题,分析cobar-parser也是从这周刚开始研究,有些地方可能理解不对,希望共同交流。
图1-1
整个cobar-parser是采用访问者模式来设计的,图1-1是分析的一个简单的二元操作符表达式的类图关系
ASTNode:所有AST节点的父类
Expression:所有具有表达式特性的节点的父类
AbstractExpression:表达式节点的抽象
UnaryOperatorExpression:一元操作符表达式抽象
BinaryOperatorExpression:二元操作符表达式抽象
TernaryOperatorExpression:三元操作符表达式抽象
ArithmeticBinaryOperatorExpression:算术二元操作符表达式抽象
ArithmeticAddExpression:算术加法表达式
ArithmeticSubtractExpression:算术减法表达式
SQLASTVisitor:SQL AST节点访问者父类
MySQLOutputASTVisitor:MySQL类型的访问者实现
EmptySQLASTVisitor:访问者实现
当客户端发送需要解析的sql语句时,cobar-parser接收到‘+’的解析请求调用元素的accept方法时,cobar-parser会根据元素实际持有的visitor引用决定将处理请求转发到具体的visitor实现上,如MySQLOutputASTVisitor ,visitor会根据传入的元素类型的不同调用不同的方法处理。
以上仅为针对cobar-parser解析sql的第一步的请求分发处理,第二步为sql的词法和语法解析后面继续研究。
以上为个人分析,仅作参考,如有错误欢迎指出共同讨论。。。