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}