00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #pragma once
00030
00031 #include <drizzled/message/resultset.pb.h>
00032 #include <drizzled/sql_list.h>
00033 #include <map>
00034 #include <vector>
00035
00036 namespace drizzled
00037 {
00038 class TableList;
00039 class Item;
00040
00041 namespace message
00042 {
00043 class Resultset;
00044 }
00045
00046 class QueryCacheService
00047 {
00048 public:
00049
00050 typedef std::map<std::string, drizzled::message::Resultset> CacheEntries;
00051 typedef std::pair<const std::string, drizzled::message::Resultset> CacheEntry;
00052 typedef std::map<std::string, std::vector<std::string>> CachedTablesEntries;
00053 typedef std::pair<const std::string, std::vector<std::string>> CachedTablesEntry;
00054
00055 static const size_t DEFAULT_RECORD_SIZE= 100;
00056 static CacheEntries cache;
00057 static CachedTablesEntries cachedTables;
00058
00063 static inline QueryCacheService &singleton()
00064 {
00065 static QueryCacheService query_cache_service;
00066 return query_cache_service;
00067 };
00068
00076 drizzled::message::Resultset *setCurrentResultsetMessage(drizzled::Session *in_session);
00077
00086 void setResultsetHeader(drizzled::message::Resultset &resultset,
00087 drizzled::Session *in_session,
00088 drizzled::TableList *in_table);
00096 bool addRecord(drizzled::Session *in_session, drizzled::List<drizzled::Item> &list);
00097
00098
00099 static bool isCached(std::string query);
00100
00101 };
00102 }