mariadb/storage/innobase/include/sess0sess.h
Jan Lindström 2e814d4702 Merge InnoDB 5.7 from mysql-5.7.9.
Contains also

MDEV-10547: Test multi_update_innodb fails with InnoDB 5.7

	The failure happened because 5.7 has changed the signature of
	the bool handler::primary_key_is_clustered() const
	virtual function ("const" was added). InnoDB was using the old
	signature which caused the function not to be used.

MDEV-10550: Parallel replication lock waits/deadlock handling does not work with InnoDB 5.7

	Fixed mutexing problem on lock_trx_handle_wait. Note that
	rpl_parallel and rpl_optimistic_parallel tests still
	fail.

MDEV-10156 : Group commit tests fail on 10.2 InnoDB (branch bb-10.2-jan)
  Reason: incorrect merge

MDEV-10550: Parallel replication can't sync with master in InnoDB 5.7 (branch bb-10.2-jan)
  Reason: incorrect merge
2016-09-02 13:22:28 +03:00

146 lines
3.6 KiB
C++

/*****************************************************************************
Copyright (c) 2013, 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 Street, Suite 500, Boston, MA 02110-1335 USA
*****************************************************************************/
/**************************************************//**
@file include/sess0sess.h
InnoDB session state tracker.
Multi file, shared, system tablespace implementation.
Created 2014-04-30 by Krunal Bauskar
*******************************************************/
#ifndef sess0sess_h
#define sess0sess_h
#include "univ.i"
#include "dict0mem.h"
#include "ut0new.h"
#include <map>
class dict_intrinsic_table_t {
public:
/** Constructor
@param[in,out] handler table handler. */
dict_intrinsic_table_t(dict_table_t* handler)
:
m_handler(handler)
{
/* Do nothing. */
}
/** Destructor */
~dict_intrinsic_table_t()
{
m_handler = NULL;
}
public:
/* Table Handler holding other metadata information commonly needed
for any table. */
dict_table_t* m_handler;
};
/** InnoDB private data that is cached in THD */
typedef std::map<
std::string,
dict_intrinsic_table_t*,
std::less<std::string>,
ut_allocator<std::pair<const std::string, dict_intrinsic_table_t*> > >
table_cache_t;
class innodb_session_t {
public:
/** Constructor */
innodb_session_t()
: m_trx(),
m_open_tables()
{
/* Do nothing. */
}
/** Destructor */
~innodb_session_t()
{
m_trx = NULL;
for (table_cache_t::iterator it = m_open_tables.begin();
it != m_open_tables.end();
++it) {
delete(it->second);
}
}
/** Cache table handler.
@param[in] table_name name of the table
@param[in,out] table table handler to register */
void register_table_handler(
const char* table_name,
dict_table_t* table)
{
ut_ad(lookup_table_handler(table_name) == NULL);
m_open_tables.insert(table_cache_t::value_type(
table_name, new dict_intrinsic_table_t(table)));
}
/** Lookup for table handler given table_name.
@param[in] table_name name of the table to lookup */
dict_table_t* lookup_table_handler(
const char* table_name)
{
table_cache_t::iterator it = m_open_tables.find(table_name);
return((it == m_open_tables.end())
? NULL : it->second->m_handler);
}
/** Remove table handler entry.
@param[in] table_name name of the table to remove */
void unregister_table_handler(
const char* table_name)
{
table_cache_t::iterator it = m_open_tables.find(table_name);
if (it == m_open_tables.end()) {
return;
}
delete(it->second);
m_open_tables.erase(table_name);
}
/** Count of register table handler.
@return number of register table handlers */
uint count_register_table_handler() const
{
return(static_cast<uint>(m_open_tables.size()));
}
public:
/** transaction handler. */
trx_t* m_trx;
/** Handler of tables that are created or open but not added
to InnoDB dictionary as they are session specific.
Currently, limited to intrinsic temporary tables only. */
table_cache_t m_open_tables;
};
#endif /* sess0sess_h */