mysql5/mysql-5.7.27/sql/ndb_table_guard.h

86 lines
2.5 KiB
C++

/*
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 <ndbapi/NdbDictionary.hpp>
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