001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.EDbObjectType;
004
005/*
006* Date: 2010-2-3
007* Time: 15:25:13
008*/
009public class TFlashback extends TParseTreeNode {
010
011    private TExpression expr;
012    private TAliasClause tmpAlias;
013
014    public void init(Object arg1){
015        expr = (TExpression) arg1;
016    }
017
018    public void init(Object arg1,Object arg2){
019        expr = (TExpression) arg1;
020        tmpAlias = (TAliasClause) arg2;
021        tmpAlias.setDBObjectToAlias(EDbObjectType.table_alias);
022    }
023    private boolean versionsQuery = false;
024
025    /**
026     * True when this is a flashback <em>version</em> query
027     * ({@code VERSIONS BETWEEN ...}) rather than a point-in-time query
028     * ({@code AS OF ...}).
029     *
030     * <p>The distinction matters because the {@code VERSIONS_STARTSCN},
031     * {@code VERSIONS_STARTTIME}, {@code VERSIONS_ENDSCN},
032     * {@code VERSIONS_ENDTIME}, {@code VERSIONS_XID} and
033     * {@code VERSIONS_OPERATION} pseudocolumns are only available under a
034     * version query. Under {@code AS OF} those names are ordinary identifiers.</p>
035     *
036     * @return true for a {@code VERSIONS} clause
037     */
038    public boolean isVersionsQuery() {
039        return versionsQuery;
040    }
041
042    public void setVersionsQuery(boolean versionsQuery) {
043        this.versionsQuery = versionsQuery;
044    }
045
046    public TExpression getExpr() {
047        return expr;
048    }
049
050    public TAliasClause getTmpAlias() {
051        return tmpAlias;
052    }
053
054    public void setTmpAlias(TAliasClause alias) {
055        this.tmpAlias = alias;
056        if (alias != null) {
057            alias.setDBObjectToAlias(EDbObjectType.table_alias);
058        }
059    }
060
061    public void accept(TParseTreeVisitor v)
062    {
063        v.preVisit(this);
064        v.postVisit(this);
065    }
066
067    public void acceptChildren(TParseTreeVisitor v) {
068        v.preVisit(this);
069        v.postVisit(this);
070    }
071}