001package gudusoft.gsqlparser.stmt; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.*; 005import gudusoft.gsqlparser.nodes.oracle.TMaterializedViewProps; 006import gudusoft.gsqlparser.nodes.oracle.TOracleCreateMvRefresh; 007import gudusoft.gsqlparser.nodes.oracle.TOracleUsingIndex; 008import gudusoft.gsqlparser.nodes.oracle.TPhysicalProperties; 009import gudusoft.gsqlparser.nodes.redshift.TRedshiftTableAttributes; 010import java.util.List; 011 012public class TCreateMaterializedSqlStatement extends TCustomSqlStatement { 013 private TSelectSqlStatement subquery = null; 014 private TViewAliasClause viewAliasClause = null; 015 private boolean forUpdate = false; 016 private TOracleUsingIndex oracleUsingIndex; 017 private TOracleCreateMvRefresh mvRefresh; 018 019 private List<TRedshiftTableAttributes> tableAttributes; 020 public void setTableAttributes(List<TRedshiftTableAttributes> tableAttributes) { 021 this.tableAttributes = tableAttributes; 022 } 023 024 public List<TRedshiftTableAttributes> getTableAttributes() { 025 return tableAttributes; 026 } 027 028 029 public TOracleCreateMvRefresh getMvRefresh() { 030 return mvRefresh; 031 } 032 033 /** 034 * Using index clause 035 * @return using index clause 036 */ 037 public TOracleUsingIndex getOracleUsingIndex() { 038 return oracleUsingIndex; 039 } 040 041 /** 042 * For update clause is specified if the value is true. 043 * @return whether for update clause is true 044 */ 045 public boolean isForUpdate() { 046 return forUpdate; 047 } 048 049 public TViewAliasClause getViewAliasClause() { 050 return viewAliasClause; 051 } 052 053 /** 054 * 055 * @return a subquery that identifies columns and rows of the table(s) that the view is based on. 056 */ 057 public TSelectSqlStatement getSubquery() { 058 return subquery; 059 } 060 061 public TCreateMaterializedSqlStatement(EDbVendor dbvendor) { 062 super(dbvendor); 063 sqlstatementtype = ESqlStatementType.sstcreatematerializedview; 064 } 065 066 private TObjectName viewName = null; 067 068 /** 069 * 070 * @return the name of the view or the object view. 071 */ 072 public TObjectName getViewName() { 073 return viewName; 074 } 075 076 private TPhysicalProperties physicalProperties; 077 078 public TPhysicalProperties getPhysicalProperties() { 079 return physicalProperties; 080 } 081 082 public TMaterializedViewProps getMaterializedViewProps() { 083 return materializedViewProps; 084 } 085 086 private TMaterializedViewProps materializedViewProps; 087 088 public int doParseStatement(TCustomSqlStatement psql) { 089 if (rootNode == null) return -1; 090 091 // Handle AS REPLICA OF case (BigQuery) - grammar produces TDummy with view name in node1 092 if (rootNode instanceof TDummy){ 093 super.doParseStatement(psql); 094 TDummy dummy = (TDummy)rootNode; 095 if (dummy.node1 instanceof TObjectName){ 096 this.viewName = (TObjectName)dummy.node1; 097 } 098 return 0; 099 } 100 101 TCreateMaterializedViewSqlNode createViewSqlNode = (TCreateMaterializedViewSqlNode)rootNode; 102 super.doParseStatement(psql); 103 this.viewName = createViewSqlNode.getViewName(); 104 if (getSqlEnv().getDefaultCatalogName() != null){ 105 if (viewName.getDatabaseToken() == null){ 106 viewName.setDatabaseToken(new TSourceToken(getSqlEnv().getDefaultCatalogName())); 107 } 108 } 109 oracleUsingIndex = createViewSqlNode.getOracleUsingIndex(); 110 mvRefresh = createViewSqlNode.getMvRefresh(); 111 physicalProperties = createViewSqlNode.getPhysicalProperties(); 112 materializedViewProps = createViewSqlNode.getMaterializedViewProps(); 113 forUpdate = createViewSqlNode.isForUpdate(); 114 tableAttributes = createViewSqlNode.getTableAttributes(); 115 116 117 subquery = new TSelectSqlStatement(this.dbvendor); 118 subquery.rootNode = createViewSqlNode.getSelectSqlNode(); 119 subquery.doParseStatement(this); 120 121 if (createViewSqlNode.getViewAliasClause() != null){ 122 createViewSqlNode.getViewAliasClause().doParse(this, ESqlClause.viewAlias); 123 this.viewAliasClause = createViewSqlNode.getViewAliasClause(); 124 } 125 126 return 0; 127 } 128 129 public void accept(TParseTreeVisitor v){ 130 v.preVisit(this); 131 v.postVisit(this); 132 } 133 134 public void acceptChildren(TParseTreeVisitor v){ 135 v.preVisit(this); 136 subquery.acceptChildren(v); 137 if (viewAliasClause != null) viewAliasClause.acceptChildren(v); 138 v.postVisit(this); 139 } 140 141 public void setSubquery(TSelectSqlStatement subquery) { 142 this.subquery = subquery; 143 } 144 145 public void setViewAliasClause(TViewAliasClause viewAliasClause) { 146 this.viewAliasClause = viewAliasClause; 147 } 148 149 public void setViewName(TObjectName viewName) { 150 this.viewName = viewName; 151 } 152}