001package gudusoft.gsqlparser.stmt; 002 003import gudusoft.gsqlparser.EDbVendor; 004import gudusoft.gsqlparser.ESqlStatementType; 005import gudusoft.gsqlparser.TCustomSqlStatement; 006import gudusoft.gsqlparser.nodes.*; 007 008/** 009 * CANCEL BACKUP and CANCEL RESTORE statements for StarRocks. 010 * 011 * Syntax: 012 * CANCEL BACKUP FROM <db_name> 013 * CANCEL BACKUP FOR EXTERNAL CATALOG 014 * CANCEL RESTORE FROM <db_name> 015 * 016 * Note: If a RESTORE task is canceled during the COMMIT phase, the restored 017 * data will be corrupted and inaccessible. 018 */ 019public class TStarrocksCancelBackupRestoreStmt extends TCustomSqlStatement { 020 021 /** 022 * Type of cancel statement - BACKUP or RESTORE 023 */ 024 public enum CancelType { 025 BACKUP, 026 RESTORE 027 } 028 029 // Type of cancel statement 030 private CancelType cancelType; 031 032 // FROM clause - database name 033 private TObjectName databaseName; 034 035 // FOR EXTERNAL CATALOG flag (BACKUP only) 036 private boolean forExternalCatalog; 037 038 public TStarrocksCancelBackupRestoreStmt(EDbVendor dbvendor) { 039 super(dbvendor); 040 // Will be set based on cancelType during parsing 041 sqlstatementtype = ESqlStatementType.sststarrocksCancelBackup; 042 } 043 044 // Getters 045 public CancelType getCancelType() { 046 return cancelType; 047 } 048 049 public TObjectName getDatabaseName() { 050 return databaseName; 051 } 052 053 public boolean isForExternalCatalog() { 054 return forExternalCatalog; 055 } 056 057 @Override 058 public int doParseStatement(TCustomSqlStatement psql) { 059 if (rootNode == null) return -1; 060 super.doParseStatement(psql); 061 062 TCancelBackupRestoreSqlNode node = (TCancelBackupRestoreSqlNode) rootNode; 063 064 TCancelBackupRestoreSqlNode.CancelType nodeCancelType = node.getCancelType(); 065 if (nodeCancelType == TCancelBackupRestoreSqlNode.CancelType.BACKUP) { 066 this.cancelType = CancelType.BACKUP; 067 this.sqlstatementtype = ESqlStatementType.sststarrocksCancelBackup; 068 } else { 069 this.cancelType = CancelType.RESTORE; 070 this.sqlstatementtype = ESqlStatementType.sststarrocksCancelRestore; 071 } 072 073 this.databaseName = node.getDatabaseName(); 074 this.forExternalCatalog = node.isForExternalCatalog(); 075 076 return 0; 077 } 078 079 @Override 080 public void accept(TParseTreeVisitor v) { 081 v.preVisit(this); 082 v.postVisit(this); 083 } 084 085 @Override 086 public void acceptChildren(TParseTreeVisitor v) { 087 v.preVisit(this); 088 v.postVisit(this); 089 } 090}