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