/* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef NDB_TABLE_GUARD_H #define NDB_TABLE_GUARD_H #include class Ndb_table_guard { public: Ndb_table_guard(NdbDictionary::Dictionary *dict) : m_dict(dict), m_ndbtab(NULL), m_invalidate(0) {} Ndb_table_guard(NdbDictionary::Dictionary *dict, const char *tabname) : m_dict(dict), m_ndbtab(NULL), m_invalidate(0) { DBUG_ENTER("Ndb_table_guard"); init(tabname); DBUG_VOID_RETURN; } ~Ndb_table_guard() { DBUG_ENTER("~Ndb_table_guard"); reinit(); DBUG_VOID_RETURN; } void init(const char *tabname) { DBUG_ENTER("Ndb_table_guard::init"); /* must call reinit() if already initialized */ DBUG_ASSERT(m_ndbtab == NULL); m_ndbtab= m_dict->getTableGlobal(tabname); m_invalidate= 0; DBUG_PRINT("info", ("m_ndbtab: %p", m_ndbtab)); DBUG_VOID_RETURN; } void reinit(const char *tabname= 0) { DBUG_ENTER("Ndb_table_guard::reinit"); if (m_ndbtab) { DBUG_PRINT("info", ("m_ndbtab: %p m_invalidate: %d", m_ndbtab, m_invalidate)); m_dict->removeTableGlobal(*m_ndbtab, m_invalidate); m_ndbtab= NULL; m_invalidate= 0; } if (tabname) init(tabname); DBUG_PRINT("info", ("m_ndbtab: %p", m_ndbtab)); DBUG_VOID_RETURN; } const NdbDictionary::Table *get_table() { return m_ndbtab; } void invalidate() { m_invalidate= 1; } const NdbDictionary::Table *release() { DBUG_ENTER("Ndb_table_guard::release"); const NdbDictionary::Table *tmp= m_ndbtab; DBUG_PRINT("info", ("m_ndbtab: %p", m_ndbtab)); m_ndbtab = 0; DBUG_RETURN(tmp); } private: NdbDictionary::Dictionary *m_dict; const NdbDictionary::Table *m_ndbtab; int m_invalidate; }; /* NDB_TABLE_GUARD_H */ #endif