DBD-Firebird
view release on metacpan or search on metacpan
if (on) {
if (imp_dbh->ib_charset && strEQ(imp_dbh->ib_charset, "UTF8")) {
imp_dbh->ib_enable_utf8 = TRUE;
return TRUE;
}
else croak( "ib_enable_utf8 requires ib_charset=UTF8 in DSN (you gave %s)", imp_dbh->ib_charset ? imp_dbh->ib_charset : "<nothing>" );
}
else {
imp_dbh->ib_enable_utf8 = FALSE;
return TRUE;
}
}
else if ((kl==11) && strEQ(key, "ib_time_all"))
set_frmts = 1;
/**************************************************************************/
if (set_frmts || ((kl==13) && strEQ(key, "ib_dateformat")))
{
IB_SQLtimeformat(dbh, imp_dbh->dateformat, valuesv);
if (!set_frmts) return TRUE;
}
if (set_frmts || ((kl==13) && strEQ(key, "ib_timeformat")))
{
IB_SQLtimeformat(dbh, imp_dbh->timeformat, valuesv);
if (!set_frmts) return TRUE;
}
if (set_frmts || ((kl==18) && strEQ(key, "ib_timestampformat")))
{
IB_SQLtimeformat(dbh, imp_dbh->timestampformat, valuesv);
if (!set_frmts) return TRUE;
}
/**************************************************************************/
if (set_frmts) return TRUE;
else return FALSE; /* not handled */
}
SV *dbd_db_FETCH_attrib(SV *dbh, imp_dbh_t *imp_dbh, SV *keysv)
{
STRLEN kl;
char * key = SvPV(keysv, kl);
SV * result = NULL;
DBI_TRACE_imp_xxh(imp_dbh, 2, (DBIc_LOGPIO(imp_dbh), "dbd_db_FETCH - %s\n", key));
if ((kl==10) && strEQ(key, "AutoCommit"))
result = boolSV(DBIc_has(imp_dbh, DBIcf_AutoCommit));
else if ((kl==13) && strEQ(key, "ib_softcommit"))
result = boolSV(imp_dbh->soft_commit);
else if ((kl==14) && strEQ(key, "ib_enable_utf8"))
result = boolSV(imp_dbh->ib_enable_utf8);
else if ((kl==13) && strEQ(key, "ib_dateformat"))
result = newSVpvn(imp_dbh->dateformat, strlen(imp_dbh->dateformat));
else if ((kl==13) && strEQ(key, "ib_timeformat"))
result = newSVpvn(imp_dbh->timeformat, strlen(imp_dbh->timeformat));
else if ((kl==18) && strEQ(key, "ib_timestampformat"))
result = newSVpvn(imp_dbh->timestampformat,
strlen(imp_dbh->timestampformat));
else if ((kl==11) && strEQ(key, "ib_embedded"))
#ifdef EMBEDDED
result = &PL_sv_yes;
#else
result = &PL_sv_no;
#endif
if (result == NULL)
return Nullsv;
else
{
if ((result == &PL_sv_yes) || (result == &PL_sv_no))
return result;
else
return sv_2mortal(result);
}
}
void dbd_preparse(SV *sth, imp_sth_t *imp_sth, char *statement)
{
ISC_STATUS status[ISC_STATUS_LENGTH];
DBI_TRACE_imp_xxh(imp_sth, 2, (DBIc_LOGPIO(imp_sth), "Enter dbd_preparse\n"));
isc_dsql_describe_bind(status, &(imp_sth->stmt), 1, imp_sth->in_sqlda);
if (ib_error_check(sth, status))
{
ib_cleanup_st_prepare(imp_sth);
return;
}
/* realloc in_sqlda and rebind if not enough XSQLVAR for bind params */
if (imp_sth->in_sqlda->sqld > imp_sth->in_sqlda->sqln)
{
IB_alloc_sqlda(imp_sth->in_sqlda, imp_sth->in_sqlda->sqld);
if (imp_sth->in_sqlda == NULL)
{
do_error(sth, 1, "Fail to reallocate in_slqda");
ib_cleanup_st_prepare(imp_sth);
return;
}
else
{
isc_dsql_describe_bind(status, &(imp_sth->stmt), 1, imp_sth->in_sqlda);
if (ib_error_check(sth, status))
{
ib_cleanup_st_prepare(imp_sth);
return;
}
}
}
DBI_TRACE_imp_xxh(imp_sth, 3, (DBIc_LOGPIO(imp_sth), "dbd_preparse: describe_bind passed.\n"
"dbd_preparse: exit; in_sqlda: sqld: %d, sqln: %d.\n",
imp_sth->in_sqlda->sqld, imp_sth->in_sqlda->sqln));
DBIc_NUM_PARAMS(imp_sth) = imp_sth->in_sqlda->sqld;
}
( run in 1.129 second using v1.01-cache-2.11-cpan-71847e10f99 )