DictCache.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef DictCache_H
  14. #define DictCache_H
  15. #include <ndb_types.h>
  16. #include <kernel_types.h>
  17. #include <NdbError.hpp>
  18. #include <BaseString.hpp>
  19. #include <Vector.hpp>
  20. #include <UtilBuffer.hpp>
  21. #include <NdbDictionary.hpp>
  22. #include <Ndb.hpp>
  23. #include <NdbCondition.h>
  24. #include "NdbLinHash.hpp"
  25. class Ndb_local_table_info {
  26. public:
  27.   static Ndb_local_table_info *create(NdbTableImpl *table_impl, Uint32 sz=0);
  28.   static void destroy(Ndb_local_table_info *);
  29.   NdbTableImpl *m_table_impl;
  30.   Uint64 m_local_data[1]; // Must be last member. Used to access extra space.
  31. private:
  32.   Ndb_local_table_info(NdbTableImpl *table_impl);
  33.   ~Ndb_local_table_info();
  34. };
  35. /**
  36.  * A non thread safe dict cache
  37.  */
  38. class LocalDictCache {
  39. public:
  40.   LocalDictCache();
  41.   ~LocalDictCache();
  42.   
  43.   Ndb_local_table_info * get(const char * name);
  44.   
  45.   void put(const char * name, Ndb_local_table_info *);
  46.   void drop(const char * name);
  47.   
  48.   NdbLinHash<Ndb_local_table_info> m_tableHash; // On name
  49. };
  50. /**
  51.  * A thread safe dict cache
  52.  */
  53. class GlobalDictCache : public NdbLockable {
  54. public:
  55.   GlobalDictCache();
  56.   ~GlobalDictCache();
  57.   
  58.   NdbTableImpl * get(const char * name);
  59.   
  60.   NdbTableImpl* put(const char * name, NdbTableImpl *);
  61.   void drop(NdbTableImpl *);
  62.   void release(NdbTableImpl *);
  63.   void alter_table_rep(const char * name, 
  64.        Uint32 tableId, Uint32 tableVersion, bool altered);
  65. public:
  66.   enum Status {
  67.     OK = 0,
  68.     DROPPED = 1,
  69.     RETREIVING = 2
  70.   };
  71.   
  72. private:
  73.   struct TableVersion {
  74.     Uint32 m_version;
  75.     Uint32 m_refCount;
  76.     NdbTableImpl * m_impl;
  77.     Status m_status;
  78.   };
  79.   
  80.   NdbLinHash<Vector<TableVersion> > m_tableHash;
  81.   NdbCondition * m_waitForTableCondition;
  82. };
  83. #endif