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}