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}