Accessing Toolpack DB
From TBwiki
The CAF library provides DAOs (Data Access Objects) for all tables in the Toolpack configuration database.
Contents |
Where to find these DAOs
These DAO objects are defined in the "tbcmc" source packages (tbcmc_2.5.89_common.tgz for example), under:
- tb/inc/tbcaf/dao/oam
Pre-requisites to use these DAOs
To access the Toolpack database, an application needs to:
- Attach to Toolpack OAM "CM" (configuration management), by binding an object of type CTBCAFServiceCmMgmtClient to the application
- Connect to the database using object of type CTBCAFDb initialized using the DB connection string received on OnReloadConfig (see CTBCAFServiceCmMgmtClient)
- Use appropriate DAO access object to query the desired table
- Optionally use a custom SQL query string to query specific elements from a table
How to use the DAOs
- Initialize the DAO access object that corresponds to the table you want to read from (CTBCAFOam_virtual_adapters_db_acc for example)
CTBCAFOam_virtual_adapters_db_acc AccessVirtualAdapters; AccessVirtualAdapters.Init( pConfigDb );
- Use one of the DAO functions to retrieve one or multiple entries:
CTBCAFOam_virtual_adapters VirtualAdapter = AccessVirtualAdapters.GetById( un32MyVirtualAdapterId ); std::vector<CTBCAFOam_virtual_adapters> AllVirtualAdapters = AccessVirtualAdapters.GetAllBy_configuration_id( un32ConfigurationId );
- Access the information from returned classes
VirtualAdapter.str_serial VirtualAdapter.un32_last_upgrade_time ...
Example code
Here is some example code that show how to use these DAO objects, taken from the "simple_call" sample application:
TBX_RESULT CTBS2GWSimpleCall::ExampleDbAccess()
{
TBX_RESULT Result;
TBX_UINT32 un32Index;
CTBCAFOam_configurations_db_acc ConfigurationsAdapters;
CTBCAFOam_configurations CurrentConfiguration;
CTBCAFOam_virtual_adapters_db_acc AccessVirtualAdapters;
std::vector<CTBCAFOam_virtual_adapters> AllVirtualAdapters;
CTBCAFOam_line_services_db_acc AccessLineServices;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CAFCODE( CTBS2GWSimpleCall::ExampleDbAccess )
{
// Initialize the DAO access objects
Result = ConfigurationsAdapters.Init( mpConfigDb );
TBCAF_EXIT_ON_ERROR( Result, "Cannot init ConfigurationsAdapters" );
Result = AccessVirtualAdapters.Init( mpConfigDb );
TBCAF_EXIT_ON_ERROR( Result, "Cannot init AccessVirtualAdapters" );
Result = AccessLineServices.Init( mpConfigDb );
TBCAF_EXIT_ON_ERROR( Result, "Cannot init AccessVirtualAdapters" );
// Implementation note:
// Database queries below should be done "in background" using a background thread of this application, outside
// the lock of mMutex, in order to avoid blocking the whole application in case the database is
// temporarily unavailable (backup database about to be activated, for example).
// In this simple example, we do it inline, however...
// Example get the name of current configuration (this function will 'throw' if not found)
CurrentConfiguration = ConfigurationsAdapters.GetById( mun32ConfigurationId );
// Example: Get all virtual adapters from current configuration
AllVirtualAdapters = AccessVirtualAdapters.GetAllBy_configuration_id( mun32ConfigurationId );
// Example: Print the serial number of all adapters of current configuration
LogTrace
(
TBCAF_TRACE_LEVEL_ALWAYS,
"Adapters from current configuration %s",
CurrentConfiguration.str_name.c_str()
);
for( un32Index = 0; un32Index < AllVirtualAdapters.size(); un32Index++ )
{
CTBCAFString strQuery;
std::vector<CTBCAFOam_line_services> AllE1LineServices;
std::vector<CTBCAFOam_line_services> AllT1LineServices;
// Example custom SQL query to get E1 line services in current configuration
strQuery.Format
(
"SELECT * FROM %s WHERE %s=\"E1LineService\"",
TBTBL_LINE_SERVICES,
TBCOL_LINE_SERVICES_COMMON_LINE_SERVICE_TYPE
);
AllE1LineServices = AccessLineServices.GetAll( strQuery );
// Example custom SQL query to get T1 line services in current configuration
strQuery.Format
(
"SELECT * FROM %s WHERE %s=\"T1LineService\"",
TBTBL_LINE_SERVICES,
TBCOL_LINE_SERVICES_COMMON_LINE_SERVICE_TYPE
);
AllT1LineServices = AccessLineServices.GetAll( strQuery );
LogTrace
(
TBCAF_TRACE_LEVEL_ALWAYS,
" %s (%u E1, %u T1 line services)",
AllVirtualAdapters[ un32Index ].str_serial.c_str(),
AllE1LineServices.size(),
AllT1LineServices.size()
);
}
ExampleDbQuery();
TBX_EXIT_SUCCESS( TBX_RESULT_OK );
}
/*---------------------------------------------------------------------------------------------------------------------------
| Exception handling section
*--------------------------------------------------------------------------------------------------------------------------*/
CAF_EXCEPTION_HANDLING
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
CAF_ERROR_HANDLING( CAF_VERBOSE )
{
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CAF_CLEANUP
{
AccessLineServices.Uninit();
AccessVirtualAdapters.Uninit();
ConfigurationsAdapters.Uninit();
}
RETURN;
}