001package gudusoft.gsqlparser.nodes.powerquery;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.nodes.TParseTreeNode;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006
007import java.util.ArrayList;
008import java.util.List;
009
010/**
011 * A connector call that roots a Power Query source chain.
012 *
013 * <p>Examples:
014 * <pre>
015 *   Snowflake.Databases("acct.snowflakecomputing.com", "WH")
016 *   Sql.Database("server", "db")
017 *   Oracle.Database("host:port/service")
018 *   GoogleBigQuery.Database(...)
019 * </pre>
020 *
021 * <p>The connector function name is resolved through
022 * {@link gudusoft.gsqlparser.powerquery.ConnectorCatalog} to a
023 * {@link EDbVendor}, which drives downstream SQL parsing for sibling
024 * {@link TPowerQueryNativeQuery} steps.
025 */
026public class TPowerQueryConnectorCall extends TParseTreeNode {
027
028    private String connectorFunction;
029    private EDbVendor resolvedVendor;
030    private final List<String> rawArguments = new ArrayList<>();
031
032    public String getConnectorFunction() {
033        return connectorFunction;
034    }
035
036    public void setConnectorFunction(String connectorFunction) {
037        this.connectorFunction = connectorFunction;
038    }
039
040    public EDbVendor getResolvedVendor() {
041        return resolvedVendor;
042    }
043
044    public void setResolvedVendor(EDbVendor resolvedVendor) {
045        this.resolvedVendor = resolvedVendor;
046    }
047
048    public List<String> getRawArguments() {
049        return rawArguments;
050    }
051
052    public void addRawArgument(String arg) {
053        if (arg != null) rawArguments.add(arg);
054    }
055
056    @Override
057    public void accept(TParseTreeVisitor v) {
058        v.preVisit(this);
059        v.postVisit(this);
060    }
061
062    @Override
063    public void acceptChildren(TParseTreeVisitor v) {
064        v.preVisit(this);
065        v.postVisit(this);
066    }
067}