001package gudusoft.gsqlparser.dlineage.statistics; 002 003import gudusoft.gsqlparser.EExpressionType; 004import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 005import gudusoft.gsqlparser.nodes.TExpression; 006 007/** 008 * WHERE/HAVING条件访问者 009 */ 010public class WherePredicateVisitor extends TParseTreeVisitor { 011 private int predicateCount = 0; 012 013 public void preVisit(TExpression node) { 014 // 统计所有比较和逻辑表达式 015 EExpressionType type = node.getExpressionType(); 016 if (type != EExpressionType.simple_object_name_t 017 && type != EExpressionType.simple_constant_t 018 && type != EExpressionType.logical_and_t 019 && type != EExpressionType.logical_or_t 020 && type != EExpressionType.logical_not_t 021 && type != EExpressionType.logical_xor_t 022 && type != EExpressionType.parenthesis_t 023 && type != EExpressionType.list_t 024 && type != EExpressionType.slice_t 025 && type != EExpressionType.function_t 026 ) { 027 predicateCount++; 028 } 029 } 030 031 public int getPredicateCount() { 032 return predicateCount; 033 } 034 035 public void reset() { 036 predicateCount = 0; 037 } 038}