DBD-Sybase

 view release on metacpan or  search on metacpan

Sybase.xs  view on Meta::CPAN

    CODE:
    {
    D_imp_sth(sth);
    int len = syb_ct_get_data(sth, imp_sth, column, bufrv, buflen);
    ST(0) = sv_2mortal(newSViv(len));
    }

void
ct_data_info(sth, action, column, attr=&PL_sv_undef)
    SV *	sth
    char *	action
    int		column
    SV *	attr
    ALIAS:
    syb_ct_data_info   =   1
    CODE:
    {
    D_imp_sth(sth);
    int sybaction;
    if(strEQ(action, "CS_SET")) {
        sybaction = CS_SET;
    } else if (strEQ(action, "CS_GET")) {
        sybaction = CS_GET;
    }
    ST(0) = syb_ct_data_info(sth, imp_sth, sybaction, column, attr) ? &PL_sv_yes : &PL_sv_no;
    }

void
ct_send_data(sth, buffer, size)
    SV *	sth
    char *	buffer
    int		size
    ALIAS:
    syb_ct_send_data    =  1
    CODE:
    D_imp_sth(sth);
    ST(0) = syb_ct_send_data(sth, imp_sth, buffer, size) ? &PL_sv_yes : &PL_sv_no;

void
ct_prepare_send(sth)
    SV *	sth
    ALIAS:
    syb_ct_prepare_send   = 1
    CODE:
    D_imp_sth(sth);
    ST(0) = syb_ct_prepare_send(sth, imp_sth) ? &PL_sv_yes : &PL_sv_no;

void
ct_finish_send(sth)
    SV *	sth
    ALIAS:
    syb_ct_finish_send    = 1
    CODE:
    D_imp_sth(sth);
    ST(0) = syb_ct_finish_send(sth, imp_sth) ? &PL_sv_yes : &PL_sv_no;

void
syb_describe(sth, doAssoc = 0)
    SV *	sth
    int	doAssoc
  PPCODE:
{
    D_imp_sth(sth);
    int i, k;
    HV *hv;
    SV *sv;
    char statbuff[255];
    struct {
    int stat;
    char name[30];
    } stat[] = { { CS_CANBENULL, "CS_CANBENULL" }, 
         { CS_HIDDEN, "CS_HIDDEN" },
         { CS_IDENTITY, "CS_IDENTITY" },
         { CS_KEY, "CS_KEY" },
         { CS_VERSION_KEY, "CS_VERSION_KEY" },
         { CS_TIMESTAMP, "CS_TIMESTAMP" },
         { CS_UPDATABLE, "CS_UPDATABLE" },
         { CS_UPDATECOL, "CS_UPDATECOL" },
         { CS_RETURN, "CS_RETURN" },
         { 0, "" }
    };

    /* lifted almost verbatim from Sybase::CTlib's CTlib.xs file... */
    for(i = 0; i < imp_sth->numCols; ++i)
    {
    hv = newHV();

    hv_store(hv, "NAME", 4, newSVpv(imp_sth->datafmt[i].name,0), 0);
    hv_store(hv, "TYPE", 4, newSViv(imp_sth->datafmt[i].datatype), 0);
    hv_store(hv, "MAXLENGTH", 9, newSViv(imp_sth->datafmt[i].maxlength), 0);
    hv_store(hv, "SYBMAXLENGTH", 12, newSViv(imp_sth->coldata[i].realLength), 0);
    hv_store(hv, "SYBTYPE", 7, newSViv(imp_sth->coldata[i].realType), 0);
    hv_store(hv, "SCALE", 5, newSViv(imp_sth->datafmt[i].scale), 0);
    hv_store(hv, "PRECISION", 9, newSViv(imp_sth->datafmt[i].precision), 0);
    statbuff[0] = 0;
    for(k = 0; stat[k].stat > 0; ++k) {
        if(imp_sth->datafmt[i].status & stat[k].stat) {
        strcat(statbuff, stat[k].name);
        strcat(statbuff, " ");
        }
    }
    hv_store(hv, "STATUS", 6, newSVpv(statbuff, 0), 0);
    sv = newRV_noinc((SV*)hv);

    if(doAssoc)
        XPUSHs(sv_2mortal(newSVpv(imp_sth->datafmt[i].name, 0)));
    XPUSHs(sv_2mortal(sv));
    }
}




MODULE = DBD::Sybase	PACKAGE = DBD::Sybase

INCLUDE: Sybase.xsi



( run in 1.024 second using v1.01-cache-2.11-cpan-71847e10f99 )