1*1e397f8fSdrh /* 2*1e397f8fSdrh ** 2006 June 7 3*1e397f8fSdrh ** 4*1e397f8fSdrh ** The author disclaims copyright to this source code. In place of 5*1e397f8fSdrh ** a legal notice, here is a blessing: 6*1e397f8fSdrh ** 7*1e397f8fSdrh ** May you do good and not evil. 8*1e397f8fSdrh ** May you find forgiveness for yourself and forgive others. 9*1e397f8fSdrh ** May you share freely, never taking more than you give. 10*1e397f8fSdrh ** 11*1e397f8fSdrh ************************************************************************* 12*1e397f8fSdrh ** This header file defines the SQLite interface for use by 13*1e397f8fSdrh ** shared libraries that want to be imported as extensions into 14*1e397f8fSdrh ** an SQLite instance. Shared libraries that intend to be loaded 15*1e397f8fSdrh ** as extensions by SQLite should #include this file instead of 16*1e397f8fSdrh ** sqlite3.h. 17*1e397f8fSdrh ** 18*1e397f8fSdrh ** @(#) $Id: sqlite3ext.h,v 1.1 2006/06/08 15:28:44 drh Exp $ 19*1e397f8fSdrh */ 20*1e397f8fSdrh #ifndef _SQLITE3EXT_H_ 21*1e397f8fSdrh #define _SQLITE3EXT_H_ 22*1e397f8fSdrh #include <sqlite3.h> 23*1e397f8fSdrh 24*1e397f8fSdrh typedef struct sqlite3_api_routines sqlite3_api_routines; 25*1e397f8fSdrh 26*1e397f8fSdrh /* 27*1e397f8fSdrh ** The following structure hold pointers to all of the SQLite API 28*1e397f8fSdrh ** routines. 29*1e397f8fSdrh */ 30*1e397f8fSdrh struct sqlite3_api_routines { 31*1e397f8fSdrh void * (*aggregate_context)(sqlite3_context*,int nBytes); 32*1e397f8fSdrh int (*aggregate_count)(sqlite3_context*); 33*1e397f8fSdrh int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)); 34*1e397f8fSdrh int (*bind_double)(sqlite3_stmt*,int,double); 35*1e397f8fSdrh int (*bind_int)(sqlite3_stmt*,int,int); 36*1e397f8fSdrh int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64); 37*1e397f8fSdrh int (*bind_null)(sqlite3_stmt*,int); 38*1e397f8fSdrh int (*bind_parameter_count)(sqlite3_stmt*); 39*1e397f8fSdrh int (*bind_parameter_index)(sqlite3_stmt*,const char*zName); 40*1e397f8fSdrh const char * (*bind_parameter_name)(sqlite3_stmt*,int); 41*1e397f8fSdrh int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*)); 42*1e397f8fSdrh int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*)); 43*1e397f8fSdrh int (*busy_handler)(sqlite3*,int(*)(void*,int),void*); 44*1e397f8fSdrh int (*busy_timeout)(sqlite3*,int ms); 45*1e397f8fSdrh int (*changes)(sqlite3*); 46*1e397f8fSdrh int (*close)(sqlite3*); 47*1e397f8fSdrh int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*)); 48*1e397f8fSdrh int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*)); 49*1e397f8fSdrh const void * (*column_blob)(sqlite3_stmt*,int iCol); 50*1e397f8fSdrh int (*column_bytes)(sqlite3_stmt*,int iCol); 51*1e397f8fSdrh int (*column_bytes16)(sqlite3_stmt*,int iCol); 52*1e397f8fSdrh int (*column_count)(sqlite3_stmt*pStmt); 53*1e397f8fSdrh const char * (*column_database_name)(sqlite3_stmt*,int); 54*1e397f8fSdrh const void * (*column_database_name16)(sqlite3_stmt*,int); 55*1e397f8fSdrh const char * (*column_decltype)(sqlite3_stmt*,int i); 56*1e397f8fSdrh const void * (*column_decltype16)(sqlite3_stmt*,int); 57*1e397f8fSdrh double (*column_double)(sqlite3_stmt*,int iCol); 58*1e397f8fSdrh int (*column_int)(sqlite3_stmt*,int iCol); 59*1e397f8fSdrh sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol); 60*1e397f8fSdrh const char * (*column_name)(sqlite3_stmt*,int); 61*1e397f8fSdrh const void * (*column_name16)(sqlite3_stmt*,int); 62*1e397f8fSdrh const char * (*column_origin_name)(sqlite3_stmt*,int); 63*1e397f8fSdrh const void * (*column_origin_name16)(sqlite3_stmt*,int); 64*1e397f8fSdrh const char * (*column_table_name)(sqlite3_stmt*,int); 65*1e397f8fSdrh const void * (*column_table_name16)(sqlite3_stmt*,int); 66*1e397f8fSdrh const unsigned char * (*column_text)(sqlite3_stmt*,int iCol); 67*1e397f8fSdrh const void * (*column_text16)(sqlite3_stmt*,int iCol); 68*1e397f8fSdrh int (*column_type)(sqlite3_stmt*,int iCol); 69*1e397f8fSdrh void * (*commit_hook)(sqlite3*,int(*)(void*),void*); 70*1e397f8fSdrh int (*complete)(const char*sql); 71*1e397f8fSdrh int (*complete16)(const void*sql); 72*1e397f8fSdrh int (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*)); 73*1e397f8fSdrh int (*create_collation16)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*)); 74*1e397f8fSdrh int (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); 75*1e397f8fSdrh int (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); 76*1e397f8fSdrh int (*data_count)(sqlite3_stmt*pStmt); 77*1e397f8fSdrh sqlite3 * (*db_handle)(sqlite3_stmt*); 78*1e397f8fSdrh int (*enable_shared_cache)(int); 79*1e397f8fSdrh int (*errcode)(sqlite3*db); 80*1e397f8fSdrh const char * (*errmsg)(sqlite3*); 81*1e397f8fSdrh const void * (*errmsg16)(sqlite3*); 82*1e397f8fSdrh int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**); 83*1e397f8fSdrh int (*expired)(sqlite3_stmt*); 84*1e397f8fSdrh int (*finalize)(sqlite3_stmt*pStmt); 85*1e397f8fSdrh void (*free)(char*z); 86*1e397f8fSdrh void (*free_table)(char**result); 87*1e397f8fSdrh int (*get_autocommit)(sqlite3*); 88*1e397f8fSdrh void * (*get_auxdata)(sqlite3_context*,int); 89*1e397f8fSdrh int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**); 90*1e397f8fSdrh int (*global_recover)(void); 91*1e397f8fSdrh void (*interrupt)(sqlite3*); 92*1e397f8fSdrh sqlite_int64 (*last_insert_rowid)(sqlite3*); 93*1e397f8fSdrh const char * (*libversion)(void); 94*1e397f8fSdrh int (*libversion_number)(void); 95*1e397f8fSdrh char * (*mprintf)(const char*,...); 96*1e397f8fSdrh int (*open)(const char*,sqlite3**); 97*1e397f8fSdrh int (*open16)(const void*,sqlite3**); 98*1e397f8fSdrh int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); 99*1e397f8fSdrh int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); 100*1e397f8fSdrh void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*); 101*1e397f8fSdrh void (*progress_handler)(sqlite3*,int,int(*)(void*),void*); 102*1e397f8fSdrh int (*reset)(sqlite3_stmt*pStmt); 103*1e397f8fSdrh void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*)); 104*1e397f8fSdrh void (*result_double)(sqlite3_context*,double); 105*1e397f8fSdrh void (*result_error)(sqlite3_context*,const char*,int); 106*1e397f8fSdrh void (*result_error16)(sqlite3_context*,const void*,int); 107*1e397f8fSdrh void (*result_int)(sqlite3_context*,int); 108*1e397f8fSdrh void (*result_int64)(sqlite3_context*,sqlite_int64); 109*1e397f8fSdrh void (*result_null)(sqlite3_context*); 110*1e397f8fSdrh void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*)); 111*1e397f8fSdrh void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*)); 112*1e397f8fSdrh void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*)); 113*1e397f8fSdrh void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); 114*1e397f8fSdrh void (*result_value)(sqlite3_context*,sqlite3_value*); 115*1e397f8fSdrh void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); 116*1e397f8fSdrh int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*); 117*1e397f8fSdrh void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); 118*1e397f8fSdrh char * (*snprintf)(int,char*,const char*,...); 119*1e397f8fSdrh int (*step)(sqlite3_stmt*); 120*1e397f8fSdrh int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*); 121*1e397f8fSdrh void (*thread_cleanup)(void); 122*1e397f8fSdrh int (*total_changes)(sqlite3*); 123*1e397f8fSdrh void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); 124*1e397f8fSdrh int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); 125*1e397f8fSdrh void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*); 126*1e397f8fSdrh void * (*user_data)(sqlite3_context*); 127*1e397f8fSdrh const void * (*value_blob)(sqlite3_value*); 128*1e397f8fSdrh int (*value_bytes)(sqlite3_value*); 129*1e397f8fSdrh int (*value_bytes16)(sqlite3_value*); 130*1e397f8fSdrh double (*value_double)(sqlite3_value*); 131*1e397f8fSdrh int (*value_int)(sqlite3_value*); 132*1e397f8fSdrh sqlite_int64 (*value_int64)(sqlite3_value*); 133*1e397f8fSdrh int (*value_numeric_type)(sqlite3_value*); 134*1e397f8fSdrh const unsigned char * (*value_text)(sqlite3_value*); 135*1e397f8fSdrh const void * (*value_text16)(sqlite3_value*); 136*1e397f8fSdrh const void * (*value_text16be)(sqlite3_value*); 137*1e397f8fSdrh const void * (*value_text16le)(sqlite3_value*); 138*1e397f8fSdrh int (*value_type)(sqlite3_value*); 139*1e397f8fSdrh char * (*vmprintf)(const char*,va_list); 140*1e397f8fSdrh }; 141*1e397f8fSdrh 142*1e397f8fSdrh /* 143*1e397f8fSdrh ** The following macros redefine the API routines so that they are 144*1e397f8fSdrh ** redirected throught the global sqlite3_api structure. 145*1e397f8fSdrh ** 146*1e397f8fSdrh ** This header file is also used by the loadext.c source file 147*1e397f8fSdrh ** (part of the main SQLite library - not an extension) so that 148*1e397f8fSdrh ** it can get access to the sqlite3_api_routines structure 149*1e397f8fSdrh ** definition. But the main library does not want to redefine 150*1e397f8fSdrh ** the API. So the redefinition macros are only valid if the 151*1e397f8fSdrh ** SQLITE_CORE macros is undefined. 152*1e397f8fSdrh */ 153*1e397f8fSdrh #ifndef SQLITE_CORE 154*1e397f8fSdrh #define sqlite3_aggregate_context sqlite3_api->aggregate_context 155*1e397f8fSdrh #define sqlite3_aggregate_count sqlite3_api->aggregate_count 156*1e397f8fSdrh #define sqlite3_bind_blob sqlite3_api->bind_blob 157*1e397f8fSdrh #define sqlite3_bind_double sqlite3_api->bind_double 158*1e397f8fSdrh #define sqlite3_bind_int sqlite3_api->bind_int 159*1e397f8fSdrh #define sqlite3_bind_int64 sqlite3_api->bind_int64 160*1e397f8fSdrh #define sqlite3_bind_null sqlite3_api->bind_null 161*1e397f8fSdrh #define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count 162*1e397f8fSdrh #define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index 163*1e397f8fSdrh #define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name 164*1e397f8fSdrh #define sqlite3_bind_text sqlite3_api->bind_text 165*1e397f8fSdrh #define sqlite3_bind_text16 sqlite3_api->bind_text16 166*1e397f8fSdrh #define sqlite3_busy_handler sqlite3_api->busy_handler 167*1e397f8fSdrh #define sqlite3_busy_timeout sqlite3_api->busy_timeout 168*1e397f8fSdrh #define sqlite3_changes sqlite3_api->changes 169*1e397f8fSdrh #define sqlite3_close sqlite3_api->close 170*1e397f8fSdrh #define sqlite3_collation_needed sqlite3_api->collation_needed 171*1e397f8fSdrh #define sqlite3_collation_needed16 sqlite3_api->collation_needed16 172*1e397f8fSdrh #define sqlite3_column_blob sqlite3_api->column_blob 173*1e397f8fSdrh #define sqlite3_column_bytes sqlite3_api->column_bytes 174*1e397f8fSdrh #define sqlite3_column_bytes16 sqlite3_api->column_bytes16 175*1e397f8fSdrh #define sqlite3_column_count sqlite3_api->column_count 176*1e397f8fSdrh #define sqlite3_column_database_name sqlite3_api->column_database_name 177*1e397f8fSdrh #define sqlite3_column_database_name16 sqlite3_api->column_database_name16 178*1e397f8fSdrh #define sqlite3_column_decltype sqlite3_api->column_decltype 179*1e397f8fSdrh #define sqlite3_column_decltype16 sqlite3_api->column_decltype16 180*1e397f8fSdrh #define sqlite3_column_double sqlite3_api->column_double 181*1e397f8fSdrh #define sqlite3_column_int sqlite3_api->column_int 182*1e397f8fSdrh #define sqlite3_column_int64 sqlite3_api->column_int64 183*1e397f8fSdrh #define sqlite3_column_name sqlite3_api->column_name 184*1e397f8fSdrh #define sqlite3_column_name16 sqlite3_api->column_name16 185*1e397f8fSdrh #define sqlite3_column_origin_name sqlite3_api->column_origin_name 186*1e397f8fSdrh #define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16 187*1e397f8fSdrh #define sqlite3_column_table_name sqlite3_api->column_table_name 188*1e397f8fSdrh #define sqlite3_column_table_name16 sqlite3_api->column_table_name16 189*1e397f8fSdrh #define sqlite3_column_text sqlite3_api->column_text 190*1e397f8fSdrh #define sqlite3_column_text16 sqlite3_api->column_text16 191*1e397f8fSdrh #define sqlite3_column_type sqlite3_api->column_type 192*1e397f8fSdrh #define sqlite3_commit_hook sqlite3_api->commit_hook 193*1e397f8fSdrh #define sqlite3_complete sqlite3_api->complete 194*1e397f8fSdrh #define sqlite3_complete16 sqlite3_api->complete16 195*1e397f8fSdrh #define sqlite3_create_collation sqlite3_api->create_collation 196*1e397f8fSdrh #define sqlite3_create_collation16 sqlite3_api->create_collation16 197*1e397f8fSdrh #define sqlite3_create_function sqlite3_api->create_function 198*1e397f8fSdrh #define sqlite3_create_function16 sqlite3_api->create_function16 199*1e397f8fSdrh #define sqlite3_data_count sqlite3_api->data_count 200*1e397f8fSdrh #define sqlite3_db_handle sqlite3_api->db_handle 201*1e397f8fSdrh #define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache 202*1e397f8fSdrh #define sqlite3_errcode sqlite3_api->errcode 203*1e397f8fSdrh #define sqlite3_errmsg sqlite3_api->errmsg 204*1e397f8fSdrh #define sqlite3_errmsg16 sqlite3_api->errmsg16 205*1e397f8fSdrh #define sqlite3_exec sqlite3_api->exec 206*1e397f8fSdrh #define sqlite3_expired sqlite3_api->expired 207*1e397f8fSdrh #define sqlite3_finalize sqlite3_api->finalize 208*1e397f8fSdrh #define sqlite3_free sqlite3_api->free 209*1e397f8fSdrh #define sqlite3_free_table sqlite3_api->free_table 210*1e397f8fSdrh #define sqlite3_get_autocommit sqlite3_api->get_autocommit 211*1e397f8fSdrh #define sqlite3_get_auxdata sqlite3_api->get_auxdata 212*1e397f8fSdrh #define sqlite3_get_table sqlite3_api->get_table 213*1e397f8fSdrh #define sqlite3_global_recover sqlite3_api->global_recover 214*1e397f8fSdrh #define sqlite3_interrupt sqlite3_api->interrupt 215*1e397f8fSdrh #define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid 216*1e397f8fSdrh #define sqlite3_libversion sqlite3_api->libversion 217*1e397f8fSdrh #define sqlite3_libversion_number sqlite3_api->libversion_number 218*1e397f8fSdrh #define sqlite3_mprintf sqlite3_api->mprintf 219*1e397f8fSdrh #define sqlite3_open sqlite3_api->open 220*1e397f8fSdrh #define sqlite3_open16 sqlite3_api->open16 221*1e397f8fSdrh #define sqlite3_prepare sqlite3_api->prepare 222*1e397f8fSdrh #define sqlite3_prepare16 sqlite3_api->prepare16 223*1e397f8fSdrh #define sqlite3_profile sqlite3_api->profile 224*1e397f8fSdrh #define sqlite3_progress_handler sqlite3_api->progress_handler 225*1e397f8fSdrh #define sqlite3_reset sqlite3_api->reset 226*1e397f8fSdrh #define sqlite3_result_blob sqlite3_api->result_blob 227*1e397f8fSdrh #define sqlite3_result_double sqlite3_api->result_double 228*1e397f8fSdrh #define sqlite3_result_error sqlite3_api->result_error 229*1e397f8fSdrh #define sqlite3_result_error16 sqlite3_api->result_error16 230*1e397f8fSdrh #define sqlite3_result_int sqlite3_api->result_int 231*1e397f8fSdrh #define sqlite3_result_int64 sqlite3_api->result_int64 232*1e397f8fSdrh #define sqlite3_result_null sqlite3_api->result_null 233*1e397f8fSdrh #define sqlite3_result_text sqlite3_api->result_text 234*1e397f8fSdrh #define sqlite3_result_text16 sqlite3_api->result_text16 235*1e397f8fSdrh #define sqlite3_result_text16be sqlite3_api->result_text16be 236*1e397f8fSdrh #define sqlite3_result_text16le sqlite3_api->result_text16le 237*1e397f8fSdrh #define sqlite3_result_value sqlite3_api->result_value 238*1e397f8fSdrh #define sqlite3_rollback_hook sqlite3_api->rollback_hook 239*1e397f8fSdrh #define sqlite3_set_authorizer sqlite3_api->set_authorizer 240*1e397f8fSdrh #define sqlite3_set_auxdata sqlite3_api->set_auxdata 241*1e397f8fSdrh #define sqlite3_snprintf sqlite3_api->snprintf 242*1e397f8fSdrh #define sqlite3_step sqlite3_api->step 243*1e397f8fSdrh #define sqlite3_table_column_metadata sqlite3_api->table_column_metadata 244*1e397f8fSdrh #define sqlite3_thread_cleanup sqlite3_api->thread_cleanup 245*1e397f8fSdrh #define sqlite3_total_changes sqlite3_api->total_changes 246*1e397f8fSdrh #define sqlite3_trace sqlite3_api->trace 247*1e397f8fSdrh #define sqlite3_transfer_bindings sqlite3_api->transfer_bindings 248*1e397f8fSdrh #define sqlite3_update_hook sqlite3_api->update_hook 249*1e397f8fSdrh #define sqlite3_user_data sqlite3_api->user_data 250*1e397f8fSdrh #define sqlite3_value_blob sqlite3_api->value_blob 251*1e397f8fSdrh #define sqlite3_value_bytes sqlite3_api->value_bytes 252*1e397f8fSdrh #define sqlite3_value_bytes16 sqlite3_api->value_bytes16 253*1e397f8fSdrh #define sqlite3_value_double sqlite3_api->value_double 254*1e397f8fSdrh #define sqlite3_value_int sqlite3_api->value_int 255*1e397f8fSdrh #define sqlite3_value_int64 sqlite3_api->value_int64 256*1e397f8fSdrh #define sqlite3_value_numeric_type sqlite3_api->value_numeric_type 257*1e397f8fSdrh #define sqlite3_value_text sqlite3_api->value_text 258*1e397f8fSdrh #define sqlite3_value_text16 sqlite3_api->value_text16 259*1e397f8fSdrh #define sqlite3_value_text16be sqlite3_api->value_text16be 260*1e397f8fSdrh #define sqlite3_value_text16le sqlite3_api->value_text16le 261*1e397f8fSdrh #define sqlite3_value_type sqlite3_api->value_type 262*1e397f8fSdrh #define sqlite3_vmprintf sqlite3_api->vmprintf 263*1e397f8fSdrh #endif /* SQLITE_CORE */ 264*1e397f8fSdrh 265*1e397f8fSdrh #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api; 266*1e397f8fSdrh #define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v; 267*1e397f8fSdrh 268*1e397f8fSdrh #endif /* _SQLITE3EXT_H_ */ 269