00001 //******************************************************************** 00002 //*** ResourcePool/SQL/RTSQLCommand.cc 00003 //*** Copyright (c) 2003-2008 by Markus Winand <mws@fatalmind.com> 00004 //*** $Id: RTSQLCommand.hh,v 1.6 2008/04/21 17:39:10 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 00030 namespace fatalmind { 00031 namespace SQL { 00032 00033 // C -> Command, a concrete database dependend command like oracle::SQLExecute 00034 // TM -> Threading model 00035 // RTSQLC -> the corresponding RTSQL command. e.g. RTSQLExecute 00036 template<class C, class TM, class RTSQLC> 00037 class SQLCommandWrapper 00038 : public C 00039 { 00040 public: 00041 SQLCommandWrapper(RTSQLC& rtc, const std::string& sql) 00042 : C(sql) 00043 , rtc_(rtc) 00044 { 00045 } 00046 00047 SQLCommandWrapper(RTSQLC& rtc, const std::string& sql, SQL::SQLFetcher& fetcher) 00048 : C(sql, fetcher) 00049 , rtc_(rtc) 00050 { 00051 } 00052 00053 virtual ~SQLCommandWrapper() { 00054 } 00055 00056 protected: 00057 virtual Clone* DoClone() const { 00058 return new SQLCommandWrapper<C, TM, RTSQLC>(*this); 00059 } 00060 00061 private: 00062 RTSQLC& rtc_; 00063 }; 00064 00065 /* 00066 * Provides a common baseclass for all RT SQL Commands. 00067 */ 00068 template<class TM> 00069 class RTSQLCommand 00070 : public Command<ResourceType<TM> > 00071 { 00072 public: 00073 virtual const Clone* getPlainSpecializedCommand() const = 0; 00074 // TODO, i don't like it to be public, but i nighter like to have sooo many friends (due to templates) 00075 }; 00076 00077 }; // namespace SQL 00078 }; // namespace fatalmind 00079 00080 #endif
1.5.5