@H_404_39@#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <malloc.h> #include <assert.h> #include <sqlite3.h> @H_404_39@#define SELECT_QUERY"SELECT host_id,geturl(desc) FROM host_table; @H_404_39@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 ); } } @H_404_39@static int callback(void *NotUsed,char **argv,char **azColName) { int i; for(i=0; i<argc; i++){ printf("%s = %s/n",azColName[i],argv[i] ? argv[i] : "NULL"); } printf("/n"); return 0; } @H_404_39@int main( int argc,char **argv ) { sqlite3 *db; char *zErrMsg = 0; int rc; @H_404_39@ 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); @H_404_39@ if( rc!=sqlITE_OK ){ fprintf(stderr,"sql error: %s/n",zErrMsg); } @H_404_39@ sqlite3_close(db); return 0; @H_404_39@} |
|