001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.*;
005import gudusoft.gsqlparser.nodes.TAlterDatabaseSqlNode;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TPTNodeList;
008import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
009import gudusoft.gsqlparser.nodes.hive.THiveKeyValueProperty;
010
011/**
012 * SQL alter database statement.
013 * <br>
014 * <br>{@link #getDatabaseName()} returns the database name.
015 * <br><br>Example:
016 * <pre>
017 * ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 110
018 * Database name: {@link #getDatabaseName}
019 * </pre>
020 * <pre>
021 * alter database ticket rename to newticket
022 * Redshift new database name: {@link #getNewDatabaseName}
023 * </pre>
024 * <pre>
025 * alter database ticket owner to dwuser;
026 * Redshift owner name: {@link #getOwnerName}
027 * </pre>
028 *
029 */
030public class TAlterDatabaseStmt extends TCustomSqlStatement {
031
032    private TObjectName databaseName;
033    private TPTNodeList<THiveKeyValueProperty> dbProperties;
034    private TObjectName newDatabaseName;
035    private TObjectName ownerName;
036
037    /**
038     * Netezza,Redshift,Snowflake, new database name in rename to clause.
039     *
040     * @return new database name
041     */
042    public TObjectName getNewDatabaseName() {
043        return newDatabaseName;
044    }
045
046    /**
047     * Netezza,Redshift,  owner name in owner to clause.
048     * @return owner name in owner to clause.
049     */
050    public TObjectName getOwnerName() {
051        return ownerName;
052    }
053
054    /**
055     * database name to be altered.
056     * @return database name
057     */
058    public TObjectName getDatabaseName() {
059        return databaseName;
060    }
061
062    /**
063     * Hive, db properties in set dbproperties clause.
064     * @return db properties in set dbproperties clause.
065     */
066    public TPTNodeList<THiveKeyValueProperty> getDbProperties() {
067        return dbProperties;
068    }
069
070    public TAlterDatabaseStmt(EDbVendor dbvendor) {
071        super(dbvendor);
072        sqlstatementtype = ESqlStatementType.sstalterdatabase;
073    }
074
075    public int doParseStatement(TCustomSqlStatement psql) {
076        if (rootNode == null) return -1;
077        super.doParseStatement(psql);
078        TAlterDatabaseSqlNode node = (TAlterDatabaseSqlNode)rootNode;
079        databaseName = node.getDatabaseName();
080        dbProperties = node.getDbProperties();
081        newDatabaseName = node.getNewDatabaseName();
082        ownerName = node.getOwnerName();
083        if (dbvendor == EDbVendor.dbvmssql){
084            // search database name in source token list
085            TSourceToken st = null;
086            boolean  isNext = false;
087            for(int i=0;i<sourcetokenlist.size();i++){
088                st = sourcetokenlist.get(i);
089                if (st.tokencode == TBaseType.rrw_database){
090                    isNext = true;
091                    continue;
092                }
093                if (!isNext) continue;
094                if (st.tokencode == TBaseType.lexspace) continue;
095                databaseName = new TObjectName();
096                databaseName.init(st);
097                break;
098            }
099        }
100        return 0;
101    }
102
103    public void setDatabaseName(TObjectName databaseName) {
104        this.databaseName = databaseName;
105    }
106
107    public void setDbProperties(TPTNodeList<THiveKeyValueProperty> dbProperties) {
108        this.dbProperties = dbProperties;
109    }
110
111    public void setNewDatabaseName(TObjectName newDatabaseName) {
112        this.newDatabaseName = newDatabaseName;
113    }
114
115    public void setOwnerName(TObjectName ownerName) {
116        this.ownerName = ownerName;
117    }
118
119    public void accept(TParseTreeVisitor v){
120        v.preVisit(this);
121
122        v.postVisit(this);
123    }
124
125    public void acceptChildern(TParseTreeVisitor v){
126        v.preVisit(this);
127        v.postVisit(this);
128    }
129
130}