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