Accessing Toolpack DB

From TBwiki
(Difference between revisions)
Jump to: navigation, search
(First version of this page)
 
(Example code)
Line 25: Line 25:
  
 
== Example code ==
 
== Example code ==
Here is some example code that show how to use these DAO objects
+
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()
 +
);
 +
}
 +
 +
/* debugAlain */
 +
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;
 +
}

Revision as of 14:06, 30 May 2011

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()
			);
		}

		/* debugAlain */
		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;
}
Personal tools