DBD-SQLite2
view release on metacpan or search on metacpan
#endif
#ifndef call_sv
#define call_sv(x,y) perl_call_sv(x,y)
#endif
#define sqlite2_error(h,xxh,rc,what) _sqlite2_error(__FILE__, __LINE__, h, xxh, rc, what)
void
sqlite2_init(dbistate_t *dbistate)
{
dTHR;
DBIS = dbistate;
}
static void
_sqlite2_error(char *file, int line, SV *h, imp_xxh_t *imp_xxh, int rc, char *what)
{
dTHR;
SV *errstr = DBIc_ERRSTR(imp_xxh);
sv_setiv(DBIc_ERR(imp_xxh), (IV)rc);
sv_setpv(errstr, what);
sv_catpvf(errstr, "(%d) at %s line %d", rc, file, line);
if (DBIS->debug >= 3) {
PerlIO_printf(DBILOGFP, "sqlite error %d recorded: %s at %s line %d\n",
rc, what, file, line);
}
}
int
sqlite2_db_login(SV *dbh, imp_dbh_t *imp_dbh, char *dbname, char *user, char *pass)
{
dTHR;
int retval;
char *errmsg = NULL;
if (DBIS->debug >= 3) {
PerlIO_printf(DBILOGFP, " login '%s' (version %s, encoding %s)\n",
dbname, sqlite_version, sqlite_encoding);
}
if ((imp_dbh->db = sqlite_open(dbname, 0, &errmsg)) == NULL) {
sqlite2_error(dbh, (imp_xxh_t*)imp_dbh, 1, errmsg);
sqlite_freemem(errmsg);
return FALSE;
}
DBIc_IMPSET_on(imp_dbh);
imp_dbh->in_tran = FALSE;
imp_dbh->no_utf8_flag = FALSE;
imp_dbh->functions = newAV();
imp_dbh->aggregates = newAV();
imp_dbh->timeout = SQL_TIMEOUT;
imp_dbh->handle_binary_nulls = FALSE;
sqlite_busy_timeout(imp_dbh->db, SQL_TIMEOUT);
if ((retval = sqlite_exec(imp_dbh->db, "PRAGMA empty_result_callbacks = ON",
NULL, NULL, &errmsg)
!= SQLITE_OK))
{
/* warn("failed to set pragma: %s\n", errmsg); */
sqlite2_error(dbh, (imp_xxh_t*)imp_dbh, retval, errmsg);
sqlite_freemem(errmsg);
return FALSE;
}
if ((retval = sqlite_exec(imp_dbh->db, "PRAGMA show_datatypes = ON",
NULL, NULL, &errmsg)
!= SQLITE_OK))
{
/* warn("failed to set pragma: %s\n", errmsg); */
sqlite2_error(dbh, (imp_xxh_t*)imp_dbh, retval, errmsg);
sqlite_freemem(errmsg);
return FALSE;
}
DBIc_ACTIVE_on(imp_dbh);
return TRUE;
}
int
sqlite2_busy_timeout ( SV *dbh, int timeout )
{
D_imp_dbh(dbh);
if (timeout) {
imp_dbh->timeout = timeout;
sqlite_busy_timeout(imp_dbh->db, timeout);
}
return imp_dbh->timeout;
}
int
sqlite2_db_disconnect (SV *dbh, imp_dbh_t *imp_dbh)
{
dTHR;
DBIc_ACTIVE_off(imp_dbh);
if (DBIc_is(imp_dbh, DBIcf_AutoCommit) == FALSE) {
sqlite2_db_rollback(dbh, imp_dbh);
}
sqlite_close(imp_dbh->db);
imp_dbh->db = NULL;
av_undef(imp_dbh->functions);
imp_dbh->functions = (AV *)NULL;
av_undef(imp_dbh->aggregates);
imp_dbh->aggregates = (AV *)NULL;
return TRUE;
}
void
sqlite2_db_destroy (SV *dbh, imp_dbh_t *imp_dbh)
{
( run in 0.950 second using v1.01-cache-2.11-cpan-140bd7fdf52 )