TYPEMAP
sqlite_dbh * T_SQLITE_DBH
sqlite_sth * T_SQLITE_STH
string T_STRING
const string T_CONST_STRING

INPUT
T_SQLITE_DBH
    if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) {
        $var = ($type)SvIV((SV*)SvRV( $arg ));
    } else {
        warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
        XSRETURN_UNDEF;
    }

T_SQLITE_STH
    if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) {
        $var = ($type)SvIV((SV*)SvRV( $arg ));
    } else {
        warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
        XSRETURN_UNDEF;
    }

T_STRING
    {
        if (SvTYPE($arg) != SVt_PV) {
            warn(\"${Package}::$func_name() -- $var is invalid svtype\");
            XSRETURN_UNDEF;
        }
        if (SvCUR($arg) == 0) {
            warn(\"${Package}::$func_name() -- $var is empty\");
            XSRETURN_UNDEF;
        }
        $var = string(SvPV_nolen($arg));
    }

T_CONST_STRING
    {
        if (SvTYPE($arg) != SVt_PV) {
            warn(\"${Package}::$func_name() -- $var is invalid svtype\");
            XSRETURN_UNDEF;
        }
        if (SvCUR($arg) == 0) {
            warn(\"${Package}::$func_name() -- $var is empty\");
            XSRETURN_UNDEF;
        }
        $var = string(SvPV_nolen($arg));
    }

OUTPUT
T_SQLITE_DBH
    sv_setref_pv($arg, "Database::Async::SQLite", (void *)$var);

T_SQLITE_STH
    sv_setref_pv($arg, "Database::Async::SQLite::STH", (void *)$var);

T_STRING
    sv_setpvn($arg, $var.c_str(), $var.size());