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}