private static AlterTableExecuteDesc getRollbackDesc(TableName tableName, Map<String, String> partitionSpec,
      ASTNode childNode) throws SemanticException {
    AlterTableExecuteSpec<RollbackSpec> spec;
    // the child must be the rollback parameter
    if (childNode.getType() == HiveParser.StringLiteral) {
      ZoneId timeZone = SessionState.get() == null ?
          new HiveConf().getLocalTimeZone() :
          SessionState.get().getConf().getLocalTimeZone();
      TimestampTZ time = TimestampTZUtil.parse(PlanUtils.stripQuotes(childNode.getText()), timeZone);
      spec = new AlterTableExecuteSpec(ROLLBACK, new RollbackSpec(TIME, time.toEpochMilli()));
    } else {
      spec = new AlterTableExecuteSpec(ROLLBACK, new RollbackSpec(VERSION, Long.valueOf(childNode.getText())));
    }
    return new AlterTableExecuteDesc(tableName, partitionSpec, spec);
  }
Analyzer for ALTER TABLE ... EXECUTE commands.
ql/src/java/org/apache/hadoop/hive/ql/ddl/table/execute/AlterTableExecuteAnalyzer.java