DBD-Informix
view release on metacpan or search on metacpan
else if (KEY_MATCH(kl, key, "TYPE"))
{
/* Returns ODBC (CLI) type numbers. */
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
SV *sv;
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:coltype = TYPE, :collength = LENGTH;
sv = newSViv(map_type_ifmx_to_odbc(coltype, collength));
av_store(av, i - 1, sv);
}
}
else if (KEY_MATCH(kl, key, "PRECISION"))
{
/* Should return CLI precision numbers. */
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
SV *sv;
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:coltype = TYPE, :collength = LENGTH;
sv = newSViv(map_prec_ifmx_to_odbc(coltype, collength));
av_store(av, i - 1, sv);
}
}
else if (KEY_MATCH(kl, key, "SCALE"))
{
/* Should return CLI scale numbers. */
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
SV *sv;
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:coltype = TYPE, :collength = LENGTH;
sv = newSViv(map_scale_ifmx_to_odbc(coltype, collength));
av_store(av, i - 1, sv);
}
}
else if (KEY_MATCH(kl, key, "NUM_OF_PARAMS"))
{
retsv = newSViv((IV)DBIc_NUM_PARAMS(imp_sth));
}
else if (KEY_MATCH(kl, key, "NUM_OF_FIELDS"))
{
assert(imp_sth->n_ocols == DBIc_NUM_FIELDS(imp_sth));
/* RT#54426: Fix for NUM_OF_FIELDS > 0 test */
/* Avoid returning non-zero value on INSERT */
if (imp_sth->st_type == SQ_SELECT ||
(imp_sth->st_type == SQ_EXECPROC && imp_sth->n_ocols > 0))
retsv = newSViv((IV)imp_sth->n_ocols);
else
retsv = newSViv(0);
}
else if (KEY_MATCH(kl, key, "CursorName"))
{
retsv = newSVpv(imp_sth->nm_cursor, 0);
}
else if (KEY_MATCH(kl, key, "ParamValues"))
{
retsv = dbd_ix_st_bound_parameters(imp_sth);
}
/* Informix specific attributes */
else if (KEY_MATCH(kl, key, ix_typenam))
{
char buffer[SQLTYPENAME_BUFSIZ];
SV *sv;
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:coltype = TYPE, :collength = LENGTH;
sv = newSVpv(sqltypename(coltype, collength, buffer, sizeof(buffer)), 0);
av_store(av, i - 1, sv);
}
}
else if (KEY_MATCH(kl, key, ix_fetchab))
{
Boolean rv = DBD_IX_BOOLEAN((imp_sth->st_type == SQ_SELECT) ||
(imp_sth->st_type == SQ_EXECPROC && imp_sth->n_ocols > 0));
retsv = newSViv((IV)rv);
}
else if (KEY_MATCH(kl, key, ix_blobloc))
{
retsv = newSVpv(blob_bindname(imp_sth->dbh->blob_bind), 0);
}
else if ((retsv = dbd_ix_getsqlca(imp_sth->dbh, kl, key)) != NULL)
{
/* Nothing specific to do */
}
else if (KEY_MATCH(kl, key, ix_coltype))
{
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:coltype = TYPE;
av_store(av, i - 1, newSViv((IV)coltype));
}
}
else if (KEY_MATCH(kl, key, ix_colleng))
{
av = newAV();
retsv = newRV_inc((SV *)av);
for (i = 1; i <= imp_sth->n_ocols; i++)
{
EXEC SQL GET DESCRIPTOR :nm_obind VALUE :i
:collength = LENGTH;
av_store(av, i - 1, newSViv((IV)collength));
}
}
else if (KEY_MATCH(kl, key, ix_csrhold))
{
retsv = newSViv((IV)imp_sth->is_holdcursor);
}
else if (KEY_MATCH(kl, key, ix_scrlcsr))
{
retsv = newSViv((IV)imp_sth->is_scrollcursor);
}
else if (KEY_MATCH(kl, key, ix_instcsr))
{
retsv = newSViv((IV)imp_sth->is_insertcursor);
}
else
{
dbd_ix_exit(function);
return Nullsv;
}
dbd_ix_exit(function);
if (av != 0)
sv_2mortal((SV *)av);
return sv_2mortal(retsv);
}
( run in 0.629 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )