001package gudusoft.gsqlparser.nodes;
002/*
003 * Date: 13-8-6
004 */
005
006import gudusoft.gsqlparser.EDbObjectType;
007import gudusoft.gsqlparser.ETableSource;
008import gudusoft.gsqlparser.TCustomSqlStatement;
009import gudusoft.gsqlparser.TSourceToken;
010
011public class TLateralView extends TParseTreeNode {
012    private TFunctionCall udtf;
013    private TAliasClause tableAlias;
014    private TObjectNameList columnAliasList;
015    private boolean outer = false;
016
017    public TObjectNameList getColumnAliasList() {
018        return columnAliasList;
019    }
020
021    public boolean isOuter() {
022        return outer;
023    }
024
025    public TAliasClause getTableAlias() {
026        return tableAlias;
027    }
028
029    public TFunctionCall getUdtf() {
030        return udtf;
031    }
032
033    public void setOuter(boolean outer) {
034        this.outer = outer;
035    }
036
037    public TTable createATable(TCustomSqlStatement sql){
038        TTable lateralTable = new TTable();
039        if (tableAlias != null){
040            lateralTable.setTableName(tableAlias.getAliasName());
041            lateralTable.setAliasClause(tableAlias);
042        }else{
043            TObjectName tableName = TObjectName.createObjectName ( sql.dbvendor, EDbObjectType.table,new TSourceToken("laterView"));
044            lateralTable.setTableName(tableName);
045        }
046        lateralTable.setTableType(ETableSource.lateralView);
047        lateralTable.setLateralView(this);
048
049        if (columnAliasList != null){
050            for(TObjectName c:columnAliasList){
051                lateralTable.getLinkedColumns().addObjectName(c);
052            }
053        }
054
055        return  lateralTable;
056    }
057
058    public void init(Object arg1,Object arg2){
059        udtf = (TFunctionCall)arg1;
060        tableAlias = (TAliasClause)arg2;
061    }
062
063    public void init(Object arg1,Object arg2,Object arg3){
064        udtf = (TFunctionCall)arg1;
065        tableAlias = (TAliasClause)arg2;
066        columnAliasList = (TObjectNameList)arg3;
067    }
068
069    public void accept(TParseTreeVisitor v){
070        v.preVisit(this);
071        v.postVisit(this);
072    }
073
074    public void acceptChildren(TParseTreeVisitor v){
075        v.preVisit(this);
076        v.postVisit(this);
077    }
078
079    public void setUdtf(TFunctionCall udtf) {
080        this.udtf = udtf;
081    }
082
083    public void setTableAlias(TAliasClause tableAlias) {
084        this.tableAlias = tableAlias;
085    }
086
087    public void setColumnAliasList(TObjectNameList columnAliasList) {
088        this.columnAliasList = columnAliasList;
089    }
090}