Ferreteria/v0.6/clade/Sys/Data/Engine/aux/msgs/Maria/Errors

From Woozle Writes Code
< Ferreteria‎ | v0.6‎ | clade‎ | Sys‎ | Data‎ | Engine‎ | aux
Jump to navigation Jump to search
clade: Sys\Data\Engine\aux\msgs\Maria\Errors
Clade Family
Message Errors

Error1044
Error1142

Clade Aliases
Alias Clade
Base* [ca,i] Sys\Events\Message
Error1044 [c] Error1044
Error1142 [c] Error1142
Subpages

Code

as of 2025-10-04

interface iErrors extends BaseIface {
    // PRE-SETUP
    static function FitsErrorMask(string $Msg) : bool;
    static function ErrorIsKnown(int $nErr) : bool;
    // SETUP
    static function FromMessage(string $sMsg) : ?self;
}
abstract class caErrors extends BaseClass implements SelfIface {

    // ++ CONFIG ++ //

    private const sMaskPrefix = 'mysqldump: Got error:';

    abstract protected function ErrNum() : int;

    // ++ PRE-SETUP ++ //

    public static function FitsErrorMask(string $sMsg) : bool { return str_starts_with($sMsg,self::sMaskPrefix); }
    public static function ErrorIsKnown(int $nErr) : bool { return ($nErr === 1044) || ($nErr === 1142); }

    // -- PRE-SETUP -- //
    // ++ SETUP ++ //

    public static function FromMessage(string $sMsg) : ?SelfIface {
        $oMsg = NULL;
        if (static::FitsErrorMask($sMsg)) {
            $nlPfx = strlen(self::sMaskPrefix);
            $sRem = trim(substr($sMsg,$nlPfx));
            $nlNum = strpos($sRem,':');     // ASSUMES: err # always immedately followed by ":"
            $sNum = substr($sRem,0,$nlNum);   // the error number
            if (static::ErrorIsKnown($sNum)) {
                $sMsg = trim(substr($sRem,$nlNum+1));
                $oMsg = static::FromErrorNumber($sNum,$sMsg);
            }
        }
        return $oMsg;
    }

    // ++ SETUP: pieces ++ //

    public static function FromErrorNumber(int $nErr,string $sMsg) : SelfIface {
        switch($nErr) {
            case 1044: $sc = Error1044::class; break;
            case 1142: $sc = Error1142::class; break;
            default: ThrowHissy("Unknown error #$nErr");    // shouldn't ever get here, actually
        }
        return new ($sc)($sMsg);
    }

    // -- SETUP -- //
    // ++ OUTPUT ++ //

    public function Full() : string {
        #echo self::ShowStack('Who dares summon me?');
        $oScrn = self::Screen();
        $ftNum = $oScrn->BlueIt($this->ErrNum());
        $sOut = $oScrn->YellowIt('DB error ') . $ftNum . ': ['.$this->Text().']';
        return $sOut;
    }

    // -- OUTPUT -- //
}