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_ORACLE_SQLEXECUTE_HH
00025 #define RESOURCEPOOL_ORACLE_SQLEXECUTE_HH
00026
00027 #ifndef RESOURCEPOOL_ORACLE_RESOURCEFWD_HH
00028 #include "ResourceFwd.hh"
00029 #endif
00030
00031 #ifndef RESOURCEPOOL_ORACLE_COMMANDCOMMON_HH
00032 #include "CommandCommon.hh"
00033 #endif
00034 #include "ResourcePool/SQL/SQLStatement.hh"
00035
00036 #include <string>
00037 #include <deque>
00038 #include <memory>
00039
00040 #include "mm/RawBuffer.hh"
00041
00042
00043 namespace fatalmind {
00044
00045
00046 class OracleExceptionFactory;
00047
00048 namespace oracle {
00049
00050
00051 template <class CommandType>
00052 class OptimizedBatchCommand;
00053
00054 class BatchInfo;
00055
00056
00061 template <class TM, template<class>class SLMDC>
00062 class SQLExecute
00063 : public CommandCommon<TM, SLMDC>
00064 {
00065 typedef CommandCommon<TM, SLMDC> super;
00066 typedef SQLExecute<TM, SLMDC> this_t;
00067 using super::_SQL;
00068 public:
00069 SQLExecute(const SQL::SQLStatement& SQL);
00070 SQLExecute(const ResourcePool<ResourceType<TM> >& p, const SQL::SQLStatement& SQL);
00071 virtual ~SQLExecute();
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 bool addBatch(const SQLExecute<TM, SLMDC>& p);
00083
00084
00085
00086
00087
00088 std::auto_ptr<Command<oracle::ResourceType<TM, SLMDC> > > addBatch2(const SQLExecute<TM, SLMDC>& p);
00089
00090
00091
00092
00093
00094 int batchSize() const;
00095
00096 #ifndef FATALMIND_TEST_SHOW_PROTECTED
00097 protected:
00098 #endif
00099 SQLExecute(const this_t&);
00100 virtual Clone* DoClone() const;
00101 void _execute(fatalmind::oracleResource<TM>&,StatementCache&);
00102 bool push_onto_BatchParamSizes(const typename super::super_bind::_argst& p);
00103 void copySizeIndicator(const typename super::super_bind::_argst& p);
00104
00105 virtual const std::string& getCommandName() const;
00106 static const std::string _SQLExecuteName;
00107
00108
00109
00110
00111
00112 void handleBatchException(int ret, oracleResource<TM>& rhand);
00113
00114
00115
00116
00117
00118 void throwBatchException() const;
00119
00120
00121
00122
00123 int getBatchExceptionOffset() const;
00124
00125
00126
00127
00128 void real_bind_batch(oracleResource<TM>&);
00129
00130 virtual void bindoutputoperator(std::ostream& str) const;
00131 private:
00132 StatementCache::handle_t _sth;
00133
00134
00135 gc_ptr<BatchInfo> batchInfo;
00140 void putInsideBatch();
00141
00142 this_t& operator=(const this_t&);
00143
00144 friend
00145 class oracle::OptimizedBatchCommand<Command<oracle::ResourceType<TM, SLMDC> > >;
00146 };
00147
00148
00149 }
00150 }
00151 #endif