001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005import gudusoft.gsqlparser.nodes.hive.THiveWithDBPropertiesClause;
006import gudusoft.gsqlparser.nodes.mssql.TMssqlStmtStubSqlNode;
007
008/**
009 * 
010 */
011public class TCreateDatabaseSqlStatement extends TCustomSqlStatement {
012
013    private boolean ifNotExists;
014    private TObjectName databaseComment;
015    private TObjectName dbLocation;
016    private TSourceToken database;
017    private THiveWithDBPropertiesClause dbProperties;
018    private TObjectName dbOwner;//redshift
019
020    private TObjectName characterSet;
021    private TObjectName collationName;
022
023    private TObjectName cloneSourceDb = null;
024
025
026    public TObjectName getCloneSourceDb() {
027        return cloneSourceDb;
028    }
029
030    public TObjectName getCharacterSet() {
031        return characterSet;
032    }
033
034    public TObjectName getCollationName() {
035        return collationName;
036    }
037
038    public TObjectName getDbOwner() {
039        return dbOwner;
040    }
041
042    public TSourceToken getDatabase() {
043        return database;
044    }
045
046    public TObjectName getDatabaseComment() {
047        return databaseComment;
048    }
049
050    public TObjectName getDbLocation() {
051        return dbLocation;
052    }
053
054    public THiveWithDBPropertiesClause getDbProperties() {
055        return dbProperties;
056    }
057
058    public boolean isIfNotExists() {
059        return ifNotExists;
060    }
061
062    public TCreateDatabaseSqlStatement(EDbVendor dbvendor) {
063        super(dbvendor);
064        sqlstatementtype = ESqlStatementType.sstcreatedatabase;
065    }
066
067    void buildsql() {
068    }
069
070    void clear() {
071    }
072
073    String getasprettytext() {
074        return "";
075    }
076
077    void iterate(TVisitorAbs pvisitor) {
078    }
079
080    private TObjectName databaseName = null;
081
082    public TObjectName getDatabaseName() {
083        return databaseName;
084    }
085
086    public int doParseStatement(TCustomSqlStatement psql) {
087        TStubStmtSqlNode sqlNode0;
088        TMssqlStmtStubSqlNode sqlNode;
089        TSourceToken startToken;
090        TSourceTokenList stList;
091        TSourceToken st;
092
093        if (rootNode == null) return -1;
094        switch (dbvendor){
095            case dbvdb2:
096                 sqlNode0 = (TStubStmtSqlNode)rootNode;
097                 startToken = sqlNode0.getStartToken();
098                 stList = startToken.container;
099                 st = null;
100                for(int i=0;i<stList.size();i++){
101                    st = stList.get(i);
102                    if (st.isnonsolidtoken()) continue;
103                    if (st.tokencode == TBaseType.ident){
104                        //databaseName = new TNodeFactory().createObjectName(null,null,st);
105                        databaseName = TObjectName.createObjectName (this.dbvendor, EDbObjectType.database,st);
106                        break;
107                    }
108                }
109                break;
110            case dbvmssql:
111            case dbvazuresql:
112            case dbvinformix:
113                 //sqlNode = (TMssqlStmtStubSqlNode)rootNode;
114                 TCreateDatabaseSqlNode createDatabaseSqlNode2 = (TCreateDatabaseSqlNode)rootNode;
115                 startToken = createDatabaseSqlNode2.getStartToken();
116                 stList = startToken.container;
117                 st = null;
118                 boolean isReady = false;
119                for(int i=startToken.posinlist ;i<stList.size();i++){
120                    st = stList.get(i);
121                    if (st.isnonsolidtoken()) continue;
122                    if (st.tokencode == TBaseType.rrw_database){
123                        isReady = true;
124                        continue;
125                    }
126                    if (isReady){
127                        //databaseName = new TNodeFactory().createObjectName(null,null,st);
128                        databaseName = TObjectName.createObjectName (this.dbvendor, EDbObjectType.database,st);
129                        break;
130                    }
131                }
132                break;
133            default:
134                TCreateDatabaseSqlNode createDatabaseSqlNode = (TCreateDatabaseSqlNode)rootNode;
135                super.doParseStatement(psql);
136
137                this.databaseName = createDatabaseSqlNode.getDatabaseName();
138                this.databaseName.setDbObjectType(EDbObjectType.database);
139                this.database = createDatabaseSqlNode.getDatabase();
140                this.dbLocation = createDatabaseSqlNode.getDbLocation();
141                this.databaseComment = createDatabaseSqlNode.getDatabaseComment();
142                this.dbProperties = createDatabaseSqlNode.getDbProperties();
143                dbOwner = createDatabaseSqlNode.getDbOwner();
144                characterSet = createDatabaseSqlNode.getCharacterSet();
145                collationName = createDatabaseSqlNode.getCollationName();
146                cloneSourceDb = createDatabaseSqlNode.getCloneSourceDb();
147                break;
148        }
149
150        return 0;
151    }
152
153    public void accept(TParseTreeVisitor v){
154        v.preVisit(this);
155        v.postVisit(this);
156    }
157
158
159    public void acceptChildren(TParseTreeVisitor v){
160        v.preVisit(this);
161        this.getDatabaseName().acceptChildren(v);
162        v.postVisit(this);
163    }
164
165    public void setIfNotExists(boolean ifNotExists) {
166        this.ifNotExists = ifNotExists;
167    }
168
169    public void setDatabaseComment(TObjectName databaseComment) {
170        this.databaseComment = databaseComment;
171    }
172
173    public void setDbLocation(TObjectName dbLocation) {
174        this.dbLocation = dbLocation;
175    }
176
177    public void setDbProperties(THiveWithDBPropertiesClause dbProperties) {
178        this.dbProperties = dbProperties;
179    }
180
181    public void setDbOwner(TObjectName dbOwner) {
182        this.dbOwner = dbOwner;
183    }
184
185    public void setDatabaseName(TObjectName databaseName) {
186        this.databaseName = databaseName;
187    }
188}