001package gudusoft.gsqlparser.nodes.teradata;
002
003import gudusoft.gsqlparser.nodes.TObjectNameList;
004import gudusoft.gsqlparser.nodes.TParseTreeNode;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006
007/**
008 * Represents a HASH BY clause in Teradata table function calls.
009 * <p>
010 * Syntax: HASH BY column_list | RANDOM
011 * <p>
012 * Example:
013 * <pre>
014 * FROM TABLE(
015 *   myfunc(...)
016 *   RETURNS (...)
017 *   HASH BY col1, col2
018 *   LOCAL ORDER BY col1, col2
019 * ) AS t
020 * </pre>
021 */
022public class THashByClause extends TParseTreeNode {
023
024    private TObjectNameList columns;
025    private boolean isRandom = false;
026
027    /**
028     * Gets the list of columns in the HASH BY clause.
029     * Returns null if HASH BY RANDOM was specified.
030     *
031     * @return the column list, or null if RANDOM
032     */
033    public TObjectNameList getColumns() {
034        return columns;
035    }
036
037    /**
038     * Sets the column list for the HASH BY clause.
039     *
040     * @param columns the column list
041     */
042    public void setColumns(TObjectNameList columns) {
043        this.columns = columns;
044    }
045
046    /**
047     * Returns whether this is a HASH BY RANDOM clause.
048     *
049     * @return true if RANDOM, false if column list
050     */
051    public boolean isRandom() {
052        return isRandom;
053    }
054
055    /**
056     * Sets whether this is a HASH BY RANDOM clause.
057     *
058     * @param random true if RANDOM
059     */
060    public void setRandom(boolean random) {
061        this.isRandom = random;
062    }
063
064    public void init(Object arg1) {
065        if (arg1 instanceof TObjectNameList) {
066            this.columns = (TObjectNameList) arg1;
067        }
068    }
069
070    @Override
071    public void accept(TParseTreeVisitor v) {
072        v.preVisit(this);
073        v.postVisit(this);
074    }
075
076    @Override
077    public void acceptChildren(TParseTreeVisitor v) {
078        v.preVisit(this);
079        if (columns != null) {
080            columns.acceptChildren(v);
081        }
082        v.postVisit(this);
083    }
084}