Getting All Objects or Object Keys of a Class - Teradata Meta Data Services

Teradata Meta Data Services Programmer Guide

Product
Teradata Meta Data Services
Release Number
15.00
Language
English (United States)
Last Update
2018-09-28
Product Category
Teradata Tools and Utilities

Getting All Objects or Object Keys of a Class

This section shows example code to get all objects or object keys of a class. The example code uses:

  • CMetaObject::GetClassObjects
  • CMetaObject::GetClassObjectKeys
  • CMetaObject::GetClassObjectsByProperty
  • ///////////////////////////////////////////////////////////////////
    // GetClassObjs function
    // Reads and prints the objects in a class. 
    //
    // Example of using the CMetaObject::GetClassObjects function
    ///////////////////////////////////////////////////////////////////
    HRESULT GetClassObjs()
    {
    	LLCMetaObject	objectList;  
    	HRESULT			result = S_OK;    
    	CMetaObject		obj;     
     
    	// Gets all the objects in the Auto Class
    	if (SUCCEEDED(result = obj.GetClassObjects(objectList, 
    			CLSGUID_Auto)))
    	{
    		cout << endl << ">>> All auto class objects" << endl;
    		PrintObjectList(objectList);
    		CLEARVECTOR(objectList);
    	}
    	DisplayResult(result);
     
    	// Gets all the objects in the Auto Division Class which
    	// have the name AmericanAutos
    	if (SUCCEEDED(result = obj.GetClassObjects(objectList, 
    			CLSGUID_AutoDiv, 0, _T("AmericanAutos"))))
    	{
    		cout << endl;
    		cout << ">>> All auto division objects with name=AmericanAutos" << endl;
    		PrintObjectList(objectList);
    		CLEARVECTOR(objectList);
    	}
    	DisplayResult(result);
     
    	return (result);
    }
    //////////////////////////////////////////////////////////////////////////
    // GetClassObjKeys function
    // Reads and prints the object keys in a class. 
    //////////////////////////////////////////////////////////////////////////
    HRESULT GetClassObjKeys()
    {
    	MetaObjectKeyVector keyList;
    	HRESULT			result = S_OK;    
    	CMetaObject		obj;     
     
     
    	// Gets all the object keys (name and ObjectID) of all
    	// objects in the Auto Class
    	if (SUCCEEDED(result = obj.GetClassObjectKeys(keyList, 
    		CLSGUID_Auto)))
    	{
    		cout << endl;
    		cout << ">>> Object keys (name and ObjectID) of all " << endl;
    		cout << ">>> objects in the Auto Class" << endl;
    		PrintKeyList(keyList);
    		CLEARVECTOR(keyList);
    	}
    	DisplayResult(result);
     
    	return (result);
    }
    ////////////////////////////////////////////////////////////////////////
    // GetClassObjectsByProperty function
    //
    // Read Auto Object and Get class objects by Property.
    //
    // Example of using the CMetaObject::GetClassObjectsByProperty function
    ////////////////////////////////////////////////////////////////////////
    HRESULT GetClassObjectsByProperty()
    {
    	HRESULT				result = S_OK;
    	CMetaObject			obj;     
    	CMetaObjectKey		propID;
    	LLCMetaObject		objectList;
    	CMetaFilterInfo			filterInfo;    // one property filter entry
    	MetaFilterInfoVector	propFilter;  // property filter specification
    	MetaObjectKeyVector		sortList;
     
    	// Setup to search for autos with a vehicletype which
    	// ends with the value "Cars"
    	filterInfo.value.SetPropertyID(PID_AUTO_VEHICLETYPE);
    	filterInfo.SetComparisonOperator(REGEX);
    	filterInfo.value.SetString(_T("%Cars")); 
    	propFilter.push_back(filterInfo);
     
    	// Sort By Autos' CARIDs
    	propID.SetObjectName(NMCARID);
    	sortList.push_back(propID);
     
    	// Call GetClassObjectsByProperty
    	result = obj.GetClassObjectsByProperty(objectList, propFilter, 
    		sortList, CLSGUID_Auto);
    	if (SUCCEEDED(result))
    	{
    		cout << endl;
    		cout << ">>> Auto class objects: VehicleType=%Cars" << endl;
    		PrintObjectList(objectList);
    	}
    	CLEARVECTOR(objectList);
    	DisplayResult(result);
    	
    	if(SUCCEEDED(result))
    	{
    		// Setup to search for autos with a name beginning with a T 
    		// and a FuelTank less than 12
    		CLEARVECTOR(propFilter);  filterInfo.Initialize();
    		filterInfo.value.SetPropertyID(PID_CMN_NAME);
    		filterInfo.SetComparisonOperator(REGEX);
    		filterInfo.value.SetString(_T("T%")); 
    		filterInfo.SetLogicalOperator(META_AND);
    		propFilter.push_back(filterInfo);
    		filterInfo.Initialize();
    		filterInfo.value.SetName(_TEXT("FuelTank"));
    		filterInfo.SetComparisonOperator(LESS_THAN);
    		filterInfo.value.SetDouble(12.0);
    		propFilter.push_back(filterInfo);
     
    		// Sort By Name and ObjectID
    		CLEARVECTOR(sortList);  propID.Initialize();
    		propID.SetObjectID(PID_CMN_NAME);
    		sortList.push_back(propID);
    		propID.SetObjectID(PID_CMN_LOID);
    		sortList.push_back(propID);
     
    		// Call GetClassObjectsByProperty
    		result = obj.GetClassObjectsByProperty(objectList, propFilter, 
    			sortList, CLSGUID_Auto);
    		if (SUCCEEDED(result))
    		{
    			cout << endl;
    			cout << ">>> Auto class objects: name beginning with a T ";
    			cout << endl;
    			cout << ">>> and a FuelTank less than 12" << endl;
    			 PrintObjectList(objectList);
    		}
    		CLEARVECTOR(objectList);
    	}
     
    	if(SUCCEEDED(result))
    	{
    		// Setup to search for autos with design date of 1997-03-30
    		// or have a baseprice >= 18000
    		CLEARVECTOR(propFilter);  filterInfo.Initialize();
    		filterInfo.value.SetPropertyID(PID_AUTO_DESIGNDATE);
    		filterInfo.SetComparisonOperator(EQUAL);
    		filterInfo.value.SetString(_T("1997-03-30")); 
    		filterInfo.SetLogicalOperator(META_OR);
    		propFilter.push_back(filterInfo);
    		filterInfo.Initialize();
    		filterInfo.value.SetPropertyID(PID_AUTO_BASEPRICE);
    		filterInfo.SetComparisonOperator(GREATER_THAN_OR_EQUAL);
    		filterInfo.value.SetShort(18000);
    		propFilter.push_back(filterInfo);
     
    		// Sort By BasePrice and Name
    		CLEARVECTOR(sortList);  propID.Initialize();
    		propID.SetObjectID(PID_AUTO_BASEPRICE);
    		sortList.push_back(propID);
    		propID.SetObjectID(PID_CMN_NAME);
    		sortList.push_back(propID);
     
    		// Call GetClassObjectsByProperty
    		result = obj.GetClassObjectsByProperty(objectList, propFilter, 
    			sortList, CLSGUID_Auto);
    		if (SUCCEEDED(result))
    		{
    			cout << endl;
    			cout << ">>> Autos with design date of 1997-03-30 " << endl;
    			cout << ">>> or have a baseprice >= 18000" << endl;
    			PrintObjectList(objectList);
    		}
    		CLEARVECTOR(objectList);
    	}
     
    	if(SUCCEEDED(result))
    	{
    		// Using derived class - search for autos with 
    		// division name = Luxury Motors
    		CLEARVECTOR(propFilter);  filterInfo.Initialize();
    		filterInfo.value.SetName(_T("DivisionName"));
    		filterInfo.SetComparisonOperator(EQUAL);
    		filterInfo.value.SetString(_T("LuxuryMotors")); 
    		propFilter.push_back(filterInfo);
     
    		// Sort By Name
    		CLEARVECTOR(sortList);  propID.Initialize();
    		propID.SetObjectID(PID_CMN_NAME);
    		sortList.push_back(propID);
     
    		// Call GetClassObjectsByProperty
    		result = obj.GetClassObjectsByProperty(objectList, propFilter, 
    			sortList, CLSGUID_AutoEx);
    		if (SUCCEEDED(result))
    		{
    			cout << endl;
    			cout << ">>> Derived class where division name = LuxuryMotors" << endl;
    			PrintObjectList(objectList);
    		}
    		CLEARVECTOR(objectList);
    	}
     
    	return result;
    }