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_STATEMENTCACHE_HH
00025 #define RESOURCEPOOL_ORACLE_STATEMENTCACHE_HH
00026
00027 #ifndef RESOURCEPOOL_ORACLE_OCIHANDLEFWD_HH
00028 #include "OCIHandleFwd.hh"
00029 #endif
00030
00031 #ifndef INCLUDED_GC_PTR_HH
00032 #include "mm/gc_ptr.hh"
00033 #endif
00034
00035 #ifndef RESOURCEPOOL_ORACLE_ORACLESTATEMENT_HH
00036 #include "oracleStatement.hh"
00037 #endif
00038
00039 #include <map>
00040 #include <string>
00041
00042 namespace fatalmind {
00043 namespace oracle {
00044
00045 class StatementCache {
00046 public:
00047 typedef gc_ptr<OCIStatementHandle> handle_t;
00048
00049 StatementCache(unsigned int maxsz = 65535, StatementCache* parent = 0);
00050 ~StatementCache();
00051
00052
00053
00054
00055
00056
00057 handle_t& open(const oracleStatement& sql, bool parentcache = false);
00058 private:
00059 handle_t* check(const oracleStatement& sql);
00060
00061 void expire();
00062 void chksize();
00063
00064 unsigned int _maxsz;
00065 StatementCache* _parent;
00066
00067 typedef std::pair<oracleStatement, handle_t> element_t;
00068 typedef std::map<oracleStatement, handle_t> map_t;
00069 map_t _map;
00070
00071 StatementCache(const StatementCache&);
00072 StatementCache* operator=(const StatementCache&);
00073 };
00074
00075 }
00076 }
00077 #endif