PAB3-DB-Driver-Sqlite3
view release on metacpan or search on metacpan
# * fetch_names( resid )
# ******************************************************************************/
void
fetch_names( resid )
void * resid;
PREINIT:
dMY_CXT;
MY_RES *res;
DWORD i;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
break;
case MY_TYPE_STMT:
res = ((MY_STMT *) resid)->res;
if( res == NULL ) goto exit;
break;
default:
goto exit;
fetch_field( resid, offset = -1 )
void * resid;
long offset;
PREINIT:
dMY_CXT;
MY_RES *res;
MY_STMT *stmt;
DWORD i;
const char *table, *catalog, *dt, *cs;
int nn, pk, ai, r;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
stmt = res->stmt;
break;
case MY_TYPE_STMT:
stmt = (MY_STMT *) resid;
res = stmt->res;
if( res == NULL ) goto exit;
break;
# ******************************************************************************/
void
fetch_row( resid )
void * resid;
PREINIT:
dMY_CXT;
MY_RES *res;
MY_ROWS *row;
unsigned long i;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
break;
case MY_TYPE_STMT:
res = ((MY_STMT *) resid)->res;
if( res == NULL ) goto exit;
break;
default:
goto exit;
# ******************************************************************************/
void
fetch_col( resid )
void * resid;
PREINIT:
dMY_CXT;
MY_RES *res;
MY_ROWS *row;
unsigned long i;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
break;
case MY_TYPE_STMT:
res = ((MY_STMT *) resid)->res;
if( res == NULL ) goto exit;
break;
default:
goto exit;
# ******************************************************************************/
void
fetch_hash( resid )
void * resid;
PREINIT:
dMY_CXT;
MY_RES *res;
MY_ROWS *row;
DWORD i;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
break;
case MY_TYPE_STMT:
res = ((MY_STMT *) resid)->res;
if( res == NULL ) goto exit;
break;
default:
goto exit;
# ******************************************************************************/
void
fetch_lengths( resid )
void * resid;
PREINIT:
dMY_CXT;
MY_RES *res;
MY_ROWS *row;
DWORD i;
PPCODE:
switch( my_stmt_or_res( &MY_CXT, resid ) ) {
case MY_TYPE_RES:
res = (MY_RES *) resid;
break;
case MY_TYPE_STMT:
res = ((MY_STMT *) resid)->res;
if( res == NULL ) goto exit;
break;
default:
goto exit;
# ******************************************************************************/
void
show_catalogs( linkid = 0, wild = NULL )
void * linkid;
const char *wild;
PREINIT:
dMY_CXT;
int r;
MY_CON *con;
PPCODE:
int _intcb( void *arg, int columns, char **data, char **names ) {
if( columns > 1 )
XPUSHs( sv_2mortal( newSVpvn( data[1], strlen( data[1] ) ) ) );
return 0;
}
con = (MY_CON *) my_verify_linkid( &MY_CXT, linkid );
if( con == NULL ) goto error;
r = sqlite3_exec( con->con, "PRAGMA database_list", &_intcb, 0, 0 );
show_tables( linkid = 0, schema = NULL, db = NULL, wild = NULL )
void * linkid;
const char *db;
const char *schema;
const char *wild;
PREINIT:
dMY_CXT;
MY_CON *con;
AV *av;
char sql[256], *p1;
PPCODE:
// TABLE, SCHEMA, DB, TYPE
int _intcb( void *arg, int columns, char **data, char **names ) {
/*
int i;
for( i = 0; i < columns; i ++ ) {
printf( "%s => %s ", names[i], data[i] );
}
printf( "\n" );
*/
dMY_CXT;
void *linkid = NULL;
const char *table;
const char *schema = NULL;
const char *db = NULL;
const char *wild = NULL;
int itemp = 0;
MY_CON *con;
AV *av;
char *sql, *p1;
PPCODE:
// COLUMN, NULLABLE, DEFAULT, IS_PRIMARY, IS_UNIQUE, TYPENAME, AUTOINC
int _intcb( void *arg, int columns, char **data, char **names ) {
// cid|name|type|notnull|dflt_value|pk
int pk;
av = (AV *) sv_2mortal( (SV *) newAV() );
av_push( av, newSVpvn( data[1], strlen( data[1] ) ) );
av_push( av, newSViv( data[3][0] == '0' ) );
if( data[4] )
av_push( av, newSVpvn( data[4], strlen( data[4] ) ) );
PREINIT:
dMY_CXT;
void *linkid = NULL;
const char *table;
const char *schema = NULL;
const char *db = NULL;
int itemp = 0;
MY_CON *con;
AV *av;
char *sql, **il_data, *p1;
PPCODE:
// NAME, COLUMN, TYPE
int _intcb_ii( void *arg, int columns, char **data, char **names ) {
// seqno|cid|name
if( columns < 3 ) return 0;
av = (AV *) sv_2mortal( (SV *) newAV() );
av_push( av, newSVpvn( il_data[1], strlen( il_data[1] ) ) );
av_push( av, newSVpvn( data[2], strlen( data[2] ) ) );
av_push( av, newSViv( il_data[2][0] == '1' ? 2 : 3 ) );
( run in 1.117 second using v1.01-cache-2.11-cpan-5511b514fd6 )