00001 //******************************************************************** 00002 //*** ResourcePool/SQL/RTSQLCommand.cc 00003 //*** Copyright (c) 2003-2009 by Markus Winand <mws@fatalmind.com> 00004 //*** $Id: RTSQLCommand.hh,v 1.10 2009-05-02 21:29:20 mws Exp $ 00005 //******************************************************************** 00006 /* 00007 This file is part of ResourcePool. 00008 00009 ResourcePool is free software; you can redistribute it 00010 and/or modify it under the terms of the GNU General Public License 00011 as published by the Free Software Foundation; either version 2 of 00012 the License, or (at your option) any later version. 00013 00014 ResourcePool is distributed in the hope that it will be 00015 useful, but WITHOUT ANY WARRANTY; without even the implied warranty 00016 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU General Public License for more details. 00018 00019 You should have received a copy of the GNU General Public License 00020 along with ResourcePool; if not, write to the Free Software 00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 00022 02111-1307 USA */ 00023 00024 #ifndef RESOURCEPOOL_SQL_RTSQLCOMMAND_HH 00025 #define RESOURCEPOOL_SQL_RTSQLCOMMAND_HH 00026 00027 #include "ResourcePool/Command.hh" 00028 #include "ResourcePool/SQL/SQLFetcher.hh" 00029 #include "ResourcePool/SQL/SQLStatement.hh" 00030 00031 namespace fatalmind { 00032 namespace SQL { 00033 00034 // C -> Command, a concrete database dependend command like oracle::SQLExecute 00035 // TM -> Threading model 00036 // RTSQLC -> the corresponding RTSQL command. e.g. RTSQLExecute 00037 template<class C, class TM, class RTSQLC> 00038 class SQLCommandWrapper 00039 : public C 00040 { 00041 public: 00042 SQLCommandWrapper(RTSQLC& rtc, const SQLStatement& sql) 00043 : C(sql) 00044 , rtc_(rtc) 00045 { 00046 } 00047 00048 SQLCommandWrapper(RTSQLC& rtc, const SQLStatement& sql, SQL::SQLFetcher& fetcher) 00049 : C(sql, fetcher) 00050 , rtc_(rtc) 00051 { 00052 } 00053 00054 virtual ~SQLCommandWrapper() { 00055 } 00056 00057 protected: 00058 virtual Clone* DoClone() const { 00059 return new SQLCommandWrapper<C, TM, RTSQLC>(*this); 00060 } 00061 00062 private: 00063 RTSQLC& rtc_; 00064 }; 00065 00066 /* 00067 * Provides a common baseclass for all RT SQL Commands. 00068 */ 00069 template<class TM> 00070 class RTSQLCommand 00071 : public Command<ResourceType<TM> > 00072 { 00073 public: 00074 virtual const Clone* getPlainSpecializedCommand() const = 0; 00075 // TODO, i don't like it to be public, but i nighter like to have sooo many friends (due to templates) 00076 }; 00077 00078 } // namespace SQL 00079 } // namespace fatalmind 00080 00081 #endif