1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-08 14:48:32 -04:00

DBD-SQLite: switched from dTHX to pTHX_/aTHX_ where I could. I think #44884 is almost done except for the ones related to other tickets like #44871 (so we shouldn't close #44884 yet)

This commit is contained in:
Kenichi Ishigaki 2009-04-10 01:58:31 +00:00
parent 30599f51bc
commit 3d9bf5c1e2
3 changed files with 247 additions and 256 deletions

217
SQLite.xs
View file

@ -1,108 +1,109 @@
#define PERL_NO_GET_CONTEXT
#include "SQLiteXS.h"
#include "SQLiteXS.h"
DBISTATE_DECLARE;
DBISTATE_DECLARE;
MODULE = DBD::SQLite PACKAGE = DBD::SQLite::db
MODULE = DBD::SQLite PACKAGE = DBD::SQLite::db
PROTOTYPES: DISABLE
PROTOTYPES: DISABLE
BOOT:
sv_setpv(get_sv("DBD::SQLite::sqlite_version", TRUE|GV_ADDMULTI), SQLITE_VERSION); BOOT:
sv_setpv(get_sv("DBD::SQLite::sqlite_version", TRUE|GV_ADDMULTI), SQLITE_VERSION);
AV *
list_tables(dbh) AV *
SV *dbh list_tables(dbh)
CODE: SV *dbh
{ CODE:
RETVAL = newAV(); {
} RETVAL = newAV();
OUTPUT: }
RETVAL OUTPUT:
RETVAL
IV
last_insert_rowid(dbh) IV
SV *dbh last_insert_rowid(dbh)
CODE: SV *dbh
{ CODE:
D_imp_dbh(dbh); {
RETVAL = sqlite3_last_insert_rowid(imp_dbh->db); D_imp_dbh(dbh);
} RETVAL = sqlite3_last_insert_rowid(imp_dbh->db);
OUTPUT: }
RETVAL OUTPUT:
RETVAL
void
create_function(dbh, name, argc, func) void
SV *dbh create_function(dbh, name, argc, func)
char *name SV *dbh
int argc char *name
SV *func int argc
CODE: SV *func
{ CODE:
sqlite3_db_create_function( dbh, name, argc, func ); {
} sqlite3_db_create_function(aTHX_ dbh, name, argc, func );
}
void
enable_load_extension(dbh, onoff) void
SV *dbh enable_load_extension(dbh, onoff)
int onoff SV *dbh
CODE: int onoff
{ CODE:
sqlite3_db_enable_load_extension( dbh, onoff ); {
} sqlite3_db_enable_load_extension(aTHX_ dbh, onoff );
}
void
create_aggregate(dbh, name, argc, aggr) void
SV *dbh create_aggregate(dbh, name, argc, aggr)
char *name SV *dbh
int argc char *name
SV *aggr int argc
CODE: SV *aggr
{ CODE:
sqlite3_db_create_aggregate( dbh, name, argc, aggr ); {
} sqlite3_db_create_aggregate(aTHX_ dbh, name, argc, aggr );
}
void
create_collation(dbh, name, func) void
SV *dbh create_collation(dbh, name, func)
char *name SV *dbh
SV *func char *name
CODE: SV *func
{ CODE:
sqlite3_db_create_collation( dbh, name, func ); {
} sqlite3_db_create_collation(aTHX_ dbh, name, func );
}
void
progress_handler(dbh, n_opcodes, handler) void
SV *dbh progress_handler(dbh, n_opcodes, handler)
int n_opcodes SV *dbh
SV *handler int n_opcodes
CODE: SV *handler
{ CODE:
sqlite3_db_progress_handler( dbh, n_opcodes, handler ); {
} sqlite3_db_progress_handler(aTHX_ dbh, n_opcodes, handler );
}
int
busy_timeout(dbh, timeout=0) int
SV *dbh busy_timeout(dbh, timeout=0)
int timeout SV *dbh
CODE: int timeout
RETVAL = dbd_set_sqlite3_busy_timeout( dbh, timeout ); CODE:
OUTPUT: RETVAL = dbd_set_sqlite3_busy_timeout(aTHX_ dbh, timeout );
RETVAL OUTPUT:
RETVAL
MODULE = DBD::SQLite PACKAGE = DBD::SQLite::st
MODULE = DBD::SQLite PACKAGE = DBD::SQLite::st
PROTOTYPES: DISABLE
PROTOTYPES: DISABLE
void
reset(sth) void
SV *sth reset(sth)
CODE: SV *sth
{ CODE:
sqlite_st_reset(sth); {
} sqlite_st_reset(aTHX_ sth);
}
MODULE = DBD::SQLite PACKAGE = DBD::SQLite
MODULE = DBD::SQLite PACKAGE = DBD::SQLite
INCLUDE: SQLite.xsi
INCLUDE: SQLite.xsi

View file

@ -18,7 +18,9 @@ DBISTATE_DECLARE;
#define call_sv(x,y) perl_call_sv(x,y) #define call_sv(x,y) perl_call_sv(x,y)
#endif #endif
#define sqlite_error(h,xxh,rc,what) _sqlite_error(__FILE__, __LINE__, h, xxh, rc, what) #define sqlite_error(h,xxh,rc,what) _sqlite_error(aTHX_ __FILE__, __LINE__, h, xxh, rc, what)
/* XXX: is there any good way to use pTHX_/aTHX_ here like above? */
#if defined(__GNUC__) && (__GNUC__ > 2) #if defined(__GNUC__) && (__GNUC__ > 2)
# define sqlite_trace(h,xxh,level,fmt...) _sqlite_tracef(__FILE__, __LINE__, h, xxh, level, fmt) # define sqlite_trace(h,xxh,level,fmt...) _sqlite_tracef(__FILE__, __LINE__, h, xxh, level, fmt)
#else #else
@ -32,10 +34,8 @@ sqlite_init(dbistate_t *dbistate)
} }
static void static void
_sqlite_error(char *file, int line, SV *h, imp_xxh_t *imp_xxh, int rc, char *what) _sqlite_error(pTHX_ char *file, int line, SV *h, imp_xxh_t *imp_xxh, int rc, char *what)
{ {
dTHX;
DBIh_SET_ERR_CHAR(h, imp_xxh, Nullch, rc, what, Nullch, Nullch); DBIh_SET_ERR_CHAR(h, imp_xxh, Nullch, rc, what, Nullch, Nullch);
/* #7753: DBD::SQLite error shouldn't include extraneous info */ /* #7753: DBD::SQLite error shouldn't include extraneous info */
@ -51,7 +51,7 @@ static void
_sqlite_tracef(char *file, int line, SV *h, imp_xxh_t *imp_xxh, int level, const char *fmt, ...) _sqlite_tracef(char *file, int line, SV *h, imp_xxh_t *imp_xxh, int level, const char *fmt, ...)
{ {
dTHX; dTHX;
va_list ap; va_list ap;
if ( DBIc_TRACE_LEVEL(imp_xxh) >= level ) { if ( DBIc_TRACE_LEVEL(imp_xxh) >= level ) {
char format[8192]; char format[8192];
@ -66,7 +66,7 @@ static void
_sqlite_tracef_noline(SV *h, imp_xxh_t *imp_xxh, int level, const char *fmt, ...) _sqlite_tracef_noline(SV *h, imp_xxh_t *imp_xxh, int level, const char *fmt, ...)
{ {
dTHX; dTHX;
va_list ap; va_list ap;
if ( DBIc_TRACE_LEVEL(imp_xxh) >= level ) { if ( DBIc_TRACE_LEVEL(imp_xxh) >= level ) {
char format[8192]; char format[8192];
@ -140,10 +140,8 @@ sqlite_db_login(SV *dbh, imp_dbh_t *imp_dbh, char *dbname, char *user, char *pas
} }
int int
dbd_set_sqlite3_busy_timeout ( SV *dbh, int timeout ) dbd_set_sqlite3_busy_timeout (pTHX_ SV *dbh, int timeout )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
if (timeout) { if (timeout) {
imp_dbh->timeout = timeout; imp_dbh->timeout = timeout;
@ -330,9 +328,8 @@ sqlite_quote(imp_dbh_t *imp_dbh, SV *val)
} }
void void
sqlite_st_reset (SV *sth) sqlite_st_reset (pTHX_ SV *sth)
{ {
dTHX;
D_imp_sth(sth); D_imp_sth(sth);
if (DBIc_IMPSET(imp_sth)) if (DBIc_IMPSET(imp_sth))
sqlite3_reset(imp_sth->stmt); sqlite3_reset(imp_sth->stmt);
@ -848,9 +845,8 @@ sqlite_st_FETCH_attrib (SV *sth, imp_sth_t *imp_sth, SV *keysv)
} }
static void static void
sqlite_db_set_result(sqlite3_context *context, SV *result, int is_error ) sqlite_db_set_result(pTHX_ sqlite3_context *context, SV *result, int is_error )
{ {
dTHX;
STRLEN len; STRLEN len;
char *s; char *s;
@ -929,19 +925,19 @@ sqlite_db_func_dispatcher(int is_unicode, sqlite3_context *context, int argc, sq
/* Check for an error */ /* Check for an error */
if (SvTRUE(ERRSV) ) { if (SvTRUE(ERRSV) ) {
sqlite_db_set_result( context, ERRSV, 1); sqlite_db_set_result(aTHX_ context, ERRSV, 1);
POPs; POPs;
} else if ( count != 1 ) { } else if ( count != 1 ) {
SV *err = sv_2mortal(newSVpvf( "function should return 1 argument, got %d", SV *err = sv_2mortal(newSVpvf( "function should return 1 argument, got %d",
count )); count ));
sqlite_db_set_result( context, err, 1); sqlite_db_set_result(aTHX_ context, err, 1);
/* Clear the stack */ /* Clear the stack */
for ( i=0; i < count; i++ ) { for ( i=0; i < count; i++ ) {
POPs; POPs;
} }
} else { } else {
sqlite_db_set_result( context, POPs, 0 ); sqlite_db_set_result(aTHX_ context, POPs, 0 );
} }
PUTBACK; PUTBACK;
@ -964,9 +960,8 @@ sqlite_db_func_dispatcher_no_unicode(sqlite3_context *context, int argc, sqlite3
} }
void void
sqlite3_db_create_function( SV *dbh, const char *name, int argc, SV *func ) sqlite3_db_create_function(pTHX_ SV *dbh, const char *name, int argc, SV *func )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
int retval; int retval;
@ -989,9 +984,8 @@ sqlite3_db_create_function( SV *dbh, const char *name, int argc, SV *func )
} }
void void
sqlite3_db_enable_load_extension( SV *dbh, int onoff ) sqlite3_db_enable_load_extension(pTHX_ SV *dbh, int onoff )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
int retval; int retval;
@ -1012,9 +1006,8 @@ struct aggrInfo {
}; };
static void static void
sqlite_db_aggr_new_dispatcher( sqlite3_context *context, aggrInfo *aggr_info ) sqlite_db_aggr_new_dispatcher(pTHX_ sqlite3_context *context, aggrInfo *aggr_info )
{ {
dTHX;
dSP; dSP;
SV *pkg = NULL; SV *pkg = NULL;
int count = 0; int count = 0;
@ -1086,7 +1079,7 @@ sqlite_db_aggr_step_dispatcher (sqlite3_context *context,
/* initialize on first step */ /* initialize on first step */
if ( !aggr->inited ) { if ( !aggr->inited ) {
sqlite_db_aggr_new_dispatcher( context, aggr ); sqlite_db_aggr_new_dispatcher(aTHX_ context, aggr );
} }
if ( aggr->err || !aggr->aggr_inst ) if ( aggr->err || !aggr->aggr_inst )
@ -1153,7 +1146,7 @@ sqlite_db_aggr_finalize_dispatcher( sqlite3_context *context )
aggr = &myAggr; aggr = &myAggr;
aggr->aggr_inst = NULL; aggr->aggr_inst = NULL;
aggr->err = NULL; aggr->err = NULL;
sqlite_db_aggr_new_dispatcher (context, aggr); sqlite_db_aggr_new_dispatcher(aTHX_ context, aggr);
} }
if ( ! aggr->err && aggr->aggr_inst ) { if ( ! aggr->err && aggr->aggr_inst ) {
@ -1177,7 +1170,7 @@ sqlite_db_aggr_finalize_dispatcher( sqlite3_context *context )
POPs; POPs;
} }
} else { } else {
sqlite_db_set_result( context, POPs, 0 ); sqlite_db_set_result(aTHX_ context, POPs, 0 );
} }
PUTBACK; PUTBACK;
} }
@ -1186,7 +1179,7 @@ sqlite_db_aggr_finalize_dispatcher( sqlite3_context *context )
warn( "DBD::SQLite: error in aggregator cannot be reported to SQLite: %s", warn( "DBD::SQLite: error in aggregator cannot be reported to SQLite: %s",
SvPV_nolen( aggr->err ) ); SvPV_nolen( aggr->err ) );
/* sqlite_db_set_result( context, aggr->err, 1 ); */ /* sqlite_db_set_result(aTHX_ context, aggr->err, 1 ); */
SvREFCNT_dec( aggr->err ); SvREFCNT_dec( aggr->err );
aggr->err = NULL; aggr->err = NULL;
} }
@ -1201,9 +1194,8 @@ sqlite_db_aggr_finalize_dispatcher( sqlite3_context *context )
} }
void void
sqlite3_db_create_aggregate( SV *dbh, const char *name, int argc, SV *aggr_pkg ) sqlite3_db_create_aggregate(pTHX_ SV *dbh, const char *name, int argc, SV *aggr_pkg )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
int retval; int retval;
@ -1289,9 +1281,8 @@ int sqlite_db_collation_dispatcher_utf8(
void void
sqlite3_db_create_collation( SV *dbh, const char *name, SV *func ) sqlite3_db_create_collation(pTHX_ SV *dbh, const char *name, SV *func )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
int rv, rv2; int rv, rv2;
void *aa = "aa"; void *aa = "aa";
@ -1351,9 +1342,8 @@ int sqlite_db_progress_handler_dispatcher( void *handler )
void void
sqlite3_db_progress_handler( SV *dbh, int n_opcodes, SV *handler ) sqlite3_db_progress_handler(pTHX_ SV *dbh, int n_opcodes, SV *handler )
{ {
dTHX;
D_imp_dbh(dbh); D_imp_dbh(dbh);
if (handler == &PL_sv_undef) { if (handler == &PL_sv_undef) {

232
dbdimp.h
View file

@ -1,116 +1,116 @@
#ifndef _DBDIMP_H #ifndef _DBDIMP_H
#define _DBDIMP_H 1 #define _DBDIMP_H 1
#include "SQLiteXS.h" #include "SQLiteXS.h"
#include "sqlite3.h" #include "sqlite3.h"
/* 30 second timeout by default */ /* 30 second timeout by default */
#define SQL_TIMEOUT 30000 #define SQL_TIMEOUT 30000
/* Driver Handle */ /* Driver Handle */
struct imp_drh_st { struct imp_drh_st {
dbih_drc_t com; dbih_drc_t com;
/* sqlite specific bits */ /* sqlite specific bits */
}; };
/* Database Handle */ /* Database Handle */
struct imp_dbh_st { struct imp_dbh_st {
dbih_dbc_t com; dbih_dbc_t com;
/* sqlite specific bits */ /* sqlite specific bits */
sqlite3 *db; sqlite3 *db;
bool in_tran; bool in_tran;
bool unicode; bool unicode;
bool handle_binary_nulls; bool handle_binary_nulls;
int timeout; int timeout;
AV *functions; AV *functions;
AV *aggregates; AV *aggregates;
}; };
/* Statement Handle */ /* Statement Handle */
struct imp_sth_st { struct imp_sth_st {
dbih_stc_t com; dbih_stc_t com;
/* sqlite specific bits */ /* sqlite specific bits */
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
/* /*
char **results; char **results;
char **coldata; char **coldata;
*/ */
int retval; int retval;
int nrow; int nrow;
char *statement; char *statement;
AV *params; AV *params;
AV *col_types; AV *col_types;
}; };
#define dbd_init sqlite_init #define dbd_init sqlite_init
#define dbd_discon_all sqlite_discon_all #define dbd_discon_all sqlite_discon_all
#define dbd_db_login sqlite_db_login #define dbd_db_login sqlite_db_login
#define dbd_db_do sqlite_db_do #define dbd_db_do sqlite_db_do
#define dbd_db_commit sqlite_db_commit #define dbd_db_commit sqlite_db_commit
#define dbd_db_rollback sqlite_db_rollback #define dbd_db_rollback sqlite_db_rollback
#define dbd_db_disconnect sqlite_db_disconnect #define dbd_db_disconnect sqlite_db_disconnect
#define dbd_db_destroy sqlite_db_destroy #define dbd_db_destroy sqlite_db_destroy
#define dbd_db_STORE_attrib sqlite_db_STORE_attrib #define dbd_db_STORE_attrib sqlite_db_STORE_attrib
#define dbd_db_FETCH_attrib sqlite_db_FETCH_attrib #define dbd_db_FETCH_attrib sqlite_db_FETCH_attrib
#define dbd_db_STORE_attrib_k sqlite_db_STORE_attrib_k #define dbd_db_STORE_attrib_k sqlite_db_STORE_attrib_k
#define dbd_db_FETCH_attrib_k sqlite_db_FETCH_attrib_k #define dbd_db_FETCH_attrib_k sqlite_db_FETCH_attrib_k
#define dbd_db_last_insert_id sqlite_db_last_insert_id #define dbd_db_last_insert_id sqlite_db_last_insert_id
#define dbd_st_prepare sqlite_st_prepare #define dbd_st_prepare sqlite_st_prepare
#define dbd_st_rows sqlite_st_rows #define dbd_st_rows sqlite_st_rows
#define dbd_st_execute sqlite_st_execute #define dbd_st_execute sqlite_st_execute
#define dbd_st_fetch sqlite_st_fetch #define dbd_st_fetch sqlite_st_fetch
#define dbd_st_finish3 sqlite_st_finish3 #define dbd_st_finish3 sqlite_st_finish3
#define dbd_st_finish sqlite_st_finish #define dbd_st_finish sqlite_st_finish
#define dbd_st_destroy sqlite_st_destroy #define dbd_st_destroy sqlite_st_destroy
#define dbd_st_blob_read sqlite_st_blob_read #define dbd_st_blob_read sqlite_st_blob_read
#define dbd_st_STORE_attrib sqlite_st_STORE_attrib #define dbd_st_STORE_attrib sqlite_st_STORE_attrib
#define dbd_st_FETCH_attrib sqlite_st_FETCH_attrib #define dbd_st_FETCH_attrib sqlite_st_FETCH_attrib
#define dbd_st_STORE_attrib_k sqlite_st_STORE_attrib_k #define dbd_st_STORE_attrib_k sqlite_st_STORE_attrib_k
#define dbd_st_FETCH_attrib_k sqlite_st_FETCH_attrib_k #define dbd_st_FETCH_attrib_k sqlite_st_FETCH_attrib_k
#define dbd_bind_ph sqlite_bind_ph #define dbd_bind_ph sqlite_bind_ph
#define dbd_st_bind_col sqlite_bind_col #define dbd_st_bind_col sqlite_bind_col
void sqlite3_db_create_function(SV *dbh, const char *name, int argc, SV *func); void sqlite3_db_create_function(pTHX_ SV *dbh, const char *name, int argc, SV *func);
void sqlite3_db_enable_load_extension(SV *dbh, int onoff); void sqlite3_db_enable_load_extension(pTHX_ SV *dbh, int onoff);
void sqlite3_db_create_aggregate( SV *dbh, const char *name, int argc, SV *aggr ); void sqlite3_db_create_aggregate(pTHX_ SV *dbh, const char *name, int argc, SV *aggr );
void sqlite3_db_create_collation(SV *dbh, const char *name, SV *func); void sqlite3_db_create_collation(pTHX_ SV *dbh, const char *name, SV *func);
void sqlite3_db_progress_handler(SV *dbh, int n_opcodes, SV *handler); void sqlite3_db_progress_handler(pTHX_ SV *dbh, int n_opcodes, SV *handler);
void sqlite_st_reset( SV *sth ); void sqlite_st_reset(pTHX_ SV *sth );
int sqlite_bind_col( SV *sth, imp_sth_t *imp_sth, SV *col, SV *ref, IV sql_type, SV *attribs ); int sqlite_bind_col( SV *sth, imp_sth_t *imp_sth, SV *col, SV *ref, IV sql_type, SV *attribs );
int dbd_set_sqlite3_busy_timeout ( SV *dbh, int timeout ); int dbd_set_sqlite3_busy_timeout (pTHX_ SV *dbh, int timeout );
#ifdef SvUTF8_on #ifdef SvUTF8_on
static SV * static SV *
newUTF8SVpv(char *s, STRLEN len) { newUTF8SVpv(char *s, STRLEN len) {
dTHX; dTHX;
register SV *sv; register SV *sv;
sv = newSVpv(s, len); sv = newSVpv(s, len);
SvUTF8_on(sv); SvUTF8_on(sv);
return sv; return sv;
} }
static SV * static SV *
newUTF8SVpvn(char *s, STRLEN len) { newUTF8SVpvn(char *s, STRLEN len) {
dTHX; dTHX;
register SV *sv; register SV *sv;
sv = newSV(0); sv = newSV(0);
sv_setpvn(sv, s, len); sv_setpvn(sv, s, len);
SvUTF8_on(sv); SvUTF8_on(sv);
return sv; return sv;
} }
#else /* #ifdef SvUTF8_on */ #else /* #ifdef SvUTF8_on */
#define newUTF8SVpv newSVpv #define newUTF8SVpv newSVpv
#define newUTF8SVpvn newSVpvn #define newUTF8SVpvn newSVpvn
#define SvUTF8_on(a) (a) #define SvUTF8_on(a) (a)
#define SvUTF8_off(a) (a) #define SvUTF8_off(a) (a)
#define sv_utf8_upgrade(a) (a) #define sv_utf8_upgrade(a) (a)
#endif /* #ifdef SvUTF8_on */ #endif /* #ifdef SvUTF8_on */
#endif /* #ifndef _DBDIMP_H */ #endif /* #ifndef _DBDIMP_H */