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}