#ifndef hProductTable #define hProductTable #include "PackedTable.h" #define kUPCFieldSize 25 #define kReleaseDateFieldSize 12 struct _product { private: long _product_id; char _upc_ean[kUPCFieldSize]; char _upc_alt[kUPCFieldSize]; char _product_type_id; char _product_price_id; char _product_status_id; char _default_price_level_id; tIndex _asset_id; char _release_date[kReleaseDateFieldSize]; public: tIndex product_id() { return _product_id; } char *upc_ean() { return _upc_ean; } char *upc_alt() { return _upc_alt; } int product_type_id() { return _product_type_id; } int product_price_id() { return _product_price_id; } int product_status_id() { return _product_status_id; } int default_price_level_id() { return _default_price_level_id; } long asset_id() { return _asset_id; } char *release_date() { return _release_date; } friend class ProductTable; }; class ProductTable : public PackedTable { public: struct _product* getIndexedData(const tIndex index) { return (struct _product*)this->_getIndexedData(index); } protected: static const int kFieldProductID = 0; static const int kFieldUpcEan = 1; static const int kFieldUpcAlt = 2; static const int kFieldProductTypeID = 3; static const int kFieldProductPriceID = 4; static const int kFieldProductStatusID = 5; static const int kFieldDefaultPriceLevelID = 6; static const int kFieldAssetID = 7; static const int kFieldReleaseDate = 8; virtual tSize _dataFlatElementSize() { return sizeof(struct _product); } virtual const char* _maxIDQueryString() { return "SELECT MAX(product_id) FROM product"; } virtual const char* _dataQueryString() { return "SELECT product_id,upc_ean,upc_alt,product_type_id,product_price_id,product_status_id,default_price_level_id,asset_id,release_date FROM product ORDER BY product_id"; } virtual void _writeRowFlat(tIndex i, MYSQL_ROW row, void* data) { struct _product* dataPtr = (struct _product*)data; (*dataPtr)._product_id = i; PackedTable::_ParseString(row[kFieldUpcEan], (char*)&((*dataPtr)._upc_ean), kUPCFieldSize); PackedTable::_ParseString(row[kFieldUpcAlt], (char*)&((*dataPtr)._upc_alt), kUPCFieldSize); PackedTable::_ParseByte(row[kFieldProductTypeID], &((*dataPtr)._product_type_id)); PackedTable::_ParseByte(row[kFieldProductPriceID], &((*dataPtr)._product_price_id)); PackedTable::_ParseByte(row[kFieldProductStatusID], &((*dataPtr)._product_status_id)); PackedTable::_ParseByte(row[kFieldDefaultPriceLevelID], &((*dataPtr)._default_price_level_id)); PackedTable::_ParseLong(row[kFieldAssetID], &((*dataPtr)._asset_id)); PackedTable::_ParseString(row[kFieldReleaseDate], (char*)&((*dataPtr)._release_date), kReleaseDateFieldSize); } }; #endif