loadext.c.svn-base
上传用户:sunhongbo
上传日期:2022-01-25
资源大小:3010k
文件大小:15k
源码类别:

数据库系统

开发平台:

C/C++

  1. /*
  2. ** 2006 June 7
  3. **
  4. ** The author disclaims copyright to this source code.  In place of
  5. ** a legal notice, here is a blessing:
  6. **
  7. **    May you do good and not evil.
  8. **    May you find forgiveness for yourself and forgive others.
  9. **    May you share freely, never taking more than you give.
  10. **
  11. *************************************************************************
  12. ** This file contains code used to dynamically load extensions into
  13. ** the SQLite library.
  14. */
  15. #ifndef SQLITE_CORE
  16.   #define SQLITE_CORE 1  /* Disable the API redefinition in sqlite3ext.h */
  17. #endif
  18. #include "sqlite3ext.h"
  19. #include "sqliteInt.h"
  20. #include <string.h>
  21. #include <ctype.h>
  22. #ifndef SQLITE_OMIT_LOAD_EXTENSION
  23. /*
  24. ** Some API routines are omitted when various features are
  25. ** excluded from a build of SQLite.  Substitute a NULL pointer
  26. ** for any missing APIs.
  27. */
  28. #ifndef SQLITE_ENABLE_COLUMN_METADATA
  29. # define sqlite3_column_database_name   0
  30. # define sqlite3_column_database_name16 0
  31. # define sqlite3_column_table_name      0
  32. # define sqlite3_column_table_name16    0
  33. # define sqlite3_column_origin_name     0
  34. # define sqlite3_column_origin_name16   0
  35. # define sqlite3_table_column_metadata  0
  36. #endif
  37. #ifdef SQLITE_OMIT_AUTHORIZATION
  38. # define sqlite3_set_authorizer         0
  39. #endif
  40. #ifdef SQLITE_OMIT_UTF16
  41. # define sqlite3_bind_text16            0
  42. # define sqlite3_collation_needed16     0
  43. # define sqlite3_column_decltype16      0
  44. # define sqlite3_column_name16          0
  45. # define sqlite3_column_text16          0
  46. # define sqlite3_complete16             0
  47. # define sqlite3_create_collation16     0
  48. # define sqlite3_create_function16      0
  49. # define sqlite3_errmsg16               0
  50. # define sqlite3_open16                 0
  51. # define sqlite3_prepare16              0
  52. # define sqlite3_prepare16_v2           0
  53. # define sqlite3_result_error16         0
  54. # define sqlite3_result_text16          0
  55. # define sqlite3_result_text16be        0
  56. # define sqlite3_result_text16le        0
  57. # define sqlite3_value_text16           0
  58. # define sqlite3_value_text16be         0
  59. # define sqlite3_value_text16le         0
  60. # define sqlite3_column_database_name16 0
  61. # define sqlite3_column_table_name16    0
  62. # define sqlite3_column_origin_name16   0
  63. #endif
  64. #ifdef SQLITE_OMIT_COMPLETE
  65. # define sqlite3_complete 0
  66. # define sqlite3_complete16 0
  67. #endif
  68. #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
  69. # define sqlite3_progress_handler 0
  70. #endif
  71. #ifdef SQLITE_OMIT_VIRTUALTABLE
  72. # define sqlite3_create_module 0
  73. # define sqlite3_create_module_v2 0
  74. # define sqlite3_declare_vtab 0
  75. #endif
  76. #ifdef SQLITE_OMIT_SHARED_CACHE
  77. # define sqlite3_enable_shared_cache 0
  78. #endif
  79. #ifdef SQLITE_OMIT_TRACE
  80. # define sqlite3_profile       0
  81. # define sqlite3_trace         0
  82. #endif
  83. #ifdef SQLITE_OMIT_GET_TABLE
  84. # define sqlite3_free_table    0
  85. # define sqlite3_get_table     0
  86. #endif
  87. #ifdef SQLITE_OMIT_INCRBLOB
  88. #define sqlite3_bind_zeroblob  0
  89. #define sqlite3_blob_bytes     0
  90. #define sqlite3_blob_close     0
  91. #define sqlite3_blob_open      0
  92. #define sqlite3_blob_read      0
  93. #define sqlite3_blob_write     0
  94. #endif
  95. /*
  96. ** The following structure contains pointers to all SQLite API routines.
  97. ** A pointer to this structure is passed into extensions when they are
  98. ** loaded so that the extension can make calls back into the SQLite
  99. ** library.
  100. **
  101. ** When adding new APIs, add them to the bottom of this structure
  102. ** in order to preserve backwards compatibility.
  103. **
  104. ** Extensions that use newer APIs should first call the
  105. ** sqlite3_libversion_number() to make sure that the API they
  106. ** intend to use is supported by the library.  Extensions should
  107. ** also check to make sure that the pointer to the function is
  108. ** not NULL before calling it.
  109. */
  110. static const sqlite3_api_routines sqlite3Apis = {
  111.   sqlite3_aggregate_context,
  112.   sqlite3_aggregate_count,
  113.   sqlite3_bind_blob,
  114.   sqlite3_bind_double,
  115.   sqlite3_bind_int,
  116.   sqlite3_bind_int64,
  117.   sqlite3_bind_null,
  118.   sqlite3_bind_parameter_count,
  119.   sqlite3_bind_parameter_index,
  120.   sqlite3_bind_parameter_name,
  121.   sqlite3_bind_text,
  122.   sqlite3_bind_text16,
  123.   sqlite3_bind_value,
  124.   sqlite3_busy_handler,
  125.   sqlite3_busy_timeout,
  126.   sqlite3_changes,
  127.   sqlite3_close,
  128.   sqlite3_collation_needed,
  129.   sqlite3_collation_needed16,
  130.   sqlite3_column_blob,
  131.   sqlite3_column_bytes,
  132.   sqlite3_column_bytes16,
  133.   sqlite3_column_count,
  134.   sqlite3_column_database_name,
  135.   sqlite3_column_database_name16,
  136.   sqlite3_column_decltype,
  137.   sqlite3_column_decltype16,
  138.   sqlite3_column_double,
  139.   sqlite3_column_int,
  140.   sqlite3_column_int64,
  141.   sqlite3_column_name,
  142.   sqlite3_column_name16,
  143.   sqlite3_column_origin_name,
  144.   sqlite3_column_origin_name16,
  145.   sqlite3_column_table_name,
  146.   sqlite3_column_table_name16,
  147.   sqlite3_column_text,
  148.   sqlite3_column_text16,
  149.   sqlite3_column_type,
  150.   sqlite3_column_value,
  151.   sqlite3_commit_hook,
  152.   sqlite3_complete,
  153.   sqlite3_complete16,
  154.   sqlite3_create_collation,
  155.   sqlite3_create_collation16,
  156.   sqlite3_create_function,
  157.   sqlite3_create_function16,
  158.   sqlite3_create_module,
  159.   sqlite3_data_count,
  160.   sqlite3_db_handle,
  161.   sqlite3_declare_vtab,
  162.   sqlite3_enable_shared_cache,
  163.   sqlite3_errcode,
  164.   sqlite3_errmsg,
  165.   sqlite3_errmsg16,
  166.   sqlite3_exec,
  167.   sqlite3_expired,
  168.   sqlite3_finalize,
  169.   sqlite3_free,
  170.   sqlite3_free_table,
  171.   sqlite3_get_autocommit,
  172.   sqlite3_get_auxdata,
  173.   sqlite3_get_table,
  174.   0,     /* Was sqlite3_global_recover(), but that function is deprecated */
  175.   sqlite3_interrupt,
  176.   sqlite3_last_insert_rowid,
  177.   sqlite3_libversion,
  178.   sqlite3_libversion_number,
  179.   sqlite3_malloc,
  180.   sqlite3_mprintf,
  181.   sqlite3_open,
  182.   sqlite3_open16,
  183.   sqlite3_prepare,
  184.   sqlite3_prepare16,
  185.   sqlite3_profile,
  186.   sqlite3_progress_handler,
  187.   sqlite3_realloc,
  188.   sqlite3_reset,
  189.   sqlite3_result_blob,
  190.   sqlite3_result_double,
  191.   sqlite3_result_error,
  192.   sqlite3_result_error16,
  193.   sqlite3_result_int,
  194.   sqlite3_result_int64,
  195.   sqlite3_result_null,
  196.   sqlite3_result_text,
  197.   sqlite3_result_text16,
  198.   sqlite3_result_text16be,
  199.   sqlite3_result_text16le,
  200.   sqlite3_result_value,
  201.   sqlite3_rollback_hook,
  202.   sqlite3_set_authorizer,
  203.   sqlite3_set_auxdata,
  204.   sqlite3_snprintf,
  205.   sqlite3_step,
  206.   sqlite3_table_column_metadata,
  207.   sqlite3_thread_cleanup,
  208.   sqlite3_total_changes,
  209.   sqlite3_trace,
  210.   sqlite3_transfer_bindings,
  211.   sqlite3_update_hook,
  212.   sqlite3_user_data,
  213.   sqlite3_value_blob,
  214.   sqlite3_value_bytes,
  215.   sqlite3_value_bytes16,
  216.   sqlite3_value_double,
  217.   sqlite3_value_int,
  218.   sqlite3_value_int64,
  219.   sqlite3_value_numeric_type,
  220.   sqlite3_value_text,
  221.   sqlite3_value_text16,
  222.   sqlite3_value_text16be,
  223.   sqlite3_value_text16le,
  224.   sqlite3_value_type,
  225.   sqlite3_vmprintf,
  226.   /*
  227.   ** The original API set ends here.  All extensions can call any
  228.   ** of the APIs above provided that the pointer is not NULL.  But
  229.   ** before calling APIs that follow, extension should check the
  230.   ** sqlite3_libversion_number() to make sure they are dealing with
  231.   ** a library that is new enough to support that API.
  232.   *************************************************************************
  233.   */
  234.   sqlite3_overload_function,
  235.   /*
  236.   ** Added after 3.3.13
  237.   */
  238.   sqlite3_prepare_v2,
  239.   sqlite3_prepare16_v2,
  240.   sqlite3_clear_bindings,
  241.   /*
  242.   ** Added for 3.4.1
  243.   */
  244.   sqlite3_create_module_v2,
  245.   /*
  246.   ** Added for 3.5.0
  247.   */
  248.   sqlite3_bind_zeroblob,
  249.   sqlite3_blob_bytes,
  250.   sqlite3_blob_close,
  251.   sqlite3_blob_open,
  252.   sqlite3_blob_read,
  253.   sqlite3_blob_write,
  254.   sqlite3_create_collation_v2,
  255.   sqlite3_file_control,
  256.   sqlite3_memory_highwater,
  257.   sqlite3_memory_used,
  258. #ifdef SQLITE_MUTEX_NOOP
  259.   0, 
  260.   0, 
  261.   0,
  262.   0,
  263.   0,
  264. #else
  265.   sqlite3_mutex_alloc,
  266.   sqlite3_mutex_enter,
  267.   sqlite3_mutex_free,
  268.   sqlite3_mutex_leave,
  269.   sqlite3_mutex_try,
  270. #endif
  271.   sqlite3_open_v2,
  272.   sqlite3_release_memory,
  273.   sqlite3_result_error_nomem,
  274.   sqlite3_result_error_toobig,
  275.   sqlite3_sleep,
  276.   sqlite3_soft_heap_limit,
  277.   sqlite3_vfs_find,
  278.   sqlite3_vfs_register,
  279.   sqlite3_vfs_unregister,
  280.   /*
  281.   ** Added for 3.5.8
  282.   */
  283.   sqlite3_threadsafe,
  284.   sqlite3_result_zeroblob,
  285.   sqlite3_result_error_code,
  286.   sqlite3_test_control,
  287.   sqlite3_randomness,
  288.   sqlite3_context_db_handle,
  289. };
  290. /*
  291. ** Attempt to load an SQLite extension library contained in the file
  292. ** zFile.  The entry point is zProc.  zProc may be 0 in which case a
  293. ** default entry point name (sqlite3_extension_init) is used.  Use
  294. ** of the default name is recommended.
  295. **
  296. ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
  297. **
  298. ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with 
  299. ** error message text.  The calling function should free this memory
  300. ** by calling sqlite3_free().
  301. */
  302. static int sqlite3LoadExtension(
  303.   sqlite3 *db,          /* Load the extension into this database connection */
  304.   const char *zFile,    /* Name of the shared library containing extension */
  305.   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
  306.   char **pzErrMsg       /* Put error message here if not 0 */
  307. ){
  308.   sqlite3_vfs *pVfs = db->pVfs;
  309.   void *handle;
  310.   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
  311.   char *zErrmsg = 0;
  312.   void **aHandle;
  313.   /* Ticket #1863.  To avoid a creating security problems for older
  314.   ** applications that relink against newer versions of SQLite, the
  315.   ** ability to run load_extension is turned off by default.  One
  316.   ** must call sqlite3_enable_load_extension() to turn on extension
  317.   ** loading.  Otherwise you get the following error.
  318.   */
  319.   if( (db->flags & SQLITE_LoadExtension)==0 ){
  320.     if( pzErrMsg ){
  321.       *pzErrMsg = sqlite3_mprintf("not authorized");
  322.     }
  323.     return SQLITE_ERROR;
  324.   }
  325.   if( zProc==0 ){
  326.     zProc = "sqlite3_extension_init";
  327.   }
  328.   handle = sqlite3OsDlOpen(pVfs, zFile);
  329.   if( handle==0 ){
  330.     if( pzErrMsg ){
  331.       char zErr[256];
  332.       zErr[sizeof(zErr)-1] = '';
  333.       sqlite3_snprintf(sizeof(zErr)-1, zErr, 
  334.           "unable to open shared library [%s]", zFile);
  335.       sqlite3OsDlError(pVfs, sizeof(zErr)-1, zErr);
  336.       *pzErrMsg = sqlite3DbStrDup(db, zErr);
  337.     }
  338.     return SQLITE_ERROR;
  339.   }
  340.   xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
  341.                    sqlite3OsDlSym(pVfs, handle, zProc);
  342.   if( xInit==0 ){
  343.     if( pzErrMsg ){
  344.       char zErr[256];
  345.       zErr[sizeof(zErr)-1] = '';
  346.       sqlite3_snprintf(sizeof(zErr)-1, zErr,
  347.           "no entry point [%s] in shared library [%s]", zProc,zFile);
  348.       sqlite3OsDlError(pVfs, sizeof(zErr)-1, zErr);
  349.       *pzErrMsg = sqlite3DbStrDup(db, zErr);
  350.       sqlite3OsDlClose(pVfs, handle);
  351.     }
  352.     return SQLITE_ERROR;
  353.   }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
  354.     if( pzErrMsg ){
  355.       *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
  356.     }
  357.     sqlite3_free(zErrmsg);
  358.     sqlite3OsDlClose(pVfs, handle);
  359.     return SQLITE_ERROR;
  360.   }
  361.   /* Append the new shared library handle to the db->aExtension array. */
  362.   db->nExtension++;
  363.   aHandle = sqlite3DbMallocZero(db, sizeof(handle)*db->nExtension);
  364.   if( aHandle==0 ){
  365.     return SQLITE_NOMEM;
  366.   }
  367.   if( db->nExtension>0 ){
  368.     memcpy(aHandle, db->aExtension, sizeof(handle)*(db->nExtension-1));
  369.   }
  370.   sqlite3_free(db->aExtension);
  371.   db->aExtension = aHandle;
  372.   db->aExtension[db->nExtension-1] = handle;
  373.   return SQLITE_OK;
  374. }
  375. int sqlite3_load_extension(
  376.   sqlite3 *db,          /* Load the extension into this database connection */
  377.   const char *zFile,    /* Name of the shared library containing extension */
  378.   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
  379.   char **pzErrMsg       /* Put error message here if not 0 */
  380. ){
  381.   int rc;
  382.   sqlite3_mutex_enter(db->mutex);
  383.   rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
  384.   sqlite3_mutex_leave(db->mutex);
  385.   return rc;
  386. }
  387. /*
  388. ** Call this routine when the database connection is closing in order
  389. ** to clean up loaded extensions
  390. */
  391. void sqlite3CloseExtensions(sqlite3 *db){
  392.   int i;
  393.   assert( sqlite3_mutex_held(db->mutex) );
  394.   for(i=0; i<db->nExtension; i++){
  395.     sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
  396.   }
  397.   sqlite3_free(db->aExtension);
  398. }
  399. /*
  400. ** Enable or disable extension loading.  Extension loading is disabled by
  401. ** default so as not to open security holes in older applications.
  402. */
  403. int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
  404.   sqlite3_mutex_enter(db->mutex);
  405.   if( onoff ){
  406.     db->flags |= SQLITE_LoadExtension;
  407.   }else{
  408.     db->flags &= ~SQLITE_LoadExtension;
  409.   }
  410.   sqlite3_mutex_leave(db->mutex);
  411.   return SQLITE_OK;
  412. }
  413. #endif /* SQLITE_OMIT_LOAD_EXTENSION */
  414. /*
  415. ** The auto-extension code added regardless of whether or not extension
  416. ** loading is supported.  We need a dummy sqlite3Apis pointer for that
  417. ** code if regular extension loading is not available.  This is that
  418. ** dummy pointer.
  419. */
  420. #ifdef SQLITE_OMIT_LOAD_EXTENSION
  421. static const sqlite3_api_routines sqlite3Apis = { 0 };
  422. #endif
  423. /*
  424. ** The following object holds the list of automatically loaded
  425. ** extensions.
  426. **
  427. ** This list is shared across threads.  The SQLITE_MUTEX_STATIC_MASTER
  428. ** mutex must be held while accessing this list.
  429. */
  430. static struct {
  431.   int nExt;        /* Number of entries in aExt[] */          
  432.   void **aExt;     /* Pointers to the extension init functions */
  433. } autoext = { 0, 0 };
  434. /*
  435. ** Register a statically linked extension that is automatically
  436. ** loaded by every new database connection.
  437. */
  438. int sqlite3_auto_extension(void *xInit){
  439.   int i;
  440.   int rc = SQLITE_OK;
  441.   sqlite3_mutex *mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER);
  442.   sqlite3_mutex_enter(mutex);
  443.   for(i=0; i<autoext.nExt; i++){
  444.     if( autoext.aExt[i]==xInit ) break;
  445.   }
  446.   if( i==autoext.nExt ){
  447.     int nByte = (autoext.nExt+1)*sizeof(autoext.aExt[0]);
  448.     void **aNew;
  449.     aNew = sqlite3_realloc(autoext.aExt, nByte);
  450.     if( aNew==0 ){
  451.       rc = SQLITE_NOMEM;
  452.     }else{
  453.       autoext.aExt = aNew;
  454.       autoext.aExt[autoext.nExt] = xInit;
  455.       autoext.nExt++;
  456.     }
  457.   }
  458.   sqlite3_mutex_leave(mutex);
  459.   assert( (rc&0xff)==rc );
  460.   return rc;
  461. }
  462. /*
  463. ** Reset the automatic extension loading mechanism.
  464. */
  465. void sqlite3_reset_auto_extension(void){
  466.   sqlite3_mutex *mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER);
  467.   sqlite3_mutex_enter(mutex);
  468.   sqlite3_free(autoext.aExt);
  469.   autoext.aExt = 0;
  470.   autoext.nExt = 0;
  471.   sqlite3_mutex_leave(mutex);
  472. }
  473. /*
  474. ** Load all automatic extensions.
  475. */
  476. int sqlite3AutoLoadExtensions(sqlite3 *db){
  477.   int i;
  478.   int go = 1;
  479.   int rc = SQLITE_OK;
  480.   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
  481.   if( autoext.nExt==0 ){
  482.     /* Common case: early out without every having to acquire a mutex */
  483.     return SQLITE_OK;
  484.   }
  485.   for(i=0; go; i++){
  486.     char *zErrmsg = 0;
  487.     sqlite3_mutex *mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER);
  488.     sqlite3_mutex_enter(mutex);
  489.     if( i>=autoext.nExt ){
  490.       xInit = 0;
  491.       go = 0;
  492.     }else{
  493.       xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
  494.               autoext.aExt[i];
  495.     }
  496.     sqlite3_mutex_leave(mutex);
  497.     if( xInit && xInit(db, &zErrmsg, &sqlite3Apis) ){
  498.       sqlite3Error(db, SQLITE_ERROR,
  499.             "automatic extension loading failed: %s", zErrmsg);
  500.       go = 0;
  501.       rc = SQLITE_ERROR;
  502.       sqlite3_free(zErrmsg);
  503.     }
  504.   }
  505.   return rc;
  506. }