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 RESOURCEPOOL_SQL_RTSQLSELECT_HH
00025 #define RESOURCEPOOL_SQL_RTSQLSELECT_HH
00026
00027 #include "mm/gc_ptr.hh"
00028 #include "ResourcePool/SQL/RTSQLCommand.hh"
00029 #include "ResourcePool/SQL/Resource.hh"
00030 #include "ResourcePool/SQL/BindInterface.hh"
00031 #include "ResourcePool/SQL/BindOutInterface.hh"
00032 #include "ResourcePool/SQL/RTCommandParameters.hh"
00033 #include "ResourcePool/SQL/RTSQLSelectRow.hh"
00034 #include "ResourcePool/SQL/SQLFetcher.hh"
00035 #include "ResourcePool/SQL/SQLStatement.hh"
00036
00037 namespace fatalmind {
00038 namespace SQL {
00039
00040 template<class TM> class RTSQLSelectRow_Impl;
00041
00054 template<class TM>
00055 class RTSQLSelect
00056 : public RTSQLCommand<TM>
00057 , public BindInterface
00058 , public BindOutInterface
00059 {
00060 public:
00061 RTSQLSelect(const ResourcePool<ResourceType<TM> >& p, const SQLStatement& sql, SQL::SQLFetcher& fetcher);
00062 RTSQLSelect(const RTSQLSelect<TM>& rho);
00063 virtual ~RTSQLSelect();
00064
00065 virtual void bind(const unsigned int pos, const char& val, bool isnull = false);
00066 virtual void bind(const unsigned int pos, const signed char& val, bool isnull = false);
00067 virtual void bind(const unsigned int pos, const unsigned char& val, bool isnull = false);
00068
00069 virtual void bind(const unsigned int pos, const short int& val, bool isnull = false);
00070 virtual void bind(const unsigned int pos, const unsigned short int& val, bool isnull = false);
00071
00072 virtual void bind(const unsigned int pos, const int& val, bool isnull = false);
00073 virtual void bind(const unsigned int pos, const unsigned int& val, bool isnull = false);
00074
00075 virtual void bind(const unsigned int pos, const long int& val, bool isnull = false);
00076 virtual void bind(const unsigned int pos, const unsigned long int& val, bool isnull = false);
00077
00078 virtual void bind(const unsigned int pos, const float& val, bool isnull = false);
00079 virtual void bind(const unsigned int pos, const double& val, bool isnull = false);
00080 virtual void bind(const unsigned int pos, const long double& val, bool isnull = false);
00081
00082 virtual void bind(const unsigned int pos, const std::string& val, bool isnull = false);
00083
00084 virtual void bindout(const unsigned int pos, char& val, bool& isnull = BindOutInterface::notnullconstant);
00085 virtual void bindout(const unsigned int pos, signed char& val, bool& isnull = BindOutInterface::notnullconstant);
00086 virtual void bindout(const unsigned int pos, unsigned char& val, bool& isnull = BindOutInterface::notnullconstant);
00087
00088 virtual void bindout(const unsigned int pos, short int& val, bool& isnull = BindOutInterface::notnullconstant);
00089 virtual void bindout(const unsigned int pos, unsigned short int& val, bool& isnull = BindOutInterface::notnullconstant);
00090
00091 virtual void bindout(const unsigned int pos, int& val, bool& isnull = BindOutInterface::notnullconstant);
00092 virtual void bindout(const unsigned int pos, unsigned int& val, bool& isnull = BindOutInterface::notnullconstant);
00093
00094 virtual void bindout(const unsigned int pos, long int& val, bool& isnull = BindOutInterface::notnullconstant);
00095 virtual void bindout(const unsigned int pos, unsigned long int& val, bool& isnull = BindOutInterface::notnullconstant);
00096
00097 virtual void bindout(const unsigned int pos, float& val, bool& isnull = BindOutInterface::notnullconstant);
00098 virtual void bindout(const unsigned int pos, double& val, bool& isnull = BindOutInterface::notnullconstant);
00099 virtual void bindout(const unsigned int pos, long double& val, bool& isnull = BindOutInterface::notnullconstant);
00100
00101 virtual void bindout(const unsigned int pos, std::string& val, bool& isnull = BindOutInterface::notnullconstant);
00102
00103 virtual void clearParameters();
00104
00105 void execute(typename ResourceType<TM>::resource_t& hand);
00106 virtual void outputoperator(std::ostream&) const;
00107
00108 virtual const Clone* getPlainSpecializedCommand() const;
00109
00110 protected:
00111 virtual Clone* DoClone() const {
00112 return new RTSQLSelect<TM>(*this);
00113 }
00114 private:
00115 gc_ptr<RTSQLSelectRow_Impl<TM> > _realSQLExecute;
00116
00117 typedef typename SQLFactory<TM>::databaseType_t databaseType_t;
00118 };
00119
00120
00121 }
00122 }
00123 #endif