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.TSourceToken;
009import gudusoft.gsqlparser.nodes.TDummy;
010import gudusoft.gsqlparser.nodes.TObjectName;
011import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
012import gudusoft.gsqlparser.nodes.TRoleOption;
013import gudusoft.gsqlparser.nodes.TCreateRoleSqlNode;
014
015import java.util.ArrayList;
016
017
018public class TCreateRoleStmt extends TCustomSqlStatement {
019
020    private ArrayList<TRoleOption> roleOptions;
021    public ArrayList<TRoleOption> getRoleOptions() {
022        return roleOptions;
023    }
024
025    private TObjectName roleName;
026
027    public void setRoleName(TObjectName roleName) {
028        this.roleName = roleName;
029    }
030
031    public TObjectName getRoleName() {
032
033        return roleName;
034    }
035
036    public TCreateRoleStmt(EDbVendor dbvendor) {
037        super(dbvendor);
038        sqlstatementtype = ESqlStatementType.sstcreaterole;
039    }
040
041    public int doParseStatement(TCustomSqlStatement psql) {
042        if (rootNode == null) return -1;
043        super.doParseStatement(psql);
044
045        switch (dbvendor) {
046            case dbvpostgresql:
047                TCreateRoleSqlNode roleNode = (TCreateRoleSqlNode)rootNode;
048                roleName = roleNode.getRoleName();
049                roleName.setDbObjectType(EDbObjectType.role);
050                roleOptions = roleNode.getRoleOptions();
051                break;
052        
053            default:
054                TDummy node = (TDummy)rootNode;
055                roleName = (TObjectName)(node.node1);
056                roleName.setDbObjectType(EDbObjectType.role);
057                if (getSqlEnv().getDefaultCatalogName() != null){
058                    if (roleName.getDatabaseToken() == null){
059                        roleName.setDatabaseToken(new TSourceToken(getSqlEnv().getDefaultCatalogName()));
060                    }
061                }                
062            break;
063        }
064
065        return 0;
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}