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}