@@ -140,6 +140,11 @@ class VirtualTable
140
140
bool check_buffer_space (size_t len) const ;
141
141
};
142
142
143
+ /*
144
+ Return the NdbInfo::Table corresponding to this virtual table
145
+ */
146
+ virtual NdbInfo::Table* get_instance () const = 0;
147
+
143
148
/*
144
149
Read one row from the virtual table
145
150
@@ -322,28 +327,6 @@ NdbInfoScanVirtual::~NdbInfoScanVirtual()
322
327
}
323
328
324
329
325
- bool NdbInfo::load_virtual_tables (void )
326
- {
327
- // The virtual tables should already have been created
328
- assert (m_virtual_tables.size () > 0 );
329
-
330
- // Append the virtual tables to the list of tables
331
- for (size_t i = 0 ; i < m_virtual_tables.size (); i++)
332
- {
333
- Table* tab = m_virtual_tables[i];
334
- assert (tab->m_virt );
335
- assert (tab->m_table_id == Table::InvalidTableId);
336
-
337
- BaseString hash_key = mysql_table_name (tab->getName ());
338
- tab->m_table_id = m_tables.entries (); // Set increasing table id
339
- if (!m_tables.insert (hash_key.c_str (), *tab))
340
- return false ;
341
- }
342
-
343
- return true ;
344
- }
345
-
346
-
347
330
#include " ../src/common/debugger/BlockNames.cpp"
348
331
class BlocksTable : public VirtualTable
349
332
{
@@ -362,6 +345,21 @@ class BlocksTable : public VirtualTable
362
345
w.write_string (bn.name );
363
346
return true ;
364
347
}
348
+
349
+ NdbInfo::Table* get_instance () const
350
+ {
351
+ NdbInfo::Table* tab = new NdbInfo::Table (" blocks" ,
352
+ NdbInfo::Table::InvalidTableId,
353
+ this );
354
+ if (!tab)
355
+ return NULL ;
356
+ if (!tab->addColumn (NdbInfo::Column (" block_number" , 0 ,
357
+ NdbInfo::Column::Number)) ||
358
+ !tab->addColumn (NdbInfo::Column (" block_name" , 1 ,
359
+ NdbInfo::Column::String)))
360
+ return NULL ;
361
+ return tab;
362
+ }
365
363
};
366
364
367
365
@@ -377,7 +375,7 @@ class DictObjTypesTable : public VirtualTable
377
375
const char * name;
378
376
};
379
377
380
- Entry entries[] =
378
+ static const Entry entries[] =
381
379
{
382
380
{DictTabInfo::SystemTable, " System table" },
383
381
{DictTabInfo::UserTable, " User table" },
@@ -412,6 +410,21 @@ class DictObjTypesTable : public VirtualTable
412
410
w.write_string (e.name );
413
411
return true ;
414
412
}
413
+
414
+ NdbInfo::Table* get_instance () const
415
+ {
416
+ NdbInfo::Table* tab = new NdbInfo::Table (" dict_obj_types" ,
417
+ NdbInfo::Table::InvalidTableId,
418
+ this );
419
+ if (!tab)
420
+ return NULL ;
421
+ if (!tab->addColumn (NdbInfo::Column (" type_id" , 0 ,
422
+ NdbInfo::Column::Number)) ||
423
+ !tab->addColumn (NdbInfo::Column (" type_name" , 1 ,
424
+ NdbInfo::Column::String)))
425
+ return NULL ;
426
+ return tab;
427
+ }
415
428
};
416
429
417
430
@@ -457,6 +470,22 @@ class ConfigParamsTable : public VirtualTable
457
470
w.write_string (param->_fname );
458
471
return true ;
459
472
}
473
+
474
+
475
+ NdbInfo::Table* get_instance () const
476
+ {
477
+ NdbInfo::Table* tab = new NdbInfo::Table (" config_params" ,
478
+ NdbInfo::Table::InvalidTableId,
479
+ this );
480
+ if (!tab)
481
+ return NULL ;
482
+ if (!tab->addColumn (NdbInfo::Column (" param_number" , 0 ,
483
+ NdbInfo::Column::Number)) ||
484
+ !tab->addColumn (NdbInfo::Column (" param_name" , 1 ,
485
+ NdbInfo::Column::String)))
486
+ return NULL ;
487
+ return tab;
488
+ }
460
489
};
461
490
462
491
@@ -468,11 +497,14 @@ class NdbkernelStateDescTable : public VirtualTable
468
497
const ndbkernel_state_desc* m_array;
469
498
// Number of elements in the the array
470
499
size_t m_array_count;
500
+ const char * m_table_name;
471
501
public:
472
502
473
- NdbkernelStateDescTable (const ndbkernel_state_desc* null_terminated_array) :
503
+ NdbkernelStateDescTable (const char * table_name,
504
+ const ndbkernel_state_desc* null_terminated_array) :
474
505
m_array (null_terminated_array),
475
- m_array_count (0 )
506
+ m_array_count (0 ),
507
+ m_table_name (table_name)
476
508
{
477
509
while (m_array[m_array_count].name != 0 )
478
510
m_array_count++;
@@ -495,6 +527,25 @@ class NdbkernelStateDescTable : public VirtualTable
495
527
496
528
return true ;
497
529
}
530
+
531
+ NdbInfo::Table* get_instance () const
532
+ {
533
+ NdbInfo::Table* tab = new NdbInfo::Table (m_table_name,
534
+ NdbInfo::Table::InvalidTableId,
535
+ this );
536
+ if (!tab)
537
+ return NULL ;
538
+ if (!tab->addColumn (NdbInfo::Column (" state_int_value" , 0 ,
539
+ NdbInfo::Column::Number)) ||
540
+ !tab->addColumn (NdbInfo::Column (" state_name" , 1 ,
541
+ NdbInfo::Column::String)) ||
542
+ !tab->addColumn (NdbInfo::Column (" state_friendly_name" , 2 ,
543
+ NdbInfo::Column::String)) ||
544
+ !tab->addColumn (NdbInfo::Column (" state_description" , 3 ,
545
+ NdbInfo::Column::String)))
546
+ return NULL ;
547
+ return tab;
548
+ }
498
549
};
499
550
500
551
@@ -505,25 +556,19 @@ class NdbkernelStateDescTable : public VirtualTable
505
556
is copied between instances of Table so that all Table instances
506
557
use the same Virtual.
507
558
508
- The Virtual tables are created during in NdbInfo::init() and destroyed
559
+ The Virtual tables are created in NdbInfo::init() and destroyed
509
560
by ~NdbInfo(). NdbInfo keeps them in a list which is passed to both
510
561
the create and destroy functions.
511
562
*/
512
- bool NdbInfo::create_virtual_tables (Vector<Table*>& list)
563
+ bool
564
+ NdbInfoScanVirtual::create_virtual_tables (Vector<NdbInfo::Table*>& list)
513
565
{
514
566
{
515
567
BlocksTable* blocksTable = new BlocksTable;
516
568
if (!blocksTable)
517
569
return false ;
518
570
519
- Table* tab = new Table (" blocks" , Table::InvalidTableId, blocksTable);
520
- if (!tab)
521
- return false ;
522
- if (!tab->addColumn (Column (" block_number" , 0 , Column::Number)) ||
523
- !tab->addColumn (Column (" block_name" , 1 , Column::String)))
524
- return false ;
525
-
526
- if (list.push_back (tab) != 0 )
571
+ if (list.push_back (blocksTable->get_instance ()) != 0 )
527
572
return false ;
528
573
}
529
574
@@ -532,15 +577,7 @@ bool NdbInfo::create_virtual_tables(Vector<Table*>& list)
532
577
if (!dictObjTypesTable)
533
578
return false ;
534
579
535
- Table* tab = new Table (" dict_obj_types" , Table::InvalidTableId,
536
- dictObjTypesTable);
537
- if (!tab)
538
- return false ;
539
- if (!tab->addColumn (Column (" type_id" , 0 , Column::Number)) ||
540
- !tab->addColumn (Column (" type_name" , 1 , Column::String)))
541
- return false ;
542
-
543
- if (list.push_back (tab) != 0 )
580
+ if (list.push_back (dictObjTypesTable->get_instance ()) != 0 )
544
581
return false ;
545
582
}
546
583
@@ -551,55 +588,29 @@ bool NdbInfo::create_virtual_tables(Vector<Table*>& list)
551
588
if (!configParamsTable->init ())
552
589
return false ;
553
590
554
- Table* tab = new Table (" config_params" , Table::InvalidTableId,
555
- configParamsTable);
556
- if (!tab)
557
- return false ;
558
- if (!tab->addColumn (Column (" param_number" , 0 , Column::Number)) ||
559
- !tab->addColumn (Column (" param_name" , 1 , Column::String)))
560
- return false ;
561
-
562
- if (list.push_back (tab) != 0 )
591
+ if (list.push_back (configParamsTable->get_instance ()) != 0 )
563
592
return false ;
564
593
}
565
594
566
595
{
567
596
NdbkernelStateDescTable* dbtcApiConnectStateTable =
568
- new NdbkernelStateDescTable (g_dbtc_apiconnect_state_desc);
597
+ new NdbkernelStateDescTable (" dbtc_apiconnect_state" ,
598
+ g_dbtc_apiconnect_state_desc);
569
599
if (!dbtcApiConnectStateTable)
570
600
return false ;
571
601
572
- Table* tab = new Table (" dbtc_apiconnect_state" , Table::InvalidTableId,
573
- dbtcApiConnectStateTable);
574
- if (!tab)
575
- return false ;
576
- if (!tab->addColumn (Column (" state_int_value" , 0 , Column::Number)) ||
577
- !tab->addColumn (Column (" state_name" , 1 , Column::String)) ||
578
- !tab->addColumn (Column (" state_friendly_name" , 2 , Column::String)) ||
579
- !tab->addColumn (Column (" state_description" , 3 , Column::String)))
580
- return false ;
581
-
582
- if (list.push_back (tab) != 0 )
602
+ if (list.push_back (dbtcApiConnectStateTable->get_instance ()) != 0 )
583
603
return false ;
584
604
}
585
605
586
606
{
587
607
NdbkernelStateDescTable* dblqhTcConnectStateTable =
588
- new NdbkernelStateDescTable (g_dblqh_tcconnect_state_desc);
608
+ new NdbkernelStateDescTable (" dblqh_tcconnect_state" ,
609
+ g_dblqh_tcconnect_state_desc);
589
610
if (!dblqhTcConnectStateTable)
590
611
return false ;
591
612
592
- Table* tab = new Table (" dblqh_tcconnect_state" , Table::InvalidTableId,
593
- dblqhTcConnectStateTable);
594
- if (!tab)
595
- return false ;
596
- if (!tab->addColumn (Column (" state_int_value" , 0 , Column::Number)) ||
597
- !tab->addColumn (Column (" state_name" , 1 , Column::String)) ||
598
- !tab->addColumn (Column (" state_friendly_name" , 2 , Column::String)) ||
599
- !tab->addColumn (Column (" state_description" , 3 , Column::String)))
600
- return false ;
601
-
602
- if (list.push_back (tab) != 0 )
613
+ if (list.push_back (dblqhTcConnectStateTable->get_instance ()) != 0 )
603
614
return false ;
604
615
}
605
616
return true ;
@@ -608,12 +619,13 @@ bool NdbInfo::create_virtual_tables(Vector<Table*>& list)
608
619
/*
609
620
Delete the virtual part of the tables in list
610
621
*/
611
- void NdbInfo ::delete_virtual_tables (Vector<Table*>& list)
622
+ void NdbInfoScanVirtual ::delete_virtual_tables (Vector<NdbInfo:: Table*>& list)
612
623
{
613
624
for (unsigned i = 0 ; i < list.size (); i++)
614
625
{
615
- Table* tab = list[i];
616
- delete tab->m_virt ;
626
+ NdbInfo::Table* tab = list[i];
627
+ const VirtualTable* virt = tab->getVirtualTable ();
628
+ delete virt;
617
629
delete tab;
618
630
}
619
631
list.clear ();
0 commit comments