001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.TSourceToken;
005import gudusoft.gsqlparser.sqlenv.ESQLDataObjectType;
006import gudusoft.gsqlparser.util.SQLUtil;
007
008/**
009* The column/table alias.
010*/
011public class TAliasClause extends TParseTreeNode{
012
013    public int searchColumn(TObjectName pColumn){
014        int lcResult = -1;
015      if (columns == null) return lcResult;
016        for (int i=0; i<columns.size();i++){
017            if (SQLUtil.sameName(this.dbvendor, ESQLDataObjectType.dotColumn, columns.getObjectName(i).toString(), pColumn.getColumnNameOnly())){
018                lcResult = i;
019                break;
020            }
021        }
022        return lcResult;
023    }
024
025    private boolean isSybaseIndexHint;
026
027    public boolean isSybaseIndexHint() {
028        return isSybaseIndexHint;
029    }
030
031    public void setSybaseIndexHint(boolean sybaseIndexHint) {
032
033        isSybaseIndexHint = sybaseIndexHint;
034    }
035
036    private TPTNodeList<TTableHint> tableHints;
037
038    public void setTableHints(TPTNodeList<TTableHint> tableHints) {
039        this.tableHints = tableHints;
040    }
041
042    public TPTNodeList<TTableHint> getTableHints() {
043
044        return tableHints;
045    }
046
047    private boolean teradataNamedAlais;
048
049    public void setTeradataNamedAlais(boolean teradataNamedAlais) {
050        this.teradataNamedAlais = teradataNamedAlais;
051    }
052
053    public boolean isTeradataNamedAlais() {
054
055        return teradataNamedAlais;
056    }
057
058    private TObjectName aliasName = null;
059    //private TConstant constant;
060    //private TSourceToken sourcetoken;
061
062    private TObjectNameList columns = null;
063
064    public TObjectNameList getColumns() {
065        return columns;
066    }
067
068    private TSourceToken AsToken = null;
069
070    public void setAsToken(TSourceToken asToken) {
071        AsToken = asToken;
072    }
073
074    public TSourceToken getAsToken() {
075
076        return AsToken;
077    }
078
079    private boolean hasAs = false;
080
081    public void setHasAs(boolean hasAs) {
082        this.hasAs = hasAs;
083    }
084
085    public boolean isHasAs() {
086        return hasAs || (AsToken != null);
087    }
088
089    public void setAliasName(TObjectName aliasName) {
090        this.aliasName = aliasName;
091    }
092
093    /**
094     *
095     * @return Alias name
096     */
097    public TObjectName getAliasName() {
098            return aliasName;
099    }
100
101    private TColumnDefinitionList columnNameTypeList;
102
103    public TColumnDefinitionList getColumnNameTypeList() {
104        return columnNameTypeList;
105    }
106
107    public void init(Object arg1,Object arg2,Object arg3){
108        init(arg1,arg2);
109        columnNameTypeList = (TColumnDefinitionList)arg3;
110
111    }
112    public void init(Object arg1,Object arg2)
113    {
114        this.init(arg1);
115        this.columns = (TObjectNameList)arg2;
116        if (this.columns != null){
117            for(int i=0;i<this.columns.size();i++){
118                this.columns.getObjectName(i).setDbObjectType(EDbObjectType.column_alias);
119            }
120        }
121    }
122
123    public void init(Object arg1)
124    {
125        if (arg1 instanceof TObjectName){
126            aliasName = (TObjectName)arg1;
127           // aliasName.setDbObjectType(EDbObjectType.alias);
128        }else if (arg1 instanceof TConstant){
129            aliasName = new TObjectName();
130            aliasName.init(null,((TConstant)arg1).getValueToken() );
131            //constant = (TConstant)arg1;
132        }else if (arg1 instanceof TSourceToken){
133            aliasName = new TObjectName();
134            aliasName.init(null,(TSourceToken)arg1);
135            //sourcetoken = (TSourceToken)arg1;
136        }
137        if (aliasName != null){
138            if (aliasName.getDbObjectType() == EDbObjectType.unknown){
139                // aliasName.setObjectType(TObjectName.ttObjTableAlias); // need  change to column alias in TResultColumn
140                aliasName.setDbObjectType(EDbObjectType.table_alias);
141            }
142        }
143    }
144
145    public void accept(TParseTreeVisitor v){
146        v.preVisit(this);
147        v.postVisit(this);
148    }
149
150    public void acceptChildren(TParseTreeVisitor v){
151        v.preVisit(this);
152        if (aliasName != null){
153            aliasName.acceptChildren(v);
154        }
155        if (getColumns()!= null){
156            getColumns().acceptChildren(v);
157        }
158        v.postVisit(this);
159    }
160
161    public void setColumns(TObjectNameList columns) {
162        this.columns = columns;
163    }
164
165    public void setColumnNameTypeList(TColumnDefinitionList columnNameTypeList) {
166        this.columnNameTypeList = columnNameTypeList;
167    }
168
169    public void setDBObjectToAlias(EDbObjectType dbObjectType){
170        if (this.getAliasName() == null) return;
171        this.getAliasName().setDbObjectType(dbObjectType);
172    }
173}