00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __MySQLaux_Row_h__
00025 #define __MySQLaux_Row_h__
00026
00027 #include "GarbageCollector.h"
00028 #include "TypedField.h"
00029 #include "MissingFeature.h"
00030 #include "typedefs.h"
00031 #include <strstream.h>
00032 #include <string>
00033 #include <vector>
00034 #include <mysql/mysql.h>
00035 #include <stdexcept>
00036 #include <typeinfo>
00037
00038 namespace MySQLaux
00039 {
00045 class Row
00046 : private vector<Field *>
00047 {
00048 private:
00049 GarbageCollector * _gc;
00050 public:
00060 Row (MYSQL_ROW rawData,
00061 MYSQL_FIELD * field_info,
00062 unsigned long * lengths,
00063 unsigned number,
00064 GarbageCollector & gc)
00065 throw (MissingFeature);
00066
00073 Row (Row const & other);
00074
00079 ~Row ();
00080
00086 Field const & operator [](unsigned int index) const
00087 throw (NullFieldIndicator,
00088 range_error);
00089
00095 Field & operator [](unsigned int index)
00096 throw (NullFieldIndicator,
00097 std::range_error);
00098
00107 template<class T>
00108 inline T const & value (unsigned int index) const
00109 throw (NullFieldIndicator,
00110 std::bad_cast,
00111 std::range_error)
00112 {
00113 return (dynamic_cast<MySQLaux::TypedField<T> const &>((*this)[index]).value());
00114 }
00115
00119 size_t size() const
00120 {
00121 return vector<Field *>::size();
00122 }
00123
00127 size_t size(unsigned int index) const
00128 throw (range_error)
00129 {
00130 if (index >= vector<Field *>::size())
00131 throw range_error("invalid field index for MySQLaux::Row");
00132 return (*this)[index].size();
00133 }
00134 };
00135 }
00136
00137 #endif // __MySQLaux_Row_h__
00138
00139
00140
00141
00142
00143
00144
00145