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
048        if (columnAliasList != null){
049            for(TObjectName c:columnAliasList){
050                lateralTable.getLinkedColumns().addObjectName(c);
051            }
052        }
053
054        return  lateralTable;
055    }
056
057    public void init(Object arg1,Object arg2){
058        udtf = (TFunctionCall)arg1;
059        tableAlias = (TAliasClause)arg2;
060    }
061
062    public void init(Object arg1,Object arg2,Object arg3){
063        udtf = (TFunctionCall)arg1;
064        tableAlias = (TAliasClause)arg2;
065        columnAliasList = (TObjectNameList)arg3;
066    }
067
068    public void accept(TParseTreeVisitor v){
069        v.preVisit(this);
070        v.postVisit(this);
071    }
072
073    public void acceptChildren(TParseTreeVisitor v){
074        v.preVisit(this);
075        v.postVisit(this);
076    }
077
078    public void setUdtf(TFunctionCall udtf) {
079        this.udtf = udtf;
080    }
081
082    public void setTableAlias(TAliasClause tableAlias) {
083        this.tableAlias = tableAlias;
084    }
085
086    public void setColumnAliasList(TObjectNameList columnAliasList) {
087        this.columnAliasList = columnAliasList;
088    }
089}