001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.EDbObjectType;
005import gudusoft.gsqlparser.EDbVendor;
006import gudusoft.gsqlparser.ESqlStatementType;
007import gudusoft.gsqlparser.TCustomSqlStatement;
008import gudusoft.gsqlparser.nodes.TDummy;
009import gudusoft.gsqlparser.nodes.TObjectName;
010import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
011
012public class TCreateAliasStmt extends TCustomSqlStatement {
013
014    private TObjectName aliasName;
015    private EDbObjectType aliasType;
016    private TObjectName tableAlias;
017    private TObjectName moduleAlias;
018    private TObjectName sequenceAlias;
019
020    /**
021     * Sequence alias name, valid only when {@link #aliasType} = EDbObjectType.sequence
022     * @return Sequence alias name
023     */
024    public TObjectName getSequenceAlias() {
025        return sequenceAlias;
026    }
027
028    /**
029     * Module alias name, valid only when {@link #aliasType} = EDbObjectType.module
030     * @return module alias name
031     */
032    public TObjectName getModuleAlias() {
033        return moduleAlias;
034    }
035
036    /**
037     * Table alias name, valid only when {@link #aliasType} = EDbObjectType.table
038     * @return table alias name
039     */
040    public TObjectName getTableAlias() {
041        return tableAlias;
042    }
043
044
045
046
047    /**
048     * One of those types: Table, Module and Sequence
049     * @return type of this alias.
050     */
051    public EDbObjectType getAliasType() {
052        return aliasType;
053    }
054
055
056    /**
057     * Alias created.
058     * @return Name of created Alias.
059     */
060    public TObjectName getAliasName() {
061
062        return aliasName;
063    }
064
065    public TCreateAliasStmt(EDbVendor dbvendor) {
066        super(dbvendor);
067        sqlstatementtype = ESqlStatementType.sstdb2createalias;
068    }
069
070    public int doParseStatement(TCustomSqlStatement psql) {
071        if (rootNode == null) return -1;
072        super.doParseStatement(psql);
073        TDummy node = (TDummy)rootNode;
074        aliasName = (TObjectName)(node.node1);
075        aliasName.setDbObjectType(EDbObjectType.alias);
076        aliasType = node.objectType;
077        switch (aliasType){
078            case table:
079                tableAlias = (TObjectName)node.node2;
080                tableAlias.setDbObjectType(EDbObjectType.table);
081                break;
082            case module:
083                moduleAlias = (TObjectName)node.node2;
084                moduleAlias.setDbObjectType(EDbObjectType.module);
085                break;
086            case sequence:
087                sequenceAlias = (TObjectName)node.node2;
088                sequenceAlias.setDbObjectType(EDbObjectType.sequence);
089                break;
090        }
091
092        return 0;
093    }
094
095    public void accept(TParseTreeVisitor v){
096        v.preVisit(this);
097        v.postVisit(this);
098    }
099
100    public void acceptChildren(TParseTreeVisitor v){
101        v.preVisit(this);
102        v.postVisit(this);
103    }
104}