~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/loader.cc

  • Committer: Monty Taylor
  • Date: 2010-05-15 17:45:43 UTC
  • mto: (1530.6.1)
  • mto: This revision was merged to the branch mainline in revision 1556.
  • Revision ID: mordred@inaugust.com-20100515174543-2d0x7jvyo89htgre
Changed the builtin plugin code path to work exactly the same as dynamic.
Allows us to use --plugin-remove on builtins.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
 
52
52
using namespace std;
53
53
 
54
 
typedef drizzled::plugin::Manifest drizzled_builtin_plugin[];
55
 
extern drizzled_builtin_plugin PANDORA_BUILTIN_LIST;
56
 
static drizzled::plugin::Manifest *drizzled_builtins[]=
57
 
{
58
 
  PANDORA_BUILTIN_LIST, NULL
59
 
};
60
 
 
61
54
namespace drizzled
62
55
{
63
56
 
71
64
char *opt_plugin_dir_ptr;
72
65
char opt_plugin_dir[FN_REFLEN];
73
66
const char *opt_plugin_load_default= PANDORA_PLUGIN_LIST;
 
67
const char *builtin_plugins= PANDORA_BUILTIN_LIST;
74
68
 
75
69
/* Note that 'int version' must be the first field of every plugin
76
70
   sub-structure (plugin->info).
155
149
                              const vector<string> &plugins_to_remove);
156
150
static bool plugin_load_list(plugin::Registry &registry,
157
151
                             memory::Root *tmp_root, int *argc, char **argv,
158
 
                             const set<string> &plugin_list);
 
152
                             const set<string> &plugin_list,
 
153
                             bool builtin= false);
159
154
static int test_plugin_options(memory::Root *, plugin::Module *,
160
155
                               int *, char **);
161
156
static void unlock_variables(Session *session, struct system_variables *vars);
373
368
                 int *argc, char **argv,
374
369
                 bool skip_init)
375
370
{
376
 
  plugin::Manifest **builtins;
377
 
  plugin::Manifest *manifest;
378
371
  plugin::Module *module;
379
372
  memory::Root tmp_root(4096);
380
373
 
391
384
 
392
385
  initialized= 1;
393
386
 
394
 
  /*
395
 
    First we register builtin plugins
396
 
  */
397
 
  for (builtins= drizzled_builtins; *builtins; builtins++)
398
 
  {
399
 
    manifest= *builtins;
400
 
    if (manifest->name != NULL)
401
 
    {
402
 
      module= new (std::nothrow) plugin::Module(manifest);
403
 
      if (module == NULL)
404
 
        return true;
405
 
 
406
 
      tmp_root.free_root(MYF(memory::MARK_BLOCKS_FREE));
407
 
      if (test_plugin_options(&tmp_root, module, argc, argv))
408
 
        continue;
409
 
 
410
 
      registry.add(module);
411
 
 
412
 
      plugin_initialize_vars(module);
413
 
 
414
 
      if (! skip_init)
415
 
      {
416
 
        if (plugin_initialize(registry, module))
417
 
        {
418
 
          tmp_root.free_root(MYF(0));
419
 
          return true;
420
 
        }
421
 
      }
422
 
    }
423
 
  }
424
 
 
 
387
  vector<string> builtin_list;
 
388
  tokenize(builtin_plugins, builtin_list, ",", true);
425
389
 
426
390
  bool load_failed= false;
427
391
  vector<string> plugin_list;
443
407
    vector<string> plugins_to_remove;
444
408
    tokenize(opt_plugin_remove, plugins_to_remove, ",", true);
445
409
    plugin_prune_list(plugin_list, plugins_to_remove);
 
410
    plugin_prune_list(builtin_list, plugins_to_remove);
 
411
  }
 
412
 
 
413
 
 
414
  /*
 
415
    First we register builtin plugins
 
416
  */
 
417
  const set<string> builtin_list_set(builtin_list.begin(), builtin_list.end());
 
418
  load_failed= plugin_load_list(registry, &tmp_root, argc, argv,
 
419
                                builtin_list_set, true);
 
420
  if (load_failed)
 
421
  {
 
422
    tmp_root.free_root(MYF(0));
 
423
    return true;
446
424
  }
447
425
 
448
426
  /* Uniquify the list */
524
502
*/
525
503
static bool plugin_load_list(plugin::Registry &registry,
526
504
                             memory::Root *tmp_root, int *argc, char **argv,
527
 
                             const set<string> &plugin_list)
 
505
                             const set<string> &plugin_list,
 
506
                             bool builtin)
528
507
{
529
508
  plugin::Library *library= NULL;
530
509
 
533
512
       ++iter)
534
513
  {
535
514
    const string plugin_name(*iter);
536
 
    library= registry.addLibrary(plugin_name);
 
515
    if (builtin)
 
516
    {
 
517
      library= registry.addLibrary(plugin_name, true);
 
518
    }
 
519
    else
 
520
    {
 
521
      library= registry.addLibrary(plugin_name);
 
522
    }
537
523
    if (library == NULL)
538
524
    {
539
525
      errmsg_printf(ERRMSG_LVL_ERROR,
1840
1826
}
1841
1827
 
1842
1828
} /* namespace drizzled */
 
1829
 
 
1830
/** These exist just to prevent symbols from being optimized out */
 
1831
typedef drizzled::plugin::Manifest drizzled_builtin_list[];
 
1832
extern drizzled_builtin_list PANDORA_BUILTIN_SYMBOLS_LIST;
 
1833
drizzled::plugin::Manifest *drizzled_builtins[]=
 
1834
{
 
1835
  PANDORA_BUILTIN_SYMBOLS_LIST, NULL
 
1836
};
 
1837