001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.EDbVendor;
005import gudusoft.gsqlparser.ESqlStatementType;
006import gudusoft.gsqlparser.ETableEffectType;
007import gudusoft.gsqlparser.TCustomSqlStatement;
008import gudusoft.gsqlparser.nodes.*;
009
010/**
011 * Oracle create materialized view log
012 *
013 * Get table name {@link #getTableName()}, get column list {@link #getColumnList()}
014 */
015public class TCreateMaterializedViewLogSqlStatement extends TCustomSqlStatement {
016    private TObjectName tableName = null;
017
018    public TObjectName getTableName() {
019        return tableName;
020    }
021    private TObjectNameList columnList;
022
023    public TObjectNameList getColumnList() {
024        return columnList;
025    }
026
027    public TCreateMaterializedViewLogSqlStatement(EDbVendor dbvendor) {
028        super(dbvendor);
029        sqlstatementtype = ESqlStatementType.sstoraclecreatematerializedviewlog;
030    }
031
032
033    public int doParseStatement(TCustomSqlStatement psql) {
034        if (rootNode == null) return -1;
035        TCreateMaterializedViewLogSqlNode createViewLogSqlNode = (TCreateMaterializedViewLogSqlNode)rootNode;
036        super.doParseStatement(psql);
037
038        tableName = createViewLogSqlNode.getTableName();
039        TTable lcTable = new TTable(tableName);
040        lcTable.setPropertyFromObjectName(tableName, ETableEffectType.tetCreateMaterializedViewLog);
041        this.tables.addTable(lcTable);
042
043        columnList = createViewLogSqlNode.getColumnList();
044        if (columnList != null){
045            for(int i=0;i<columnList.size();i++){
046                lcTable.getLinkedColumns().addObjectName(columnList.getObjectName(i));
047                columnList.getObjectName(i).setSourceTable(lcTable);
048            }
049        }
050
051        return 0;
052    }
053
054    public void accept(TParseTreeVisitor v){
055        v.preVisit(this);
056        v.postVisit(this);
057    }
058
059    public void acceptChildren(TParseTreeVisitor v){
060        v.preVisit(this);
061        v.postVisit(this);
062    }
063
064}