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}