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}