#include

#include

#include

#include

#include

#include

#include

#define SELECT_QUERY"SELECT host_id,geturl(desc) FROM host_table;

void host2url_func( sqlite3_context * ctx,int argc,sqlite3_value ** argv )

{

if ( argc != 1 ) return;

char * httpurl = NULL;

switch( sqlite3_value_type( argv[ 0 ] ) )

{

case sqlITE_NULL:

{

sqlite3_result_text( ctx,"NULL",4,sqlITE_STATIC );

break;

}

case sqlITE_TEXT:

{

httpurl = ( char * ) malloc( strlen( sqlite3_value_text( argv[0] ) ) + 8 );

if ( httpurl == 0 ) return;

sprintf( httpurl,"http://%s",sqlite3_value_text( argv[ 0 ] ) );

sqlite3_result_text( ctx,httpurl,strlen( httpurl ),sqlITE_TRANSIENT );

free( httpurl );

httpurl = NULL;

break;

}

default:

sqlite3_result_text( ctx,"about:blank",11,sqlITE_STATIC );

}

}

static int callback(void *NotUsed,char **argv,char **azColName)

{

int i;

for(i=0; i

printf("%s = %s/n",azColName[i],argv[i] ? argv[i] : "NULL");

}

printf("/n");

return 0;

}

int main( int argc,char **argv )

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

if( argc!=3 )

{

fprintf(stderr,"Usage: %s DATABASE sql-STATEMENT/n",argv[0]);

exit(1);

}

rc = sqlite3_open(argv[1],&db);

if( rc ){

fprintf(stderr,"Can't open database: %s/n",sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

}

sqlite3_create_function( db,"geturl",1,sqlITE_ANY,NULL,host2url_func,NULL );

rc = sqlite3_exec(db,argv[2],callback,&zErrMsg);

if( rc!=sqlITE_OK ){

fprintf(stderr,"sql error: %s/n",zErrMsg);

}

sqlite3_close(db);

return 0;

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐