001package gudusoft.gsqlparser.catalog.diagnostic; 002 003import gudusoft.gsqlparser.catalog.runtime.CatalogQualifiedName; 004 005import java.util.Optional; 006 007/** 008 * Strict-mode failure thrown by catalog input or runtime entry points. 009 * 010 * <p>Plan §7.3 / §15. Carries a {@link CatalogDiagnosticCode} so callers can branch on 011 * specific failure modes (validation vs runtime fetch vs ambiguity), and an optional 012 * qualified name for the offending object.</p> 013 */ 014public class CatalogException extends RuntimeException { 015 016 private static final long serialVersionUID = 1L; 017 018 private final CatalogDiagnosticCode code; 019 private final CatalogQualifiedName name; 020 021 public CatalogException(String message) { 022 this(message, null, null, null); 023 } 024 025 public CatalogException(String message, Throwable cause) { 026 this(message, cause, null, null); 027 } 028 029 public CatalogException(String message, CatalogDiagnosticCode code) { 030 this(message, null, code, null); 031 } 032 033 public CatalogException(String message, CatalogDiagnosticCode code, CatalogQualifiedName name) { 034 this(message, null, code, name); 035 } 036 037 public CatalogException(String message, Throwable cause, 038 CatalogDiagnosticCode code, CatalogQualifiedName name) { 039 super(message, cause); 040 this.code = code; 041 this.name = name; 042 } 043 044 /** Stable diagnostic code, or {@code null} if none was supplied. */ 045 public CatalogDiagnosticCode code() { 046 return code; 047 } 048 049 public Optional<CatalogQualifiedName> name() { 050 return Optional.ofNullable(name); 051 } 052}