001package gudusoft.gsqlparser.nodes.functions;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.TCustomSqlStatement;
005import gudusoft.gsqlparser.nodes.*;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007
008/**
009 * BigQuery ARRAY_CONCAT_AGG function
010 * Syntax: ARRAY_CONCAT_AGG(expression [ORDER BY expr [ASC|DESC]] [LIMIT n])
011 */
012public class TArrayConcatAggFunction extends TFunctionCall {
013
014    private TExpression argument;
015    private TOrderBy orderBy;
016    private TExpression limitExpr;
017
018    public TExpression getArgument() {
019        return argument;
020    }
021
022    public void setArgument(TExpression argument) {
023        this.argument = argument;
024    }
025
026    public TOrderBy getOrderBy() {
027        return orderBy;
028    }
029
030    public void setOrderByList(TOrderBy orderByList) {
031        this.orderBy = orderByList;
032    }
033
034    public TExpression getLimitExpr() {
035        return limitExpr;
036    }
037
038    public void setLimitExpr(TExpression limitExpr) {
039        this.limitExpr = limitExpr;
040    }
041
042    public void doParse(TCustomSqlStatement psql, ESqlClause plocation) {
043        super.doParse(psql, plocation);
044        if (argument != null) {
045            argument.doParse(psql, plocation);
046        }
047        if (orderBy != null) {
048            orderBy.doParse(psql, plocation);
049        }
050        if (limitExpr != null) {
051            limitExpr.doParse(psql, plocation);
052        }
053    }
054
055    public void init(Object arg1, Object arg2, Object arg3, Object arg4) {
056        functionType = EFunctionType.array_concat_agg_t;
057        this.setFunctionName((TObjectName) arg1);
058        this.argument = (TExpression) arg2;
059        this.orderBy = (TOrderBy) arg3;
060        this.limitExpr = (TExpression) arg4;
061    }
062
063    public void accept(TParseTreeVisitor v) {
064        v.preVisit(this);
065        v.postVisit(this);
066    }
067
068    public void acceptChildren(TParseTreeVisitor v) {
069        v.preVisit(this);
070
071        if (argument != null) {
072            argument.accept(v);
073        }
074        
075        if (orderBy != null) {
076            orderBy.accept(v);
077        }
078        
079        if (limitExpr != null) {
080            limitExpr.accept(v);
081        }
082
083        v.postVisit(this);
084    }
085}