001package gudusoft.gsqlparser.nodes.snowflake; 002 003 004import gudusoft.gsqlparser.nodes.TConstant; 005import gudusoft.gsqlparser.nodes.TExpression; 006import gudusoft.gsqlparser.nodes.TParseTreeNode; 007import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 008 009/** 010 * Snowflake Time Travel SQL extensions 011 * https://docs.snowflake.com/en/user-guide/data-time-travel 012 * 013 * The clause uses one of the following parameters to pinpoint the exact historical data you want to access: 014 * 015 * <br>TIMESTAMP 016 * 017 * <br>OFFSET (time difference in seconds from the present time) 018 * 019 * <br>STATEMENT (query ID for statement) 020 */ 021public class TAtBeforeClause extends TParseTreeNode { 022 public enum TimeTravelType { 023 TIMESTAMP, 024 OFFSET, 025 STATEMENT 026 } 027 028 public enum ClauseType { 029 AT, 030 BEFORE 031 } 032 033 private ClauseType clauseType; // Distinguishes between AT and BEFORE 034 private TimeTravelType type; // Type of Time Travel 035 private TExpression timestamp; // For TIMESTAMP type 036 private TExpression offset; // For OFFSET type 037 private TConstant statementId; // For STATEMENT type 038 039 040 public void init(Object arg1, Object arg2) { 041 clauseType = (ClauseType) arg1; 042 type = (TimeTravelType) arg2; 043 } 044 045 public void init(Object arg1, Object arg2, Object arg3) { 046 init(arg1, arg2); 047 switch (type) { 048 case TIMESTAMP: 049 timestamp = (TExpression) arg3; 050 break; 051 case OFFSET: 052 offset = (TExpression) arg3; 053 break; 054 case STATEMENT: 055 statementId = (TConstant) arg3; 056 break; 057 } 058 } 059 060 public ClauseType getClauseType() { 061 return clauseType; 062 } 063 064 public TimeTravelType getType() { 065 return type; 066 } 067 068 public TExpression getTimestamp() { 069 return timestamp; 070 } 071 072 public TExpression getOffset() { 073 return offset; 074 } 075 076 public TConstant getStatementId() { 077 return statementId; 078 } 079 080 081 public void accept(TParseTreeVisitor v) 082 { 083 v.preVisit(this); 084 v.postVisit(this); 085 } 086 087 public void acceptChildren(TParseTreeVisitor v) { 088 v.preVisit(this); 089 v.postVisit(this); 090 } 091}