001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TDummy;
005
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007import gudusoft.gsqlparser.nodes.TObjectName;
008
009public class TUseDatabase extends TCustomSqlStatement {
010     public TUseDatabase(EDbVendor dbvendor){
011        super(dbvendor);
012        sqlstatementtype = ESqlStatementType.sstUseDatabase ;
013        }
014
015    void buildsql() {
016    }
017
018    void clear() {
019    }
020
021    String getasprettytext() {
022        return "";
023    }
024
025    void iterate(TVisitorAbs pvisitor) {
026    }
027
028    private TObjectName schemaName = null;
029
030    public TObjectName getSchemaName() {
031        return schemaName;
032    }
033
034    private TObjectName databaseName = null;
035
036    public TObjectName getDatabaseName() {
037        return databaseName;
038    }
039
040    private boolean isSchema = false;
041
042    public boolean isSchema() {
043        return isSchema;
044    }
045
046    public int doParseStatement(TCustomSqlStatement psql) {
047         if (rootNode == null) return -1;
048         TDummy dummySqlNode = (TDummy)rootNode;
049
050         super.doParseStatement(psql);
051         switch (dbvendor){
052             case dbvdatabricks:
053                 switch(dummySqlNode.objectType){
054                     case catalog:
055                         this.databaseName = (TObjectName)dummySqlNode.node1;
056                         this.databaseName.setDbObjectType(EDbObjectType.database);
057                         if (getSqlEnv() != null)  {
058                             getSqlEnv().setDefaultCatalogName(this.databaseName.toString());
059                         }
060                         break;
061                     case schema:
062                     case database:
063                         this.schemaName = (TObjectName)dummySqlNode.node1;
064                         this.schemaName.setDbObjectType(EDbObjectType.schema);
065                         if (getSqlEnv() != null)  {
066                             getSqlEnv().setDefaultSchemaName(this.schemaName.toString());
067                         }
068                         break;
069                 }
070                 break;
071             default:
072                 this.databaseName = (TObjectName)dummySqlNode.node1;
073                 // databaseName can be null for statements without an object name,
074                 // e.g. Flink "USE MODULES hive, core"
075                 if (this.databaseName == null) break;
076                 this.databaseName.setDbObjectType(EDbObjectType.database);
077               // this.databaseName.setObjectType(TObjectName.ttobjDatabaseName);
078                 if (dummySqlNode.objectType == EDbObjectType.schema){
079                     isSchema = true;
080                 }
081
082                 if (getSqlEnv() != null)  {
083                     getSqlEnv().setDefaultCatalogName(this.databaseName.toString());
084                 }
085                 break;
086         }
087         return 0;
088     }
089
090     public void accept(TParseTreeVisitor v){
091         v.preVisit(this);
092         v.postVisit(this);
093     }
094
095    public void acceptChildren(TParseTreeVisitor v){
096        v.preVisit(this);
097        v.postVisit(this);
098    }
099
100    public void setDatabaseName(TObjectName databaseName) {
101        this.databaseName = databaseName;
102    }
103}