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 TCreateMaterializedViewSqlNode createViewSqlNode = (TCreateMaterializedViewSqlNode)rootNode; 091 super.doParseStatement(psql); 092 this.viewName = createViewSqlNode.getViewName(); 093 if (getSqlEnv().getDefaultCatalogName() != null){ 094 if (viewName.getDatabaseToken() == null){ 095 viewName.setDatabaseToken(new TSourceToken(getSqlEnv().getDefaultCatalogName())); 096 } 097 } 098 oracleUsingIndex = createViewSqlNode.getOracleUsingIndex(); 099 mvRefresh = createViewSqlNode.getMvRefresh(); 100 physicalProperties = createViewSqlNode.getPhysicalProperties(); 101 materializedViewProps = createViewSqlNode.getMaterializedViewProps(); 102 forUpdate = createViewSqlNode.isForUpdate(); 103 tableAttributes = createViewSqlNode.getTableAttributes(); 104 105 106 subquery = new TSelectSqlStatement(this.dbvendor); 107 subquery.rootNode = createViewSqlNode.getSelectSqlNode(); 108 subquery.doParseStatement(this); 109 110 if (createViewSqlNode.getViewAliasClause() != null){ 111 createViewSqlNode.getViewAliasClause().doParse(this, ESqlClause.viewAlias); 112 this.viewAliasClause = createViewSqlNode.getViewAliasClause(); 113 } 114 115 return 0; 116 } 117 118 public void accept(TParseTreeVisitor v){ 119 v.preVisit(this); 120 v.postVisit(this); 121 } 122 123 public void acceptChildren(TParseTreeVisitor v){ 124 v.preVisit(this); 125 subquery.acceptChildren(v); 126 if (viewAliasClause != null) viewAliasClause.acceptChildren(v); 127 v.postVisit(this); 128 } 129 130 public void setSubquery(TSelectSqlStatement subquery) { 131 this.subquery = subquery; 132 } 133 134 public void setViewAliasClause(TViewAliasClause viewAliasClause) { 135 this.viewAliasClause = viewAliasClause; 136 } 137 138 public void setViewName(TObjectName viewName) { 139 this.viewName = viewName; 140 } 141}