#ifndef hArtistContractTermIDByArtistContractIDTable #define hArtistContractTermIDByArtistContractIDTable #include "PackedTable.h" #include using namespace std; struct _artistContractTermIDArtistContractID { private: unsigned long _artist_contract_id; unsigned long _artist_contract_term_id; public: unsigned long artist_contract_id() { return _artist_contract_id; } unsigned long artist_contract_term_id() { return _artist_contract_term_id; } friend class ArtistContractTermIDByArtistContractIDTable; }; class ArtistContractTermIDByArtistContractIDTable : public PackedTableDynamic { protected: enum Field { kFieldArtistContractID = 0, kFieldArtistContractTermID }; multimap _map; virtual const char* _maxIDQueryString() { return "SELECT MAX(artist_contract_id) FROM new_artist_contract_term"; } // Note that I am querying some additional colums, but I will not be 'harvesting' those. // I'm using these columns to filter the result set. // virtual const char* _dataQueryString() { return "SELECT artist_contract_id,artist_contract_term_id,inactive FROM new_artist_contract_term WHERE (inactive IS NULL OR inactive <> 1) ORDER BY artist_contract_id, artist_contract_term_id";} virtual long _insertRowDynamic(MYSQL_ROW row) { long artistContractID; long artistContractTermID; PackedTable::_ParseLong(row[kFieldArtistContractID], &artistContractID); PackedTable::_ParseLong(row[kFieldArtistContractTermID], &artistContractTermID); struct _artistContractTermIDArtistContractID newData; newData._artist_contract_id = artistContractID; newData._artist_contract_term_id = artistContractTermID; _map.insert(pair(artistContractID, newData)); return artistContractID; } public: struct _artistContractTermIDArtistContractID* nextItem() { return (struct _artistContractTermIDArtistContractID*)_theIterator.next(); } protected: PackedTable::SharedMemoryHandler _dataFileHandler; virtual DataFileHandler* _getDataFileHandler() { return &_dataFileHandler; } virtual unsigned long _getDynamicElementSize() { return sizeof(struct _artistContractTermIDArtistContractID); } virtual unsigned long _equalKeys(void* ptrA, void* ptrB) { struct _artistContractTermIDArtistContractID* dataA = (struct _artistContractTermIDArtistContractID*)ptrA; struct _artistContractTermIDArtistContractID* dataB = (struct _artistContractTermIDArtistContractID*)ptrB; return (dataA->_artist_contract_id == dataB->_artist_contract_id); } multimap::iterator _outputIterator; virtual void* _getFirstDynamicKeyValuePtr() { _outputIterator = _map.begin(); if (_outputIterator == _map.end()) { return NULL; } return (void*) &(_outputIterator); } virtual void* _getNextDynamicKeyValuePtr() { ++_outputIterator; if (_outputIterator == _map.end()) { return NULL; } return (void*) &(_outputIterator); } virtual long _getKey(void* dynamicDataPtr) { multimap::iterator *i = (multimap::iterator *)dynamicDataPtr; if (NULL == i){ return 0; } return (**i).first; } virtual void* _getValue(void* dynamicDataPtr) { multimap::iterator *i = (multimap::iterator *)dynamicDataPtr; if (NULL == i){ return 0; } return (void*) &((**i).second); } }; #endif